京东 后端开发岗面经合集 01:Agent 日志排查、JVM 调优与中间件 11 场真题
- 轮次
- 多轮面试合集
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
面经 01(2026 年 8 月 20 日)
- 你对未来的工作和职业生涯有什么预期?想做哪方面的工作?
- 能讲一个你做过、对你来说比较有代表性的项目吗?
- 项目 1 里,有自己的知识库吗?是怎么构建的?
- 项目 2 系统能做到问题发现,还是主要做问题排查?
- 你在这个项目中承担的是什么角色?
- 你觉得这个 Agent 的难点在哪里?问题排查的场景很多,哪些问题比较难解决?
- 你们会去下游看日志,除了日志之外还会看哪些信息?
- 这个业务属于什么类型?告警是系统性告警,还是也会涉及业务告警?
- 如果系统的请求量和告警量非常大,比如每天几百万条、每分钟上千甚至上万条告警,如何在大量相似日志中,根据一条告警精确定位对应的日志,避免通过时间范围检索出大量无关内容?
- 你们会先把告警做结构化处理,再去检索对应位置吗?
- 结构化处理时,你们会提取哪些关键信息?
- 你们后端的服务是微服务、多服务系统,还是单体服务?
- 既然这个系统是单体服务,是不是只需要收集这个系统的日志就够了?
- 除了日志之外,你们还会做代码定位吗?具体是怎么做的?
- 你们是怎么构建代码知识库的?
- 你了解过 Code Graph 这类开源项目吗?
- 你们是通过让大模型基于代码生成描述,再把这些描述存入知识库吗?
- 这个描述是针对整个代码库生成的,还是针对某个具体逻辑生成的?
- 你是一轮一轮和大模型交互,让它这样生成的吗?
面经 02(2026 年 7 月 24 日)
- 并发集合,Concurrent 里的 CAS 机制是什么?
- 无锁并发不可靠的地方是什么?
- 线程池有用到过吗?(结合实习经历描述)
- 用哪种线程池,用的是 CountDownLatch 还是 Barrier?线程池启动的时候是怎么启动的?
- 想问多个线程去拉取这些数据,如何判断这几个线程已经执行完了?中间某个线程出现异常了,又是怎么处理的?如何验证所拉取的数据是和数据源一致的?
- 结合 JVM 参数和 MAT 做内存参数排查,如何做的?在实际项目中有遇到过内存溢出问题吗?
- 问主服务宕掉了,备份服务如何接管主服务的数据,保证这部分数据的一致性?
- 为什么这个东西要做成备份服务,而不将两个服务一起并行运作?
- 你这边涉及到这个实习项目的时候,SQL 这种数据库是怎么使用的,涉及哪些场景?SQL 调优有没有遇到?
- 为什么分库分表这里,分完表后为什么是全量查询慢,原因是什么,如何优化这一缺点?为什么没有选择把这些数据放在 ES 或者 MongoDB 里?
- 都是什么字段加上了索引?对于用户 IP 地址这类字段,有没有办法把它变成数据存储,加快搜索效率?
- 插了一条八股,B+ 树是一颗什么样的树?
- 这里看你写到了 AOP 编程,这里的 AOP 主要做了什么事情?
- AOP 拦截在哪里拦,拦截到的数据又存在了哪里?
- AOP 通过 Java 的哪种技术实现?
- RAG 是一种什么技术框架,做了什么?
- 提供这个智能体检索文件这一功能,主要是给用户使用还是给管理者维护?
- 如何识别用户想查找文件这一个意图,做了些什么?
- 团队对应更看重哪些技术深度?
- 后续流程大概怎样?
面经 03(2026 年 7 月 10 日)
- 闲聊,之前在哪实习,实习多久?
- 介绍你的实习。
- 向量知识库遇到不同格式的文件怎么处理?
- 文本拆分策略有哪些?
- 简历上的项目里,你遇到最大的困难?
- 向量嵌入是做什么的?
- 用的什么大模型?
- 计算距离有哪几种方式?
- 多个 prompt 怎么管理的?
- 缓存击穿的解决方法?
- 有关悲观锁,加在哪,代码还是数据库?
- Kafka 的原理?
- Kafka 中 Java 的什么方法保证顺序性?
- 线程池参数设置?
- 核心参数设置的公式?
- 有关缓存线程池的使用。
- 有关索引,B+ 树对于 B 树的优势,到底为什么是用 B+ 树?
- 操作系统的文件管理?
- Git 多版本管理遇到冲突怎么解决?
- 如果同一个文件都进行了操作且逻辑不同,怎么解决?
- 拷打项目,定位是什么?
- 项目做了、负责的什么?
- 核心创新点是什么?
- 用户痛点是什么,为什么要做这个?
- 为什么要来我们公司?
面经 04(2026 年 6 月 16 日)
- 对实习工作中有哪些棘手的问题,怎么排查解决?
- 网络不通怎么解决?
- DNS 的作用以及流程?
- 域名中间的点号是干什么用的?
- 根域名服务器在哪里?
- 什么场景用 UDP?
- 什么是 VXLAN?
- Docker 最低哪个版本?
- Linux 安装和升级驱动如何操作?
- Linux 防火墙的原理以及四表五链?
- 代码写的多吗?了解 Python 吗?
- K8S 的三个主要组件?
- Docker 如何查看镜像?
- 如何清除不用的镜像?
- 桌面运维问题,电脑卡怎么清理?
- C 盘怎么清理?
- Ansible 如何编写针对多个不同平台的 playbook?
- 在 Linux 上搭建 SFTP 服务器,如何限制访问某目录?
- top 怎么查看 CPU?
- MySQL 的集群状态?
- 普罗米修斯了解吗?工作原理?
- 一万台机器如何自动化管理?
- K8S、Docker、KVM 的优缺点?
- 八个小球,一个超重,一个天平。如何最少次数找出?
面经 05(2026 年 5 月 8 日)
- 公司目前要实现一个 AI 换脸的工作,如果是我该怎么做?
- 同事想法和你不一致你该怎么做?
- Spring 中事务的实现方法?
- @Transactional 底层实现原理?
- ThreadLocal 底层实现原理?
- 引用的类型有哪些?
- 弱引用什么时候被 GC?
- 介绍一下单例模式。
- 单例模式中用 volatile 的原因?
- 锁类不锁对象的原因?
- 看没看过 Spring AI 的源码,介绍一下?
- MCP 的底层实现原理?
面经 07(2026 年 5 月 3 日)
- 你做的 RAG 知识库,具体业务场景是什么?整体是怎么搭建起来的?
- 项目一开始存在大事务问题,这个问题具体怎么优化的?
- 这个知识库支持什么内容形态?只有图文吗?图片是怎么处理的?
- 知识库面向的业务是什么?图文混合内容是怎么存储和还原的?
- 知识库更新怎么做?怎么保证内容实时保鲜?
- 这个项目里你遇到过哪些挑战和技术卡点?
- 向量库选型时考虑过哪些方案?为什么最终选择 Milvus?抛开公司基建,会从哪些维度选型?
- 简历里提到吞吐、检索性能有提升,提升具体来自哪里?你做了哪些优化动作?
- 当前链路访问量、文档量级、线上运行情况如何?灰度切量到什么程度了?
- 线上有没有完整监控?链路出问题如何及时发现告警?
- 灰度切流过程中实际暴露过哪些线上问题?怎么解决的?
- 你最近参与的个人用户向、AI Coding 相关产品,目前做到什么阶段?你负责哪部分?
- 在这些项目中,你个人最大的技术收获是什么?
- 你理解 Milvus 底层原理,这些原理在实际落地中怎么指导你的技术决策?
- ES 深翻页问题有没有遇到过?背后原理和瓶颈怎么理解?
- 有没有做过高并发场景?大促、秒杀这类高并发场景一般怎么设计处理?
- 平时开发会用设计模式吗?在实际项目里是怎么落地使用的?
面经 08(2026 年 4 月 28 日)
- AI 方面有哪些实践?
- 固定次数窗口的实现思路(Redis list:LPUSH 推入 + LTRIM 修剪)。
- 编码过程当中有没有用过一些设计模式?
- 为什么会有设计模式呢?设计模式主要是为了解决什么问题呢?
- 面向对象设计原则?
- 设计一个秒杀系统,有什么思路?
- 为什么在 agent 方面实践不多?精力都放在哪里了?
- 你学新技术一般是看视频多呀?还是看官网多?还是看博客多?
- 如果让你去学习 AI 应用开发,你怎么学?
- 这个实习过程当中,你觉得你最大收获是什么呀?
面经 09(2026 年 4 月 26 日)
- 八股:慢 SQL 怎么检测、优化?
- 结合项目:如果用 AI 去检测慢 SQL,你会怎么做?
- 你要设计 skill 的话,会放哪些内容?
面经 10(2026 年 4 月 21 日)
- 项目里最具备挑战的部分是什么?
- 八股:慢 SQL 怎么检测、优化?
- 结合项目:如果用 AI 去检测慢 SQL,你会怎么做?
- 你要设计 skill 的话,会放哪些内容?
- 询问未来的职业规划。
- 你认为你会被 AI 取代吗?
面经 11(2026 年 4 月 18 日)
- 介绍之前实习的业务。
- 比如你在重构一些历史性的业务,这个时候新的需求来了,遇到这种情况了吗?怎么处理?
- 你简历上其他的项目涉及到多人协作吗?是从哪里找的这些项目?
- 讲一讲你的 agent 项目。
- 讲一下项目中 RAG 的拆分、存储、使用逻辑。
- 项目用了 Spring AI 框架,讲一下这个框架的整体结构?
- 当时为什么选择这个框架?
- 了解非 Java 的 agent 开发框架吗?
- 我看你的这个 agent 项目各层级都搭建好了,你认为你的这个项目还缺什么?
- 讲一下你的 agent 上下文怎么做的?
- 你了解长期记忆、中期记忆和短期记忆吗?
- 你这个项目用的什么大模型?
- 其他的大模型你用过或者调研过?
- 你平常的时候用什么大模型或者 IDE 工具辅助开发,AI 辅助编程用什么?
- 你用刚刚提的大模型或者 IDE 写了哪些代码?
- 你平时用 AI 编程的时候,你感觉它的代码质量高不高?你觉得有什么办法提升吗?
- 我来问一下,就是你来实习,想要达到一个什么样的目标?
- 实际上我们对实习的同学有一些产出要求,来了后要承接一些真实落地项目,按照你的理解,以什么方式最快能上手,然后做需求?
《参考解析》
-
告警到日志的精确定位是面经 01 的核心,要答成一条链路:先说清难点——量级大(每天几百万条、每分钟上万条告警)、日志高度相似(同一段代码不同请求参数)、按时间范围检索必然泛化。可行的做法是四步:先把告警结构化(抽出服务名、实例、接口或链路 ID、异常类型、错误码、机房、时间戳等可检索维度),再用 trace ID 或请求 ID 这类唯一标识把告警与日志串起来,检索时用结构化字段做前置过滤而不是全文搜索,最后把结果收敛到「哪个服务、哪个方法、哪次调用」。如果链路里没有 trace ID,就要退一步从日志模板(把变量替换掉的日志骨架)做聚类归一,用模板加参数定位,而不是靠关键字。答题时主动提一句结构化字段的取舍:字段太多写入成本高,太少过滤不掉噪声,通常按「定位一次故障真正用到的维度」来定。
-
代码知识库这类追问答什么:面试官连问「怎么构建、描述是整库还是单个逻辑、是不是一轮轮交互」,本质是在考你有没有真的落地过。可讲的路径是:先用 AST 解析或静态分析把代码拆成函数、类、接口粒度的块,再按块让模型生成结构化描述(功能、输入输出、依赖、异常),与向量一起入库;检索时先按问题定位到模块,再拉取相关的调用链上下文。规模大时必须做增量更新(按 git 提交或文件哈希只重算变化的块),否则全量重算既贵又慢。Code Graph 这类开源方案的思路是用代码图(调用关系、依赖关系)补足纯向量检索丢结构的问题,被问到时可以对比:向量检索擅长语义相近,图检索擅长「谁调用了谁」,好的方案是两者混合。
-
并发与线程池这组要答细节:CAS 是「比较并交换」的原子指令,靠自旋重试实现无锁更新,问题是 ABA(值被改回原值导致判断失效,解法是加版本号)、自旋开销大、只能保证单个变量原子性。多线程拉数据这种场景,面试官会盯三件事:怎么等所有线程结束(CountDownLatch 一次性、CyclicBarrier 可循环复用、CompletableFuture.allOf 更贴合组合场景)、某个线程异常怎么办(Future 的异常会被吞,必须显式 get 或加回调收集异常并决定是整体失败还是降级)、怎么校验数据与源一致(条数与校验和比对、按主键抽样回查、记录每批的拉取水位)。线程池的启动要交代核心参数、队列类型、拒绝策略与预热,自定义 ThreadFactory 命名线程是加分项。
-
JVM 内存排查要按流程讲:先拿到现象(OOM 类型、GC 日志里的 Full GC 频率与回收效果),再用 jstat、jmap 观察堆与对象分布,dump 后用 MAT 看支配树(Dominator Tree)找最大的保留集,重点区分是内存泄漏(老年代持续增长、GC 后不回落)还是内存不够(调参或扩机器)。常见诱因是集合持有大对象、缓存没有淘汰策略、ThreadLocal 未 remove、以及大文件一次读入内存。答题时把「改代码」和「调参数」分开说,先定位泄漏点再谈 -Xmx 之类的参数调整。
-
主备服务与一致性这题容易被追到底:主服务宕机后的接管方案要说清三件事——数据从哪来(共享存储、数据库、还是主服务同步过来的副本)、如何判断主真的挂了(心跳超时加重新选主,避免脑裂)、接管期间的数据一致性怎么保证(写请求的幂等、补偿对账、以及数据水位差)。被追问「为什么不做双活并行」时,答双活的代价在写冲突与路由复杂度上:同一份数据两个写入点必须有冲突解决策略,对账和回滚都更难;备份服务方案牺牲了切换时间换来简单正确,适合对 RTO 要求不极端的场景。这个回答能体现你理解「一致性、可用性、复杂度」的三角。
-
MySQL 与索引这几问都有标准答法:分库分表后全量查询慢,是因为跨分片要合并结果、排序分页都要在内存里做,且无法用单表索引;优化方向是避免全表扫描类需求(把清单类查询交给 ES 或做异步报表)、用基因法把关联查询收进同一分片、以及限制深分页。选不选 ES 或 MongoDB 要看需求——全文检索与聚合分析选 ES,文档型灵活 schema 选 MongoDB,强事务与关系约束还是留在 MySQL。B+ 树要讲清三件事:非叶子节点只存键、因此一页能放更多键、树更矮(减少磁盘 IO);叶子节点用链表相连,天然支持范围查询和排序;B 树则数据分散在所有节点上,范围查询要中序遍历、效率低。IP 这类字段做检索,可以把点分十进制转成整型存储(省空间、可比较、可做范围查询),或者存 IP 前缀再加索引。
-
Spring 与并发工具这几问是必背项:Spring 事务靠 AOP 代理加上 ThreadLocal 绑定连接实现,@Transactional 的失效场景(自调用不走代理、方法非 public、异常被吞、传播行为与多数据源)比原理更常被追问。ThreadLocal 底层是每个线程一份 ThreadLocalMap,key 是弱引用、value 是强引用,所以不 remove 会随线程存活造成泄漏。引用类型四级(强、软、弱、虚)要能区分回收时机。单例模式用 volatile 是为了禁止指令重排,保证「分配内存—初始化—赋值引用」的顺序不被破坏;「锁类不锁对象」对应类锁(Class 对象上的锁)与实例锁的区别,静态方法同步就是类锁。
-
RAG 知识库、Milvus 选型与 ES 深翻页:答「为什么这么选」而不是「选了什么」:知识库这组问题(内容形态、图文混合怎么存和还原、怎么保鲜)答的是工程完整性——图片通常存对象存储、库里只存引用和 OCR 或图注文本,更新靠增量索引加版本号,保鲜靠数据源变更事件或定时同步加缓存失效。向量库选型要给的维度是:数据规模与召回性能、过滤检索与元数据能力、索引类型与内存占用、水平扩展与运维成本、与现有基建的契合度、以及社区与商业支持。Milvus 的常见理由是大规模下的分布式架构与索引种类丰富,代价是运维组件多。ES 深翻页的瓶颈是每个分片都要取出 from+size 条再全局排序,页越深内存与网络开销越大,解法是 search_after(游标)或 scroll(离线导出),并说明为什么不能用 from+size 解决。
-
「用 AI 检测慢 SQL、设计 skill」是新的高频题型:慢 SQL 检测的标准链路是慢查询日志加 performance_schema、按执行时间与扫描行数筛出候选,再看执行计划(type、key、rows、Extra 里的 Using filesort 与 temporary),优化手段是补合适索引、改写 SQL 避免索引失效(函数包裹列、隐式类型转换、前导通配)、减少回表或大范围排序、以及拆分为分页或异步。让 AI 参与时的关键是别让它直接改线上——把慢 SQL、表结构与执行计划喂给模型,让它给出候选索引与改写方案,再用 explain 与影子库验证,最后人工审核上线。设计 skill 时值得放的内容:判定标准与阈值、可用的工具接口(explain、慢日志查询)、常见反模式清单、验证与回滚步骤。这个答法把「AI 用在哪一环、人管哪一环」讲清楚了,正是面试官想听的。
-
高并发与秒杀是收尾常客:回答按四层展开——前置(CDN 静态化、答题或验证码削峰、限流)、库存(Redis 预扣减加 Lua 保证原子、分段库存、防超卖)、下单(MQ 异步削峰、幂等去重、库存与订单的最终一致对账)、兜底(降级开关、熔断、超时与重试策略、监控告警)。面试官常追问「Redis 扣减成功但下单失败怎么办」,答案是补偿任务与预占库存的超时释放,并说明为什么不能用强一致两步提交来扛这个量级。