# 1. Cache-Aside 下先更新数据库再删缓存为什么是主流方案?延迟双删和订阅 binlog(Canal)方案分别解决什么残留问题? A 先删缓存再更新 DB 是主流方案 B 延迟双删与 Canal 会引入更多不一致 C 先更新 DB 再删缓存,即使删失败也只是短暂读到旧值 ✓ 正确答案 D 删除缓存失败无法补救
# 2. 缓存与数据库不一致的所有产生时序(并发读写交错)如何系统枚举与规避? A 先删缓存再更新 DB 不会产生不一致 B 删除缓存失败不会导致不一致 C 读旧写新是一致性被破坏的典型时序,需用版本号或锁规避 ✓ 正确答案 D 并发写不会产生不一致
# 3. 缓存穿透、缓存击穿、缓存雪崩三大问题的根因、检测方法与工程解决方案? A 缓存击穿用互斥锁或逻辑过期避免并发回源 ✓ 正确答案 B 缓存穿透是热点 key 过期导致的 C 缓存雪崩是单个 key 过期 D 布隆过滤器用于解决缓存雪崩
# 4. Cache Aside 的缓存删除失败、并发读写竞态(读旧写新)如何用延迟双删/版本号解决? A 版本号通过校验 DB 版本防止旧值覆盖新缓存 ✓ 正确答案 B 延迟双删是在更新 DB 前删除缓存 C 删除失败无法解决 D 延迟双删会加重不一致
# 5. 缓存一致性在生产中的验收方法(故障注入、并发压测与监控指标) A 并发压测无法发现竞态 B 一致性只能靠代码审查无法验证 C 监控指标与一致性无关 D 故障注入用于验证系统在异常下的行为 ✓ 正确答案
# 6. 缓存穿透/击穿/雪崩的应对,布隆过滤器、互斥锁与过期随机化? A 互斥锁用于缓存击穿,只允许一个请求回源重建 ✓ 正确答案 B 布隆过滤器用于解决缓存击穿 C 过期随机化用于拦截无效查询 D 布隆过滤器能精确判断 key 是否存在
# 7. 读写穿透(Read/Write-Through)与写回(Write-Behind)模式在工程中少见的原因? A Write-Behind 写缓存后立即同步写 DB B Cache-Aside 工程上少用 C Write-Through 把缓存作主入口,缓存故障时应用不可用 ✓ 正确答案 D Write-Behind 无数据丢失风险
# 8. 多级缓存(本地缓存 Caffeine + 分布式缓存 Redis)的一致性挑战,本地缓存如何感知远端失效? A 本地缓存能自动感知远端更新 B 本地缓存 TTL 越长越一致 C 多级缓存没有一致性问题 D 本地缓存靠 Redis Pub/Sub 广播失效通知 + 短 TTL 兜底感知失效 ✓ 正确答案
# 9. 缓存预热(Warm-up)与缓存降级策略,系统重启或缓存集群故障时如何保护数据库? A 预热在系统启动时加载热点数据,避免冷启动打爆 DB ✓ 正确答案 B 预热是故障时绕过缓存 C 缓存故障时无需降级 D 降级会加重 DB 压力
# 10. 热点 Key 的识别与治理,如何防止单个热点 Key 导致 Redis 单节点过载? A 限流会降低热点 key 的访问 B 热点 key 复制分片只会加剧单节点负担 C 热点 key 无法识别 D 本地缓存可减少热点 key 对 Redis 的访问 ✓ 正确答案
# 11. 缓存与 DB 的一致性在强一致业务(库存/余额)下的取舍,何时必须同步失效? A 强一致业务可接受最终一致 B 缓存值不参与业务正确性判断 C 强一致业务应优先用缓存读 D 库存/余额等业务更新 DB 后必须同步删缓存并保证成功 ✓ 正确答案
# 12. 多级缓存(本地+分布式)的一致性与失效广播(Redis Pub/Sub)如何设计? A 本地缓存靠 Pub/Sub 广播失效 + 短 TTL 兜底保证一致 ✓ 正确答案 B Pub/Sub 广播失效后无需 TTL 兜底 C Pub/Sub 消息永不丢失 D 版本号无法防旧值回填
# 14. Caffeine 的 refreshAfterWrite 与 expireAfterWrite 对缓存一致性的影响 A refreshAfterWrite 到期后 key 立即被移除 B refreshAfterWrite 异步刷新,读不阻塞但可能短暂读到旧值 ✓ 正确答案 C expireAfterWrite 不会引起并发穿透 D 两者都会阻塞读
# 15. 缓存版本化(Versioned Cache)与最终一致性 SLA,业务可接受多长时间的缓存不一致?如何度量? A 最终一致性 SLA 与业务无关 B 版本化缓存用版本比对防止读旧值 ✓ 正确答案 C 一致时长无法度量 D 版本号只用于缓存淘汰
# 16. 缓存击穿修复方案(互斥锁/逻辑过期)与缓存雪崩的随机过期策略如何组合? A 热点 key 用随机 TTL 解决击穿 B 随机过期策略用于解决击穿 C 热点 key 用逻辑过期/互斥锁,普通 key 用随机 TTL,组合覆盖两类问题 ✓ 正确答案 D 两者无法组合
# 17. 缓存与数据库的双写一致性,消息队列最终一致? A MQ 方案把缓存更新从 DB 事务中解耦并支持重试 ✓ 正确答案 B MQ 方案保证强一致 C MQ 方案不需要幂等 D MQ 方案无法处理删除失败
# 18. 缓存 Key 的设计规范(前缀、版本、TTL 分层) A 缓存 key 无需前缀规范 B 统一前缀与版本号便于管理、隔离与排障 ✓ 正确答案 C TTL 分层会让缓存更易雪崩 D key 越长越利于在线查询