每周总结第 1 期(20190610-20190616)

252 阅读2分钟

hello,各位好久不见啦。由于换工作,找房子这一系列事情都推在了一起,所以最近停更了一个多月。现在所有的事情都已尘埃落定,我也可以安安静静的码字(装X)啦。

从这周开始,多了一个系列是每周的总结,今天是第一期哦。每周总结主要是平时工作中遇到的问题,有时候百度了好久才找到的答案,不记录一下,下次又要花时间百度啦。

话不多说,咱开始啦。

.split(".")为什么不起作用?

首先来说一下背景,需要查询名称为“XXXX”的数据,并且为第二级路径,他的路径bh为String类型的,以"."隔开。数据结构简化如下:


做法一目了然啊,先通过名称查询所有满足条件的记录,然后for循环这个list,如果路径用split生成的String数据长度为2,那就是要找到的记录。

于是我就愉快的写代码(bug)啦,然后就华丽丽的踩坑了。

找到了名称为“XXXX”的数据list,接下来就是遍历啦。然后我发现split出来的length始终为0。

迅速百度,找到了答案。

里面的参数要的是正则表达式,点在正则表达式中.是有意义的 正则表达式,本来是要写成\.,但因为是JAVA中,\又是转义符,所以要再加一个,就成了 \\.

所以用.split("\\.")或者[.]就行。

106 comparison method violates its general contract

今天群里贴了一张图,说线上环境报错了,我一看,就是我写的bug啊,可是本地跑的,没啥问题的。具体问题如下图。


百度了一波,知道了原来我本地使用的jdk1.6的版本,而线上环境使用的是jdk1.7的版本,这个报错正好是jdk1.7以上版本会出现的。

下面举个例子:

@Override
public int compareTo(xxx o) {
   return this.getPublishTime().getTime() < o.getPublishTime().getTime() ? 1 : -1;
}

上图的代码在jdk1.6的版本是正确的,因为1.6的版本没有对排序大小进行严格的校验,只有1和-1,没有0。而1.7的版本使用了新的排序算法timsort,是对排序大小进行严格校验的。简单来说,这个算法在实现过程中明确需要用严格的单调递增或者递减来保证算法的稳定性。

所以在上述代码加上判断,多返回0值就行。