千寻

道路很长, 开始了就别停下!

0%

Java各种坑

1. SimpleDateFormat 不是线程安全的

使用过程不要定义为静态全局变量。

正确使用:

1
2
3
4
5
6
7
8
9
10
11
12
/**
* 时间是否是今天
*/
public static boolean isToday(Long second) {
if (second == null) {
return false;
}
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
String today = sf.format(System.currentTimeMillis());
String compare = sf.format(new Date(second * 1000L));
return StringUtils.equals(today, compare);
}

2.cache模型里面字段数据范围

通常预发环境和线上环境会共用一套cache,如何避免两套环境间的数据干扰。

1
2
3
写入:DO --> cacheModel
读出:cacheModel --> DO
查询接口:DO --> ServiceModel

3.字符串不变性

下面这张图展示了这段代码做了什么

1
2
String s = "abcd";
s = s.concat("ef");

4.HashCode被设计用来提高性能。

equals()方法与hashCode()方法的区别在于:

如果两个对象相等(equal),那么他们一定有相同的哈希值。
如果两个对象的哈希值相同,但他们未必相等(equal)。

注:== 表示两对象内存地址相同

5.maven自己添加的依赖下载了,但是它的依赖没有下载

又正好其他包引用了其他版本,这时不会报错,但是可能跑不起来

1
2
3
4
5
Caused by: java.lang.ClassNotFoundException: io.micrometer.core.instrument.config.validate.Validated
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[na:na]
... 70 common frames omitted

micrometer-registry-prometheus 1.5.1 依赖 micrometer-core 1.5.1 没有下载成功自动换到了已有版本1.3.8

1
2
3
4
5
6
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
<version>1.5.1</version>
<scope>compile</scope>
</dependency>