模拟面试|缓存面试思路一图懂
模拟面试|缓存面试思路一图懂
你好,我是大明。
恭喜你学完第四章的内容,又到了要验收成果的时刻了。缓存这一章的内容很重要,知识也很系统,所以为了帮助你更好地掌握这部分内容,我们在这里设置了面试题。
你在回答的时候,最好是能够写成一个个文档,至少也要口头上说一遍。千万不要仅仅在脑海里面回忆一遍。因为在真正面试的时候,脑海中的记忆到嘴里说出的话,还需要一个转换。
31 为什么 Redis 不立刻删除已经过期的数据?
- Redis 是怎么删除过期 key 的?
- Redis 为什么不立刻删除已经过期的 key?
- Redis 为什么不每个 key 都启动一个定时器,监控过期时间?
- Redis 是如何执行定期删除的?
- 为什么 Redis 在定期删除的时候不一次性把所有的过期 key 都删除掉?
- 当你从 Redis 上查询数据的时候,有可能查询到过期的数据吗?
- 当 Redis 生成 RDB 文件的时候,会怎么处理过期的 key?
- 当 Redis 重写 AOF 文件的时候,会怎么处理过期的 key?
- Redis 定期删除的循环是不是执行得越频繁就越好?
- 如果设计一个本地缓存,你会怎么实现删除过期 key 的功能?
- 你是怎么确定过期时间的?过期时间太长会怎样,太短又会怎样?
32 缓存淘汰策略:怎么淘汰缓存命中率才不会下降?
- 你知道什么是 LFU,什么是 LRU 吗?可不可以手写一个?
- 什么情况下使用 LFU,什么情况下使用 LRU?
- Redis 支持哪些淘汰策略?你们公司的 Redis 上的淘汰策略使用了哪个?为什么用这个?
- 你使用的本地缓存是如何控制内存使用量的?
- 你业务里面的缓存命中率有多高?还能不能进一步提高?怎么进一步提高?
- 假如说 A 和 B 两个业务共用一个 Redis,那么有办法控制 A 业务的 Redis 内存使用量吗?怎么控制?
- 现在我的业务里面有普通用户和 VIP 用户。现在我希望在缓存内存不足的时候,优先淘汰普通用户的数据,该怎么做?
33 缓存模式:缓存模式能不能解决缓存一致性问题?
- 什么是 Cache Aside,它能不能解决数据一致性问题?
- 什么是 Read Through,它能不能解决数据一致性问题?
- 什么是 Write Through,它能不能解决数据一致性问题?
- 什么是 Write Back,它有什么缺点,能不能解决一致性问题?
- 什么是 Refresh Ahead,它能不能解决一致性问题?
- 什么是 Singleflight 模式?你用它解决过什么问题?
- 在具体的工作场景中,你是怎么更新数据的?会不会有数据不一致的问题?怎么解决?
- 什么是延迟双删,使用延迟双删能不能解决数据一致性问题?
- 你知道哪些缓存模式,用过哪些模式?
34 缓存一致性问题:高并发服务如何保证缓存一致性?
- 为什么会有数据不一致的问题?
- 你在使用缓存的时候怎么解决数据不一致的问题?
- 当你的数据不一致的时候,你多久能够发现?
- 如果你使用了本地缓存和 Redis,那么更新数据的时候你怎么更新?
- 使用分布式锁能不能解决数据一致性问题,有什么缺点?
- 你能保证更新数据库和更新缓存同时成功吗?如果不能,你怎么解决?
- 你有什么方法可以解决并发更新导致的数据不一致性问题?
35 缓存问题:怎么解决缓存穿透、击穿和雪崩问题?
- 什么是缓存穿透、击穿和雪崩?
- 你平时遇到过缓存穿透、击穿和雪崩吗?什么原因引起的?最终是怎么解决的?
- 你还遇到过什么跟缓存有关的事故?最终都是怎么解决的?
- 在你的系统里面,如果 Redis 崩溃了会发生什么?
- 怎么在 Redis 崩溃之后保护好数据库?
36 Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?
- 操作系统中的上下文切换有什么开销?
- Redis 真的是单线程的吗?
- Redis 为什么后面又引入了多线程?
- Redis 后面的引入的多线程模型是怎么运作的?相比原本的单线程模型有什么改进?
- 同样是缓存,为什么 Memcached 使用了多线程?
- 什么是 epoll?和 poll、select 比起来,有什么优势?
- 什么是 Reactor 模式?
- 为什么 Redis 的性能那么好?
- 你可以说说 Redis 的 IO 模型吗?
- 为什么 Redis 可以用单线程,但是 Kafka 之类的中间件确不能使用单线程呢?
37 分布式锁:如何保证Redis分布式锁的高可用和高性能?
- 什么是分布式锁?你用过分布式锁吗?
- 你使用的分布式锁性能如何,可以优化吗?
- 怎么用 Redis 来实现一个分布式锁?
- 怎么确定分布式锁的过期时间?
- 如果分布式锁过期了,但是业务还没有执行完毕,怎么办?
- 加锁的时候得到了超时响应,怎么办?
- 加锁的时候如果锁被人持有了,这时候怎么办?
- 分布式锁为什么要续约?续约失败了怎么办?如果重试一直都失败,怎么办?
- 怎么减少分布式锁竞争?
- 你知道 redlock 是什么吗?
38 缓存综合应用:怎么用缓存来提高整个应用的性能?
- 你是如何利用缓存来提高系统性能的?
- 当你的缓存崩溃了的时候,你的系统会怎么样?
- 你们公司的 Redis 是如何部署的,性能怎么样?
- 假如说有一个服务 A 要调用服务 B,那么能不能让 A 把 B 的结果缓存下来,这样下次就不用调用了?这种做法有什么优缺点?
- 为什么要做缓存预加载,怎么做预加载?
缓存面试一图懂
最后我将这一章的内容整理成了一张图片,图片能够更好地展现知识点之间的联系,你可以参考,如果你觉得有用的话,可以把这节课的内容分享给身边的朋友,邀他一起学习,共同进步。好了,我们下一章再见吧!