面试面经 · 滴滴
【滴滴】【大模型开发】【暑期实习一面】面经(八股+大模型项目+手撕)
海外一年制硕士,投递滴滴大模型开发暑期实习,一面技术面约 70 分钟,全程线上,面试官是做大模型应用平台方向的。
题目摘要
- Go 语言基础:slice 的底层结构、扩容机制,以及
append在什么情况下会引发底层数组共享导致的数据覆盖问题;顺带问了map是否并发安全、sync.Map的适用场景。 - MySQL / Redis 八股:MySQL 聚簇索引与回表,为什么建议用自增主键;Redis 缓存穿透、击穿、雪崩的区别与各自解法,追问了布隆过滤器误判率和 Redis 分布式锁的续期问题。
- RAG 项目深挖:文档切分策略怎么定的、向量检索召回率怎么评估、有没有做 rerank、多路召回怎么融合。
- Function Calling / Agent:工具调用的参数校验和失败重试怎么做,多轮对话里怎么防止模型乱调工具。
- 推理成本优化:上下文越来越长怎么控制 token 成本,有没有做 prompt 缓存或分级模型路由。
- 手撕算法:给一个字符串数组,要求按字符出现频率对字符重新排序,相同频率的字符按字典序排列,返回重排后的字符串。本质是哈希计数 + 自定义排序,注意用优先队列或直接排序时的比较器写法,边界是空串和全同频字符。
项目深挖
简历上写了一个基于 RAG 的企业知识库问答,面试官几乎全程围着这个问,问得很细,不是听你讲架构,而是抠决策点。
追问一:文档切分为什么用固定长度 + 重叠,而不是按语义切?
参考回答方向:先承认固定长度切分是工程折中,优点是实现简单、chunk 大小可控、对 embedding 模型友好;缺点是会切断语义单元,导致检索到的 chunk 上下文不完整。然后说明自己做过什么补偿——比如重叠窗口设为 chunk 的 15%~20%,或者在切分前先按标题层级做一次粗分,再在段内做定长切分。如果被追问"为什么不直接上语义切分",要能说出语义切分的代价:需要额外模型推理、切分粒度不稳定、离线构建成本高,在文档量大且更新频繁的场景不划算。关键是把"我为什么这么选"和"这个选择的代价是什么"都讲清楚。
追问二:召回率你怎么评估的?有没有量化指标?
参考回答方向:这是最容易露馅的问题。要说清楚评估集怎么来——人工标注一批 query 对应的正确 chunk,或者用 LLM 生成问答对再反向定位来源。指标上,检索阶段看 Recall@k 和 MRR,端到端看答案的忠实度和正确率。如果没做过严格评估,就诚实说当前是用人工抽检 + badcase 归因,并说明下一步打算引入 ragas 之类的框架做自动化评估。不要硬编数字,面试官会顺着问评估集规模和标注一致性。
追问三:多轮对话里上下文怎么管理?token 超了怎么办?
参考回答方向:分层讲。短期用滑动窗口保留最近 N 轮;中期对历史对话做摘要压缩,把摘要和最近几轮一起喂给模型;长期把关键信息抽成结构化字段存起来,需要时再注入。token 超限时优先丢低价值内容——寒暄、已完成的工具调用中间结果、重复信息。可以补一句成本视角:摘要本身也要花 token,所以摘要触发频率和压缩比要权衡,不是越频繁越好。
准备建议
- 八股不要背结论,要背因果链。比如缓存穿透,不要只答"用布隆过滤器",要能说清楚它拦的是一定不存在的 key、误判会导致什么、误判率怎么调。面试官顺着问一层就露底了。MySQL 部分重点准备索引失效场景和 explain 关键字段,Redis 重点准备持久化、过期策略和分布式锁。
- 把 RAG 项目拆成决策点清单。切分、embedding 模型选型、向量库选型、召回策略、rerank、评估,每个点准备"我选了什么 / 为什么 / 代价是什么 / 如果重做会怎么改"。面试官问项目不是听流程,是看你有没有独立判断。没有量化数据就准备 badcase 案例,讲清楚一个具体问题怎么定位怎么修的。
- 算法保持手感,重点练排序和哈希类。暑期实习手撕难度一般在中档,但要求一次写对、边界清楚。每天一到两道,写的时候刻意练比较器、边界条件、复杂度口述。Go 的话把 sort.Slice 的写法练熟,Java 把 Comparator 和优先队列练熟。
整体节奏是八股占三成、项目占五成、算法占两成,项目是拉开差距的地方。一面通过,三天后约了二面。
想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。