零散的Java知识记录 2
LiuYang 2021/11/13 Java
# HTTP 调用
# 配置连接超时和读取超时参数
- 连接超时参数 ConnectTimeout,让用户配置建连阶段的最长等待时间;
- 读取超时参数 ReadTimeout,用来控制从 Socket 上读取数据的最长等待时间。
# 连接超时参数
不宜设置过长,设置特别长的连接超时意义不大,将其配置得短一些(比如 1~5 秒)即可
# 读取超时参数
- 读取超时,服务端的执行不会中断。
- 读取超时指的是,向 Socket 写入数据后,我们等到 Socket 返回数据的超时时间,其中包含的时间或者说绝大部分的时间,是服务端处理业务逻辑的时间。
- 对定时任务或异步任务来说,读取超时配置得长些问题不大。但面向用户响应的请求或是微服务短平快的同步接口调用,并发量一般较大,我们应该设置一个较短的读取超时时间,以防止被下游服务拖慢,通常不会设置超过 30 秒的读取超时。
# equals的问题
# equals 和 hashcode
重写equals和hashcode方法,比较两个对象比较的问题和散列表中hashCode元素来定位的问题,如果不复写,会使用Object来实现,得到两个不同的hashCode。
class PointRight {
private final int x;
private final int y;
private final String desc;
public PointRight(int x, int y, String desc) {
this.x = x;
this.y = y;
this.desc = desc;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
PointRight that = (PointRight) o;
return x == that.x && y == that.y;
}
@Override
public int hashCode() {
return Objects.hash(x, y);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Lombok展开
Lombok 的 @Data 注解会帮我们实现 equals 和 hashcode 方法,但是有继承关系时,
- 如果需要排除掉匹配的项目,比如非Id项目的话使用@EqualsAndHashCode.Exclude。
- 如果判断相等需要考虑父类属性的话,@EqualsAndHashCode(callSuper = true)
# BigDecimal
- 尽量使用String进行初始化。
- 如果我们希望只比较 BigDecimal 的 value,可以使用 compareTo 方法
System.out.println(new BigDecimal("1.0").compareTo(new BigDecimal("1"))==0);
1
- 如果需要在Set中判定value
Set<BigDecimal> set2 = new HashSet<>();
set2.add(new BigDecimal("1.0").stripTrailingZeros());
System.out.println(set2.contains(new BigDecimal("1.000").stripTrailingZeros()));
1
2
3
2
3
- 对于浮点数的格式化,可以考虑使用 DecimalFormat 来明确指定舍入方式。但考虑到精度问题,我更建议使用 BigDecimal 来表示浮点数,并使用其 setScale 方法指定舍入的位数和方式。
# Java的一些零碎知识点
全的前提下,通过parallel可以进行并行处理。比如我们要同时下载多个图片这类操作。
# Optional
函数式变成的一些基础操作 (opens new window)