问几个面试中遇到的问题

来源:12-10 编程方式应用 Hystrix 请求合并(上)

qq_往事_8

2022-01-30

1.分布式事务相关的

在面试时遇到了一个分布式事务怎么处理的问题,我的回答中包括这种方式
图片描述

然后那个面试官问 如果在进入到catch分支后,JVM挂了 没有把库存补上怎么办。
这种问题应该怎么解决
图片描述

2.商品超卖问题
我回答的第一个方法是加分布式锁,但是分布式锁会出现阻塞,性能不是最佳的,所以我又说了个通过lua保证redis事务,cas的方式保证数据库写操作的安全问题。
然后面试官说假如有100件商品,怎么保证库存扣减没问题,我当时说不清了,面完后想了下 sql这么写可以吗

update table set count = 当前商品数 - 1 where id = xxx and count = 当前商品数;

sql要是不对,能不能教教我写一下

3.通过定时任务处理优惠券达到有效期的问题
我的回答是通过优惠券的截止时间去判断是否过期了,然后将过期的优惠券做一个批量更新。
面试官追问说如果这次过期的优惠券很多比如已经到了几万或者几十万(就是不能直接更新数据库),我怎么更新。
我说将过期的优惠券的信息发送到mq,再通过定时任务开启多个线程去消费并进行更新。

面试官又追问,怎么让定时任务更加高效的执行(避免让线程空跑,最快速做完该任务)
这个我没答上来,我当时问他 他说可以让任务错开执行(我不太理解这句话啥意思,定时任务不就是定时去刷的么,怎么才能做这种控制)

我的回答思路可能有不对的地方,希望老师能来说一下这几个问题的最佳的解决方法,谢谢

写回答

1回答

张勤一

2022-02-02

同学你好:

    (1)分布式事务仅仅通过 Java 代码的逻辑是解决不了问题的,可以看下 Seata,也是业界比较常用的解决方案

    (2)SQL 语句是对的

    (3)这个问题可以转化成 Redis 处理过期键的做法,查查 Redis 是怎么实现的。

1
0

Spring Cloud / Alibaba 微服务架构实战

从架构设计到开发实践,手把手实现

1210 学习 · 674 问题

查看课程