NiceOffer

面试面经 · 小米

【小米】【Agent 开发】【暑期实习一面】面经(八股+大模型项目+手撕)

小米面经Agent 开发实习

海外一年制 CS 硕士,投的是小米 Agent 开发暑期实习,简历上有一段 RAG + Function Calling 的课程项目,一面约 60 分钟,全程视频面试,面试官是 Agent 方向的一线开发。

题目摘要

  • Go 语言基础:slice 的扩容机制、map 并发安全、defer 执行顺序与返回值的关系,追问了一道 defer 修改命名返回值的输出题。
  • MySQL / Redis 八股:聚簇索引与回表、explain 里 type 各级别含义、Redis 缓存穿透/击穿的解法差异、Redis 分布式锁为什么要用 SET NX PX 而不是 SETNX + EXPIRE。
  • Agent 项目深挖:RAG 检索链路的分块策略、向量召回与关键词召回怎么融合、Function Calling 的工具描述怎么写才不容易误调用、多轮对话上下文超长怎么截断。
  • 推理成本优化:怎么降低单次对话的 token 消耗,prompt 缓存、模型分级路由、结果缓存分别在什么场景下有效。
  • 手撕算法:LRU 缓存。题意是设计一个容量为 capacity 的缓存结构,支持 get(key) 和 put(key, value),两者都要求 O(1),超容量时淘汰最久未使用的键。关键思路是哈希表 + 双向链表:哈希表存 key 到链表节点的映射,双向链表维护访问顺序,get 命中后把节点移到头部,put 时若已存在则更新并移到头部,若超容量则删掉尾部节点并同步删哈希表。面试官要求手写双向链表节点结构和 moveToHead / removeNode 两个辅助函数,不允许用 container/list 或 LinkedHashMap 直接糊过去。

项目深挖

追问一:你的 RAG 分块是怎么做的,为什么这么分?

参考回答方向:不要只说"按 512 token 切"。要讲清楚分块粒度是跟检索粒度和生成粒度对齐的——块太大召回噪声多、塞进上下文浪费 token,块太小语义不完整、召回了也答不好。可以补充实际做法:先按标题/段落做语义分块,再做固定长度兜底切分,块之间留 10%~15% 重叠避免边界信息丢失。如果面试官继续问"怎么评估分块好不好",答用一组标注好的问答对跑召回率(Recall@k)和最终答案正确率,而不是凭感觉。

追问二:向量召回和关键词召回怎么融合?

参考回答方向:常见是混合检索 + RRF(Reciprocal Rank Fusion)或加权分数融合。要说出各自的短板:向量召回对同义改写友好但对专有名词、型号、代码标识符不敏感,关键词召回(BM25)正好相反。融合时如果两路分数不可比,用排名融合比直接加权更稳。可以主动提一句"线上如果 query 类型可判别,也可以做路由,不是所有 query 都值得走双路召回"。

追问三:Function Calling 里工具描述怎么写,模型老是误调用怎么办?

参考回答方向:工具描述要写清楚三件事——这个工具做什么、什么时候该用、参数约束是什么。误调用通常来自描述边界模糊,比如两个工具功能重叠,模型只能猜。解法是把工具粒度拆清楚,在 description 里显式写"仅当用户明确要求 X 时调用",并给出反例。另外可以在 system prompt 里加一层路由约束,或者用 function calling 的 tool_choice 强制/禁止某些调用。如果面试官追问"模型不调用该调的工具怎么办",答检查描述是否缺少触发词、是否被 system prompt 里的其他指令压制、以及是否该把工具结果回灌进下一轮。

追问四(延伸):上下文越来越长,你怎么控制?

参考回答方向:分层处理。system prompt 和工具定义是固定开销,尽量精简;历史对话做滑动窗口 + 摘要,早期对话压缩成一段 summary;RAG 召回结果按相关性截断,不要无脑 top-k 全塞。再往上就是 prompt 缓存(相同前缀复用 KV cache)和模型分级——简单意图用小模型,复杂推理才上大模型。

准备建议

  1. 八股按"能追问两层"的标准准备。比如 Redis 分布式锁,不能只背 SET NX PX,要能答出锁过期但业务没执行完怎么办(看门狗续期或 fencing token)、Redlock 争议在哪。MySQL 索引要能画出一棵 B+ 树并解释为什么范围查询后回表代价高。每个知识点准备一个"再往下问一层"的答案。
  1. 把项目里的每个技术选型都准备一个"为什么不用另一个"。面试官高频问法是"你为什么用 A 不用 B"。RAG 项目至少准备:为什么用这个向量库、为什么这个 embedding 模型、分块参数怎么定的、召回效果怎么评估的。答不上评估指标是硬伤,哪怕项目是课程作业,也要补一个离线评估的小实验数据。
  1. 手撕题按题型刷,不要按题号刷。Agent 岗高频是 LRU/LFU、拓扑排序、字符串解析(模拟 tokenizer 或表达式求值)、BFS/DFS 网格类。每类手写一遍到能默写辅助函数,注意边界:LRU 的 capacity=1、get 不存在的 key、put 已存在的 key。写之前先跟面试官确认接口签名和返回值约定,这本身就是加分项。

一面整体偏基础 + 项目,没有问分布式和系统设计。面完第二天收到反馈,约了 3 天后二面。

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