NiceOffer

面试面经 · 得物

【得物】【大模型开发】【暑期实习三面】面经(八股+大模型项目+手撕)

得物面经大模型开发实习

海外一年制硕士,投递得物大模型开发暑期实习,三面技术面,面试官是团队里做 Agent 方向的负责人,全程约 70 分钟,节奏偏快,深挖为主。

题目摘要

  1. Go 语言基础slice 的底层结构与扩容机制,map 并发读写为什么会 panic,sync.Map 的适用场景与代价。
  2. MySQL / Redis 八股:聚簇索引与回表、explaintype 各等级含义;Redis 缓存穿透/击穿/雪崩的区别与各自解法,zset 底层跳表为什么不用红黑树。
  3. RAG 项目深挖:文档切分策略怎么定的、召回率怎么评估、重排模型放在哪一层、线上 QPS 与延迟预算怎么分配。
  4. Agent / Function Calling:工具数量上百时怎么选工具、多轮对话上下文怎么裁剪、工具调用失败或参数幻觉怎么兜底。
  5. 推理成本优化:首 token 延迟与总吞吐怎么权衡、KV Cache 复用、量化对效果的影响怎么验证。
  6. 手撕算法:给定一个字符串数组,返回所有可以由数组中任意单词拼接而成的字符串(单词可重复使用),本质是「单词拆分 II」的变体,要求输出全部组合而非只判断可行性。关键思路:先建字典树或哈希集合做 O(1) 前缀判断,再用记忆化 DFS,memo[i] 缓存从下标 i 开始的所有合法拼接结果,避免指数级重复搜索;注意结果集可能很大,要提前和面试官确认是否去重、是否限制长度。

项目深挖

追问一:你的 RAG 召回率是怎么量化的,别只说"感觉变好了"。

参考回答方向:先承认没有标注数据时不能空谈召回率,讲清楚怎么构造评估集——从线上真实 query 里采样,人工标注每个 query 的 ground truth 文档,算 Recall@k 和 MRR。然后说明优化前后在同一评估集上的对比:切分从固定长度改成按语义/标题层级切分,chunk size 从 512 调到 256 加 overlap,召回率提升了多少个百分点。如果面试官继续追问"标注成本太高怎么办",可以提用 LLM 做自动评估(让模型判断召回的 chunk 是否包含回答问题所需信息),但要说明这只做粗筛,最终仍要人工抽检校准。

追问二:工具数量到上百个,Function Calling 怎么选工具?

参考回答方向:不能把所有工具描述塞进 system prompt,token 爆炸且模型容易选错。分层做法是先用一个轻量分类器或 embedding 检索,把候选工具从上百个缩到 5-10 个,再把这些工具的 schema 给模型做最终决策。工具描述要写清楚「什么时候用」而不只是「是什么」,参数名要自解释。另外要讲失败兜底:模型返回的工具名不在候选集里、或参数缺字段时,不要直接抛错给用户,而是把校验错误回灌给模型让它重试一次,仍失败再走降级话术。

追问三:多轮对话上下文越来越长,你怎么管?

参考回答方向:分三层。第一层是滑动窗口,保留最近 N 轮原文;第二层是对更早的历史做摘要压缩,用一个小模型异步生成摘要,注意摘要要保留实体和用户偏好这类关键信息;第三层是把稳定的信息(用户画像、会话级配置)抽出来放到结构化字段,不占对话 token。要主动提一个坑:摘要会丢信息,所以对「用户明确说过的约束」要单独存一份,不能只依赖摘要。如果面试官问怎么评估上下文管理有没有效,答用长对话场景的回归测试集,看多轮之后任务完成率有没有掉。

准备建议

  1. 八股别背结论,背因果链。比如问 Redis 为什么用跳表,要能说到「范围查询友好、实现比红黑树简单、并发下锁粒度更好控制」,而不是只答「跳表快」。面试官三面往往一句话就能戳穿背诵痕迹,追问一层就露馅。
  1. 把项目里的每个数字都准备好被追问。召回率、延迟、QPS、成本下降比例,只要写进简历就要能说清楚怎么测的、基线是什么、有没有做 A/B。说不清来源的数字比不写还减分。
  1. 手撕题按「暴力→优化→边界」三步讲。先说最直观的 DFS 会超时,再引出记忆化,最后主动补边界:空数组、单词长度超过目标串、结果去重。写代码时边写边讲,卡住了就说思路而不是沉默,面试官更看重沟通。

三面结束当天收到 HR 通知通过,约一周后进入 HR 面。

想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。