互联网大厂Java面试实战:用一个下单+音视频+AIGC+RAG智能客服场景串起Spring微服务、消息队列、缓存与AI架构

发布时间:2026/6/30 1:53:18
互联网大厂Java面试实战:用一个下单+音视频+AIGC+RAG智能客服场景串起Spring微服务、消息队列、缓存与AI架构 用一个互联网大厂 Java 面试把 Spring 微服务、消息队列、缓存、搜索和 AI RAG 全讲清严肃面试官 vs 搞笑候选人小 Y · 音视频 AIGC 电商一体化场景 · 含详细参考答案一、故事背景小 Y 走进大厂场景设定公司某综合型互联网大厂做短视频 AIGC 内容社区 电商三合一业务用户刷短视频含音视频实时弹幕AIGC 帮用户生成文案、视频封面视频下挂商品支持一键下单订单走智慧物流 供应链技术栈部分后端Java 17、Spring Boot、Spring Cloud、Spring WebFlux、gRPC数据MySQL Redis Kafka ElasticsearchAISpring AI、RAG、向量数据库Milvus/Chroma、Embedding 模型运维Docker、Kubernetes、Prometheus、Grafana、ELK、Jaeger小 Y简历写得飞起项目全是「负责核心模块」「主导架构设计」。面试官某线下收银系统转 Java 的 10 年老兵脸上写着两个字——认真。下面进入 3 轮面试每轮 3–5 个问题难度逐步升级。二、第一轮电商下单主链路Java 基础 Spring Boot 数据库业务场景用户在短视频下点击「立即购买」完成下单。第一轮·第 1 题接口设计与参数校验面试官用户在我们短视频 App 里点「立即购买」你会怎么设计后端接口用 Spring Boot 写一个大致的 Controller 方法签名顺便说说你会用哪些参数校验方式小 Y「这个很简单我一般写一个/order/create的 POST 接口参数就一个 JSON里面什么都有……然后在代码里if判断一下是不是 null 啊、是不是负数啊……」「至于校验嘛就……Spring Boot 自带那个……就是加点注解NotNull啊……忘了别的名字了……」面试官点点头还行至少知道用 Bean Validation。不过如果能说出Valid、分层校验、全局异常处理就更好了。第一轮·第 2 题事务与库存扣减面试官下单涉及库存扣减、订单落库。请你简要说明在单体应用里你会怎么用 Spring 事务基于 JPA 或 MyBatis保证下单一致性库存扣减失败时订单应该怎么处理小 Y「我们就用那个Transactional啊一加就行了全部在一个方法里写完如果抛异常就回滚。」「库存扣减失败嘛就……嗯……再试一下要不就直接提示用户库存不足订单就……不生成了」面试官思路没完全错但要注意幂等性、订单状态流转这些问题后面我们再深入。第一轮·第 3 题数据库设计与索引面试官订单表你会怎么设计核心字段会给哪些字段建索引用什么存储引擎小 Y「订单表嘛id、user_id、product_id、amount……然后就一个联合索引吧比如user_id,create_time……引擎就用 InnoDB 吧反正大家都这么用。」面试官还可以。如果你能说出根据查询场景选择合适索引比如按订单号查询、按用户 时间范围分页、覆盖索引、避免在高 QPS 热字段上乱建索引就更好了。第一轮·第 4 题日志与链路追踪基础面试官下单接口在高峰期出现了偶发报错有时用户说扣了钱没下单成功你会在代码里怎么打日志会用什么日志框架小 Y「我们用 Logback 哇反正 Spring Boot 默认就是它。然后我就在接口里log.info一下这里下单成功那边异常log.error。」「链路追踪……好像有个traceId我记得在 MDC 里放一个就能串起来了。」面试官至少知道 Logback / SLF4J 和 MDC不错。以后要多了解一下集中日志ELK / Loki和链路系统Zipkin/Jaeger。三、第二轮微服务 消息队列 缓存 搜索业务场景扩展订单从「单体」进化到「微服务」拆分为order-serviceinventory-servicepayment-servicelogistics-service引入Spring Cloud、Kafka、Redis、Elasticsearch。第二轮·第 1 题微服务拆分与调用方式面试官如果我们用 Spring Cloud 来拆这个电商系统你会怎么划分服务同时说一下服务间同步调用和异步调用分别用什么技术栈小 Y「划分服务嘛就按你说的那几个拆用户、订单、库存、支付、物流。然后 Spring Cloud 不就有那个 OpenFeign 嘛我就写接口调用就好了。」「异步的话……就……Kafka反正我们公司都用 Kafka消息发过去就行。」面试官算说到点上了。不过如果你能提 Spring Cloud Gateway、注册中心Eureka/Consul、配置中心、熔断限流Resilience4j就更完整。第二轮·第 2 题下单主链路的最终一致性MQ 场景面试官在微服务场景下下单通常会通过消息队列实现「支付成功后再出单」你设计一下用户支付成功 - 支付服务发消息 - 订单服务如何消费如果消息重复投递你怎么保证幂等小 Y「支付成功就往 Kafka 发一个消息topic 比如payment-success订单服务监听一下就好了。」「幂等……那就……再建一张表记录一下消息 ID如果处理过就不处理……吧。」面试官方向没错思路也是常见方案但落地时要考虑消息偏移、事务消息、生产和消费失败重试等问题。第二轮·第 3 题缓存设计与热点数据面试官商品详情和库存是高频访问数据你会怎么使用 Redis 缓存讲一讲缓存 Key 设计缓存击穿 / 雪崩 / 穿透如何处理小 Y「Key 就product:detail:加 ID 哇。库存就product:stock:加 ID。」「至于……那个什么击穿、雪崩、穿透……呃……击穿就是热点 key 失效大家都来打数据库雪崩就是很多 key 一起失效穿透是查不存在的数据。」「解决办法……我记得是加互斥锁、加随机过期时间、对不存在的数据也缓存一下 null……差不多这样。」面试官这题答得不错说明做过或者认真看过。可以加分。第二轮·第 4 题搜索与推荐Elasticsearch面试官用户在内容社区搜索某类商品比如「夏季运动鞋」你会如何用 Elasticsearch 设计索引和查询小 Y「我们就建一个索引里面把商品名、描述、标签都放进去……然后用那个match查询」「分词器的话……我看别人用 IK 分词我就跟着用 IK……」面试官勉强过关。不过要注意字段是否需要 keyword 类型、是否需要聚合、权重boost这些都是电商搜索常见问题。第二轮·第 5 题监控与告警面试官微服务多了之后线上问题排查就复杂了。我们现在接入了 Prometheus Grafana Spring Actuator Jaeger。你能说说Spring Boot 项目里怎么暴露基础监控指标QPS、RT、错误率、依赖服务调用耗时你大概怎么监控小 Y「我们引一下spring-boot-starter-actuator然后配置一下 management 的那个端点就可以了。」「QPS……Prometheus 会抓 metricsGrafana 画个图Jaeger 看 trace。我之前主要是看别人搭好的。」面试官轻叹至少知道这些工具的名字回去多实践吧。四、第三轮音视频 AIGC AI RAG 智能客服场景升级用户在短视频里看「智能健身」视频AIGC 自动生成个性化训练计划文本 配图用户对训练计划有问题会在 App 里问「智能客服」客服基于企业知识库包括健康管理、互联网医疗合规指南回答引入Spring WebFlux、gRPC、R2DBC、Spring AI、RAG、向量数据库、Agentic RAG、自然语言语义搜索。第三轮·第 1 题音视频服务与高并发接口WebFlux面试官音视频流服务对并发很敏感你会在什么场景下考虑使用 Spring WebFlux 而不是传统的 Spring MVC请结合 Java 17 Netty 的服务端架构简单说说。小 Y「WebFlux 就是那个响应式的框架嘛……适合 IO 比较高、CPU 压力不大的场景……比如音视频这种拉流啊」「至于 Netty……我知道 WebFlux 底层用 Netty当时我们就开箱即用没怎么配置。」面试官还算有概念但如果你能说明在高并发长连接、WebSocket、SSE 推送场景下基于响应式非阻塞模型能更好地利用线程就更好了。第三轮·第 2 题AI 智能客服的 RAG 架构面试官我们有一个「智能客服」用户用自然语言提问比如「我在吃某某药物还能做高强度训练吗」系统需要基于企业内部文档健康指南、药物说明书等给出靠谱回答公司现在采用 RAG检索增强生成架构你能说说整体流程是怎样的向量数据库你用过哪些小 Y「RAG……就是先检索再生成嘛。流程是先把文档切块做向量化存到向量数据库里比如 Milvus、Redis 那个……嗯……用户问题也转成向量去相似度搜索找到相关文档片段再喂给大模型让它回答。」「向量数据库我知道 Milvus、Chroma还有 Redis 也能存向量。」面试官这题答得不错。RAG 流程讲清楚了加分。第三轮·第 3 题Spring AI 微服务中的工具调用 Agent面试官我们打算在 Java 后端里用 Spring AI 统一接入多个大模型比如 OpenAI、Ollama并通过 Agent 让大模型自动调用内部工具比如订单查询、健康档案查询。你简要描述一下Spring AI 在 Java 项目中的大致用法什么是「工具调用标准化」Agent 是如何 orchestrate编排这些工具的小 Y「Spring AI……我只在官网上看过示例spring-ai-openai之类的 starter创建一个ChatClient然后就像调普通 bean 那样传 prompt。」「工具调用标准化就是……大家都用一个统一的接口去描述工具比如名称、入参、出参都规范化这样模型就知道怎么调用」「Agent……我理解就是一个控制器负责根据大模型的意图选择对应的工具比如调用订单服务啊、健康档案服务……然后把结果再喂给模型。」面试官概念上差不多但你缺少实际经验。以后可以亲手做一个 Demo比如「企业文档问答 工单查询」的 Agentic RAG 系统。第三轮·第 4 题AI 幻觉与企业级风控面试官在健康管理、互联网医疗场景里AI 回答可能带来法律风险。比如 AI 胡说八道Hallucination给了错误的用药建议。你觉得在系统设计上怎么降低 AI 幻觉风险并做好安全与风控小 Y「这个……我们可以加个免责声明」「还有就是让模型尽量引用文档里的内容不要自己瞎编……呃……具体怎么做我不是很清楚。」面试官微皱眉免责声明只是基础。真正的企业系统需要输出引用来源高风险问题转人工对回答内容做规则和模型双重审查这块你差得有点多。第三轮·第 5 题复杂工作流与可观测性面试官最后一个问题智能客服背后实际是一个复杂工作流用户问题进入接入层API 网关通过网关路由到 AI 网关服务调用 RAG 检索、工具执行框架如调用订单、物流、健康档案等多轮对话需要维护会话内存全链路记录日志和指标你会用哪些 Java / Spring 技术栈来构建这样的复杂工作流小 Y「嗯……网关可以用 Spring Cloud GatewayAI 网关服务用 Spring Boot加 Spring AI工具执行的话我们可以自己写一套……或者用现成的那个……呃……Agent 框架」「会话内存就……Redis或者存在向量数据库里面做语义检索……」「可观测性……就是 Prometheus、Grafana、ELK、Jaeger 那些。」面试官你知道的东西不少但很多停留在「听说过」。五、面试结束语面试官今天先到这里吧。你基础还可以知识面也算广但很多东西是略懂不精。我们会结合其他候选人一并评估你先回去等通知有消息人力会联系你。小 Y「好嘞那我先回去把 Spring AI 和 RAG Demo 写一遍……」六、面试题详细解析与参考答案给小白看的部分下面按题目整理详细答案和知识点方便初学者系统复盘。1. 下单接口设计与参数校验场景用户点击「立即购买」后端需要校验用户是否登录、商品是否存在、库存是否充足、价格是否正确技术点Spring Boot、Spring MVC、Bean ValidationJSR 380、全局异常处理。示例设计RestController RequestMapping(/api/orders) public class OrderController { PostMapping(/create) public OrderCreateResponse createOrder(Valid RequestBody OrderCreateRequest request) { // 1. 校验用户登录拦截器 / Spring Security // 2. 调用 OrderService 处理业务 // 3. 返回订单号等信息 } } public class OrderCreateRequest { NotNull private Long userId; NotNull private Long productId; Min(1) private Integer quantity; NotNull private BigDecimal price; // Getter/Setter }要点使用Valid Bean Validation 注解NotNull,Min,Size等进行参数校验。通过ControllerAdviceExceptionHandler统一处理校验异常返回标准错误码。对于公共字段如userId可以通过 JWT / Spring Security 的认证信息注入而不是让前端传。2. 事务与库存扣减的一致性场景单体应用中下单包含校验库存扣减库存创建订单记录技术点Spring 事务Transactional、JPA/MyBatis、隔离级别与传播行为。典型实现Service public class OrderService { Transactional public Long createOrder(OrderCreateRequest request) { // 1. 查询商品库存 Product product productMapper.selectById(request.getProductId()); if (product.getStock() request.getQuantity()) { throw new BusinessException(库存不足); } // 2. 扣减库存 int updated productMapper.deductStock(request.getProductId(), request.getQuantity()); if (updated 0) { throw new BusinessException(库存扣减失败); } // 3. 创建订单 Order order new Order(); // ... 填充字段 orderMapper.insert(order); return order.getId(); } }要点利用数据库事务确保库存扣减与订单创建要么一起成功要么一起回滚。注意并发扣减库存时可以使用行锁update ... where stock ?乐观锁版本号字段实际大厂场景中会进一步拆为「预下单、锁库存、支付成功后确认订单」甚至用 MQ 做最终一致性。3. 数据库设计与索引场景电商订单表典型字段id主键order_no业务订单号user_idstatusamountcreate_time索引设计主键id自增或雪花 ID唯一索引order_no普通索引user_id create_time用于用户订单列表分页status create_time后台运营查询要点基于查询场景设计索引而不是随便建。避免在写频繁且查询不按该字段过滤的列上建索引如经常更新的状态字段防止写放大和索引失效。存储引擎一般选 MySQL InnoDB。4. 日志与链路追踪技术点日志框架SLF4J Logback / Log4j2日志级别INFO,WARN,ERROR,DEBUG使用 MDCMapped Diagnostic Context存储traceId/userId方便按请求维度查日志。实践建议在网关处生成traceId通过 HTTP Header 传递到各服务写入日志。引入 Zipkin / Jaeger Spring Cloud Sleuth / Micrometer Tracing实现分布式链路追踪。日志集中到 ELKElasticsearch Logstash Kibana统一检索和分析。5. 微服务拆分与调用方式典型微服务划分user-serviceproduct-serviceorder-serviceinventory-servicepayment-servicelogistics-service技术组合服务发现Spring Cloud Eureka / Consul网关Spring Cloud Gateway配置中心Spring Cloud Config / Nacos同步调用OpenFeign Ribbon/LoadBalancer异步调用Kafka / RabbitMQ / RocketMQ / Pulsar容错Resilience4j限流、熔断、重试、隔离舱6. 消息队列与最终一致性场景用户支付成功后再创建订单或更新订单状态流程用户在支付网关发起支付调用第三方支付接口支付结果异步通知到payment-servicepayment-service发送 Kafka 消息到payment-success主题order-service订阅该主题更新订单状态或创建订单幂等处理order-service处理消息时根据业务订单号或支付流水号检查是否已处理使用去重表、状态表或唯一约束防止重复插入事务保证可使用本地消息表 定时投递机制或使用支持事务消息的 MQRocketMQ 等7. 缓存设计与三大问题缓存 key 设计商品详情product:detail:{productId}商品库存product:stock:{productId}三大问题与解决缓存击穿热点 key 失效瞬间大量请求打到 DB解决对热点 key 使用互斥锁Redis 分布式锁或使用永不过期 后台异步更新缓存雪崩大量 key 同时过期解决过期时间添加随机值多级缓存、预热缓存缓存穿透查询不存在的数据频繁打 DB解决对不存在的数据也缓存一个短期过期的「空值」在网关或服务端加参数校验、布隆过滤器8. Elasticsearch 搜索设计场景用户搜索「夏季运动鞋」索引字段示例name商品名称text keyworddescription描述texttags标签keyword/textpricedoublecategorykeyword查询示例使用multi_match查询name和description给name字段更高权重boost按score排序兼顾销量、评分等排序因子可通过 function score9. 监控与运维技术栈指标Micrometer Prometheus Grafana日志ELK链路Jaeger / ZipkinSpring Boot Actuator 暴露/actuator/health/actuator/metrics/actuator/prometheus重点监控指标接口 QPS、平均响应时间RT、错误率依赖服务DB、Redis、MQ的耗时与错误率JVM 指标GC 次数、堆内存使用、线程数10. Spring WebFlux 与高并发 IO适用场景高并发、长连接、大量 IO调用外部服务WebSocket、Server-Sent EventsSSE音视频元信息服务、聊天消息推送特点基于 Reactor响应式编程、非阻塞 IO默认使用 Netty 服务器而不是 Tomcat用少量线程处理大量请求事件驱动与 Spring MVC 的取舍CPU 密集型业务WebFlux 不一定带来明显收益需要注意与阻塞库如传统 JDBC的兼容问题可搭配 R2DBC 实现非阻塞数据库访问11. RAG检索增强生成架构整体流程分为两部分构建阶段 查询阶段。构建阶段文档加载健康指南、药物说明书、企业内部知识库使用文档加载工具如自定义 Loader或 Java 里配合 Apache POI、PDFBox文本切分按段落/章节切成 chunks向量化调用 Embedding 模型OpenAI、Ollama存储向量Milvus / Chroma / Redis 向量索引查询阶段用户提问对问题进行向量化在向量数据库中进行相似度检索语义检索取出最相关的文档片段将「问题 文档片段」一起作为 Prompt 输入大模型大模型生成回答并引用来源12. Spring AI 与工具调用标准化Spring AI 用法概览引入依赖spring-ai-openai-spring-boot-starter或其他厂商在配置中设置 API Key注入ChatClient或OpenAiChatClient使用示意Service public class AiService { private final ChatClient chatClient; public AiService(ChatClient chatClient) { this.chatClient chatClient; } public String ask(String question) { return chatClient .prompt() .user(question) .call() .content(); } }工具调用标准化将内部服务如订单查询、物流查询、健康档案查询抽象成「工具Tool」每个工具有标准化描述名称、说明、输入参数 schema、输出参数 schemaAgent 框架可以基于这些描述自动生成调用说明Agent 编排Agentic RAGAgent 负责根据用户意图决定是否调用工具选择合适工具例如订单查询 vs 健康档案查询调用工具拿到结果将结果再交给大模型整合到回答中典型场景用户问「我昨天的订单状态怎样」- Agent 调用订单服务 - 返回结果用户问「结合我的体重和训练计划适合什么营养配餐」- Agent 调用健康档案 RAG 检索 - 组合回答13. AI 幻觉与企业级风控AI 幻觉Hallucination模型在没有足够事实依据时也会「自信地瞎编」降低幻觉的手段强制引用文档用 RAG 只让模型基于检索到的文档回答Prompt 中明确「如果文档中没有信息请回答不知道」输出引用回答中带上引用的文档标题 / 链接多模型交叉验证对重要回答用不同模型交叉检查人工审核高风险问题如用药方案必须人工确认安全与风控内容安全涉黄、涉政、暴力等敏感内容过滤合规审计有完整的审计日志对用户查询和 AI 回答进行存档接入风控引擎基于规则 模型对回答做二次过滤14. 复杂工作流与可观测性复杂工作流组件API 网关Spring Cloud GatewayAI 网关服务统一接入多模型Spring AI路由到不同 Agent订单 Agent、健康 Agent 等工具执行框架将 Java 方法封装为可供 Agent 调用的工具会话内存Redis 存储对话历史或向量数据库存储对话摘要用于语义检索可观测性设计为每个用户问题生成traceId在整条链路中传递traceId网关 - AI 网关 - 向量检索 - 工具调用记录请求参数、返回结果关键耗时嵌套 span错误信息通过 Prometheus Grafana 观察 QPS、耗时分布、错误率七、总结从一个面试故事看 Java 成长路径这次面试的故事虽然有点搞笑但反映了很多 Java 求职者的真实状态简单问题Spring Boot 基础、Redis、Kafka 概念能答出来但对复杂系统微服务治理、RAG、Agent、AI 风控多停留在「听说过」层面如果你想在互联网大厂拿到 Java 岗位打牢 Java 基础与 JVM内存模型、GC、并发深入一个完整的 Spring Boot Spring Cloud 微服务项目熟悉 Redis、MQ、Elasticsearch、监控体系至少做过一个端到端的 AI / RAG Demo文档加载、向量化、向量库Spring AI 接入简单的工具调用比如查询订单把这些做好再走进面试间你就不会像小 Y 那样遇到复杂问题只能「含糊其辞」了。