基于Spock的单元测试学习


 李琪同学的组内分享对于我来说是比较新的一块东西,写个记录的文章便于在需要的时候学习和使用。单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。写过单测的朋友都知道,它能让我们在提交代码之前,自己就能发现很多bug,但是在很多业务驱动的场景下,时间和精力的限制往往使程序员难以写出很全面的高质量单元测试。JUnit、TestNG都是比较常见的测试框架,而本文所介绍...

阅读全文 »


多线程环境下的SimpleDateFormat


 SimpleDateFormat是Java中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题。下面我们通过一个具体的场景来一步步的深入学习和理解SimpleD...

阅读全文 »


2018西昌马拉松


 很快就到了西昌马拉松的这个周末,11月2号周五请了一天假,和文森哥一同乘坐飞机来到凉山州府所在地西昌,也就是我的家乡。市区海拔1500米左右,跑起步来会比平原地区吃力一点,但是由于10月份堆了327K的跑量,加上两周前河间兔子之旅,我的状态整体感觉还不错。这次比赛的目标是用匀速的策略把文森哥带进330,顺便自己也能PB。 11月3号比赛日,吃过早餐之后家人把我送到火把广场,跟参加迷你跑的侄...

阅读全文 »


20181027朝阳公园半马


 9月份的北马,跑的不是很好,究其原因是跑量不够。不过好在没有出现伤病情况,在这样的前提下,我尝试了逐渐增加跑量。从8月份到128公里到9月份208公里再到10月份直奔300公里,状态逐渐恢复。 10月21号第一届河间马拉松开跑,机缘巧合我被选为4小时官方配速员。第一次当官兔,我很珍惜这个机会,提前跟其他两个400兔子商量好了配速节奏。鸣枪之后,慢慢开始控制速度,带领一大帮跑者匀速前进。河间...

阅读全文 »


PageHelper分页插件原理剖析


 PageHelper是一款开源免费的Mybatis第三方物理分页插件。它的使用方法非常简单,例如在Spring boot项目中,引入下面的maven依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>...

阅读全文 »


2018北京马拉松小记


 其实在跑北马之前,哈尔滨马拉松也中签了。哈马的口碑非常好,赛道补给极其给力,我计划把哈马当作北马前的一次长距离拉练来放松跑。可惜人算不如天算,在距哈马一个多月的时候,得知在哈马当天需要参加一场考试,于是开始了没日没夜的复习,几乎不跑步,并且放弃了哈马。考完试已经是8月底了,短暂的备战之后,北马就悄悄来临了。 早上5点20分出门,直奔地铁站。由于搬了家,离起点天安门更远了,好在遇到个同去北马...

阅读全文 »


JVM GC原理与调优(下)


(接上篇)G1深度原理G1把整个Java堆划分为若干个区间(Regions)。每个Region大小为2的倍数,范围在1MB-32MB之间,可能为1,2,4,8,16,32MB。所有的Region有一样的大小,JVM生命周期内不会改变。例如-Xmx16g –Xms16g,设置16GB的堆大小,2000个Regions,则每个Region=16GB/2000=8MB。如果堆大小很大,而每个Reg...

阅读全文 »


JVM GC原理与调优(上)


 平常接触GC不多,正好本超同学在公司内做了关于这方面主题的内部分享,受益匪浅,也希望记录下来供日后学习。JVM作为Java语言的执行引擎,支撑了绝大多数的大数据组件服务。对JVM参数,尤其是GC参数的优化,对大数据组件本身的性能和服务质量都至关重要。本文将主要从GC算法、JVM中的垃圾回收器、G1内部实现原理以及JVM参数的优化等各个方面进行介绍。垃圾判断方法 (1) 引用计数 给对象中添...

阅读全文 »