面试面经 · 虾皮
【虾皮】【大模型开发】【暑期实习HR面】面经(八股+大模型项目+手撕)
海外一年制硕士,投递虾皮大模型开发暑期实习,HR 面约 30 分钟,全程围绕简历项目、基础八股和一道算法题展开,整体节奏偏快,面试官会顺着回答继续追问。
题目摘要
- Go 语言基础:Go 的 slice 底层结构是什么?扩容机制是怎样的?
append在什么情况下会引发底层数组复制?channel 的底层实现和select的随机性是怎么保证的? - MySQL / Redis 八股:MySQL 的索引为什么用 B+ 树而不是 B 树或哈希?聚簇索引和非聚簇索引在回表上的区别?Redis 的持久化 RDB 和 AOF 各自适用场景,缓存穿透、击穿、雪崩分别怎么处理?
- 大模型项目深挖:你做的 RAG 系统里,文档切分策略是怎么定的?检索召回率低的时候怎么排查?有没有做过 rerank?Function Calling 的场景下,模型输出格式不稳定怎么兜底?
- 上下文管理与推理成本优化:多轮对话里上下文超长怎么处理?有没有做过 token 预算控制、摘要压缩或分层记忆?推理成本这块,你从哪些维度做过优化(batch、量化、缓存、prompt 精简)?
- 手撕算法题:给定一个整数数组和一个目标值 target,找出数组中和为 target 的所有不重复二元组(LeetCode 1 的变体,要求去重)。关键思路:先排序,再用双指针从两端向中间收缩,遇到重复元素跳过;时间复杂度 O(n log n),空间复杂度 O(1)(不计结果集)。
- 实习动机与稳定性:为什么选虾皮?暑期实习能保证多久?后续是否有转正或秋招继续投递的打算?
项目深挖
追问一:RAG 检索效果不好,你怎么定位是切分问题还是 embedding 问题?
参考回答方向:先做分层排查。第一步看召回内容本身是否相关,如果召回的 chunk 里根本不含答案,那是检索层问题;如果含答案但模型没答对,那是生成层问题。检索层再拆:切分粒度太粗会导致语义稀释,太细会丢上下文,可以对比固定长度切分、按标题切分、按语义切分的效果。embedding 层面可以看相似度分布,如果 top-k 分数普遍偏低且区分度差,说明 embedding 模型和领域语料不匹配,考虑换模型或加领域微调。最后用 rerank 做二次排序,把 top-50 缩到 top-5 再喂给模型。
追问二:Function Calling 里模型返回的 JSON 格式不对,线上怎么处理?
参考回答方向:分三层兜底。第一层是 prompt 约束,明确 schema 并给 few-shot 示例;第二层是解析层做容错,比如用正则提取 JSON 片段、补全缺失括号、对字段做类型校验;第三层是重试机制,解析失败时把错误信息回填给模型让它重新生成,设置最大重试次数避免死循环。如果用的是支持 structured output 的模型,优先走原生能力,减少后处理成本。线上还要打点监控解析失败率,超过阈值告警。
追问三:多轮对话上下文越来越长,推理成本怎么控?
参考回答方向:几个手段组合用。一是滑动窗口加摘要,保留最近 N 轮原文,更早的对话压缩成摘要;二是分层记忆,把用户偏好、任务状态等结构化信息单独存,不占 token;三是 prompt 精简,去掉冗余的系统提示和重复示例;四是缓存,对相同或相似前缀用 KV Cache 或语义缓存命中。成本上还要看模型选型,简单意图走小模型,复杂推理才走大模型,做路由分流。
准备建议
- 八股要能落到项目里:不要只背 B+ 树和 Redis 持久化的定义,准备一个「我在项目里怎么用到」的例子。比如 RAG 的向量库选型可以对比 Redis 和专用向量库的取舍,MySQL 索引优化可以结合你存对话历史的表结构讲。
- 项目准备两套讲法:一套 2 分钟版本讲清楚背景、方案、结果;一套深挖版本,针对切分、召回、rerank、成本、兜底各准备一个具体数字或对比实验。面试官一定会问「你怎么知道这个方案更好」,提前想好评估指标。
- 算法题限时练手:HR 面手撕通常不难,但要求写完整、能跑通。重点练双指针、哈希、滑动窗口、二叉树遍历这几类,每道题控制在 10 分钟内写完并说清复杂度。写完主动跑一两个边界用例,比如空数组、重复元素。
一面通过,3 天后约了二面。
想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。