面试面经 · 百度
【百度】【大模型开发】【暑期实习一面】面经(八股+大模型项目+手撕)
海外一年制硕士,投的是百度大模型开发暑期实习,一面大约 70 分钟,全程视频面试,面试官是组里做 Agent 方向的工程师,节奏偏快,问得比较深。
题目摘要
- Go 语言基础:
slice的底层结构、扩容规则,以及slice作为函数参数时修改元素为什么能生效、append之后为什么又"失效"了。 - MySQL 八股:聚簇索引与二级索引的区别,回表是什么;
explain里type字段从差到好怎么排;什么情况下索引会失效。 - Redis 八股:缓存穿透/击穿/雪崩的区别与对应解法;Redis 分布式锁为什么要用 Lua 脚本、
SETNX单独用有什么问题。 - RAG 项目深挖:文档切分策略怎么定的、召回效果差怎么排查、有没有做过 rerank、如何评估检索质量。
- Function Calling / 上下文管理:多轮 Agent 里工具调用结果怎么塞回上下文、上下文超长怎么截断、工具描述怎么写才能提升调用准确率。
- 手撕算法:LeetCode 200 变体——给定二维网格
'1'(陆地)和'0'(水),求岛屿数量;追问如果网格极大、内存放不下怎么处理。关键思路:DFS/BFS 遍历,访问过的陆地置'0'避免重复计数;大规模场景答"分块 + 并查集合并边界"。
项目深挖
简历上写了一段 RAG + Agent 的课程项目,面试官几乎全程围着它问,没有让我背概念,而是不断追问"你当时为什么这么选"。
追问一:文档切分你用了固定长度还是语义切分?为什么?
参考回答方向:先说项目里实际用的是"按标题层级 + 固定 token 上限兜底"的混合策略,再讲理由——纯固定长度会把一个完整语义块切断,导致召回片段答非所问;纯语义切分又难以控制单块长度,容易超出 embedding 模型窗口。然后主动补一句踩坑:一开始 chunk 设成 512 token、overlap 50,发现跨段落的问题召回率低,后来改成按 Markdown 标题切、超长再二次切分,召回明显变好。面试官接着问"你怎么知道变好了",这里要能说出评估方式,比如人工标注一批 query-answer,看 hit rate 或 MRR,而不是只说"感觉变好了"。
追问二:召回结果不相关时,你怎么定位是 embedding 的问题还是切分的问题?
参考回答方向:分层排查。先看原始 chunk 里到底有没有正确答案——如果没有,是切分或数据问题;如果有但没被召回,是 embedding 或检索策略问题;如果召回了但排在后面,是排序问题,需要加 rerank。可以提一句用 top_k 调大后看 recall 上限,判断是"召回不到"还是"排不上来"。
追问三:Agent 多轮调用工具,上下文越来越长,你怎么控制成本和长度?
参考回答方向:分几层讲。一是工具返回结果做摘要或只保留关键字段,不要把整个 JSON 塞回去;二是历史轮次做滑动窗口 + 关键信息抽取,把早期对话压缩成一句 summary;三是把稳定不变的内容(系统提示、工具定义)放前面,利用 prefix cache 降低推理成本;四是能并行调用的工具合并成一次调用,减少往返轮数。面试官会追问"摘要会不会丢信息",要承认有风险,并说关键实体(订单号、时间)会结构化保留而不是靠模型摘要。
准备建议
- 八股别只背结论,准备"为什么"。比如索引失效,不要只列"用了函数、隐式类型转换",要能说清 B+ 树为什么在这种情况下用不上索引。面试官很爱在你说完结论后追一句"底层原因呢"。
- 把项目里的每个技术选型都准备一个"为什么不选另一个"。切分策略、向量库选型、rerank 模型、chunk 大小,任何一个决定都要能说出取舍。哪怕当时是"随手选的",也要补一个合理的对比理由,否则深挖两轮就露馅。
- 手撕题练到能边写边讲。这次岛屿数量不难,但面试官全程在看你怎么组织代码、边界怎么处理(空网格、单行单列)。写完主动说时间和空间复杂度,再主动提一嘴大规模数据的优化思路,能明显加分。
一面通过,隔了 4 天约的二面。
想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。