Java面试实战:电商高并发与分布式事务处理

发布于:2025-07-28 ⋅ 阅读:(12) ⋅ 点赞:(0)

Java面试实战:电商高并发与分布式事务处理

面试现场:电商技术终面室

面试官:谢飞机同学,今天我们聚焦电商系统的高并发架构和分布式事务处理技术。 谢飞机:(自信地)面试官好!我研究过双十一架构,秒杀系统、分布式事务这些我都懂!


第一轮:电商基础架构

面试官:请详细描述电商秒杀系统的架构设计,如何解决高并发和超卖问题? 谢飞机:(眼睛发亮)秒杀系统要限流!用Redis预减库存!消息队列异步下单!超卖问题用Redis分布式锁!对,还有前端限流按钮置灰! 面试官:(点头)不错。Redis的分布式锁实现有哪些方式?Redisson和自研实现各有什么优缺点? 谢飞机:Redisson封装了各种锁!有可重入锁、公平锁、红锁!自研用SET NX EX命令!Redisson优点是功能全,缺点是多依赖;自研轻量但要处理超时释放问题! 面试官:如何设计一个高可用的商品详情页?静态化和缓存策略是什么? 谢飞机:(挠头)商品详情页用Nginx静态化!CDN加速!缓存分多级:本地缓存Caffeine→Redis→数据库!热点商品预热!


第二轮:高并发处理

面试官:电商系统的流量削峰有哪些策略?消息队列在其中扮演什么角色? 谢飞机:(快速回答)削峰用队列缓冲!请求排队!消息队列解耦、削峰、异步通信!Kafka吞吐量高适合秒杀!RabbitMQ有死信队列适合订单超时处理! 面试官:如何优化MySQL在高并发场景下的性能?分库分表的实现方案和挑战是什么? 谢飞机:加索引!读写分离!分库分表用Sharding-JDBC!水平分表按用户ID哈希!挑战是分布式事务和跨表查询! 面试官:Redis集群的部署方式有哪些?哨兵模式和Cluster模式的区别是什么?如何处理缓存穿透、击穿和雪崩? 谢飞机:(语速加快)有主从、哨兵、Cluster!哨兵是主从切换,Cluster是分片存储!穿透用布隆过滤器!击穿用互斥锁!雪崩设置不同过期时间!


第三轮:分布式事务与安全

面试官:电商支付场景中如何保证分布式事务的一致性?Seata的AT模式和TCC模式有什么区别? 谢飞机:(眼神飘忽)用Seata!AT模式自动生成undo log!TCC要手写Try-Confirm-Cancel!AT模式侵入性低,TCC性能好! 面试官:如何设计一个防重复提交的方案?令牌桶算法和漏桶算法的应用场景是什么? 谢飞机:前端按钮置灰!后端用Redis存token!令牌桶允许突发流量,漏桶控制流出速率!秒杀用令牌桶! 面试官:电商系统的接口安全有哪些措施?如何防止接口被恶意调用和数据泄露? 谢飞机:(紧张地)用HTTPS!接口签名!时间戳防重放!限流!敏感数据加密!输入校验! 面试官:(合上电脑)今天的面试就到这里,请回家等通知。 谢飞机:(松口气)好的!希望能收到好消息!


技术点深度解析

一、秒杀系统架构

  1. 核心架构设计

    客户端 → CDN → 负载均衡 → 限流层 → 应用服务 → 消息队列 → 数据库
    
    • 限流层:Nginx限流 + Redis计数器
    • 应用服务:无状态设计,水平扩展
    • 数据层:Redis预扣库存,数据库最终一致性
  2. 超卖问题解决方案

    • Redis预扣库存
      // 库存预扣
      Long remain = redisTemplate.opsForValue().decrement("seckill:stock:" + goodsId);
      if (remain < 0) {
          // 库存不足,回滚
          redisTemplate.opsForValue().increment("seckill:stock:" + goodsId);
          return "库存不足";
      }
      
    • 分布式锁:Redisson可重入锁保证原子操作
    • 数据库最终校验:最终库存以数据库为准,定期对账

二、Redis高可用方案

  1. 部署模式对比 | 模式 | 优点 | 缺点 | 适用场景 | |------|------|------|----------| | 主从 | 简单,读写分离 | 手动故障转移 | 开发环境 | | 哨兵 | 自动故障转移 | 不能水平扩展 | 中小规模 | | Cluster | 分片存储,水平扩展 | 运维复杂 | 大规模生产环境 |

  2. 缓存三大问题解决方案

    • 缓存穿透
      • 布隆过滤器过滤无效key
      • 空值缓存 + 短期过期
    • 缓存击穿
      • 互斥锁(Redis SET NX)
      • 热点数据永不过期
    • 缓存雪崩
      • 过期时间加随机值
      • 多级缓存
      • Redis集群

三、分布式事务实战

  1. Seata AT模式原理

    • 一阶段
      1. 解析SQL,生成undo/redo log
      2. 执行SQL并提交本地事务
      3. 上报事务状态
    • 二阶段
      • 成功:异步删除undo log
      • 失败:根据undo log回滚
    • 适用场景:无侵入,适用于大多数业务场景
  2. TCC模式实现

    // Try阶段:预扣库存
    @Transactional
    public boolean tryDeductStock(Long goodsId, int quantity) {
        // 检查库存
        // 预扣库存(状态标记为冻结)
    }
    
    // Confirm阶段:确认扣减
    @Transactional
    public boolean confirmDeductStock(Long goodsId, int quantity) {
        // 将冻结库存转为实际扣减
    }
    
    // Cancel阶段:取消扣减
    @Transactional
    public boolean cancelDeductStock(Long goodsId, int quantity) {
        // 回滚冻结库存
    }
    
    • 适用场景:高性能要求,如金融支付

面试锦囊:电商场景是大厂面试高频考点,重点掌握高并发处理三板斧(限流、缓存、异步)和分布式事务解决方案。准备一个完整的秒杀系统设计方案,能显著提升面试通过率。


网站公告

今日签到

点亮在社区的每一天
去签到