7-1 介绍一下你们项目中的优惠券功能
在我们的项目中优惠券的具体功能如下:
优惠券设置:商家可以自定义优惠券的优惠金额、数量、有效期、优惠券使用规则等。
优惠券获取:手动领取:就是展示在用户端页面,由用户自己手动点击领取,指定发放:就是兑换码模式,后台给优惠券生成N张兑换码,由管理员发放给指定用户
优惠券使用:在用户购买商品时,系统需要验证用户所使用优惠券的有效性。这包括检查优惠券是否过期、是否达到最低消费金额、是否适用于购买的商品等条件。
根据优惠券的类型,系统需要计算出用户享受的优惠金额或折扣,并在结算时自动扣减相应的金额。
以上就是我们项目中优惠券所实现的功能。
7-2 你们项目中是如何防止优惠券超领的
在我们的项目中优惠券超领分为:多人超领,单人超领
多人超领:出现的原因主要是:多线程并行运行、多行代码操作共享资源,但不具备原子性
要解决这种并发问题,方案基本就是加锁,锁一般可以分为:悲观锁、乐观锁
在我们的项目中采用的是乐观锁来解决的,在每次提交前都判断一下已领优惠券数量是否大于总优惠券数量,大于才会对表中已领优惠券数量进行修改。
单人超领:出现的原因主要是:并发场景下,实时查询的判断逻辑会存在失效问题
对于读的操作,我们一般都是采用悲观锁,常见的有Synchronized、Lock
在我们的项目中使用Synchronized,可以通过在领取优惠券代码块上加锁,锁用户id来解决此问题。
7-3 事务失效的场景有哪些
事务失效场景主要有这么几种:
1、事务方法非public修饰
2、非事务方法调用事务方法
3、事务方法的异常被捕获
4、事务异常类型不对
5、事务传播行为不对