本人详解
作者:王文峰,参加过 优快云 2020年度博客之星,《Java王大师王天师》
公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题
中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯
转载说明:务必注明来源(注明:作者:王文峰哦)
【JAVA面试】电商库存超卖问题、分布式事务一致性ConcurrentHashMap线程安全原理Redis缓存穿透分布式ID生成器
学习教程(传送门)
1、掌握 JAVA入门到进阶知识(持续写作中……)
2、学会Oracle数据库用法(创作中……)
3、手把手教你vbs脚本制作(完善中……)
4、牛逼哄哄的 IDEA编程利器(编写中……)
5、吐血整理的 面试技巧(更新中……)
一、业务场景类问题
1. 电商库存超卖问题
问题:如何解决高并发下商品超卖问题?
答案:
- 数据库层面:使用乐观锁(版本号机制)或
SELECT ... FOR UPDATE
悲观锁。 - Redis预减库存:预扣减库存时通过
DECR
原子操作确保库存准确,扣减成功后再异步写入数据库。 - 消息队列削峰:使用 RocketMQ 或 Kafka 异步处理订单,通过消息顺序性保证最终一致性。
- 兜底策略:数据库设置
unsigned
字段防止负数库存,结合分布式锁(如 Redisson)做最终校验。
2. 秒杀系统设计
问题:如何设计一个秒杀系统?
答案:
- 分层设计:
- 流量层:Nginx 限流(令牌桶算法)+ CDN 静态资源缓存。