Java 大厂面试实录:Spring Boot + Kafka + Redis + OAuth2 下的燕双非逆袭问答
2026/9/4 17:54:42 网站建设 项目流程

Java 大厂面试实录:Spring Boot + Kafka + Redis + OAuth2 下的燕双非逆袭问答

场景:某互联网大厂 Java 岗位面试现场。

面试官:技术一把手,表情严肃,问题刁钻但有逻辑。

候选人:燕双非,外号“水货程序员”,擅长在简单题上侃侃而谈,遇到复杂问题开始含糊其辞。


第一轮:电商活动与订单链路

面试官:我们先聊一个活动场景。双十一秒杀页面由 Spring Boot 提供接口,你会怎么设计下单接口的基本结构,避免接口太重?

燕双非:这个简单,我一般会把接口拆成查询活动、校验库存、创建订单三个步骤,Controller 只负责接收参数,真正的业务放到 Service 里。还可以用 DTO 做参数隔离,避免前后端字段乱飞。

面试官:不错,至少知道分层。那如果活动流量大,你会怎么减少重复请求?

燕双非:嗯……可以用 Redis 做个幂等标记,比如用户点过一次就写个 key,过期时间设短一点。再配合前端按钮置灰,应该就差不多了。

面试官:思路基本对,能把业务和技术结合起来。那库存扣减放 Redis 还是数据库?为什么?

燕双非:库存嘛,当然先放 Redis,快。数据库最后再落。我觉得高并发先扛住再说,至于一致性……可以靠定时任务慢慢对一下。

面试官:好的,进入下一轮。


第二轮:订单消息化与安全接入

面试官:订单创建成功后,你希望通知库存、积分、物流三个系统,Kafka 和 RabbitMQ 你会怎么选?

燕双非:如果是这种解耦场景,我会倾向 Kafka,因为吞吐高,适合订单这种大流量业务。库存、积分、物流都订阅订单事件,各自消费自己的消息。

面试官:可以,能说出核心原因。那消息重复消费怎么办?

燕双非:这个……消费者那边做幂等呗,比如用订单号做唯一键,插库前先查一下有没有处理过。或者 Redis 也能记一下。反正核心就是别重复扣库存。

面试官:继续。用户登录态准备接 OAuth2,订单系统要给 App 提供授权访问,你怎么理解 JWT 和 OAuth2 的关系?

燕双非:OAuth2 是授权协议,JWT 是一种 token 格式。OAuth2 可以用 JWT 来做 access token,这样服务端少查数据库。用户拿 token 调接口,资源服务器验签就行。

面试官:回答得不错。那如果 token 被盗了,怎么降低风险?

燕双非:这个我觉得可以缩短 access token 有效期,再配 refresh token。再加上设备绑定、黑名单之类的……应该就比较稳了。

面试官:行,第三轮我们聊深入一点。


第三轮:可观测性、AI 与架构演进

面试官:现在公司想在订单客服里接入 AI 智能助手,支持用户用自然语言查订单、查退款、查物流。你会怎么做一个 RAG 系统?

燕双非:先把订单、售后、物流文档做文档加载,然后切分成 chunk,向量化后存进向量数据库,比如 Milvus 或 Redis。用户提问时先做语义检索,再把检索结果拼到提示词里交给大模型生成回答。

面试官:不错,已经能讲到 Agent 和 RAG 结合了。那如果用户问的问题很复杂,比如“上周五买的那单为什么退款失败”,你怎么保证答案可靠?

燕双非:那就不能只靠大模型胡说了,得让 Agent 调用订单查询、退款状态、风控结果这些工具,拿到真实业务数据后再回答。还能加一个提示填充模板,把角色、约束、事实来源都写清楚,减少幻觉。

面试官:好,说明你至少知道 AI 不是纯聊天。最后一个问题,怎么监控这条链路的性能?

燕双非:接口层可以用 Micrometer 打点,Prometheus 抓指标,Grafana 看图。消息链路还可以加 traceId,配合 Jaeger 或 Zipkin 跟踪。要是线上慢了,就能定位是接口、缓存还是 Kafka 消费慢。

面试官:说得还算完整。今天就到这里,你回家等通知吧。


所有面试题详细解答

1. Spring Boot 下如何设计高并发活动接口

在电商秒杀、抢券、限时活动中,接口设计的关键是轻量化可扩展。Controller 只做参数接收和返回,核心业务进入 Service。查询、库存校验、创建订单可以拆分为独立方法,便于后续做限流、熔断、降级和异步化。

业务上应优先减少同步链路耗时,例如将风控校验、积分发放等非核心动作拆到异步消息中。对于热点接口,可结合缓存、预热、静态化页面等手段降低后端压力。

2. Redis 幂等与库存预扣减

对于重复点击、网络重试等场景,Redis 非常适合做幂等标记。可以使用用户 ID、活动 ID、商品 ID 组合成唯一键,首次请求写入成功后,后续请求直接拒绝。

库存扣减通常有两类思路:一种是直接在数据库中事务扣减,简单但抗压差;另一种是 Redis 预扣减,先在缓存中原子减少库存,订单成功后异步落库。后者适合高并发,但必须处理缓存与数据库的一致性、补偿机制和异常恢复。

3. Kafka 适合什么样的业务事件

Kafka 适合高吞吐、可堆积、可回放的事件流场景,比如订单创建、支付成功、用户行为埋点、日志采集等。订单系统创建成功后发布订单事件,库存、积分、物流等服务各自消费,能有效解耦。

需要注意的是,Kafka 更偏向日志流和事件流,不适合强事务、超低延迟、严格顺序的复杂业务控制。实际项目中通常会结合幂等、重试、死信处理、补偿任务一起使用。

4. 消息重复消费如何处理

分布式环境中重复消费不可避免,因此消费者必须具备幂等性。常见做法包括:

  • 以业务唯一键建唯一索引,重复插入时直接失败。
  • 在数据库记录处理状态,消费前检查状态。
  • 使用

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

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

立即咨询