电商交易平台 Java 面试实战:Spring Boot、MyBatis、Kafka、Redis 与 Spring Security 进阶问答
场景:互联网大厂电商交易中台 Java 求职面试。
第一轮:基础架构与交易链路
面试官:先说说你们下单服务为什么要用 Spring Boot,而不是直接用传统 Jakarta EE?
燕双非:Spring Boot 启动快、配置少,适合微服务拆分;传统 Jakarta EE 更偏容器化部署,虽然规范完整,但在快速迭代里不如 Boot 灵活。
面试官:答得还行。那订单创建接口里,MyBatis 和 JPA 你怎么选?
燕双非:如果是复杂 SQL、强控制事务和性能,我更偏 MyBatis;如果是简单 CRUD、领域对象建模清晰,可以用 JPA。
面试官:那你说说 Redis 在秒杀库存里怎么防止超卖?
燕双非:可以先用 Redis 原子扣减库存,再异步落库;还可以配合 Lua 脚本保证操作原子性。
面试官:嗯,方向是对的,至少没把 Redis 当数据库乱用。
面试官:Kafka 在订单创建后为什么要接一层消息?
燕双非:解耦下游,比如发券、通知、风控;而且可以削峰填谷,避免高峰期直接打爆核心交易库。
第二轮:安全、事务与稳定性
面试官:交易系统里 Spring Security 和 JWT 你怎么配合?
燕双非:登录后签发 JWT,后续请求带 token,Spring Security 负责鉴权和权限控制,适合前后端分离。
面试官:如果 JWT 一旦泄露,怎么办?
燕双非:呃……可以缩短过期时间,再配合刷新令牌和黑名单机制,降低风险。
面试官:还算像样。那你们下单接口如何保证幂等?
燕双非:可以用业务唯一号,比如 requestId、订单号;服务端结合数据库唯一索引和 Redis 去重,避免重复提交。
面试官:如果 MQ 重复消费了,你怎么处理?
燕双非:消费者也要做幂等,常见是消费记录表、唯一键、状态机校验,不能只信“消息一定只来一次”。
面试官:嗯,这句很实在。那你说说 Resilience4j 在支付链路里能干嘛?
燕双非:熔断、限流、重试、隔离,防止第三方支付接口抖动拖垮整个交易链路。
第三轮:监控、演进与业务扩展
面试官:电商大促期间,你怎么用 Micrometer 和 Prometheus 看系统健康?
燕双非:打点接口 RT、QPS、错误率、JVM 指标,再用 Prometheus 抓取,Grafana 做大盘和告警。
面试官:很好。那如果订单链路很长,怎么定位一次慢请求?
燕双非:可以接入 Jaeger 或 Zipkin 做链路追踪,看每个服务的耗时和调用关系。
面试官:最后一个问题:如果你要把商品详情服务做成对外开放 API,怎么设计?
燕双非:可以用 Spring MVC 提供 REST 接口,配合 OpenAPI 生成文档;返回结构要统一,做字段脱敏、版本管理和限流保护。
面试官:行吧,今天先到这儿。你回去等通知。
所有问题详细解析
1. 为什么用 Spring Boot:在电商交易中台,服务拆分后需要快速启动、自动配置和统一依赖管理。Spring Boot 可以减少样板代码,方便与监控、配置中心、消息队列等组件集成。
2. MyBatis 与 JPA 的取舍:订单、库存、支付这类核心链路往往需要精细 SQL 优化和可控性,MyBatis 更适合;而用户信息、配置类数据若 CRUD 简单,JPA 能提升开发效率。核心是结合业务复杂度和性能要求选择。
3. Redis 防超卖:秒杀场景常见做法是使用 Redis 预扣库存,借助 Lua 保证原子性;最终再异步同步数据库。这样既能扛住流量峰值,又能避免数据库成为瓶颈。
4. Kafka 的作用:交易系统中常把“下单成功”作为领域事件发送到 Kafka,下游服务订阅后完成发券、积分、通知等动作。这样可以降低耦合,并提升系统弹性。
5. Spring Security + JWT:JWT 适合无状态认证,Spring Security 负责过滤器链、认证授权与方法级权限控制。泄露风险可通过短有效期、刷新令牌、黑名单与设备绑定来缓解。
6. 幂等设计:电商下单、支付回调、消息消费都必须考虑幂等。通常结合业务唯一键、数据库唯一约束、Redis 去重、状态机校验来实现,保证重复请求不会造成重复扣款或重复发货。
7. MQ 重复消费:消息队列只能尽量保证“至少一次”或“至多一次”语义,生产上通常要默认重复消费会发生。消费者侧要幂等,并配合死信队列、重试策略、消费日志进行治理。
8. Resilience4j 的价值:在支付、库存、会员等依赖外部服务的场景中,熔断和限流能防止级联故障,重试和隔离能提高可用性,但重试要控制次数和退避策略,避免雪崩。
9. Micrometer + Prometheus + Grafana:Micrometer 负责统一埋点,Prometheus 负责拉取与存储时序指标,Grafana 负责展示和告警。常监控 RT、错误率、JVM GC、线程池、MQ 堆积等关键指标。
10. 链路追踪:复杂订单链路通常跨多个服务,Jaeger/Zipkin 能帮助定位慢点、失败点和依赖关系,排查“谁拖慢了整体请求”。
11. 开放 API 设计:对外 API 要强调版本管理、统一响应、鉴权、限流、脱敏和文档化。OpenAPI 能帮助前后端与合作方快速联调,避免接口变更失控。
感谢阅读,希望这篇电商交易平台 Java 面试实战内容,能够帮助大家更好地准备大厂面试,少走弯路,顺利拿到心仪的 offer。


被折叠的 条评论
为什么被折叠?



