quartz学习笔记五测试驱动源码阅读

好了,从前四篇就可以看出Quartz删的删,改的改,保留了quartz-core的部分原码和单元测试。

 

下面我们就通过去跑通每一个测试,来确定哪些是要留下的,哪些是要删掉。

 

VersionTest

从简单的VersionTest入手,这个测试简单几行,就做了一件事,检验版本号,它的版本号的实现有点意思,新建了个quart-build.properties文件,一行version=${revision}就可以自动获取到maven pom.xml里的version,通过QuartzSchduler的static代码块,使用QuartzScheduler.class的getResourceAsStream来加载quart-build.properties,其实就是通过ClassLoader来加载,利用Properties类来读取InputStream,从properties里读取version,static代码块是类级别的,在类加载的时候就已经初始化好了,类加载要经过 加载 链接(验证 准备 解析) 初始化<clinit>。

 

TriggerComparatorTest

测试Trigger的排序,按照Trigger的key就是name,group,priority,time进行排序。它使用的是java自带排序Collections.sort,实现Comparable接口就行,进入sort方法会发现,容器类基本都是使用的Arrays.sort,其中包含了两种排序,LegacyMergedSort和TimSort,这里也是常年面试被问的,面试官一般会问TimeSort的实现方式和时间复杂度。MergeSort(归并排序 O(nlogn))TimSort(优化过的归并排序 O(nlogn) + 二分插入排序 O(n²)),另外大家可以想下自己的冒泡 O(n²),插入 O(n²),快排O(nlogn)有没有熟练,这可是面试中经常问到的。注意Arrays.sort(Numeric[])从JDK1.7开始采用DualPivotQuicksort来排序数字数组。

 

TriggerBuilderTest

采用Builder Pattern,封装了Trigger的构建过程,这比工厂模式要灵活,可以分步骤构建Trigger。

 

SimpleTriggerTest

测试序列化后对象的兼容性,这里是一个经典的模版模式的应用,继承了SerializationTestSupport,同时学习下序列化(ObjectoutputStream)和反序列化(ObjectInputStream)。

 

RAMSchedulerTest

模版模式 + 工厂模式,AbstractSchedulerTest写好了测试用例,StdSchedulerFactory生产Scheduler。这里的StdSchedulerFactory是工厂方法模式,大家可以回忆比较下它和抽象工厂模式的区别。

 

PriorityTestInterruptableJobTest

有助于理解CountDownLatch和CyclicBarrier。

 

逐步过完测试,看不懂也没关系,基本是业务逻辑相关的,这都是需要理一理的,毕竟注释少的可怜。

 

下面我们就开始试试把derby换成H2,顺便了解一下JobStore的工作机制,C3P0换成Hikari,把不想支持的derby和c3p0先关代码删掉。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值