面试面经 · 商汤
【商汤】【Agent 开发】【暑期实习一面】面经(八股+大模型项目+手撕)
背景
海外一年制硕士,计算机方向,主攻 LLM 应用开发,有一段基于开源模型搭建企业知识库助手的实习经历。投递商汤 Agent 开发暑期实习,简历筛选后约一周收到一面邀请,面试时长约 55 分钟。
题目摘要
- Go 语言基础:goroutine 与 channel 的底层原理,GMP 模型简述,内存逃逸分析
- MySQL 与 Redis:事务隔离级别、MVCC 实现、缓存穿透/击穿/雪崩的应对,Redis 持久化机制对比
- 大模型/Agent 项目深挖:RAG 检索优化策略、Function Calling 的触发与容错、上下文窗口管理、推理成本优化方案
- 手撕算法:Top K 高频元素(LeetCode 347),要求分析时间/空间复杂度并给出优化思路
项目深挖
面试官全程围绕简历上的知识库 Agent 项目提问,没有问任何通用八股,每个问题都追到具体实现细节。
追问一:RAG 检索质量差时,你做了哪些优化?
参考回答方向:
- 先定位问题类型:是召回不全还是排序不准,通过抽检 query 的 top-10 结果做错误分析
- 召回层优化:混合检索(BM25 + 向量检索),利用 RRF 或加权融合;针对专有名词做分词预处理
- 排序层优化:引入 cross-encoder 做粗排后的精排重排,虽然延迟增加约 80ms,但 top-3 准确率提升约 12%
- 索引层优化:chunk 大小从固定 500 字调整为按语义段落切割,重叠区间设 50 字,减少上下文断裂
面试官追问了 RRF 的权重如何确定,我回答先用网格搜索找初始值,再根据业务数据人工调优,没有用复杂的学习排序模型,因为冷启动成本太高。
追问二:Function Calling 经常不触发或参数格式错误,你怎么处理的?
参考回答方向:
- 结构化 prompt 约束:在 system message 中给出 2-3 个 few-shot 示例,比单纯描述函数签名效果好很多
- 参数校验兜底:模型输出的 function call 先过 JSON schema 校验,失败则进入修复流程(将错误信息回传模型让其重新生成)
- 降级策略:连续两次调用失败后,放弃 function call 流程,改用纯文本回复并提示用户手动操作
- 日志监控:记录所有失败的 function call 原始输出,定期分析失败模式,针对性补充 prompt 示例
追问三:上下文长度有限,如何管理多轮对话中的历史信息?
参考回答方向:
- 分层记忆:短期记忆(最近 5 轮完整对话)+ 长期记忆(关键实体、用户偏好等结构化摘要)
- 摘要压缩:当对话超过阈值时,调用轻量模型对早期对话做增量摘要,保留用户明确表达的需求和已确认的事实
- Token 预算分配:按比例分配(system 10%、历史记忆 30%、检索内容 40%、当前输入 20%),超出部分优先裁剪最旧的检索内容
- 成本考量:摘要压缩调用小参数模型,每轮成本约为大模型的 1/10,但能有效减少因截断导致的重复提问
手撕算法:Top K 高频元素
题意:给定一个整数数组 nums 和一个整数 k,返回出现频率前 k 高的元素。要求时间复杂度优于 O(n log n)。
关键思路:
- 先用哈希表统计每个元素的出现频率,时间复杂度
O(n) - 解法一:维护一个大小为
k的最小堆,遍历频率表,堆满后若新元素频率大于堆顶则替换。时间复杂度O(n log k),空间复杂度O(n) - 解法二(面试官引导后给出):基于快速选择的 partition 操作,平均时间复杂度
O(n),最坏O(n^2),可通过随机化 pivot 优化
我选择了最小堆方案,写完后面试官问能否优化,我补充了快速选择思路并对比了两种方案的适用场景(数据量级、是否需要稳定排序、最坏情况容忍度)。没有要求运行代码,但口头完整走了一遍测试用例。
准备建议
- 项目细节必须能闭环:面试官会逐层追问直到你答不上来为止。建议用文档梳理项目的每个技术选型,写清楚“为什么不用方案 B 而用方案 A”,以及方案的已知缺陷和改进方向。不要只准备“我做了什么”,要准备“我踩了什么坑、怎么发现的、怎么解决的”。
- 八股要结合场景理解:MySQL 的 MVCC、Redis 的持久化这些基础题,不能只背结论。面试官可能会换个场景问,比如“如果 Redis 突然重启,你会怎么保证缓存数据不丢”,需要把 RDB 和 AOF 的机制差异、各自适用场景讲清楚。
- 手撕算法练熟 Top K 和滑动窗口类题目:Agent 开发岗位的算法题偏重哈希表、堆、双指针等高频考点,难度在 LeetCode Medium 为主。建议把“Top K”系列(347、692、373)和“滑动窗口”系列(3、76、239)限时刷完,同时准备每个题目的时空复杂度分析和至少一种优化方案。
结果反馈
一面通过,约 4 天后收到二面通知,后续面试侧重系统设计和多 Agent 协作场景。
想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。