1. 常用中间件 RabbitMQ,kafka 等, 原理, 区别, 优缺点.
RabbitMQ 是一个 AMQP 实现, 传统的 messaging queue 系统实现, 基于 Erlang. 老牌 MQ 产品了. AMQP 协议更多用在企业系统内, 对数据一致性, 稳定性和可靠性要求很高的场景, 对性能和吞吐量还在其次.
Kafka 是 linkedin 开源的 MQ 系统, 主要特点是基于 Pull 的模式来处理消息消费, 追求高吞吐量, 一开始的目的就是用于日志收集和传输, 0.8 开始支持复制, 不支持事务, 适合产生大量数据的互联网服务的数据收集业务.
2.Lock 和 synchronize 实现原理与区别. 简述乐观锁悲观锁. 分布式锁实现方式
synchronized 是托管给 JVM 执行的, 而 lock 是 java 写的控制锁的代码. synchronized 在锁定时如果方法块抛出异常, JVM 会自动将锁释放掉, 不会因为出了异常没有释放锁造成线程死锁.
但是 Lock 的话就享受不到 JVM 带来自动的功能, 出现异常时必须在 finally 将锁释放掉, 否则将会引起死锁. 在资源竞争不是很激烈的情况下, 偶尔会有同步的情形下, synchronized 是很合适的. 原因在于, 编译程序通常会尽可能的进行优化 synchronize.
分布式锁实现方式: 基于数据库实现, 基于缓存 (Redis,Memcached,tair) 实现, 基于 Zookeeper 实现.
3.Redis 和 memcache 区别
Memcached 和 Redis 都能很好的满足解决我们的问题, 它们性能都很高, 总的来说, 可以把 Redis 理解为是对 Memcached 的拓展, 是更加重量级的实现, 提供了更多更强大的功能. 具体来说:
a. 性能上:
性能上都很出色, 具体到细节, 由于 Redis 只使用单核, 而 Memcached 可以使用多核, 所以平均每一个核上 Redis 在存储小数据时比 Memcached 性能更高. 而在 100k 以上的数据中, Memcached 性能要高于 Redis, 虽然 Redis 最近也在存储大数据的性能上进行优化, 但是比起 Memcached, 还是稍有逊色.
b. 内存空间和数据量大小:
Memcached 可以修改最大内存, 采用 LRU 算法.
Redis 增加了 VM 的特性, 突破了物理内存的限制.
c. 操作便利上:
Memcached 数据结构单一, 仅用来缓存数据
Redis 支持更加丰富的数据类型, 也可以在服务器端直接对数据进行丰富的操作, 这样可以减少网络 IO 次数和数据体积.
d. 可靠性上:
Memcached 不支持数据持久化, 断电或重启后数据消失, 但其稳定性是有保证的.
Redis 支持数据持久化和数据恢复, 允许单点故障, 但是同时也会付出性能的代价.
e. 应用场景:
Memcached: 动态系统中减轻数据库负载, 提升性能; 做缓存, 适合多读少写, 大数据量的情况(如人人网大量查询用户信息, 好友信息, 文章信息等).
Redis: 适用于对读写效率要求都很高, 数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统, 对数据安全性, 读写要求都很高).
来源: http://www.bubuko.com/infodetail-3184505.html