跳到主要内容

SQL union vs union all

· 阅读需 1 分钟
Deng Hongbing
Full Stack Developer

x01

Query:

select 1,3 union select 1,3

Result:

1, 3

x02

Query:

select 1,3 union all select 1,3

Result:

1, 3
1, 3

总结

union会合并去重(耗时), union all不会去重。

Java8 Stream Example

· 阅读需 2 分钟
Deng Hongbing
Full Stack Developer

Source

Student xm = new Student();
xm.setId(11);
xm.setName("小明");
xm.setGender(1);

Student xh = new Student();
xh.setId(12);
xh.setName("小红");
xh.setGender(2);

Student xt = new Student();
xt.setId(13);
xt.setName("小天");
xt.setGender(1);

List<Student> list = new ArrayList<>();
list.add(xm);
list.add(xh);
list.add(xt);

x01

Operate:

List<Integer> ids = list.stream().map(Student::getId).collect(Collectors.toList());

Result:

[11, 12, 13]

x02

Operate:

Map<Integer, String> idNames = list.stream().collect(Collectors.toMap(Student::getId, Student::getName));

Result:

{ "11": "小明", "12": "小红", "13": "小天" }

x03

Operate:

Map<Integer, Student> idMap = list.stream().collect(Collectors.toMap(Student::getId, Function.identity()));

Result:

{
"11": { "id": 11, "name": "小明", "gender": 1 },
"12": { "id": 12, "name": "小红", "gender": 2 },
"13": { "id": 13, "name": "小天", "gender": 1 }
}

x04

Operate:

Map<Integer, List<Student>> genderListMap = list.stream().collect(Collectors.groupingBy(Student::getGender));

Result:

{
"1": [
{ "id": 11, "name": "小明", "gender": 1 },
{ "id": 13, "name": "小天", "gender": 1 }
],
"2": [{ "id": 12, "name": "小红", "gender": 2 }]
}

x05

Operate:

Map<Integer, List<String>> genderListNameMap = list.stream().collect(Collectors.groupingBy(Student::getId, Collectors.mapping(Student::getName, Collectors.toList())));

Result:

{
"1": ["小明", "小天"],
"2": ["小红"]
}

Let’s Encrypt Certbot Nginx renew

· 阅读需 1 分钟
Deng Hongbing
Full Stack Developer

Let’s Encrypt是个免费证书,每次只有 90 天有效

环境

CentOS7 Nginx

安装 certbot 和 nginx 插件

yum install certbot python3-certbot-nginx

生成证书

certbot --nginx

更新证书

certbot renew --dry-run

自动更新

crontab -e

0 3 * * * "certbot renew --dry-run && nginx -s reload"