NiceOffer

面试面经 · 网易

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

网易面经大模型开发实习

网易 大模型开发 暑期实习三面

海外一年制硕士,投递的是网易伏羲大模型应用方向,三面是技术终面,面试官是部门技术负责人,全程一小时,节奏紧凑,没有废话。

题目摘要

  1. Go 语言:goroutine 与 channel 底层实现,GMP 调度模型中的抢占机制
  2. MySQL/Redis:MVCC 原理与隔离级别的关系,Redis 持久化策略对性能的影响
  3. RAG 项目深挖:检索质量优化、上下文窗口管理、推理成本控制
  4. Function Calling:工具调用的容错与多轮对话状态维护
  5. 手撕算法:LeetCode 原题变种——「在 D 天内送达包裹的能力」(LC 1011),二分答案 + 贪心校验

项目深挖

面试官对简历上的 RAG 项目问得极细,明显是做过功课的,不是泛泛而谈。

追问一:你提到用混合检索提升召回率,具体怎么做的? bn(面试官原话,下同)

参考方向:先说混合检索的两种常见组合——BM25+向量检索、或者多路向量检索(如不同 embedding 模型)。重点讲清楚为什么需要混合:向量检索擅长语义匹配但容易漏掉关键词精确匹配,BM25 正好互补。然后给出具体实现:如何做 score 归一化(如 min-max、z-score),权重如何调(我用的网格搜索,在验证集上找最优权重比)。最后补充一个细节——混合检索的延迟开销,怎么用并发请求或缓存来缓解。

追问二:如果用户问的问题在知识库中找不到答案,你的系统怎么处理? bn

参考方向:这里考察的是对 RAG 局限性的认知。我答了两层:第一层是检索侧,设置相似度阈值,低于阈值直接走 fallback 逻辑,返回「知识库中暂无相关信息」而不是硬编答案;第二层是生成侧,用 prompt 约束模型在不确定时明确说「不知道」,同时可以加一个意图识别模块,判断问题是否在知识库覆盖范围内。面试官追问了阈值怎么定,我说用人工标注的难例集来校准,而不是拍脑袋设一个固定值。

追问三:Function Calling 在你们的 Agent 里是怎么实现的?多轮调用怎么管理上下文? bn

参考方向:先讲清楚 Function Calling 的触发机制——模型根据用户 query 和 function description 决定是否调用工具,这里有个关键点是 function description 要写得足够清晰,否则模型会乱调用。然后讲多轮调用的状态管理:我用的是一个全局 context 对象,记录每次调用的入参和返回值,在下一轮生成时拼接到 system prompt 里。面试官追问了「如果工具调用失败怎么办」,我答了重试机制(最多 2 次)+ 降级策略(失败后把错误信息返回给模型,让模型决定是换一种方式调用还是直接回复用户)。

准备建议

  1. 项目细节要能闭环:不要只准备「我做了什么」,要准备「为什么这么做」「有没有对比过其他方案」「效果怎么量化」。面试官问得最深的往往是数据层面的问题,比如「你用了混合检索,具体提升了几个点?怎么评估的?」——提前准备好这些数字,哪怕是实验阶段的结论也行。
  1. 手撕算法刷透二分答案类题目:这次考的 LC 1011 本质是「最小值最大化」问题,属于二分答案的经典题型。建议把 LC 875(爱吃香蕉的珂珂)、LC 410(分割数组的最大值)、LC 1482(制作 m 束花所需的最少天数)都刷一遍,掌握「二分答案 + 贪心校验」的套路。大模型岗位的算法题不会太难,但边界条件要写对,比如二分循环条件用 left < right 还是 <=,校验函数里的计数逻辑。
  1. Go 语言八股要背到源码级别:网易这边 Go 用得比较多,面试官直接问了 GMP 模型的抢占机制,这是 Go 1.14 之后引入的基于信号的异步抢占。建议把「goroutine 生命周期」「channel 的 send/recv 阻塞机制」「sync.Pool 的应用场景」都过一遍。如果简历上写的是 Java,那就重点准备 JVM 内存模型和 CMS/G1 收集器的区别,但 Go 的优先级更高。

结果反馈

三面结束当晚收到 HR 邮件,通过,约了隔周的 HR 面。

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