阿里巴巴
2023/4/11 阿里后端一面
Q:开始问了我成品油源平衡系统的开发相关问题,提的问题是常规套路:
- 介绍一下项目
- 有哪些常规的定时任务方案选型
- 原本项目是单机的,如果部署到多机下,如何解决多个定时任务的冲突
A:在介绍项目的时候我忽略了项目背景,项目模块以及项目技术栈的介绍,直接跳到了个人负责的功能介绍上,下次必须注意。常规的定时任务我只回答上了Timer和Spring Task,忽视了分布式定时任务(如Elastic-Job以及XXL-JOB,这些分布式定时任务总体来说就是通过集群实现调度器,来保障高可用)
接上面聊到的集群实现调度器,事实上这也是第二个问题的关键点,即集群实现调度器时,如何保障一致性?
我的回答是,一次仅生效一台调度器,其他调度器则是采用延迟自旋以及读取Redis字段的方式判断主调度器的存活情况,当存活失效时,通过单例生成方式来重新生成定时任务。(扩展:可考虑故障恢复策略的进一步设计)
Q:然后又问了我AQS以及ReentrantLock,其中有关于Condition的知识我没回答上来
A:Condition将各个线程分配成不同的group,使用Condition的signalAll方法只会唤醒注册在当前Condition上的线程
版权归原作者 阿银的万事屋 所有, 如有侵权,请联系我们删除。