7-1 介绍一下你们项目中的优惠券功能
优惠券功能在我们的项目中扮演着重要的角色,主要用于提升销售、吸引新用户、增加用户黏性等作用。
优惠券的具体功能如下:
优惠券设置:商家可以自定义优惠券的优惠金额、数量、有效期、优惠券使用规则等。
优惠券获取:根据优惠券种类有两种获取方式,商家可以向用户发放优惠券,如果发现优惠券的领取方式是指定发放,则需要生成兑换码,用户也可以在商家的网站上抢优惠券。
优惠券使用:在用户购买商品时,系统需要验证用户所使用优惠券的有效性。这包括检查优惠券是否过期、是否达到最低消费金额、是否适用于购买的商品等条件。
根据优惠券的类型,系统需要计算出用户享受的优惠金额或折扣,并在结算时自动扣减相应的金额。
以上就是我们项目中优惠券所实现的功能。
7-2 你们项目中是如何防止优惠券超领的
在我们项目中发现优惠券超领有两种情况:多人超领、单人超领。针对这两种不同的情况有不同的解决方案。
多人超领时,可以使用乐观锁解决此问题,每次提交前只要判断当前数量是否小于总计数量即可。这样,只要当前数量小于总计数量,不管有多少线程来执行,都会成功。
单人超领时,可以使用悲观锁解决此问题,可以通过在领取优惠券代码块上加锁,锁用户id来解决此问题。
以上就是我们项目防止优惠券超领的解决方法。
7-3 事务失效的场景有哪些
事务失效的场景有事务方法非public修饰、非事务方法调用事务方法、事务方法的异常被捕获、事务异常类型不对、事务传播行为不对
事务方法非public修饰:由于Spring的事务是基于AOP的方式结合动态代理来实现的。因此事务方法一定要是public的,这样才能便于被Spring做事务的代理和增强。而且,在Spring内部也会有一个检查事务方法的修饰符的类。
非事务方法调用事务方法:非事务方法调用事务方法导致事务失效的原因与Spring框架的事务管理机制有关。Spring通过代理对象实现事务管理,但是非事务方法不会触发代理对象的创建,导致事务失效。
事务方法的异常被捕获:非事务方法调用事务方法时,由于异常被捕获而不会向外抛出,导致Spring无法感知事务异常,从而无法回滚事务,导致事务失效。
事务异常类型不对:Spring事务管理默认只感知RuntimeException异常,对于其他异常如IOException,Spring无法捕获并回滚事务,导致事务失效。
事务传播行为不对:事务传播行为定义了事务方法与其他事务方法的关系,包括如何处理事务的传播和边界。如果事务传播行为设置不正确,可能会导致事务失效或产生意外的结果