Spring Boot + Kafka + Redis + Spring Security 面试实录:燕双非在电商秒杀场景的 3 轮过招
2026/8/27 3:20:16 网站建设 项目流程

Spring Boot + Kafka + Redis + Spring Security 面试实录:燕双非在电商秒杀场景的 3 轮过招

文章简述:围绕互联网大厂 Java 面试场景,结合电商秒杀、订单风控、消息削峰、缓存一致性与权限安全等业务,模拟严肃面试官与搞笑候选人燕双非的 3 轮问答,并在文末对所有问题进行详细解析,帮助读者系统理解 Spring Boot、Kafka、Redis、Spring Security、MyBatis、Micrometer、OpenAPI、Docker、Kubernetes 等技术在真实业务中的落地方式。

一面开始

面试官:今天聊一个电商秒杀系统。你先说说,假设大促来了,商品详情页、下单、支付、库存扣减这条链路,你会怎么做整体设计?

燕双非:我先上 Spring Boot,把接口都暴露出来,然后 Redis 缓存商品详情,Kafka 做异步削峰,MyBatis 负责落库,JVM 调大一点,应该就能顶住。

面试官:思路不算离谱,至少知道要做缓存和异步。那你继续说,秒杀场景里为什么不能直接同步扣库存?

燕双非:因为……同步太慢?而且容易把数据库打爆。应该先在 Redis 里做预扣库存,成功后发消息到 Kafka,订单服务异步消费,最后再落库。

面试官:不错,方向对了。那如果 Kafka 消息重复消费了,你怎么办?

燕双非:嗯……做幂等吧。比如订单号做唯一索引,或者消费端记录处理状态,重复消息来了就直接忽略。

面试官:这个回答可以。你知道幂等是秒杀系统里最基础的底线。那再追问一下,Redis 预扣库存成功后,如果订单落库失败,怎么补偿?

燕双非:可以搞一个补偿任务,定时扫失败订单,或者用死信队列把失败消息重新投递。再不行就人工兜底。

二面继续

面试官:好,进入第二轮。假设这个电商系统还要接入Spring Security + JWT做登录鉴权,用户抢购前必须先登录。你会怎么设计认证流程?

燕双非:前端先登录,服务端校验账号密码后签发 JWT,后续请求带上 token,Spring Security 拦截请求,解析 token 看是不是合法用户。

面试官:可以。那 JWT 放哪儿更合适?如果用户退出登录,token 还没过期怎么办?

燕双非:一般放 header 里,退出登录可以把 token 加入黑名单,或者把有效期设得短一点,再配合刷新 token。

面试官:嗯,基础掌握得还行。那你说说,为什么很多大厂会把登录态和权限控制拆开?

燕双非:登录态解决“你是谁”,权限控制解决“你能干啥”。比如普通用户只能下单,运营用户能改活动配置,管理员还能看风控面板。

面试官:回答得不错。现在我们把业务往前推一步。商品活动页面要做限流、熔断和降级,你会用什么组件?

燕双非:Spring Cloud 里可以配 Resilience4j 做限流和熔断,热点商品直接返回静态页或者缓存结果。大促期间非核心接口可以降级,比如推荐列表先不展示。

面试官:这个思路很好。那如果你的服务部署在 Kubernetes 上,如何做健康检查和自动扩缩容?

燕双非:嗯,K8s 配 liveness 和 readiness probe,服务活着但没准备好就不放流量。扩缩容可以看 CPU、QPS、延迟这些指标,再结合 HPA。

面试官:回答得比较完整。你要记住,监控是压测和大促的眼睛。那再问你一个偏工程的问题:为什么这类项目里会用 Micrometer 接 Prometheus + Grafana?

燕双非:Micrometer 可以统一采集 JVM、接口耗时、线程池、Kafka 消费延迟这些指标,Prometheus 拉取后,Grafana 画看板,方便看系统瓶颈。

三面深入

面试官:最后一轮,我们加点难度。现在老板要求你在电商系统里加一个AI 导购助手,用户可以自然语言问“我想买适合通勤的手机”,系统要能结合商品库、活动规则和用户画像回答。你会怎么设计?

燕双非:这个我熟,Spring AI 可以接大模型,然后把商品数据做向量化,存到向量数据库里,用户提问后先语义检索,再把召回内容喂给模型生成回答。

面试官:继续。那你说说,RAG 和纯大模型直接回答相比,价值在哪?

燕双非:RAG 更依赖企业自己的知识库,能减少幻觉。纯模型容易瞎编,尤其是价格、库存、活动规则这种实时信息,不能靠它乱猜。

面试官:对,幻觉问题在业务里很致命。那如果这个导购助手还要支持“看过的商品历史”“聊天上下文记忆”“多轮追问”,你怎么处理?

燕双非:要保存聊天会话内存,用户上下文要有短期记忆;商品浏览历史可以做用户画像;多轮对话时把关键信息拼进 prompt,或者用 Agent 去调用搜索、库存、优惠券等工具。

面试官:很好。那你再往前一步,假设你要做一个企业级智能客服,不光回答商品问题,还要查物流、退换货、订单状态、优惠券规则,你觉得 Agent 和普通问答有什么区别?

燕双非:Agent 更像会自己做事,它会先判断要不要调用工具,比如查订单、查物流、查售后政策;普通问答更多是“问一句答一句”。Agent 还要有工具调用标准化,不然一会儿查订单一会儿查库存,接口会很乱。

