Java 面试实战:Spring Boot + Kafka + Redis + AI/RAG 的互联网大厂求职过关指南
题目背景:互联网大厂电商平台正在做“搜索推荐 + 智能客服 + 订单异步处理”一体化升级。面试官严肃、挑剔;候选人是外号“水货程序员”的燕双非,平时嘴上很会,真到难题就开始含糊其辞。下面是三轮递进式面试实录。
第一轮:基础架构与业务入口
面试官:你们这个电商系统用 Spring Boot 做服务入口,为什么不用老式的 Spring MVC + XML?
燕双非:因为 Spring Boot 比较省事,自动配置多,启动也快。对我们这种快速迭代的项目,能少写很多配置文件,挺适合。
面试官:说得不错,能快速落地。那你再说说,订单创建接口为什么要加幂等控制?
燕双非:嗯……因为用户可能重复点击,下单请求也可能因为网络重试重复发送。如果不做幂等,库存和订单都会多扣一次,容易出事故。
面试官:这个方向对,继续说,你们一般怎么做?
燕双非:可以给每次请求带一个唯一 token,服务端校验后消费一次就作废;或者用业务唯一键,比如订单号、支付流水号,再结合数据库唯一索引防重复。
面试官:还行,说明不是完全没干过活。那 Redis 在这里能做什么?
燕双非:Redis 可以做幂等 token 的缓存,也可以做购物车、热点商品详情缓存。请求到来时先查 Redis,减少数据库压力。
第二轮:异步解耦与安全治理
面试官:用户下单后,为什么不直接同步发短信、发券、写积分,而是引入 Kafka?
燕双非:因为同步做太慢了,主流程会被拖住。Kafka 可以把这些后置任务拆成消息,订单服务只负责发消息,短信、优惠券、积分各自消费。
面试官:很好,说明你懂解耦。那如果 Kafka 消息重复投递了,怎么办?
燕双非:这个……消费者那边要做去重,通常可以按消息 id 或订单 id 做消费记录,处理过就直接忽略。反正 MQ 这东西,尽量按“至少一次”去设计。
面试官:回答得不错。再说说登录鉴权,为什么你们接口统一用 JWT?
燕双非:JWT 可以把用户身份和权限信息放到 token 里,服务端不一定非要存 session,适合微服务和移动端。请求来了直接校验签名和过期时间就行。
面试官:那 JWT 就一定安全吗?
燕双非:也不是。它本身只是签名令牌,泄露了就可能被冒用,所以要配合 HTTPS、短过期、刷新机制、黑名单机制。高风险接口还要加二次校验。
面试官:说得有点像样了。那你们用 Micrometer 和 Prometheus 主要看什么指标?
燕双非:看接口响应时间、QPS、错误率、JVM 堆内存、GC 次数,还有 Kafka 消费堆积量。Prometheus 拉指标,Grafana 画图,方便定位哪里慢了。
第三轮:AI 升级与复杂链路
面试官:现在公司要给电商接一个智能客服,支持“订单查询、物流解释、退款政策问答”。如果直接让大模型回答,会有什么问题?
燕双非:会有幻觉,模型可能瞎编政策或者编造物流信息。尤其是涉及订单和售后,不能让它乱说。
面试官:那你会怎么做?
燕双非:可以做 RAG。先把企业知识库、售后规则、物流文档做文档加载和向量化,存到向量数据库,比如 Milvus 或 Redis,然后用户提问时做语义检索,把相关内容拼到提示词里,让模型基于真实资料回答。
面试官:如果是“查询我自己的订单物流”,只靠 RAG 够吗?
燕双非:不够,这种要走工具调用。模型先识别意图,再调用订单查询接口、物流查询接口,把结果返回后再组织自然语言回复。RAG 负责知识问答,工具调用负责实时业务数据。
面试官:很好。那如果客服场景要支持多轮追问,比如“这个退款能不能加急”“那我换货怎么办”,你怎么维持上下文?
燕双非:需要聊天会话内存,记录用户当前订单、售后状态、上轮提到的实体信息。这样后续追问时不用每次都从头解释一遍。
面试官:最后一个问题,Spring AI 在这里能帮什么?
燕双非:它可以把模型、向量检索、工具调用这些能力统一起来,简化接入。比如把大模型、Embedding 模型、RAG 流程、Agent 工作流串起来,做成一个可扩展的智能客服系统。
面试官:嗯,今天就到这里。你先回去等通知吧。
问题详解与知识点总结
1. Spring Boot 为什么适合电商业务快速迭代
Spring Boot 的核心价值是约定优于配置。对于电商这种高频变化的业务,自动配置、starter 依赖、内嵌容器可以显著降低接入成本。它适合快速搭建订单、商品、营销等服务,同时也便于微服务拆分。
2. 订单接口幂等控制的必要性与实现
在支付、下单、退款等场景中,网络重试、超时重发、用户重复点击都可能造成重复请求。常见方案包括:
- 前端生成一次性 token,服务端消费后作废;
- 业务唯一键 + 数据库唯一索引;
- Redis 原子校验与删除;
- 状态机控制订单流转。
实际中通常会组合使用,保证接口在高并发下也能稳定。
3. Redis 在电商链路中的典型作用
Redis 常用于缓存商品详情、购物车、会话信息、幂等 token、热点配置等。它能显著减轻数据库压力,但也要注意缓存一致性、穿透、击穿、雪崩等问题。电商常采用缓存预热、随机过期时间、布隆过滤器等手段优化。