Java 面试实战:Spring WebFlux、Kafka、Redis、Kubernetes 与 AI/RAG 场景下的 3 轮深度追问
Java 面试实战Spring WebFlux、Kafka、Redis、Kubernetes 与 AI/RAG 场景下的 3 轮深度追问场景互联网大厂 Java 求职面试业务聚焦电商场景 智能客服系统。面试官严肃专业候选人是外号“燕双非”的水货程序员。规则如下简单问题燕双非能答出来答得好面试官会顺势夸赞并继续引导复杂问题则开始含糊其辞、东拉西扯但面试官会继续追问将话题逐步带深。第一轮基础能力与系统认知面试官你先说说咱们这个电商项目为什么前台查询接口用 Spring WebFlux而不是传统 Spring MVC燕双非因为 WebFlux 更潮响应式嘛听起来就很适合高并发。我们的商品详情页、库存状态、推荐信息要同时拉多个服务用 WebFlux 能减少线程阻塞吞吐会更高。面试官方向对了。那你继续说什么场景下它真的比 MVC 更有优势燕双非如果是大量 IO 等待比如调用远程商品、营销、画像服务而且链路里很多都是异步结果WebFlux 可以用少量线程撑住更多连接。面试官不错至少知道不是为了“新”而新。面试官那订单创建后我们为什么把“发券、发短信、更新搜索索引”这些动作放到 Kafka 里异步处理燕双非因为下单链路要快嘛。Kafka 可以削峰填谷主链路先返回成功后面的营销和通知慢慢处理。面试官继续说Kafka 消息积压了怎么办燕双非嗯……可以扩消费者或者把 topic 分区加大再看看是不是下游服务太慢。面试官可以这个回答虽然简单但方向是对的。面试官你们缓存怎么设计比如商品详情页里Redis 和本地缓存 Caffeine 怎么搭配燕双非先查 Caffeine再查 Redis再查数据库。热点商品放本地缓存减少 Redis 压力Redis 负责分布式共享。面试官很好那缓存一致性怎么做燕双非一般更新数据库后删缓存或者先删缓存再更新数据库……具体还得看业务。面试官“看业务”是对的但你得说清楚为什么。先进入下一轮。第二轮架构治理与稳定性面试官你刚才提到异步那如果 Kafka 消费库存扣减时发生重复消费怎么保证幂等燕双非可以加唯一业务流水号在数据库里做去重或者用 Redis 的 setnx 先抢锁抢到才处理。面试官行至少知道幂等不是靠“运气”。那如果 Redis 锁超时了呢燕双非那就……续期或者直接用 Redisson 的看门狗。面试官不错终于说到关键点了。面试官我们这个项目上 Kubernetes 之后怎么做弹性伸缩燕双非可以基于 CPU、内存或者自定义指标做 HPA比如订单峰值时自动扩容 WebFlux 服务和 Kafka 消费者。面试官那你怎么监控“自定义指标”燕双非嗯用 Micrometer 打点然后 Prometheus 抓指标Grafana 看图表。面试官这就比较像干过活的回答。面试官订单链路如果出现慢请求你会怎么定位燕双非先看日志再看链路追踪比如 Zipkin 或 Jaeger。然后看是不是某个下游接口慢或者 GC、线程池、连接池有问题。面试官很好。那连接池你们为什么选 HikariCP燕双非因为它快配置简单社区也比较认可。面试官对但记住快只是表象稳定、低开销、适合高并发才是核心。第三轮AI 与复杂业务融合面试官现在电商客服要接入 AI做“企业文档问答 智能客服”你会怎么设计 RAG燕双非先把商品说明、售后政策、活动规则做文档加载切分后向量化存到向量数据库比如 Milvus 或 Redis。用户提问后先做语义检索再把相关片段塞给大模型生成回答。面试官不错。那为什么不能直接让大模型自由发挥燕双非因为会有幻觉容易胡说八道。客服场景不能靠猜得结合企业知识库。面试官继续Agent 在这个系统里干什么燕双非Agent 可以根据用户意图调用工具比如查订单、查物流、查退款状态。它不是光聊天还能执行动作。面试官很好。那工具调用怎么标准化燕双非可以用统一的工具接口约定类似 MCP 这种思路让模型和外部工具之间的交互更标准。面试官你这个回答开始有点像大厂后端了。面试官最后一个问题如果 AI 客服在高峰期要同时处理聊天会话、订单查询和投诉工单你怎么保证上下文连续和系统可扩展燕双非聊天会话内存要分层存储短期上下文放内存或 Redis长期会话落库后端服务要拆成会话服务、检索服务、工具执行服务彼此通过消息队列和接口协作。高峰期还能水平扩容。面试官答得还行能看出你至少理解了整体链路。面试官今天就先到这儿你回去等通知吧。附问题逐题详解1. 为什么电商查询接口适合用 Spring WebFlux在商品详情、推荐、库存、营销等多个下游接口并发调用时传统阻塞式 MVC 会占用大量线程等待 IO。WebFlux 基于响应式编程和