模拟面试|缓存面试思路一图懂

你好,我是大明。

恭喜你学完第四章的内容,又到了要验收成果的时刻了。缓存这一章的内容很重要,知识也很系统,所以为了帮助你更好地掌握这部分内容,我们在这里设置了面试题。

你在回答的时候,最好是能够写成一个个文档,至少也要口头上说一遍。千万不要仅仅在脑海里面回忆一遍。因为在真正面试的时候,脑海中的记忆到嘴里说出的话,还需要一个转换。

31 为什么 Redis 不立刻删除已经过期的数据?

  1. Redis 是怎么删除过期 key 的?
  2. Redis 为什么不立刻删除已经过期的 key?
  3. Redis 为什么不每个 key 都启动一个定时器,监控过期时间?
  4. Redis 是如何执行定期删除的?
  5. 为什么 Redis 在定期删除的时候不一次性把所有的过期 key 都删除掉?
  6. 当你从 Redis 上查询数据的时候,有可能查询到过期的数据吗?
  7. 当 Redis 生成 RDB 文件的时候,会怎么处理过期的 key?
  8. 当 Redis 重写 AOF 文件的时候,会怎么处理过期的 key?
  9. Redis 定期删除的循环是不是执行得越频繁就越好?
  10. 如果设计一个本地缓存,你会怎么实现删除过期 key 的功能?
  11. 你是怎么确定过期时间的?过期时间太长会怎样,太短又会怎样?

32 缓存淘汰策略:怎么淘汰缓存命中率才不会下降?

  1. 你知道什么是 LFU,什么是 LRU 吗?可不可以手写一个?
  2. 什么情况下使用 LFU,什么情况下使用 LRU?
  3. Redis 支持哪些淘汰策略?你们公司的 Redis 上的淘汰策略使用了哪个?为什么用这个?
  4. 你使用的本地缓存是如何控制内存使用量的?
  5. 你业务里面的缓存命中率有多高?还能不能进一步提高?怎么进一步提高?
  6. 假如说 A 和 B 两个业务共用一个 Redis,那么有办法控制 A 业务的 Redis 内存使用量吗?怎么控制?
  7. 现在我的业务里面有普通用户和 VIP 用户。现在我希望在缓存内存不足的时候,优先淘汰普通用户的数据,该怎么做?

33 缓存模式:缓存模式能不能解决缓存一致性问题?

  1. 什么是 Cache Aside,它能不能解决数据一致性问题?
  2. 什么是 Read Through,它能不能解决数据一致性问题?
  3. 什么是 Write Through,它能不能解决数据一致性问题?
  4. 什么是 Write Back,它有什么缺点,能不能解决一致性问题?
  5. 什么是 Refresh Ahead,它能不能解决一致性问题?
  6. 什么是 Singleflight 模式?你用它解决过什么问题?
  7. 在具体的工作场景中,你是怎么更新数据的?会不会有数据不一致的问题?怎么解决?
  8. 什么是延迟双删,使用延迟双删能不能解决数据一致性问题?
  9. 你知道哪些缓存模式,用过哪些模式?

34 缓存一致性问题:高并发服务如何保证缓存一致性?

  1. 为什么会有数据不一致的问题?
  2. 你在使用缓存的时候怎么解决数据不一致的问题?
  3. 当你的数据不一致的时候,你多久能够发现?
  4. 如果你使用了本地缓存和 Redis,那么更新数据的时候你怎么更新?
  5. 使用分布式锁能不能解决数据一致性问题,有什么缺点?
  6. 你能保证更新数据库和更新缓存同时成功吗?如果不能,你怎么解决?
  7. 你有什么方法可以解决并发更新导致的数据不一致性问题?

35 缓存问题:怎么解决缓存穿透、击穿和雪崩问题?

  1. 什么是缓存穿透、击穿和雪崩?
  2. 你平时遇到过缓存穿透、击穿和雪崩吗?什么原因引起的?最终是怎么解决的?
  3. 你还遇到过什么跟缓存有关的事故?最终都是怎么解决的?
  4. 在你的系统里面,如果 Redis 崩溃了会发生什么?
  5. 怎么在 Redis 崩溃之后保护好数据库?

36 Redis 单线程:为什么 Redis 用单线程而 Memcached 用多线程?

  1. 操作系统中的上下文切换有什么开销?
  2. Redis 真的是单线程的吗?
  3. Redis 为什么后面又引入了多线程?
  4. Redis 后面的引入的多线程模型是怎么运作的?相比原本的单线程模型有什么改进?
  5. 同样是缓存,为什么 Memcached 使用了多线程?
  6. 什么是 epoll?和 poll、select 比起来,有什么优势?
  7. 什么是 Reactor 模式?
  8. 为什么 Redis 的性能那么好?
  9. 你可以说说 Redis 的 IO 模型吗?
  10. 为什么 Redis 可以用单线程,但是 Kafka 之类的中间件确不能使用单线程呢?

37 分布式锁:如何保证Redis分布式锁的高可用和高性能?

  1. 什么是分布式锁?你用过分布式锁吗?
  2. 你使用的分布式锁性能如何,可以优化吗?
  3. 怎么用 Redis 来实现一个分布式锁?
  4. 怎么确定分布式锁的过期时间?
  5. 如果分布式锁过期了,但是业务还没有执行完毕,怎么办?
  6. 加锁的时候得到了超时响应,怎么办?
  7. 加锁的时候如果锁被人持有了,这时候怎么办?
  8. 分布式锁为什么要续约?续约失败了怎么办?如果重试一直都失败,怎么办?
  9. 怎么减少分布式锁竞争?
  10. 你知道 redlock 是什么吗?

38 缓存综合应用:怎么用缓存来提高整个应用的性能?

  1. 你是如何利用缓存来提高系统性能的?
  2. 当你的缓存崩溃了的时候,你的系统会怎么样?
  3. 你们公司的 Redis 是如何部署的,性能怎么样?
  4. 假如说有一个服务 A 要调用服务 B,那么能不能让 A 把 B 的结果缓存下来,这样下次就不用调用了?这种做法有什么优缺点?
  5. 为什么要做缓存预加载,怎么做预加载?

缓存面试一图懂

图片

最后我将这一章的内容整理成了一张图片,图片能够更好地展现知识点之间的联系,你可以参考,如果你觉得有用的话,可以把这节课的内容分享给身边的朋友,邀他一起学习,共同进步。好了,我们下一章再见吧!