面试:经典问题解决思路

1. 秒杀系统架构

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

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

重复提交原因:

  1. 一种是由于用户在短时间内多次点击下单按钮,或浏览器刷新按钮导致。
  2. 另一种则是由于Nginx或类似于SpringCloud Gateway的网关层,进行超时重试造成的。
方案 描述 优点 缺点
方案一 提交订单按钮置灰 简单易实现,常用于短信验证码场景 只能解决多次点击下单按钮的问题
方案二 设计一个服务,预生成全局唯一订单号,如UUID,提交订单前先取这个唯一单号ID,然后带上ID提交,在后端通过唯一索引做幂等和防重 要多请求一次、多增加了一个分布式服务、QPS高时服务压力大、数据库多设计了一个单号字段
方案三 修改方案二,由前端生成唯一订单号 比方案二少一次服务请求,服务器压力降低 依然需要新增字段
方案四 使用用户id+分隔符+商品ID拼成一个临时标识符,用它做key在redis上生成一个校验对象,并过期自动删除,提交时用这个key做校验防止重复提交 只需要后端修改、不需要修改数据库
相关推荐
爱学习的小鱼gogo11 分钟前
python 矩阵中寻找就接近的目标值 (矩阵-中等)含源码(八)
开发语言·经验分享·python·算法·职场和发展·矩阵
锥栗1 小时前
【Redis】【缓存】理解缓存三大问题:缓存穿透、缓存击穿与缓存雪崩及解决方案
java·后端·面试
9号达人1 小时前
泛型+函数式:让策略模式不再是复制粘贴地狱
java·后端·面试
怪兽20141 小时前
Looper、MessageQueue、Message及Handler的关系是什么?如何保证MessageQueue的并发访问安全?
android·面试
洛小豆3 小时前
java 中 char 类型变量能不能储存一个中文的汉字,为什么?
java·后端·面试
一只学java的小汉堡4 小时前
Java 面试高频题:HashMap 与 ConcurrentHashMap 深度解析(含 JDK1.8 优化与线程安全原理)
java·开发语言·面试
代码对我眨眼睛6 小时前
226. 翻转二叉树 LeetCode 热题 HOT 100
算法·leetcode·职场和发展
黑色的山岗在沉睡7 小时前
LeetCode 494. 目标和
算法·leetcode·职场和发展
GISer_Jing13 小时前
ByteDance——jy真题
前端·javascript·面试
莫叫石榴姐13 小时前
SQL百题斩:从入门到精通,一站式解锁数据世界
大数据·数据仓库·sql·面试·职场和发展