笔者福利
以下是小编自己针对马上即将到来的金九银十准备的一套“面试宝典”,不管是技术还是HR的问题都有针对性的回答。
有了这个,面试踩雷?不存在的!
回馈粉丝,诚意满满!!!
互联网的并发场景大多是读多写少。所以缓存技术使用普遍。JUC也提供了读写锁-ReadWriteLock。
那你说说什么是读写锁?
读写锁一般遵循以下设计原则:
-
允许多个线程同时读共享变量
-
只允许一个线程写共享变量
-
如果一个写线程正在执行写操作,此时禁止读线程读共享变量。
知道读写锁与互斥锁的区别吗?
读写锁允许多个线程同时读共享变量,而互斥锁不允许。这也是读多写少时读写锁的优势。
读写锁的写是互斥的,当一个线程在写共享变量时,其他线程不允许执行写或读。
知道如何使用ReadWriteLock实现一个缓存吗?
声明了一个Cache<K, V>类,其中类型参数K代表缓存里key的类型,V代表缓存里value的类型。
你是怎么解决缓存数据的初始化问题的?
这得看源数据量大不大了。
若源数据量不大,采用一次性加载,方便简单,在应用启动时把源数据全部查询出来并put()。
若源数据量很大,就得按需加载,即懒加载。当应用查询缓存,并且数据不在缓存时,才触发加载源数据进缓存。
代码如下: