尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Spring Boot + Kafka + Redis + OpenFeign:互联网大厂 Java 面试实战(电商场景)

Spring Boot + Kafka + Redis + OpenFeign:互联网大厂 Java 面试实战(电商场景) Spring Boot Kafka Redis OpenFeign互联网大厂 Java 面试实战电商场景今天的面试场景设定在一家互联网大厂的电商中台团队面试官严肃认真候选人是外号“水货程序员”的燕双非。面试围绕电商大促、订单链路、库存一致性、消息削峰、缓存与降级等典型业务展开。第一轮订单链路与基础架构面试官你先说说电商下单接口为什么通常不直接同步扣库存而是通过消息队列异步处理燕双非因为同步扣库存太慢了用户点一下要等半天。用 Kafka 先把订单消息发出去前台先返回成功或者处理中后面消费者慢慢扣库存这样能抗住大促流量。面试官回答得还可以。那如果 Kafka 消息重复消费了你怎么保证库存不会被多扣燕双非这个嘛……可以给每条消息加个唯一 ID然后库存扣减的时候做幂等校验数据库里记录处理过的消息。再不行就加分布式锁应该也能顶住吧。面试官思路方向对幂等是关键。那下单成功后订单服务和库存服务怎么保证最终一致性燕双非可以用本地消息表或者事务消息。订单落库和待发送消息放在一个本地事务里成功后再投递如果投递失败就定时补偿。这样订单和库存最终能对齐。面试官不错至少不是只会背概念。那你说说 Spring Boot 在这个订单服务里主要解决了什么问题燕双非Spring Boot 就是开箱即用少配很多 XML。像 REST 接口、自动装配、监控、配置管理都能快速做起来适合这种要快速迭代的业务。第二轮缓存、降级与微服务治理面试官高峰期商品详情页访问量暴涨你会怎么设计缓存燕双非先用 Redis 缓存热点商品信息查不到再回源数据库本地再加个 Caffeine 做二级缓存减少 Redis 压力。然后给热点 key 设置合理过期时间。面试官如果发生缓存击穿怎么办燕双非呃……可以给热点 key 加互斥锁保证同一时间只有一个线程去查数据库其他线程等结果。或者用逻辑过期先返回旧值再异步刷新。面试官那缓存雪崩和穿透呢燕双非雪崩就是很多 key 一起过期可以加随机过期时间、做多级缓存。穿透就是查不存在的数据可以缓存空值或者接入布隆过滤器。这个我记得还挺清楚。面试官订单服务要调用优惠券服务、积分服务、支付服务你怎么做服务间调用和容错燕双非可以用 OpenFeign 做声明式调用配合 Resilience4j 做限流、熔断、重试和隔离。支付链路比较敏感重试要谨慎避免重复扣款。面试官如果某个下游服务整体变慢你怎么避免拖垮整个订单服务燕双非可以设置超时、舱壁隔离、降级返回默认值。比如优惠券服务挂了订单可以先按原价下单后面再补偿处理。第三轮交易一致性与可观测性面试官电商支付回调这个环节你如何设计幂等和对账燕双非支付回调可能会重复发所以要基于支付单号做幂等。收到回调先查状态如果已经成功就直接返回。然后通过定时任务和支付平台做对账发现差异就人工或自动修复。面试官订单、支付、库存跨多个服务为什么你不直接上分布式事务燕双非因为分布式事务太重了强一致性会影响可用性和性能。电商更常用最终一致性比如消息驱动、补偿、Saga 这些方式工程上更稳一点。面试官最后一个问题怎么排查线上订单超时、消息堆积、接口 RT 飙升燕双非先看 Prometheus 和 Grafana 指标再结合日志和链路追踪比如 Zipkin 或 Jaeger定位是 Kafka 堆积、数据库慢查询还是某个接口超时。Spring Boot 还能配 Micrometer 打埋点方便做统一监控。面试官嗯今天先到这里。整体上你对电商链路的理解还算有点东西不过有些细节还不够扎实。你先回去等通知吧。所有面试题详细解析1. 为什么下单后常用消息队列异步扣库存电商大促下核心矛盾是流量突增与后端资源有限。同步扣库存会把用户请求完全阻塞在数据库和库存服务上导致响应慢、失败率高。使用 Kafka、RabbitMQ 或 Pulsar 这类消息队列可以把峰值流量削平订单服务先快速完成主流程库存服务异步消费消息完成扣减从而提升吞吐量和系统弹性。2. 如何处理消息重复消费消息队列通常只能保证至少一次投递因此重复消费是常态。解决核心是幂等使用业务唯一键、消息唯一 ID、去重表、状态机校验或数据库唯一约束。以库存扣减为例可在库存流水表中记录订单号若订单号已存在则直接返回不再重复扣减。3. 如何保证订单与库存最终一致常见方案有本地消息表、事务消息、可靠消息最终一致性、Saga 补偿等。本地消息表适合业务可控场景订单事务和消息记录同库同事务提交再由后台任务补发消息。事务消息适合支持消息事务的 MQ。无论哪种方案本质都是“先记录状态再异步推进并提供补偿”。4. Spring Boot 在订单服务中的价值是什么Spring Boot 提供自动配置、starter 依赖、内嵌容器和统一约定能显著减少项目初始化成本。对于订单服务这类高迭代系统开发者可以快速接入 Web、Redis、Kafka、监控和安全组件把精力放在业务流程而不是繁琐配置上。5. 如何设计商品详情页缓存通常会采用多级缓存本地缓存如 Caffeine应对极热点数据分布式缓存如 Redis承担绝大部分读压力数据库作为最终数据源。缓存策略需要考虑过期时间、主动失效、更新时机和一致性要求。详情页这类读多写少场景非常适合缓存但要防止热点 key 过期带来的瞬时回源。6. 什么是缓存击穿、穿透、雪崩击穿是热点 key 失效后大量请求同时回源穿透是请求的数据本来就不存在缓存和数据库都查不到雪崩是大量 key 同时失效或缓存服务整体不可用。对应策略分别是互斥锁/逻辑过期、缓存空值/布隆过滤器、随机过期时间/多级缓存/限流降级。7. 为什么用 OpenFeign Resilience4jOpenFeign 适合声明式微服务调用写法简洁便于与注册发现和负载均衡集成。Resilience4j 则提供限流、熔断、重试、隔离等容错能力尤其适合电商这种依赖链较长的场景。需要注意的是支付等幂等敏感接口不宜盲目重试以免造成重复扣款或状态混乱。8. 为什么不轻易使用分布式事务分布式事务虽然能提供强一致性语义但会带来更高的延迟、复杂度和资源开销。在高并发电商系统里过度追求强一致性往往损害可用性。工程实践中更常见的是最终一致性通过消息驱动、补偿任务、状态机和对账机制保证业务正确性。9. 支付回调如何做幂等与对账支付回调可能重复、乱序、延迟到达因此必须基于支付单号或交易号做幂等校验先查当前状态再决定是否更新。对账则是用支付平台账单与内部订单账务进行比对发现成功未落库、失败误成功、金额不一致等问题后通过自动修复或人工介入处理。10. 如何排查订单超时、消息堆积和 RT 飙升先从监控入手看 Prometheus 指标、Grafana 仪表盘、JVM 状态、Kafka 消费滞后、数据库 QPS 与慢查询。再结合日志和分布式链路追踪Zipkin/Jaeger定位瓶颈点。常见原因包括线程池耗尽、连接池不足、下游接口慢、锁竞争、GC 停顿或 SQL 未命中索引。总结电商系统面试最重要的是把“高并发、最终一致性、可观测性、容错治理”串成一条完整业务链。能讲清楚为什么这么设计、出现问题怎么兜底、如何监控和恢复才算真正理解了大厂 Java 面试中的核心能力。感谢阅读希望这篇文章能帮助你更好地准备互联网大厂 Java 面试祝你面试顺利、一路通关
返回列表