后端岗位面试题更新 2026-08-05

在 AI 零代码应用生成项目中,你采用怎样的方案来设定 Caffeine 的缓存策略?

后端开发性能优化技术选型方案权衡

考察说明

考查对 Caffeine 缓存策略的实际配置能力,包括大小、过期与刷新机制的选择和权衡。

回答思路

  1. 【回答框架 1】Caffeine 是高性能本地缓存库,策略核心包含最大容量、过期时间和刷新间隔。配置时先根据业务数据量和内存预算设定 maximumSize,通常结合预估条目数与单条大小估算。
  2. 【回答框架 2】过期策略按需选择:访问后过期 expireAfterAccess 适合读多写少且热数据集中场景;写入后过期 expireAfterWrite 适合数据变化不频繁、要求最终一致的场景;自定义 Expiry 可处理更复杂如按字段失效的需求。
  3. 【回答框架 3】刷新策略 refreshAfterWrite 在过期后异步重新加载,能避免热点 key 被阻塞,但需提供 CacheLoader 或外部数据源,并注意刷新触发前提是访问时已过期,否则不会主动刷新。
  4. 【回答框架 4】实际项目中会结合 AI 应用特点,对模型配置、模板等低频变化数据用较长的 expireAfterWrite,对用户会话等高频变化数据用较短的 expireAfterAccess,并设置 recordStats 开启命中率监控,依据指标动态调整。
  5. 【回答框架 5】还需统一使用多级缓存时注意与 Redis 的一致性,Caffeine 作为一级缓存只能缓解热点读压力,不能完全依赖它保证数据强一致,需配合失效通知或短 TTL 控制偏差。
  6. 【关键点 1】配置 maximumSize 控制最大条目数以防内存溢出,需结合数据量和内存预算估算。
  7. 【关键点 2】区分 expireAfterAccess 和 expireAfterWrite 的适用场景,高频读且容忍短暂不一致可用访问后过期。
  8. 【关键点 3】refreshAfterWrite 可异步刷新降低阻塞,但必须配合 CacheLoader 且依赖访问触发。
  9. 【关键点 4】开启 recordStats 并通过命中率等指标持续调整容量与过期参数。
  10. 【关键点 5】本地缓存与 Redis 组合时,以 Caffeine 为一级缓存并用失效通知或短 TTL 控制一致性偏差。
  11. 【易错点 1】把 refreshAfterWrite 当成完全定时刷新,实际上需要访问时才触发刷新,空闲数据不会更新。
  12. 【易错点 2】无限增大 maximumSize 或设置过大过期时间导致内存压力,忽略 JVM 堆限制。
  13. 【易错点 3】忽略缓存一致性风险,认为本地缓存与远端数据永远一致,未设置失效机制。