面灵AI

小米Java一面面经

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

《面试题目》

  1. Redis 分布式锁如何实现?锁失效怎么办?
  2. 如何用 SQL 实现项目中的 CAS?CAS 的 ABA 问题如何解决?和 MVCC 有什么关系?
  3. 项目中的幂等问题如何解决?
  4. RRF 融合检索多少结果?如何提升精确度?是否用过重排模型?
  5. 除了随机 TTL,还有什么方法防止缓存雪崩?Redis 宕机时怎么办?
  6. Java 线程池的核心原理是什么?
  7. 如何防止大模型注入攻击?
  8. 如何实现多线程并发安全的 LRU?

《参考解析》

  1. 用 SET NX EX 写入唯一 token,释放时以 Lua 原子校验 token 再删除;续期需校验持有者。服务异常时依靠 TTL 自动释放,并通过重试、降级和监控处理失效。
  2. CAS 用版本号或更新时间作为条件更新,失败即重试或返回冲突。ABA 可用带版本的原子引用解决;MVCC 也通过版本链判断并发更新的可见性。
  3. 以业务唯一键、请求幂等号或数据库唯一约束去重,状态机限制重复状态迁移,消息消费端记录处理结果。
  4. RRF 按多个检索器名次倒数加权融合,再用交叉编码器等重排模型;通过离线标注集调节召回数量、权重和阈值。
  5. 可用随机 TTL、逻辑过期加互斥重建、热点预热和限流;Redis 故障时切换只读/本地缓存并保护数据库,恢复后再回填。
  6. 线程池按核心线程、队列、最大线程和拒绝策略处理任务,先创建核心线程,再入队,队列满后扩容到最大线程,最终执行拒绝策略。
  7. 将系统提示与用户内容隔离,对工具调用做白名单、参数校验和权限校验,敏感输出脱敏并保留审计日志。
  8. 哈希表定位节点,双向链表维护淘汰顺序;并发场景可用锁或并发容器保护“查找、移动、淘汰”这一组复合操作。