7-1 介绍一下你们项目中的优惠券功能
优惠卷分为两种免费领取,兑换码兑换。
1.管理端可以新建优惠卷需要指定名称,适用范围,类型,推广方式,发放数量,没人限领次数等。
2.发放优惠券需要指定发放方式,使用期限方式。定时发放可以使用Redission实现。
3.用户可以直接从优惠卷界面直接领取,如果是兑换码兑换则需要用到兑换码的校验功能。
这就是我项目中的优惠卷的功能。
7-2 你们项目中是如何防止优惠券超领的
优惠卷超领其实就是高并发下而引发的问题,最主要的解决方式其实就是加锁,一般分为乐观跟悲观锁。超龄又分为多人跟单人:
多人:
在我们项目使用的是乐观锁,一般使用乐观锁都是在数据库加上一个version的字段来解决,我们的项目使用了一个巧妙的方式在修改数量的时候加上了一个条件已发出优惠卷的数量不能超过发出的总数量。
单人:
在我们的项目中使用的是悲观锁,悲观锁又分为Synchronized和Lock锁,这里我们项目中使用的是Synchronized在锁对象中放了用户的Id,这样就一个用户在同一时间只能拿到一个锁对象。略微降低了Synchronized效率低的问题。
这样就解决了高并发下引起的优惠卷超领的问题。
7-3 事务失效的场景有哪些
1.并发问题:由于多个事务同时操作数据库,可能会导致数据不一致或者丢失更新。
2.锁问题:事务在操作数据时未正确使用锁机制,导致数据不一致或者死锁。
3.异常处理不当:事务中没有正确处理异常的情况,导致事务无法完全执行或者回滚失败。
4.网络故障:在分布式系统中,网络故障可能会导致事务无法完成。
资源耗尽:事务操作过多数据或者资源,导致系统资源不足而无法完成事务。
5.逻辑错误:开发人员编写的业务逻辑存在错误,导致事务执行出现问题。
day07业务题
于 2024-01-22 21:14:24 首次发布