NiceOffer

面试面经 · 网易

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

网易面经大模型开发实习

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

背景:海外一年制硕士,主攻 NLP 与 LLM 应用,一段中小厂大模型实习。

题目摘要

  1. Go 语言基础:GMP 模型简述、channel 与 mutex 的适用场景、内存逃逸分析。
  2. MySQL/Redis 八股:MVCC 实现原理、最左前缀法则、Redis 持久化机制对比(RDB vs AOF)、缓存穿透与布隆过滤器。
  3. RAG 项目深挖:混合检索重排策略、Function Calling 的边界处理、上下文窗口管理、推理成本优化措施。
  4. 手撕算法:实现一个带过期时间的 LRU Cache(get/put 均 O(1)),要求过期 key 在访问时惰性删除,并考虑内存回收。

项目深挖

面试官全程围绕简历中的 RAG 问答项目展开,追问节奏快,且不满足于表面描述。

追问一:你的混合检索里,BM25 和向量检索的结果是怎么融合的?为什么不用 RRF?

参考回答方向:先说明基线方案是 RRF(倒数排名融合),但线上指标显示 RRF 对稀疏向量和稠密向量的分数分布不敏感,导致头部结果被某一路检索主导。后来改为 score 归一化 + 加权求和,权重通过线下 dev set 网格搜索确定。同时补充了 RRF 失效的具体 case(如查询词含专有名词时 BM25 命中但向量召回漂移),并说明最终方案在 Recall@5 上提升了约 3 个点。关键是要让面试官看到你对不同融合方法的优劣有实际对比认知,而非背书。

追问二:Function Calling 场景下,模型幻觉参数名或返回非法 JSON 怎么处理?

参考方向:先说两层防线——第一层是 prompt 内嵌入 JSON Schema 示例并强制 few-shot 展示合法/非法输出对比;第二层是代码侧增加 schema 校验与自动修复(如括号补全、类型强转),校验失败时触发模型自纠错(将错误信息回传给模型让其重新生成)。同时提及兜底策略:若两次修复仍失败,则返回预设的 fallback 意图,避免链路卡死。面试官可能会追问修复成本,需要给出单次自纠错的额外 token 消耗与延迟增量数据。

追问三:你说优化了推理成本,具体怎么做的?

参考方向:从三个层面展开——第一,prompt 压缩(摘要历史对话 + 截断检索片段)减少输入 token;第二,模型路由(简单意图走小模型,复杂推理走大模型);第三,缓存策略(对相同或相似 query 的检索结果与生成结果做语义缓存)。面试官对缓存命中率的计算方式很敏感,建议提前准备好线上命中率数据与缓存 key 的相似度阈值设置依据。

手撕算法:带过期时间的 LRU Cache

题意:设计一个支持 get(key)put(key, value, ttl) 的数据结构,ttl 为过期时间(毫秒)。get 时若 key 已过期视为未命中并删除;put 时若 key 存在则更新值并重置过期时间,若容量满则淘汰最久未访问的 key。

关键思路

  • 数据结构采用 HashMap + 双向链表(Java 可用 LinkedHashMap 简化,但需手写链表以展示功底)。
  • 节点存储 key, value, expireAt, prev, next
  • get 时先判断 expireAt > now,过期则删除节点并返回 -1;未过期则移动到链表头部。
  • put 时若 key 存在,更新 value 与 expireAt 并移到头部;不存在则创建新节点插入头部,若超容量则删除尾部节点。
  • 注意:过期 key 的清理采用惰性删除,不需要后台线程,但需在 getput 时顺带检查(防止过期节点堆积)。若要展示工程意识,可额外提一句:当过期节点占比超过阈值时触发全表扫描清理,避免内存泄漏。

面试官会追问为什么用双向链表而非数组,以及 get 时为什么不主动扫描全部过期节点——需要答出时间复杂度的权衡。

准备建议

  1. 把项目里的每一个技术选型都准备成"为什么不用 X"的对比题。面试官问法往往是从你提到的方案反推你没做的方案,提前列出每个模块的备选方案并写好对比结论(性能数据、开发成本、维护难度),项目深挖环节会非常稳。
  2. 手写代码前先和面试官确认输入输出与边界条件。这道 LRU 变体题坑点在于 ttl 的粒度(秒还是毫秒)、过期 key 是否参与容量计算、put 已过期 key 时算更新还是新插入。先花 30 秒澄清需求,能体现沟通能力,且避免写完后被 corner case 卡住。
  3. Go 语言基础背熟 GMP 与 channel 的底层实现,不要只停留在概念层面。能画出去调度流程、说出 channelrecvqsendq 结构、解释 mutex 的饥饿模式触发条件,基本就能过关。MySQL 与 Redis 八股范围固定,但建议结合项目讲(如"项目里为什么用 Redis 做缓存而非直接查 MySQL"),比单纯背八股更有区分度。

结果反馈

一面通过后约 5 天收到二面通知,反问环节问了下团队业务方向与实习生培养机制,面试官表示暑期名额有限但表现好的会优先考虑转正。整体体验流程规范,面试官会主动引导思路,氛围不压抑,但追问密度高,需要对自己项目中的每个细节负责。

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