答面试官问:如何防超卖,有几种实现方式
面试官 实现 如何 方式 几种
2023-09-11 14:14:56 时间
场景
第一种方法 悲观锁
总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。
简而言之,悲观锁主要用于保护数据的完整性。当多个事务并发执行时,某个事务对数据应用了锁,则其他事务只能等该事务执行完了,才能进行对该数据进行修改操作。
第二种办法 乐观锁
乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。
第三种方法 redis 消息队列
在秒杀的情况下,高频率的去读写数据库,会严重造成性能问题。所以必须借助其他服务, 利用 redis 的单线程预减库存。比如商品有 100 件。那么我在 redis 存储一个 k,v。例如
每一个用户线程进来,key 值就减 1,等减到 0 的时候,全部拒绝剩下的请求。
那么也就是只有 100 个线程会进入到后续操作。所以一定不会出现超卖的现象。
第四种办法 redis 分布式锁
待续更新…
相关文章
- 程序员笔试和面试过程中,有哪些是面试官眼中的减分项和加分项?
- 面试官: Flink双流JOIN了解吗? 简单说说其实现原理
- 开发者必看,面试官心中的最佳数据库人才模型是什么样?
- 面试官:你对Redis缓存了解吗?面对这11道面试题是否有很多问号?
- 面试官说“一开始工资不会给你太高,你可以接受吗?” 怎么怼回去??
- ## 【分布式事务】面试官问我:MySQL中的XA事务崩溃了如何恢复??
- 面试官:讲讲Redis的五大数据类型?如何使用?(内含完整测试源码)
- 【Nginx】面试官:给我讲讲Nginx如何实现四层负载均衡?
- 【MySQL】面试官问我:MySQL如何实现无数据插入,有数据更新?我是这样回答的!
- 【面经】面试官问我:数据库中事务的隔离级别有哪些?各自有什么特点?然而。。。
- 【Spring注解驱动开发】如何实现方法、构造器位置的自动装配?我这样回答让面试官很满意!
- 软件测试(应届生)找实习,面试官最想听到的答案是什么?
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序(在技术一轮面试中,有些面试官会这样问)
- 面试官:给你一段有问题的SQL,如何优化?(手把手带你优化一遍)
- 软件测试面试,8年测试老兵竟被面试官10分钟pass,这也太难了吧