西安尚学堂练习9.5|Java编程笔试面试题

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:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)。

猜你喜欢

转载自blog.51cto.com/14512197/2435894