NiceOffer

面试面经 · 京东

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

京东面经Agent 开发实习

京东 Agent 开发 暑期实习二面面经

背景: 海外一年制硕士,主修计算机,简历上有一段基于大模型的 RAG 问答系统项目和一段 Go 微服务实习。

题目摘要

  1. Go 并发模型与内存可见性:Goroutine 调度、Channel 通信与 Mutex 的取舍,以及 sync.Map 的适用场景。
  2. MySQL 索引失效与事务隔离级别:联合索引最左前缀原则的失效条件、MVCC 在 RR 级别下如何解决幻读。
  3. Redis 缓存一致性:Cache Aside 模式下,先删缓存还是先更新数据库?如何用延迟双删或 binlog 订阅保证最终一致性。
  4. RAG 项目深挖:知识库切分策略、Embedding 模型选择、检索召回率优化、以及大模型幻觉的缓解手段。
  5. Function Calling 与上下文管理:如何设计 Agent 的工具调用协议,以及当工具返回结果过长时如何压缩上下文。
  6. 手撕算法: 题目为「合并区间」(LeetCode 56 变体),输入乱序区间,输出合并后的区间列表。

项目深挖

面试官全程围绕简历上的 RAG 项目发问,没有问任何无关的泛泛而谈。以下是三个关键追问及参考回答方向:

追问 1:你提到用 BGE 模型做 Embedding,为什么不用 OpenAI 的 text-embedding-3-small

参考回答方向:从成本、隐私、效果三个维度展开。BGE 是开源模型,可以本地部署,避免了敏感数据外泄的风险;在中文检索任务上,BGE-large 的 C-MTEB 榜单表现优于同尺寸的 OpenAI 模型,且微调成本低。如果面试官追问“有没有做过效果对比”,可以补充:在自建的业务数据集上,BGE 的 Recall@10 比 OpenAI 模型高出约 4 个百分点,但 OpenAI 模型在长文本(>512 tokens)上的表现更好,因此最终采用分段检索 + BGE 的方案。

追问 2:你的 RAG 系统在处理多轮对话时,如何避免重复检索或上下文丢失?

参考回答方向:这是一个典型的上下文管理问题。我的方案是维护一个滑动窗口,只保留最近 N 轮对话,并利用 LLM 对当前问题做一次 Query Rewrite(改写),将指代消解和省略补充进去,再送入检索器。同时,将历史检索到的文档 ID 存储在 Redis 中,如果改写后的 Query 与历史 Query 的语义相似度超过 0.9,直接复用之前的检索结果,减少重复调用 Embedding 接口的延迟和成本。

追问 3:你如何评估 RAG 系统的检索质量?有没有做端到端的评测?

参考回答方向:分两层。第一层是检索层,用 Recall@K 和 MRR 指标,构建了一个 200 条带标注的测试集。第二层是生成层,用 LLM-as-a-Judge 的方式,让 GPT-4 对回答的忠实度和相关性打分,同时人工抽检 30% 的结果做一致性校验。这里可以主动提一句“生成长度约束”,因为如果不限制输出长度,LLM 容易产生冗长但低信息密度的回答,影响用户体验。

手撕算法详解

题目:给定一个区间的集合 intervals,其中 intervals[i] = [start_i, end_i],合并所有重叠的区间,并返回不重叠的区间数组。

关键思路:先按区间起点升序排序,然后遍历。维护一个当前合并区间的 [start, end],如果下一个区间的 start <= 当前 end,则更新 end = max(end, next_end);否则将当前区间加入结果集,并更新为下一个区间。

边界条件:空数组直接返回空;单个区间直接返回自身;注意区间可能为 [1,4][4,5],这种情况属于重叠(因为 4 <= 4)。

复杂度:排序 O(n log n),遍历 O(n),总时间复杂度 O(n log n),空间复杂度 O(n)(存储结果)。

准备建议

  1. Go 并发题必刷:京东后端大量使用 Go,重点准备 Channel 与 Mutex 的区别、Goroutine 泄漏场景(如 select 中没有 default 导致阻塞)、以及 sync.Pool 的作用。建议手写一个「生产者-消费者」模型,并用 go test -race 验证数据竞争。
  2. RAG 项目准备一张「数据流图」:面试官深挖项目时,会顺着你的回答不断追问。建议提前画清楚从文档加载、切分、Embedding、向量检索、重排到生成的完整链路,并标注每一步的耗时占比和优化点。例如,切分 chunk size 从 512 调整到 256 后,Recall@10 提升了 3 个百分点,但存储成本增加了 20%,这种具体的 trade-off 数据比空谈理论更有说服力。
  3. 算法题限时训练:京东面试的手撕题难度中等,但要求一次写对。建议在 LeetCode 上按「区间问题」「双指针」「滑动窗口」三个标签各刷 10 道题,并刻意练习在 15 分钟内完成从读题到 AC 的全流程。面试时先讲思路,再动手写,写完主动跑两个测试用例(包括边界情况)。

结果反馈

二面结束后约 3 天收到 HR 电话,通知面试通过,并预约了约一周后的三面(主管面)。整体感受是京东的面试官非常务实,对项目细节的追问密度高,但不会故意刁难,准备充分的话可以平稳通过。

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