NiceOffer

面试面经 · 得物

【得物】【大模型开发】【暑期实习HR面】面经(八股+大模型项目+手撕)

得物面经大模型开发实习

得物 大模型开发 暑期实习 HR面经

背景:海外一年制硕士,投递得物大模型开发岗,HR面约 40 分钟,全程偏技术深度与项目落地细节,非传统 HR 行为面。

题目摘要

  1. 编程语言基础(Go):Go 的 goroutine 与 channel 底层实现,GMP 模型简述,如何避免 goroutine 泄漏。
  2. MySQL/Redis 八股:MySQL 索引失效场景,覆盖索引与回表区别;Redis 缓存穿透/击穿/雪崩的解决方案,以及 ZSET 底层跳表结构。
  3. 大模型项目深挖(RAG + Agent):项目中的 RAG 检索流程如何设计?文档切片策略、Embedding 模型选型、重排必要性。Agent 的 Function Calling 如何实现工具调用与结果校验。
  4. 推理成本优化:项目里如何降低 LLM 调用成本?具体到 prompt 压缩、缓存策略、模型蒸馏或量化手段。
  5. 手撕算法题题目:给定一个无序数组,找出所有和为 target 的三元组,返回不重复的三元组集合(LeetCode 15 三数之和)。关键思路:先排序,固定一个数,双指针从左右逼近;去重逻辑需在固定指针移动时跳过相同值,同时左右指针移动时也需跳过重复值。时间复杂度 O(n²),空间复杂度 O(1)(排序不计)。
  6. 场景题:如果用户在大模型对话中连续提问 10 次,如何管理上下文窗口?给出 token 预算分配策略。

项目深挖

追问 1:你的 RAG 项目里,文档切片为什么选 512 字符?换 256 或 1024 会有什么影响?

参考回答方向:512 是召回效果与检索精度的折中。256 切片更细,召回粒度更准,但容易截断语义,导致 Embedding 向量相似度下降;1024 切片保留上下文更完整,但检索时噪声更大,且超出部分模型对中间内容注意力衰减。实际测试过 3 种切片长度,512 在 Recall@5 上比 256 高 4%,比 1024 高 2%。另外,切片时采用 overlap 策略(重叠 50 字符)避免语义断裂。

追问 2:Function Calling 怎么保证模型调用的参数格式稳定?如果模型返回了非法 JSON 怎么办?

参考回答方向:使用 JSON Schema 严格约束参数,并在 system prompt 中给出工具说明和示例。模型偶尔返回非法 JSON,处理策略是:第一层用正则提取 JSON 块,第二层用 json.loads 失败后调用修复逻辑(如补全缺失括号),第三层兜底是让模型重新生成一次,并附加错误提示。另外,在工具返回结果后,会让模型基于真实结果生成最终回复,而不是直接透传工具输出,避免幻觉。

追问 3:你说用 prompt 压缩降低推理成本,具体怎么做的?

参考回答方向:分三层。第一层是历史对话摘要,每轮对话结束后用轻量模型生成摘要,替换原始对话;第二层是动态截断,按 token 重要性排序,保留与当前 query 相关性高的历史片段;第三层是缓存,对相同前缀的请求复用 KV cache,减少重复计算。实测成本降低约 35%,但摘要模型本身有额外开销,所以对短对话会直接跳过摘要步骤。

准备建议

  1. 项目准备按“指标 + 对比”结构:不要只说“我用了 RAG”,要能说出“对比了 BM25 和 Dense Retrieval,最终选择混合检索,Recall@5 从 68% 提到 79%”。面试官会顺着你的指标追问实验设置和失败原因,提前准备好 2-3 个迭代版本的故事线。
  1. Go 语言重点看并发与内存模型:得物后端以 Go 为主,实习岗大概率会问 goroutine 调度、channel 使用场景、slice/map 的底层结构。建议把《Go 语言圣经》并发章节过一遍,并手写一个 worker pool 练手。Java 方向同理,重点准备 JVM 内存分区和 GC 算法。
  1. 手撕题刷高频 + 限时训练:三数之和、LRU、反转链表、二叉树层序遍历这类题必须 15 分钟内 AC。面试时先讲思路再写代码,写完主动跑测试用例。如果时间紧张,优先刷 LeetCode Hot 100 中数组、链表、哈希表、双指针四类题。

结果反馈

一面通过,约 3 天后收到二面通知,整体面试节奏紧凑,技术问题占比超过 80%,建议后续面试者把重心放在项目细节和代码能力上。

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