面灵AI

百度Java开发实习生(智能客服)面经,无手撕,全是项目拷打

时间
2026-07
来源
牛客网

《面试题目》

  1. 第一个项目
  2. 优惠券秒杀中,为什么使用 Redis Lua 脚本进行校验和库存预扣?
  3. 你所说的 Lua 脚本“回退”是指什么?什么情况下需要回退?
  4. 如果 Lua 脚本已经执行成功,但后续订单消息发送到 Kafka 失败,应该怎么处理?
  5. 只依靠 Lua 脚本和消息队列,就能保证库存不超卖和一人一单吗?
  6. 如果绕过 Redis 入口,直接在数据库中更新库存,数据库层面如何防止超卖?
  7. 你简历中提到 Cache Aside,能介绍一下它的完整执行流程吗?
  8. 缓存未命中后,谁负责查询数据库并重新写入缓存?
  9. 为什么采用“更新数据库,然后删除缓存”,而不是“更新数据库,然后直接更新缓存”?
  10. 并发更新缓存时,可能出现什么数据一致性问题?
  11. 为什么使用 ThreadLocal 存储用户信息?
  12. 请求结束后,ThreadLocal 中的数据会自动移除吗?你是怎么清理的?
  13. 第二个项目
  14. 你的系统整体是不是由 Agent 中控和知识库两部分组成?
  15. 能简单介绍一下 ReAct 的推理与行动机制吗?
  16. 模型在推理过程中,怎么知道应该使用哪个工具?
  17. 你这个 Agent 中一共有多少个工具?
  18. 当 Agent 中包含很多工具和 Skill 时,模型选择工具还会准确吗?

《参考解析》

  1. Redis常用于缓存、分布式锁和计数。缓存与数据库更新通常采用“先写数据库、再删除缓存”,并通过重试、延时双删或消息补偿处理删除失败。
  2. 并发问题应先明确共享状态和一致性边界,再选择锁、CAS或队列。线程池需要根据任务是CPU密集还是IO密集设置核心线程数、队列容量和拒绝策略,并监控活跃数与队列长度。
  3. TCP通过三次握手建立连接、四次挥手释放连接;HTTPS在TLS握手中协商会话密钥,并用证书校验服务端身份,数据传输阶段主要使用对称加密。
  4. 算法题先写出不变量和边界条件,再分析复杂度;常见数组、链表和树问题可分别使用双指针、哈希表、递归或迭代遍历,目标是在线性或对数复杂度内完成。