百度Java开发实习生(智能客服)面经,无手撕,全是项目拷打
- 时间
- 2026-07
- 来源
- 牛客网
《面试题目》
- 第一个项目
- 优惠券秒杀中,为什么使用 Redis Lua 脚本进行校验和库存预扣?
- 你所说的 Lua 脚本“回退”是指什么?什么情况下需要回退?
- 如果 Lua 脚本已经执行成功,但后续订单消息发送到 Kafka 失败,应该怎么处理?
- 只依靠 Lua 脚本和消息队列,就能保证库存不超卖和一人一单吗?
- 如果绕过 Redis 入口,直接在数据库中更新库存,数据库层面如何防止超卖?
- 你简历中提到 Cache Aside,能介绍一下它的完整执行流程吗?
- 缓存未命中后,谁负责查询数据库并重新写入缓存?
- 为什么采用“更新数据库,然后删除缓存”,而不是“更新数据库,然后直接更新缓存”?
- 并发更新缓存时,可能出现什么数据一致性问题?
- 为什么使用 ThreadLocal 存储用户信息?
- 请求结束后,ThreadLocal 中的数据会自动移除吗?你是怎么清理的?
- 第二个项目
- 你的系统整体是不是由 Agent 中控和知识库两部分组成?
- 能简单介绍一下 ReAct 的推理与行动机制吗?
- 模型在推理过程中,怎么知道应该使用哪个工具?
- 你这个 Agent 中一共有多少个工具?
- 当 Agent 中包含很多工具和 Skill 时,模型选择工具还会准确吗?
《参考解析》
- Redis常用于缓存、分布式锁和计数。缓存与数据库更新通常采用“先写数据库、再删除缓存”,并通过重试、延时双删或消息补偿处理删除失败。
- 并发问题应先明确共享状态和一致性边界,再选择锁、CAS或队列。线程池需要根据任务是CPU密集还是IO密集设置核心线程数、队列容量和拒绝策略,并监控活跃数与队列长度。
- TCP通过三次握手建立连接、四次挥手释放连接;HTTPS在TLS握手中协商会话密钥,并用证书校验服务端身份,数据传输阶段主要使用对称加密。
- 算法题先写出不变量和边界条件,再分析复杂度;常见数组、链表和树问题可分别使用双指针、哈希表、递归或迭代遍历,目标是在线性或对数复杂度内完成。