面试面经 · 理想汽车
【理想汽车】【大模型开发】【暑期实习二面】面经(八股+大模型项目+手撕)
理想汽车 大模型开发 暑期实习二面面经
背景:海外一年制硕士,计算机相关专业,一段大模型 Agent 相关项目经历,无大厂实习。
题目摘要
- 编程语言基础(Go):goroutine 与 channel 的底层实现、内存逃逸分析、sync.Map 适用场景
- MySQL/Redis 八股:MVCC 原理、索引失效场景、Redis 持久化机制对比、缓存穿透与击穿解决方案
- 项目深挖:RAG 检索质量优化、Function Calling 的容错设计、上下文窗口管理策略、Token 成本优化手段
- 手撕算法:实现一个支持
get/put的 LRU Cache,要求 O(1) 时间复杂度
项目深挖
追问 1:你提到 RAG 的检索质量有问题,具体怎么定位的?
参考回答方向:先量化问题,用 recall@k 和人工抽检结合。我当时发现是 chunk 切分粒度过粗,导致跨段语义被截断。改用按语义段落切分 + 重叠窗口,同时加了 query 改写模块(将口语化问题转为关键词组合)。面试官会追问"改写模块怎么做的",要能说出是用小模型 prompt 还是规则模板,以及效果提升的具体数据。
追问 2:Function Calling 如果模型返回了不存在的函数名或参数格式错误,怎么处理?
参考回答方向:两层防护。第一层在 prompt 里给严格的 JSON Schema 约束,并在 system message 里加 few-shot 示例;第二层在代码层做 schema 校验,不通过就走重试逻辑(重新调用模型并附上错误信息)。额外提一句:对高频函数做了缓存,减少重复调用。面试官会追问"重试次数上限多少,成本怎么控制",答 2 次、超限降级到固定话术即可。
追问 3:上下文管理上,你用的截断还是摘要?为什么?
参考回答方向:我用了分层策略——最近 N 轮完整保留,更早的对话用模型做增量摘要,摘要本身也设了长度上限。原因是截断会丢失关键信息,而全量摘要每次重算成本太高。面试官会追问"摘要的模型用什么、多久做一次",答用轻量模型(如 7B 级别)在用户空闲时异步更新,不阻塞主链路。
手撕算法:LRU Cache
题意:设计一个数据结构,支持 get(key) 和 put(key, value) 两个操作,get 和 put 的时间复杂度都是 O(1)。当缓存容量达到上限时,淘汰最久未使用的 key。
关键思路:
- 用哈希表(map)存 key 到链表节点的映射,实现 O(1) 查找
- 用双向链表维护访问顺序,头部为最近访问,尾部为最久未使用
get时:命中则把节点移到头部,返回 value;未命中返回 -1put时:key 已存在则更新 value 并移到头部;不存在则新建节点插入头部,若超容量则删除尾部节点并同步删除哈希表记录- 边界条件:容量为 0 或 1 时的处理;节点移动时注意前后指针的更新
面试官会要求写完后跑几个用例,然后追问"为什么不用单链表"——因为删除尾部节点时需要知道其前驱,单链表做不到 O(1)。还会问"如果并发访问怎么办",加锁即可,但要说清楚锁粒度。
准备建议
- 把项目里的每个设计决策都量化。比如 RAG 的 chunk 大小为什么选 512,召回率从多少提到多少,Function Calling 的失败率降了几个点。面试官不会信"效果好"这种空话,要能报出具体数字和对比实验。
- Go 和 Java 二选一,把并发和内存模型吃透。理想汽车这边 Go 用得较多,重点看 goroutine 调度、channel 阻塞原理、逃逸分析。如果投 Java 岗,就复习 JVM 内存分区和 G1 收集器。别两个都浅尝辄止,面试官会追着问到底。
- 算法题按 LeetCode 中等难度准备,但一定要手写+跑测试。LRU、LFU、线程池设计、TopK 这类高频题要练到闭眼能写。面试时先讲思路再动笔,写完主动说时间复杂度和边界情况,比闷头写代码加分。
结果反馈
一面通过,隔了 3 个工作日约的二面,二面后 5 天收到 HR 电话通知通过,进入 offer 审批流程。
想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。