NiceOffer

面试面经 · 地平线

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

地平线面经大模型开发实习

背景

海外一年制硕士,投递地平线大模型开发暑期实习,前两轮技术面已过,三面为部门技术负责人 + 交叉面性质,时长约 70 分钟,全程围绕「工程底子 + 大模型落地细节」双线拷打,没有自我介绍以外的寒暄。

题目摘要

  • Go 语言基础:slice 扩容机制与底层数组共享导致的「看似拷贝实则别名」问题;defer 与命名返回值的执行顺序;map 并发读写为什么会 panic,工程上怎么规避。
  • MySQL / Redis 八股:聚簇索引与回表,explain 里 type=range 和 ref 的区别;Redis 缓存穿透/击穿/雪崩的区分与各自解法,以及「逻辑过期」和「互斥锁」两种防击穿的取舍。
  • RAG 项目深挖:文档切分策略怎么定的、召回为什么用向量 + BM25 混合、rerank 模型选型依据、召回的「相关性」和「忠实度」怎么离线评估。
  • Function Calling / Agent:工具调用的 schema 怎么设计,模型选错工具或参数幻觉时怎么兜底;多轮 Agent 的上下文怎么裁剪,避免 token 爆炸。
  • 推理成本优化:线上 QPS 与单请求 token 预算怎么估算,KV Cache、量化、批处理(continuous batching)各自省在哪一环。
  • 手撕算法:LRU 缓存。题意:设计一个容量为 capacity 的缓存,支持 get(key) 和 put(key, value),两者都要求 O(1);超容量时淘汰最久未使用的键。关键思路:哈希表存 key → 双向链表节点,双向链表维护访问顺序,头部最新、尾部最旧,get/put 命中后把节点移到头部,put 超容时删尾节点并同步删哈希表项。面试官额外追问:如果要求「带过期时间」的 LRU 怎么改——答:节点加 expireAt,get 时惰性判断过期并删除,再叠加一个定时清理线程兜底。

项目深挖

追问一:你的 RAG 系统里,召回质量差的时候你怎么定位是「切分问题」还是「embedding 问题」还是「rerank 问题」?
参考回答方向:不要笼统说「调参」。先做分层归因——固定 query 集,分别看「切分后的 chunk 是否包含答案片段」(golden chunk 命中率)、「embedding 召回 top-k 里有没有 golden chunk」(召回率)、「rerank 后 golden chunk 排到第几」(MRR)。如果 golden chunk 根本没被切出来,是切分粒度或语义边界问题;如果切出来了但没召回,是 embedding 模型域不适配或 query 改写缺失;如果召回进了 top-50 但 rerank 后掉出 top-5,是 rerank 模型或打分阈值问题。定位清楚再动手,比盲目换模型有效。

追问二:Function Calling 里模型返回了不存在的工具名或参数类型不对,你的工程链路怎么处理?
参考回答方向:分三层。第一层在 prompt / schema 里约束,工具描述写清必填字段和枚举值;第二层在解析时做 schema 校验(如 JSON Schema validate),不合法就触发一次「纠错重试」,把错误信息回灌给模型让它重新生成,限制重试次数(如 2 次);第三层是兜底,重试仍失败就降级到规则匹配或直接返回「无法完成」,绝不把非法参数透传给下游执行器。核心原则:模型输出永远当「不可信输入」处理。

追问三:多轮 Agent 上下文越来越长,你怎么控制 token 成本和延迟?
参考回答方向:不能只靠「截断最早的消息」,会丢关键信息。常用组合:系统提示和工具定义常驻;历史对话做「滚动摘要」,把早期轮次压缩成一段摘要替换原文;保留最近 N 轮原文保证连贯性;工具返回的大结果(如长文档、大 JSON)只保留必要字段或摘要后再入上下文。再配合 KV Cache 复用固定前缀(系统提示放最前且不变),能显著降首 token 延迟。要能说出「哪些内容必须原文保留、哪些可以摘要、哪些直接丢」的判断标准。

准备建议

  1. 把 Go 或 Java 的「坑点」过一遍,别只背语法。重点看 slice/map 的底层行为、并发安全、GC 相关常识。面试官问这些不是考记忆,是看你会不会写出线上出 bug 的代码。建议每个知识点配一个「我曾经踩过的坑」的例子。
  1. RAG / Agent 项目准备一套「归因方法论」,而不是只讲「我用了什么技术栈」。把召回率、MRR、忠实度这些指标和对应的排查动作串成链条,面试官一定会追问「效果不好怎么办」,这是区分「调包」和「懂系统」的分水岭。
  1. 推理成本优化要能算账。提前估算一个具体场景:比如日活 1 万、人均 5 次请求、每次输入 2k token 输出 500 token,一个月大概多少 token、按某模型单价多少钱、量化或缓存能省多少。能说出数量级,比背「KV Cache 能加速」有说服力得多。

结果

三面通过,约 5 个工作日后收到 HR 面通知。

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