Java 大厂面试实录:Spring Cloud + Kafka + Redis + Spring Security + RAG 的电商与 AIGC 场景深挖
场景:某互联网大厂,电商与 AIGC 融合业务线,面试官严肃,候选人是搞笑的水货程序员燕双非。
第一轮:业务与基础架构
面试官:先从电商首页说起。大促期间商品详情页和库存服务压力很大,你会怎么设计服务拆分和调用链路?
燕双非:我觉得先拆成商品、库存、订单、支付几个服务,前端通过网关访问,接口尽量别互相直接调用,能异步就异步,别一上来就全串起来,不然大促时大家一起“排队吃火锅”。
面试官:思路是对的。那如果商品详情页需要聚合多个服务的数据,你会怎么控制响应时间和降级策略?
燕双非:我会先做接口聚合,比如用网关或者 BFF 层,设置超时、熔断、降级,库存、推荐这种非核心数据可以先返回默认值,别让首页等到天荒地老。
面试官:说得还行。那在 Spring Cloud 体系里,你会怎么做服务注册发现和配置管理?
燕双非:可以用 Eureka 或者 Consul 做注册发现,配置放到统一配置中心。服务启动后自己去“报个到”,这样大家都知道谁还活着。
面试官:嗯,至少没把服务搞成黑户。
第二轮:消息、缓存与安全
面试官:大促下单后,需要发库存扣减消息、积分消息、物流消息。你会怎么选择 Kafka,并保证消息可靠性?
燕双非:Kafka 适合高吞吐,我会把订单创建和消息发送做成事务一致性方案,比如本地消息表或者事务消息,消费者幂等处理,避免重复扣库存。
面试官:那如果库存服务和优惠券服务同时依赖 Redis 缓存,你怎么避免缓存击穿和一致性问题?
燕双非:击穿的话可以加互斥锁或者逻辑过期;一致性的话一般是先更新数据库再删缓存,或者用消息通知去做最终一致性。别让缓存比数据库还“有主见”。
面试官:可以。那用户登录这块,Spring Security + JWT 你会怎么做权限控制?
燕双非:登录成功后签发 JWT,前后端分离时请求带 token,服务端解析后做角色和权限校验。Spring Security 可以配过滤器链,控制接口访问权限。
面试官:如果还要接入 OAuth2 或 Keycloak 呢?
燕双非:嗯……就是把统一认证中心接上,多个系统共享登录态,反正都是“一个账号走天下”,细节我回去再看看。
面试官:统一认证方向是对的,细节需要补。
第三轮:AIGC 与稳定性治理
面试官:现在业务增加了 AI 导购。用户问“帮我推荐适合通勤的耳机”,你怎么设计 RAG 和 Agent?
燕双非:我会先把商品知识、评价、FAQ 做文档加载,再切分、向量化,存到向量数据库里,用户提问先做语义检索,召回相关片段,再交给大模型生成答案。Agent 负责调用搜索、推荐、库存查询这些工具。
面试官:如果 AI 产生幻觉,推荐了缺货商品,你怎么处理?
燕双非:嗯……这个得加业务校验。模型输出不能直接信,最终要用库存接口和规则引擎兜底,回答前做二次校验,别让 AI 随口一说就把用户带沟里了。
面试官:最后一个问题,AI 导购服务你怎么监控和定位问题?
燕双非:可以接 Micrometer、Prometheus、Grafana 看 QPS、延迟、错误率;链路追踪用 Jaeger 或 Zipkin;日志统一到 ELK。还要记录 prompt、召回结果、模型输出,方便排查是检索问题还是生成问题。
面试官:行,今天就到这。你回去等通知吧。
面试题详细解析
1. 服务拆分与调用链路
电商场景下,商品、库存、订单、支付、推荐通常需要拆分为独立服务。拆分原则是高内聚、低耦合,并优先按业务边界拆分。详情页聚合多个服务数据时,常见做法是通过 BFF 层或 API 网关统一编排,避免前端直接扇出调用过多微服务。
调用链路设计中要关注超时控制、重试策略、熔断降级和线程隔离。对非核心数据如推荐内容、活动文案,可以设置默认值或异步补齐。核心数据如价格、库存、支付状态则必须保证正确性。
2. 服务注册发现与配置管理
Spring Cloud 体系中,Eureka、Consul 都可用于服务注册发现。服务启动后注册自身地址,消费者通过服务名访问,不关心具体实例 IP。配置管理可使用 Spring Cloud Config、Consul KV 等方案,统一维护环境配置,便于灰度发布和动态刷新。
3. Kafka 与消息可靠性
Kafka 适合高吞吐、可扩展的事件驱动架构。订单创建后发送库存扣减、积分发放、物流通知等消息,是典型的异步解耦场景。可靠性常见方案包括:
- 本地消息表:业务表与消息表同库事务提交,再异步投递。
- 事务消息:先提交本地事务,再确保消息最终可达。
- 消费者幂等:通过业务唯一键、去重表、状态机控制重复消费。
在大促场景中,消息堆积和重复投递都要重点治理。
4. Redis 缓存一致性与击穿
缓存能显著降低数据库压力,但会引入一致性问题。常见策略:
- 先写数据库,再删除缓存,适合多数读多写少场景。
- 延迟双删,用于降低并发写入下的脏数据概率。
- 互斥锁或逻辑过期,防止热点 key 缓存击穿。
对于库存这种敏感数据,通常不能只依赖缓存,必须以数据库或强一致存储作为最终依据。
5. Spring Security、JWT、OAuth2、Keycloak
JWT 常用于前后端分离和分布式系统的无状态认证。登录后签发 token,后续请求携带 token,服务端根据签名和过期时间校验身份,再结合权限模型完成授权。
OAuth2 更适合第三方授权和统一身份认证,Keycloak 则是常见的开源身份与访问管理平台。多系统统一登录时,通常通过 OAuth2/OIDC 体系接入统一认证中心,避免每个系统单独维护账户体系。
6. RAG 与 Agent 在 AIGC 导购中的应用
RAG 的核心是“先检索,再生成”。电商导购场景里,商品知识、FAQ、用户评价、活动规则都可以作为知识源。流程通常包括:
- 文档加载:收集结构化和非结构化资料。
- 切分与向量化:将文本切块,生成 embedding。
- 向量检索:在 Milvus、Chroma、Redis Vector 等中召回相关片段。
- 提示填充:把召回内容放入 prompt,上下文注入大模型。
- 生成回答:由模型输出自然语言答案。
Agent 则进一步增强自动化能力,可以根据用户意图调用搜索、库存、推荐、下单等工具。复杂工作流中,Agent 需要具备工具调用标准化、扩展能力和状态记忆。
7. 幻觉治理与业务校验
AI 幻觉是指模型生成看似合理但实际错误的内容。电商导购中最危险的是推荐错误商品、错误价格或错误库存。治理方式包括:
- 检索结果优先:让模型尽量基于真实业务数据回答。
- 业务规则兜底:库存、价格、活动信息以系统接口为准。
- 输出校验:对模型返回结果进行结构化校验和黑白名单过滤。
- 人工可解释日志:记录 prompt、召回内容、输出结果,便于回溯。
8. 监控、日志与链路追踪
线上 AI 服务和微服务系统都必须有可观测性。Micrometer 可统一采集指标,Prometheus 负责拉取,Grafana 用于可视化看板。链路追踪可用 Jaeger 或 Zipkin,日志统一到 ELK,帮助快速定位是接口慢、检索慢、模型慢还是外部依赖慢。
9. 面试中的答题策略
遇到简单问题,要先给出正确结论,再补充一两个关键点。遇到复杂问题,不要强行编造,应该先讲清楚大方向,再说明自己会如何落地验证。面试官更看重的是你的系统性思维、边界意识和稳定性治理能力。
感谢阅读,希望这篇文章能帮助你更好地准备 Java 大厂面试,也希望你在求职路上少踩坑、多拿 offer。