7-1 介绍一下你们项目中的优惠券功能
在我们项目中,我们编写特定的微服务来实现优惠券功能,主要流程如下:
1,首先是创建擦创建优惠券,优惠券的使用范围,类型,折扣力度,发放数量,限量数量等都是优惠券的字段参数;
2,然后是发放优惠券,需要设置发放优惠券的方式和发放时间范围,以及使用有效期
3,最后是领取和兑换优惠券,用户直接领取,或通过兑换码领取、可以通过BitMap判断用户是否领取过。
这就是我在项目中的优惠券功能。
7-2 你们项目中是如何防止优惠券超领的
优惠券超领分为两种情况。分别是多人并发下超过发放数量和单人并发超过每人限领。
首先是多人并发下超过发放数量。查询优惠券;领取数量<总数量;操作数据库领取数量+1 这三个操作是独立的,不具备原子性。
解决:我们使用的是乐观锁,并且基于数据库自带锁的情况,在更新优惠卷领取数量时加上条件领取数量<总数量。
然后是单人并发超过每人限领。判断数据库是否超过预领;修改数据库领取数据+1;像数据库中添加用户领取信息 这三个数据的操作是独立的,不具备原子性。
解决:我们使用的是悲观锁,我们在这里使用的是Synchronized同步代码块,锁用户id,来判断单人是否超领。
以上就是我们止优惠券超领的措施。
7-3 事务失效的场景有哪些
事务失效指的是在数据库事务处理中,事务没有按照预期的方式执行或者没有达到预期的结果。
失效的原因有以下几种:
1.事务方法非public修饰。
2.非事务方法调用事务方法。
3.事务方法的异常被捕获。
4.事务异常类型不对。
5.事务传播行为不对。
以上就是我们了解的失误失效场景。