第七天业务题

7-1 介绍一下你们项目中的优惠券功能?

关于我们项目中优惠券功能,我的实现逻辑是先新增再发放,管理员在后台优惠券管理页面可查看优惠券列表。优惠券发放可以立即发放、或者定时发放。优惠券领取可以手动领取和指定领取。
管理员可以选择发放暂停和待发放状态的优惠券,优惠券使用期限分为固定天数和固定时间段

发放优惠券本质就是更新优惠券领取时间范围和使用时间范围,若优惠券领取方式是指定发放,就需要生成兑换码。生成兑换码的数量较多,所以基于线程池异步生成。

新增发放优惠券成功后,优惠券的领取方式有两种:一种是直接领取,第二种是兑换优惠券。
领取优惠券的本质是新增,其次是修改.


7-2 你们项目中是如何防止优惠券超领的 ?

我们项目中解决优惠券被超领的方式是加锁,锁一般分为乐观锁,悲观锁

1悲观锁:一种独占和排他的锁机制,保守地认为数据会被其他事务修改,所以在整个数据处理过程中将数据处于锁定状态

2,乐观锁:一种较为乐观的并发控制方法,假设多用户并发的不会产生安全问题,因此无需独占和锁定资源

我们项目中出现多人超领:在多线程的情况下,领取优惠劵的各个步骤都是独立的,不具备原子性会出现几个线程同时领取一张优惠券的现象,如果加锁的话,悲观锁安全性很高,但是性能会降低很多,乐观锁性能高,安全性高但是当并发量很高时,更新成功率会降低很多,我们选择修改SQL语句,只需要多加一个判断条件,判断总数小于已被领取的数即可。

单人超领:在多线程的情况下,代码没有加锁不具有原子性,肯定会出现线程安全问题,这里我们采用synchronized锁住代码块来解决,将用户id作为锁的条件,这样不会出现效率降低的问题


7-3 事务失效的场景有哪些?

我们项目事务失效的场景有五种

1,事务方法非public修饰

2,非事务方法调用事务方法

3,事务方法异常被捕获

4事务异常类型不对

5,事务传播行为不对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值