面试官:这个方向是对的。那最后我问一个工程落地题:如果你要让这个 AI 客服能接企业知识库、PDF、FAQ、工单系统,还要保证检索效果和权限控制,你会怎么组织?

燕双非:我会做文档加载,把不同来源转成统一结构;按部门、角色、租户做权限过滤;然后用向量检索加关键词检索混合召回,再用重排提升准确率。工单系统可以接入工具调用,敏感信息得做脱敏。

面试官:行,今天就到这儿吧。你回去等通知。

问题详细解析

1. 电商秒杀链路为什么要用 Redis 预扣库存 + Kafka 异步下单?

在秒杀场景中,核心矛盾是“流量瞬时暴涨”与“数据库处理能力有限”。如果每个请求都直接同步扣库存、写订单表,会导致数据库锁竞争激烈、响应时间飙升,甚至拖垮整套系统。Redis 预扣库存可以把高并发压力前置到内存中处理,速度快、成本低;Kafka 则用于把“扣库存成功”与“真正创建订单”解耦,通过消息队列实现削峰填谷。

业务上通常会这样做:用户请求到达后,先校验登录态与活动资格,再在 Redis 中通过 Lua 脚本原子地完成库存判断与扣减;成功后发送订单创建消息到 Kafka;订单服务异步消费消息,创建订单并落库。如果落库失败,可以通过重试、死信队列或补偿任务兜底。

2. Kafka 消息幂等为什么重要?

消息队列通常只保证“至少一次”投递,不保证绝对不重复。网络抖动、消费者重平衡、手动重放消息等都可能造成重复消费。如果消费者不是幂等的,就会产生重复订单、重复扣款、重复发券等严重问题。

常见做法包括:利用业务唯一键建立唯一索引;消费前先查处理状态;使用去重表记录消息 ID;在 Redis 中设置幂等标记;或者将消息处理设计为天然幂等,例如“设置状态为已支付”而不是“状态加 1”。

3. Spring Security + JWT 在登录鉴权中如何配合?

Spring Security 负责拦截请求、识别身份、做权限判断;JWT 负责承载无状态认证信息。用户登录成功后,服务端签发 JWT,客户端在后续请求中携带 token。服务端解析 token,验证签名、有效期与声明信息,再把用户身份注入到安全上下文中。

优点是无状态、易扩展、适合分布式系统;缺点是退出登录、强制下线、权限变更的即时生效比较麻烦,通常需要黑名单、短 token + refresh token、或者结合 Redis 做 token 状态管理。

4. 为什么要把登录态和权限控制拆开?

登录态解决“你是谁”,权限控制解决“你能做什么”。在电商系统里,消费者、运营、客服、管理员的权限不同。将认证与授权分层,能让系统设计更清晰,也方便后续接入角色、资源、数据权限等更细粒度控制。

5. Resilience4j、限流、熔断、降级分别解决什么问题?

限流是控制进入系统的流量,避免被瞬时请求压垮;熔断是在下游服务不稳定时快速失败,避免线程一直等待;降级是在资源紧张或依赖异常时,返回简化结果或备用内容,保障核心链路可用。电商大促时,非核心能力如推荐、评论、营销弹窗等常被降级,而下单链路优先保留。

6. 为什么 Micrometer + Prometheus + Grafana 很适合做监控?

Micrometer 是 Java 生态里统一的指标门面,可以兼容多种监控后端。它能采集 JVM、线程池、HTTP、数据库连接池、Kafka 消费延迟等关键指标;Prometheus 负责抓取和存储时序数据;Grafana 负责可视化展示。对于大促压测和线上排障,这套组合非常高效。

7. AI 导购助手为什么适合用 RAG 而不是直接让大模型回答?

电商场景中的价格、库存、优惠、活动规则、商品参数变化非常快,纯大模型无法保证实时准确。RAG 的思路是:先从企业知识库、商品库、活动配置中检索相关内容,再把检索结果作为上下文交给模型生成答案。这样能显著降低幻觉,提高可控性和业务可信度。

8. Agent 与普通问答的区别是什么?

普通问答主要是“生成答案”;Agent 则可以“理解目标—选择工具—执行动作—整合结果”。例如用户问“我的订单到哪了”,Agent 可以自动调用订单查询、物流查询、售后政策查询等工具,再综合输出。对于企业级客服、导购、工单流转、知识检索等场景,Agent 更接近真实业务流程。

9. 聊天会话内存、用户画像、工具调用标准化为什么重要?

多轮对话必须保留上下文,否则模型会“忘记”前文信息;用户画像能帮助推荐更贴合需求的商品;工具调用标准化能让 AI 与内部系统之间形成稳定接口,降低耦合度。特别是在复杂工作流中,规范的工具协议和权限控制非常关键。

10. 企业知识库问答如何兼顾准确率与权限控制?

通常要做文档加载、切分、向量化、索引构建,再结合关键词检索与向量检索进行混合召回。为了减少误答,可以增加重排模型、引用来源、答案置信度阈值。权限控制上,要在检索阶段就过滤租户、部门、角色、文档级别权限,避免模型“看见不该看的内容”。

感谢阅读,希望这篇文章能帮助你更好地准备互联网大厂 Java 面试,也希望你在真实面试中能稳住心态、讲清思路、拿下 Offer。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询