面试官:如何保证定时任务的执行顺序呢?

01. 抛砖

敲黑板,讲重点。今天我先抛一开放性话题,也是我平时面试候选人时经常谈及的,看看你有没有相关解决思路?

Q:有A、B两个定时任务,其中任务 B 要在任务 A 执行完成后才能执行,如何保证任务的执行顺序?

A:潜意识:啥、啥、啥,一脸懵?心情只能用下图来形容。

从事金融相关研发的程序员,多多少少都了解,一个完整的系统,会像钟表一样,背后隐藏了诸多的齿轮任务在运转。其中系统中的每个定时任务之间,难免会有前置依赖关系。

举个业务场景:对接银行的某理财产品,如果想统计收益,那么最常用的方式便是:双方约定固定时间,定时从银行获取收益文件,然后解析收益文件入库(任务 A);然后进行执行收益记账任务(任务 B)。

那么如何保证收益记账任务 B 执行时,获取收益文件任务 A 已经执行完成了呢?

02. 思考

能用图说懂的,不再瞎白话,一言不合,直接画图,上图进行协助思考,相信你仔细看图,肯定能搞清楚咋回事。

03. 何解

流程搞清楚,那么实现就分分钟。简单说一下最原始、最简单的实现思路。

首先设计一张批量任务定义的表 t_job_define,摘取两个核心字段示意一下。

任务编号:JOB_ID

前置任务编号:PRE_JOB_ID

接着设计一张批量任务跑批详情表 t_job_run_detail,摘取两个核心的字段示意一下。

任务编号:JOB_ID

跑批时间:BATCH_DATE

最后还是配个图,释义一下,我相信你肯定能看懂。

04. 升华

不喜欢土枪的,不妨尝试一下土枪换炮。有精力的你,不妨了解一下阿兹卡班(Azkaban),毕竟每个技术都不需要太深入,用到的时候深入也不晚。但是一定要知道,技多不压身。

https://azkaban.github.io/

05. 最后

条条思路通罗马,我相信你肯定会有很多独特的见解,也不乏好的实现思路,借助《聊斋志异》中的一句话“黄狸黑狸,得鼠者雄”,其实也就是邓爷爷说的“不管是黑猫白猫,能抓住老鼠的就是好猫”。

今天的分享到这就结束了,主要想表达一下简单的思想,你 get 到了没?

原文地址:https://www.cnblogs.com/socoool/p/12629799.html

时间: 2024-11-11 13:32:06

面试官:如何保证定时任务的执行顺序呢?的相关文章

如何保证线程的执行顺序

示例代码 static Thread t1 = new Thread(new Runnable() { public void run() { System.out.println("Thread1"); } }); static Thread t2 = new Thread(new Runnable() { public void run() { System.out.println("Thread2"); } }); static Thread t3 = new

面试趣闻之java 代码块 静态代码块 构造方法 执行顺序

初级程序员总会遇到这样的问题,代码块 静态代码块 构造方法 执行顺序 父类 public class ClassSup { public ClassSup(){ System.out.println("父类构造器"); } static { System.out.println("父类静态代码块"); } { System.out.println("父类代码块"); } public void mathod01(){ System.out.pri

如何写出面试官欣赏的Java单例

单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例. 今天我们不谈单例模式的用途,只说一说如果在面试的时候面试官让你敲一段代码实现单例模式的情况下怎样写出让面试官眼前一亮的单例代码.因为笔者学的是Java,所以接下来的实例将用Java语言编写. 说到单例模式,第一个想到的是该类中有一个初始化为null的自身引用,且被private修饰符修饰,其它类不得直接访问.除此之外,单例模式的类还需要有private的构造方法,这一点

走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串

原文:走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串 对大量数据进行查询时,可以应用到索引技术.索引是一种特殊类型的数据库对象,它保存着数据表中一列或者多列的排序结果,有效地使用索引可以提高数据的查询效率.大家面试初级.中级或者高级程序员的时候应该大部分都会被问到这样一些问题,你了解索引吗?你知道索引的分类吗?你知道这些索引的区别吗?你如何去创建有效的索引.本章让大家学会反问面试官 hold住全场. --_____-- 友情客串 最近面试的文章比较火 客串一下 我只

【面试】吃透了这些Redis知识点,面试官一定觉得你很NB(干货 | 建议珍藏)

原文:[面试]吃透了这些Redis知识点,面试官一定觉得你很NB(干货 | 建议珍藏) 万字长文,干货满满. 是数据结构而非类型 很多文章都会说,redis支持5种常用的数据类型,这其实是存在很大的歧义.redis里存的都是二进制数据,其实就是字节数组(byte[]),这些字节数据是没有数据类型的,只有把它们按照合理的格式解码后,可以变成一个字符串,整数或对象,此时才具有数据类型. 这一点必须要记住.所以任何东西只要能转化成字节数组(byte[])的,都可以存到redis里.管你是字符串.数字.

(转)史上最全 40 道 Dubbo 面试题及答案,看完碾压面试官!

背景:因为自己的简历写了dubbo,面试时候经常被问到.实际自己对dubbo的认识只停留在使用阶段,所以有必要好好补充下基础的理论知识. https://zhuanlan.zhihu.com/p/45846108 想往高处走,怎么能不懂 Dubbo? Dubbo是国内最出名的分布式服务框架,也是 Java 程序员必备的必会的框架之一.Dubbo 更是中高级面试过程中经常会问的技术,无论你是否用过,你都必须熟悉. 下面我为大家准备了一些 Dubbo 常见的的面试题,一些是我经常问别人的,一些是我过

一线大厂面试官最喜欢问的15道Java多线程面试题

前言 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得更多职位,那么你应该准备很多关于多线程的问题. 他们会问面试者很多令人混淆的Java线程问题.面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面.现在引用Java5并发包关于并发工具和并发集合的问题正在增多.那些问题中ThreadLocal.Blocking Queue.Counting Semaphore和ConcurrentHashMap比较流行. Java多线程面试题及

# 面试官: 既然已经有数组了,为什么还要链表

面试官: 既然已经有数组了,为什么还要链表 本文发布于微信平台: 程序员面试官 超过20w字的「前端面试与进阶指南」可以移步github 对于不少开发者而言,链表(linked list)这种数据结构既熟悉又陌生,熟悉是因为它确实是非常基础的数据结构,陌生的原因是我们在业务开发中用到它的几率的确不大. 在很多情况下,我们用数组就能很好的完成工作,而且不会产生太多的差异,那么链表存在的意义是什么?链表相比于数组有什么优势或者不足吗? 什么是链表 链表是一种常见的基础数据结构,是一种线性表,但是并不

Java面试-吊打面试官系列 Redis基础

你知道的越多,你不知道的越多 点赞再看,养成习惯 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联网公司面一次拿一次offer的面霸(请允许我使用一下夸张的修辞手法),打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚,在一个寂寞难耐的夜晚,我痛定思痛,决定开始写吊打面试官系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,吊打一同面试的同僚