表单重复提交、大并发库存超卖?面试官提出了一个老生常谈的问题,让我陷入了沉思...

  

  上午到了北3环一家公司面试,其他细节略过......其中面试官提了一个问题却让我陷入了沉思.......直接看面试题(大牛可以忽略)......

  面试官:“请问按用户的多次提交,这个问题怎么解决?”

  我不假思索说道:”这个问题也遇到过,属于表单重复提交问题吧?“

  面试官:”嗯,是的。“

  我继续道:”解决方案一般如下“

  1. 前端:在用户点击完成后,使用js改变提交按钮状态,设置为无效状态......
  2. 后端:采用重定向的方式跳转到目标页面......
  3. 使用一个token机制......

  没等说完,面试官打断了我的回答,前端JS处理是一种解决方案,但session是不能解决问题的,如果是绕过JS呢?这种多次点击可能会造成添加了多条记录,甚至库存超卖的问题。

  我记忆中一般就这几种解决方案,继续道:“没太明白你的意思”,面试官拿着简历看了看我继续道:”平时工作中没遇到这种情况吗?多次提交或者有大量的并发请求,导致重复插入记录、库存超卖问题.......“

  终于明白面试官想问什么了,其实他问的是两个问题。我继续道:”如果是高并发导致的库存超卖问题,单体架构的系统可以使用线程同步加锁机制来解决,如果是分布式系统可能需要用到redis分布式锁、基于数据库SQL、基于zookeeper......的解决方案“。

  面试官终于欣慰的说道:”lock一下是吧“然后又低头看着简历进入了下一个话题,我也就没在多说什么.......

  放下高并发这个概念先不谈,其实面试官问的是两个问题,而且不应该把这两个问题搞混。回到家后我觉得有必要把这两个问题重温、分别梳理一下.........其实网上的资料很多,但很多是直接拿来主义,说的不是很明白。而且针对不同场景有不同的解决方法,以下为我认为讲的比较清楚的文章,大家可以直接去看:

  1.   防止表单重复提交解决方案:https://www.xz577.com/j/46629.html
  2.   高并发下库存超卖类问题解决方案(线程同步、分布式锁):
    1. https://mp.weixin.qq.com/s/Nsw27TIqNXfXgfDNTevkHg
    2. https://mp.weixin.qq.com/s/XqW0dETggPa4Tgv7SMXR4g

  如果有其他不同场景下不同解决方案的朋友欢迎留言并讨论。大牛有好的文章也欢迎放出来哈......

  

原文地址:https://www.cnblogs.com/gougou1981/p/13965404.html