Java 大厂面试实录:Spring Boot + Kafka + Redis + RAG 场景下的 3 轮高频追问

发布时间:2026/8/16 14:50:49
Java 大厂面试实录:Spring Boot + Kafka + Redis + RAG 场景下的 3 轮高频追问 Java 大厂面试实录Spring Boot Kafka Redis RAG 场景下的 3 轮高频追问场景互联网大厂 Java 求职面试。面试官严肃候选人是外号“燕双非”的搞笑水货程序员。第一轮电商大促的下单与库存链路面试官我们先从一个电商场景开始。大促活动里下单接口峰值很高你会怎么设计 Spring Boot 接口的整体链路燕双非嗯……先用 Spring Boot 起个服务然后做个限流前面再挂个 Nginx后面接数据库应该就能扛住了。面试官方向对但还不够完整。那如果库存扣减要避免超卖你会怎么结合 Redis 和数据库来做燕双非可以先把库存放 Redis用户下单先扣 Redis成功了再异步落库……大概就是这个意思。反正 Redis 很快嘛。面试官不错至少知道先快后慢。但异步落库会带来一致性问题你打算怎么处理消息重复、丢失和回滚燕双非这个……可以加个消息队列失败重试或者做个幂等吧。具体怎么幂等我再想想。面试官好至少方向上没跑偏。那订单创建成功后需要通知库存、积分、优惠券三个服务你会选 Kafka 还是 RabbitMQ为什么燕双非我觉得都行Kafka 听起来更适合“高并发”RabbitMQ 听起来更适合“兔子”……面试官……先别讲段子。大促链路里更关键的是吞吐、削峰、可追溯和顺序性。你要能讲清楚为什么选 Kafka以及如何保证消费者幂等。第二轮微服务治理、接口安全与可观测性面试官继续。现在订单服务要拆成多个微服务你会如何做服务治理比如服务发现、限流、熔断、降级。燕双非服务发现可以用 Spring Cloud限流和熔断也能配一些组件反正大家都这么做。面试官那如果你用 OpenFeign 调用远程服务怎么设计超时、重试和 fallback避免雪崩燕双非我会把超时设短一点失败了就重试重试不行就降级返回一个默认值。面试官思路还可以但重试不是越多越好。你需要考虑幂等、线程池隔离以及 Resilience4j 这种治理能力。那接口暴露给 App 和小程序认证你怎么做燕双非Spring Security 加 JWT 吧登录后发个 token后面都带着。面试官继续说JWT 放在 Header 里有什么优缺点如果要接入第三方登录或统一身份中心呢燕双非优点是无状态缺点是不好主动失效。第三方登录……应该可以接 OAuth2 或 Keycloak 之类的吧。面试官可以。最后一个问题你如何监控这条链路的性能瓶颈燕双非上 Prometheus 和 Grafana 看指标Spring Boot 里加 Micrometer再配日志和链路追踪……比如 Zipkin、Jaeger。面试官这次回答比前面稳一点。那你说说如果是线上慢请求你怎么定位到底是 DB、缓存、MQ 还是远程调用的问题燕双非先看链路追踪再看日志再看数据库慢查询缓存命中率和 MQ 堆积情况……大概这么排查。第三轮AI 检索增强与智能客服系统面试官现在公司要做一个智能客服系统接入企业文档问答。你会怎么设计一个 RAG 架构燕双非RAG 就是先把文档切块再向量化存到向量数据库里用户提问时做语义检索取相关内容给大模型生成答案。面试官不错概念基本正确。那如果企业文档很多怎么处理文档加载、切分、Embedding 选择和召回质量燕双非文档加载可以分批做切分得考虑段落语义Embedding 模型可以选 OpenAI 或 Ollama 的召回不好就调切块大小和检索策略。面试官继续。智能客服里会出现 AI 幻觉你怎么降低它燕双非嗯……可以让它别瞎说。技术上应该是尽量让它只基于检索到的内容回答必要时加提示词约束和答案引用。面试官最后一个问题如果这个系统要支持工具调用、复杂工作流和多轮会话记忆你会怎么做燕双非可以用 Agent 方案把工具调用标准化保存会话内存必要时让模型调用工单系统、订单系统、知识库系统。复杂工作流就拆成多个步骤让它一步一步来。面试官回答到这里为止吧。整体来看你对基础概念有一些了解但系统设计深度和落地细节还不够。你先回家等通知吧。问题详解逐题拆解业务场景与技术要点1. Spring Boot 下单链路怎么设计在电商大促中Spring Boot 常用于快速构建订单服务。核心思路是把链路拆成网关层限流、接口层校验、业务层创建订单、消息层异步通知、存储层持久化。接口设计要关注幂等、超时和降级。业务上可以把“创建订单”和“扣减库存”解耦订单主流程快速返回后续通过消息驱动库存、优惠券、积分等系统异步处理。这样既能提高吞吐也能降低用户等待时间。2. Redis 扣库存如何避免超卖常见做法是先在 Redis 中预扣库存再通过消息队列异步落库。关键点有三个Redis 预扣必须原子化通常用 Lua 脚本保证检查与扣减一体完成数据库最终扣减要做乐观锁或版本号控制消息消费必须幂等避免重复扣减。如果消息失败需要有补偿机制例如定时对账、失败重试、事务消息或本地消息表。3. Kafka 适合什么场景Kafka 更适合高吞吐、可回放、日志型事件分发场景。在订单成功后通知库存、营销、积分等多个下游服务时Kafka 的分区、消费者组和顺序性控制更有优势。面试中要讲清楚为什么不是所有场景都用 RabbitMQ。Kafka 强在吞吐和流式处理RabbitMQ 在灵活路由、低延迟和复杂确认机制上更常见。选型要基于业务特征而不是“谁更火”。4. 消费者如何保证幂等幂等可以通过业务唯一键、去重表、Redis SETNX、数据库唯一索引等方式实现。比如订单事件消息中携带订单号消费者先查询是否已处理未处理才执行库存扣减并记录处理结果。对于高并发场景优先考虑数据库唯一约束和分布式缓存结合以避免并发重复消费。5. 微服务治理怎么做典型方案包括服务发现、配置中心、负载均衡、熔断、限流、降级、重试和隔离。Spring Cloud 可快速集成这些能力OpenFeign 负责声明式调用Resilience4j 可实现熔断、限流和舱壁隔离。重点不是“堆组件”而是知道每个机制解决什么问题熔断防止故障扩散限流保护下游降级保证核心链路可用重试处理瞬时抖动但要谨慎使用避免放大压力。6. JWT、OAuth2、Keycloak 怎么理解JWT 是一种令牌格式适合无状态认证OAuth2 是授权框架适合第三方接入和统一授权Keycloak 是开源身份认证与授权平台可作为统一登录中心。大厂场景中常见做法是用户登录后由统一身份中心签发 token业务系统只负责校验和鉴权。JWT 适合前后端分离但要注意过期、刷新、吊销和密钥轮换。7. 如何定位慢请求排查路径建议从上到下网关、应用日志、链路追踪、缓存命中率、MQ 堆积、数据库慢查询、外部依赖超时。Prometheus 采集指标Grafana 可视化展示Micrometer 统一埋点Zipkin/Jaeger 用于链路追踪。真正面试时要体现“可观测性思维”不是只会看日志而是知道指标、日志、链路三件套如何配合。8. RAG 架构是什么RAG 即检索增强生成。流程通常是文档加载、清洗、切分、Embedding 向量化、存入向量数据库、用户提问时做语义检索、拼接上下文、交给大模型生成答案。在企业文档问答里RAG 的优势是答案更贴近企业知识库能减少模型凭空编造。向量数据库可以选 Milvus、Chroma 或 Redis 向量能力Embedding 模型可使用 OpenAI 或本地 Ollama 生态。9. 如何降低 AI 幻觉核心方法是减少模型自由发挥空间只允许基于检索内容回答、增加引用来源、设置拒答策略、限定输出格式、引入人工审核或置信度阈值。如果是智能客服建议把“无知识答案”转换成“转人工”或“工单创建”而不是让模型瞎编。10. Agent、工具调用、复杂工作流怎么落地Agent 强调模型具备规划和调用工具的能力。企业里常把订单查询、工单创建、知识检索、客户画像等封装成标准工具通过统一协议暴露给模型。复杂工作流建议拆分为意图识别、工具选择、执行、结果校验、结果生成五个环节。会话内存用于保留上下文但要控制长度避免带入无关历史。结语以上就是本次 Java 大厂面试实录的完整内容。希望这篇文章能帮助你在准备 Spring Boot、Kafka、Redis、微服务治理、RAG 与智能客服等高频面试题时既能理解概念也能结合真实业务场景讲出深度。感谢阅读希望真的能帮助到你祝大家面试顺利早日拿到满意的 offer

相关新闻