面试面经 · Momenta
【Momenta】【大模型开发】【暑期实习一面】面经(八股+大模型项目+手撕)
Momenta 大模型开发 暑期实习一面
背景:海外一年制硕士,主攻 NLP,有一段中小厂大模型应用实习。
题目摘要
- Go 基础:goroutine 与 channel 的底层实现,GMP 模型简述,以及如何避免 goroutine 泄漏。
- MySQL/Redis:MySQL 隔离级别与 MVCC 原理;Redis 持久化机制对比(RDB vs AOF),以及缓存穿透/击穿/雪崩的解决方案。
- 大模型项目深挖:RAG 检索质量优化、Function Calling 的容错设计、上下文窗口管理策略、推理成本优化手段。
- 手撕算法:给定一个无序数组,求最长连续序列的长度(LeetCode 128 变体),要求 O(n) 时间。
项目深挖
面试官全程围绕简历上的 RAG 问答系统项目发问,没有一句闲聊。以下是几个印象深刻的追问:
追问 1:你的 RAG 系统检索质量差,具体怎么排查的?
参考方向:不要只说"换了 embedding 模型"。要分维度拆解——先看召回率(Top-K 是否覆盖正确答案),再看排序质量(重排序模型是否有效),最后看 chunk 切分粒度。我当时是发现长文档被截断导致信息丢失,改用滑动窗口 + 标题层级切分后,召回率提升了 12%。另外,混合检索(BM25 + 向量检索)对专有名词多的场景改善明显。
追问 2:Function Calling 如果模型返回了不存在的函数名或参数格式错误,你怎么处理?
参考方向:三层兜底。第一层是 JSON Schema 校验,格式不对直接触发重试;第二层是函数名模糊匹配,用编辑距离做相似度对齐;第三层是让模型自己决定——返回一个"无法调用"的特殊函数,由 Agent 根据上下文重新规划。面试官显然在意的是你有没有考虑过真实场景的鲁棒性,而不是只在理想数据集上跑通。
追问 3:上下文窗口有限,你怎么管理多轮对话中的历史信息?
参考方向:核心是"摘要 + 裁剪"双轨制。短期记忆用滑动窗口保留最近 N 轮原始消息,长期记忆用 LLM 定期生成摘要存入向量库。另外要区分系统指令、工具返回结果、用户消息的优先级——工具返回的大段 JSON 可以截断或只保留关键字段。成本优化上,可以将重复的前缀 prompt 缓存(如 Anthropic 的 prompt caching 思路),减少重复计费。
手撕算法:最长连续序列
题意:给定未排序的整数数组,找出数字连续的最长序列的长度。要求 O(n) 时间复杂度。
关键思路:用 HashSet 去重,遍历每个数时,只从"序列起点"开始向后查找——即当前数减 1 不在集合中时,才进入 while 循环计数。这样每个数最多被访问两次,整体 O(n)。注意边界:空数组返回 0,重复元素不影响结果。
面试官在写完后追问了"如果内存不够怎么办",暗示可以用外部排序或分桶,但没深入。
准备建议
- 八股别只背结论,要能画图。Go 的 GMP 模型、MySQL 的 MVCC 版本链,面试官会要求你手绘流程或口头推演。建议在纸上把 goroutine 调度、事务隔离级别的实现流程各画三遍。
- 项目深挖要准备"数据支撑"。每个优化点都带上量化指标(如检索召回率提升 X%、首 token 延迟降低 Y ms)。面试官对"感觉变快了"这种描述完全不买账。
- 算法题刷熟 LeetCode 前 150 题的热门考点。特别是哈希表、双指针、滑动窗口、二叉树遍历这几类,Momenta 的算法题倾向中等难度偏下,但要求解释复杂度推导过程。
结果反馈
一面通过,约 3 天后二面。整体体验:面试官技术深度足够,问题密度高,但全程对事不对人,答不上来会引导思考,属于"压力但不压迫"的风格。
想系统备战大厂大模型/Agent 开发?NiceOffer 提供 SDE+LLM 双轨 1v1 陪跑,合同保底 40w 年薪,文末扫码咨询。