Java大厂面试真题:Spring Boot + Kafka + Redis 在电商场景下的高频考点与解析

面试现场:电商大促背后的Java技术栈拷问

面试官(严肃脸):欢迎来我们电商平台Java岗的终面,我是技术主管。先简单介绍一下你自己。

GGBond(咧嘴笑):我叫GGBond,三年搬砖经验,精通Ctrl+C和Ctrl+V,擅长面向百度编程,曾用System.out.println调试到凌晨两点!

面试官(皱眉):……我们开始吧。


第一轮:核心语言与Web框架(Spring Boot)

  1. 面试官:你在项目中用过Spring Boot自动配置吗?能说说它的原理吗? GGBond:当然!就是加个@SpringBootApplication,然后它就“啪”地一下自动配好了,像魔法一样! 面试官(点头):不错,其实它是通过@EnableAutoConfiguration扫描META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports加载自动配置类,结合条件注解@ConditionalOnClass等实现按需装配。

  2. 面试官:如果我想自定义一个Starter,该怎么设计? GGBond:新建个模块,写个配置类,再在spring.factories注册就行……哦现在是AutoConfiguration.imports了! 面试官:很好,注意 Starter 只引入自动配置,业务代码放 autoconfigure 模块。

  3. 面试官:Spring Boot 的外部化配置有哪些方式?优先级呢? GGBond:有 application.yml、环境变量、命令行参数……优先级是命令行 > 环境变量 > 配置文件! 面试官:正确,线上推荐使用 Config Server 或 K8s ConfigMap 统一管理。


第二轮:消息队列与缓存(Kafka + Redis)

  1. 面试官:大促期间订单激增,如何用Kafka削峰填谷? GGBond:把订单发到Kafka,后面慢慢消费,就像排队买奶茶,不会挤爆柜台! 面试官(微笑):比喻不错。具体是订单服务生产消息,订单处理服务异步消费,避免数据库瞬时压力过大。

  2. 面试官:库存扣减怎么防止超卖?Redis怎么用? GGBond:先用Redis扣库存,key是商品ID,用DECR原子操作!扣成功再下订单。 面试官:对,但要注意Redis宕机怎么办? GGBond:呃……我、我加个本地缓存兜底? 面试官:建议结合数据库最终一致性,或使用Redisson分布式锁。

  3. 面试官:Kafka消费者如何保证不重复消费? GGBond:提交offset嘛!手动提交最安全。 面试官:但如果消费成功但提交失败呢? GGBond:那就会重复……要不我加个去重表? 面试官:可以,幂等设计很关键,比如订单号唯一索引。


第三轮:微服务与高可用(Spring Cloud + Resilience4j)

  1. 面试官:订单服务调用库存服务失败,如何降级? GGBond:用Hystrix?哦我们用Resilience4j做熔断,失败就返回“库存服务忙,请稍后重试”。 面试官:很好,状态机有哪几种? GGBond:关闭、打开、半开……半开就是试探性放请求过去!

  2. 面试官:如果网络抖动导致短暂不可用,如何快速恢复? GGBond:设置超时时间短一点,重试三次! 面试官:重试会不会加剧雪崩? GGBond:啊……那加个限流? 面试官:对,结合Retry + CircuitBreaker + RateLimiter 多重防护。

  3. 面试官:服务注册中心选型,Eureka和Consul有什么区别? GGBond:Eureka是AP,Consul是CP,我们用Nacos…… 面试官:嗯,Nacos兼具配置中心功能,适合国内环境。


面试官:今天先到这里,你的基础还可以,回去等通知吧。

GGBond(小声):又是这句……该不会又挂了吧……


答案详解:电商大促的技术架构设计

业务场景

大型电商平台在双11、618等大促期间面临瞬时高并发,核心挑战包括:

  • 订单创建峰值可达百万级/秒
  • 库存超卖风险
  • 服务雪崩连锁反应
  • 数据一致性要求高

技术方案解析

1. Spring Boot 自动配置原理
  • 核心技术@EnableAutoConfiguration + spring-boot-autoconfigure
  • 机制:启动时扫描 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 中的配置类,通过 @Conditional 系列注解判断是否加载。
  • 示例DataSourceAutoConfiguration 会检查是否有 DataSource 类在classpath,且未手动定义Bean才生效。
2. Kafka 削峰填谷
  • 流程:用户下单 → 写入Kafka Topic → 异步消费落库
  • 优势:解耦生产者与消费者,平滑流量曲线
  • 配置:设置足够多的Partition支持并行消费,启用消息压缩减少带宽
3. Redis 防止超卖
  • 方案
    -- 原子扣减库存
    if redis.call('get', KEYS[1]) >= tonumber(ARGV[1]) then
        return redis.call('decrby', KEYS[1], ARGV[1])
    else
        return -1
    end
    
  • 补充:结合数据库TCC或Saga模式保证最终一致性
4. 消息幂等性保障
  • 方法
    • 数据库唯一索引(如订单号)
    • Redis记录已消费消息ID(设置TTL)
    • 业务状态机控制(如订单状态流转)
5. 微服务容错设计(Resilience4j)
  • CircuitBreaker
    • CLOSED:正常请求
    • OPEN:失败率超阈值,直接拒绝
    • HALF_OPEN:尝试放行部分请求探测服务状态
  • 组合策略
    resilience4j.circuitbreaker.instances.orderService.failureRateThreshold=50
    resilience4j.retry.instances.orderService.maxAttempts=3
    resilience4j.ratelimiter.instances.orderService.limitForPeriod=10
    

推荐技术栈组合

| 场景 | 推荐技术 | |------|----------| | 服务框架 | Spring Boot 3 + Spring Cloud Alibaba | | 消息中间件 | Apache Kafka / RocketMQ | | 缓存 | Redis Cluster + Local Caffeine | | 注册中心 | Nacos | | 容错 | Resilience4j | | 监控 | Prometheus + Grafana + SkyWalking |


总结:大厂面试不仅考察知识点,更看重场景理解系统思维。建议掌握“业务痛点 → 技术选型 → 落地细节 → 容灾预案”的完整链路。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值