面试:经典问题解决思路

1. 秒杀系统架构

参考:秒杀系统架构优化思路

2. 如何防止订单重复提交

重复提交原因:

  1. 一种是由于用户在短时间内多次点击下单按钮,或浏览器刷新按钮导致。
  2. 另一种则是由于Nginx或类似于SpringCloud Gateway的网关层,进行超时重试造成的。
方案 描述 优点 缺点
方案一 提交订单按钮置灰 简单易实现,常用于短信验证码场景 只能解决多次点击下单按钮的问题
方案二 设计一个服务,预生成全局唯一订单号,如UUID,提交订单前先取这个唯一单号ID,然后带上ID提交,在后端通过唯一索引做幂等和防重 要多请求一次、多增加了一个分布式服务、QPS高时服务压力大、数据库多设计了一个单号字段
方案三 修改方案二,由前端生成唯一订单号 比方案二少一次服务请求,服务器压力降低 依然需要新增字段
方案四 使用用户id+分隔符+商品ID拼成一个临时标识符,用它做key在redis上生成一个校验对象,并过期自动删除,提交时用这个key做校验防止重复提交 只需要后端修改、不需要修改数据库
相关推荐
T___T1 小时前
全方位解释 JavaScript 执行机制(从底层到实战)
前端·面试
9号达人1 小时前
普通公司对账系统的现实困境与解决方案
java·后端·面试
程序员杰哥2 小时前
软件测试之压力测试详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·压力测试
勤劳打代码2 小时前
条分缕析 —— 通过 Demo 深入浅出 Provider 原理
flutter·面试·dart
努力学算法的蒟蒻2 小时前
day10(11.7)——leetcode面试经典150
面试
进击的野人3 小时前
JavaScript 中的数组映射方法与面向对象特性深度解析
javascript·面试
南山安3 小时前
以腾讯面试题深度剖析JavaScript:从数组map方法到面向对象本质
javascript·面试
橘颂TA5 小时前
【剑斩OFFER】算法的暴力美学——二分查找
算法·leetcode·面试·职场和发展·c/c++
吃着火锅x唱着歌13 小时前
LeetCode 1128.等价多米诺骨牌对的数量
算法·leetcode·职场和发展
java1234_小锋15 小时前
Spring事件监听的核心机制是什么?
java·spring·面试