面试面经 · 商汤
【商汤】【大模型开发】【暑期实习HR面】面经(八股+大模型项目+手撕)
海外一年制硕士,投递商汤大模型开发暑期实习,HR 面之前先经历了一轮技术面,整体节奏紧凑,面试官对项目细节和基础功底都问得比较实。以下是我的面经整理。
题目摘要
- Go 语言基础:
defer的执行顺序与底层实现、slice扩容机制、map并发安全问题及sync.Map适用场景 - MySQL 八股:聚簇索引与非聚簇索引的区别、
EXPLAIN中type字段的常见取值及优化含义、事务隔离级别与 MVCC 的关系 - Redis 八股:缓存穿透/击穿/雪崩的区分与应对、
RDB与AOF的取舍、Redis 分布式锁的实现与续期问题 - 大模型/Agent 项目深挖:RAG 检索链路中召回率与精排的权衡、Function Calling 的 schema 设计与异常兜底、多轮对话上下文管理策略、推理成本优化的具体手段
- 手撕算法题:LRU 缓存。题意:设计一个满足 LRU 淘汰策略的缓存结构,支持
get和put操作,要求两者时间复杂度均为 O(1)。关键思路:哈希表 + 双向链表,哈希表负责 O(1) 定位节点,双向链表维护访问顺序,get时将节点移到头部,put时若容量超限则淘汰尾部节点。
项目深挖
追问一:你的 RAG 项目里,召回阶段用了什么策略?如果召回结果相关性差,你怎么定位和优化?
参考回答方向:先说明召回方案,比如向量检索用的是哪种 embedding 模型、是否做了混合检索(BM25 + 向量)、chunk 切分粒度是多少。优化定位要分两层:一是离线评估,构造标注集算 Recall@K 和 MRR,看是 embedding 语义匹配不行还是 chunk 切分把关键信息切断了;二是线上分析 badcase,看是 query 本身歧义、知识库覆盖不足,还是 top-K 截断太早。优化手段可以提:调整 chunk size 与 overlap、引入 rerank 模型做精排、对 query 做改写或扩展、对高频问题做缓存。重点是要体现出你有评估意识和迭代闭环,而不是只堆技术名词。
追问二:Function Calling 在实际调用中,模型返回的参数格式不对或者调用了不存在的函数,你怎么处理?
参考回答方向:先说 schema 设计层面的预防,比如参数用 JSON Schema 严格约束类型和枚举值,函数描述写清楚使用场景,减少模型误判。再说运行时兜底:解析失败时先做一次重试,重试时把错误信息拼回 prompt 让模型自我修正;如果连续失败则降级到规则匹配或直接返回兜底话术。还可以提一层校验,在真正执行函数前对参数做合法性检查,避免脏参数打到下游服务。如果项目里做过 function 路由或权限控制,也可以带一句。
追问三:多轮对话的上下文你是怎么管理的?token 超限时怎么截断?
参考回答方向:先说上下文组织方式,比如 system prompt + 历史对话 + 当前 query 的拼接结构。超限处理不要只说“截断”,要分策略:优先保留 system prompt 和最近 N 轮对话,对较早的历史做摘要压缩,或者用滑动窗口加关键信息抽取。如果项目里做了长期记忆,可以提向量化存储历史对话、按相关性召回。还要提一句成本考量,比如对简单问题走短上下文、复杂问题才拼长上下文,避免无脑堆 token。
准备建议
- 八股不要只背结论,要能讲清楚“为什么”。比如 MySQL 索引,面试官不会只问“聚簇索引是什么”,而是会追问“为什么 InnoDB 用 B+ 树而不是 B 树”“回表什么时候发生、怎么避免”。准备时每个知识点至少往下追两层,用“是什么—为什么—怎么用—有什么坑”的结构过一遍。
- 项目要准备一版“被追问版”的讲述。不要只讲架构和流程,要提前想好每个技术选型的替代方案和取舍理由。比如为什么用这个 embedding 模型、为什么 chunk 切这么大、推理成本具体降了多少、怎么衡量的。面试官深挖时最看重的是你的决策逻辑和量化意识。
- 手撕算法保持手感,重点练高频题型。LRU、LFU、TopK、滑动窗口、二叉树遍历、动态规划这几类出现频率最高。建议用 Go 或 Java 手写,不要依赖 IDE 补全,练习时计时 20 分钟内完成并自己跑通边界用例。写完后主动说一句时间复杂度和空间复杂度,面试官会加分。
结果反馈
一面通过,3 天后约了下一轮交叉面。
想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。