7-1 介绍一下你们项目中的优惠券功能
优惠券的正常使用有以下流程:创建优惠券->发放->用户端查看->领取使用
1.首先进入后台管理页面,管理员可以查看 优惠券列表信息 等相关操作。
2.当新创建一个优惠券时,需要选择优惠券的发放方式和领取方式。
优惠券的发放:
-
立即发放:优惠券立刻生效,直接出现在用户端页面供用户领取
-
定时发放:定一个发放开始时间,时间到期后才会进入出现在用户端页面
优惠券的领取方式:
-
手动领取:就是展示在用户端页面,由用户自己手动点击领取
-
指定发放:就是兑换码模式,后台给优惠券生成N张兑换码,由管理员发放给指定用户。
3.最后用户就可以在个人中心“我的优惠券”中,查看、领取、使用已发放的优惠券。
以上就是我的项目中优惠券功能的大体介绍。
7-2 你们项目中是如何防止优惠券超领的
我们项目优惠券防止超领可分为,多人超领和单人超领。
多人超领:每个人每次都不一样。建议使用乐观锁。
单人超领:没有加锁,不具备原子性。多线程并发访问,出现安全问题。
在项目中防止优惠券超领可以采取以下几种策略:
-
限制领取数量:在发放优惠券时,可以设置每个用户或每个账号只能领取一定数量的优惠券。这样可以限制用户领取过多的优惠券,避免超领情况的发生。
-
设置有效期限:为每个优惠券设置有效期限,确保用户在一定时间内使用优惠券,避免用户长时间持有大量优惠券而不使用。
-
绑定用户身份:将优惠券与用户的身份进行绑定,确保每个用户只能使用自己领取的优惠券,避免用户之间的优惠券互相转让或滥用。
-
监控和限制频率:对于优惠券的领取和使用操作,可以进行监控和限制频率。例如,限制用户在一段时间内只能领取一次优惠券,或者限制用户在一段时间内只能使用一次优惠券。
-
验证和校验:在用户使用优惠券时,进行验证和校验操作,确保优惠券的有效性和合法性。例如,验证优惠券的有效期、使用条件等,避免用户使用过期或不符合条件的优惠券。
7-3 事务失效的场景有哪些
事务失效的场景大概有以下几种:
1.事务方法非public修饰
由于Spring的事务是基于AOP的方式结合动态代理来实现的。因此事务方法一定一定要是public的,这样才能被Spring做事务的代理和增强。
2.非事务方法调用事务方法
非事务方法调用事务方法,其实隐含了一个this. 的前缀。就相当于是直接调用原始的普通方法,而非被Spring代理对象的代理方法,所以事务就肯定失效了。
3.事务方法的异常被捕获
事务方法内部捕获了异常,也就是说在方法执行过程中即使出现了异常也不会向外抛出。而Spring的事务管理就是要感知业务方法的异常,当捕获到异常后才会回滚事务。
现在异常被捕获,就会导致Spring无法感知事务异常,自然不会回滚,事务就失效了。
4.事务异常类型不对
Spring的事务管理默认感知的是RuntimeException,当时事务方法内部抛出了一个IOException时,不会被Spring捕获,因此就不会触发事务回滚,导致事务失效。
5.事务传播行为不对
当一个事务方法内部调用了另一个事务方法,但这两个方法的事务传播行为设置不当时,可能会导致事务的嵌套或事务传播行为冲突,从而导致事务失效。