面灵AI

招银 Java 后端二面:KV Cache、分布式锁与微服务

轮次
二面
时间
2026-09
来源
牛客网

《面试题目》

  1. 如何用三分钟介绍自己的经历和技术方向?
  2. Transformer 的基本原理是什么,KV Cache 缓存的是什么,怎样复用?
  3. 项目为什么需要分布式锁,它保护的是哪一段操作?
  4. 悲观锁和乐观锁有什么区别?
  5. 你的项目采用单体还是分布式架构?
  6. 你了解哪些微服务设计方法,具体会怎样拆分和实现?

《参考解析》

KV Cache 省掉哪些计算

自回归生成时,已经处理过的 token 对应的 Key 和 Value 可以缓存。生成下一个 token 时,只计算新 token 的相关表示,再与已有缓存共同参与注意力计算。它省去了重复计算前缀的开销,但缓存会随上下文增长而占用更多显存。跨请求复用还要确认模型、前缀和位置等条件一致,不能把不同输入的缓存直接混用。

从项目里解释分布式锁

先举出两个服务实例可能同时修改同一资源的具体场景,再说明为什么进程内锁不够。随后讲清锁的持有者标识、过期时间和释放方式。释放时应原子地核对持有者,避免删掉别人的锁;锁过期后原任务仍在执行的情况也要考虑。涉及最终写入正确性时,还需要数据库约束、版本号等机制配合。

悲观与乐观的选择

悲观锁先取得排他访问权,竞争方等待;乐观方式先执行计算,写入时检查版本是否仍匹配,失败后由业务决定重试或返回冲突。选择依据是冲突频率、等待成本,以及一次重试的代价。