Decorative image frame

万事静心 | java技术分享

让一切从头开始

万事静心 | java技术分享

Https 简单入门

http协议传输的数据都是在网络上明文裸奔的,这样很容易会被网络的中间节点窃听篡改冒充

http向https的演变过程,可以模拟成下面几步。

1. 对称加密

1
2
3
4
5
  Client  --------  Server
① 对称加密
| ------> | 解密
② 对称加密
解密 | <------ |

客户端和服务端使用对称解密算法例如AES,传输前对数据加密,然后由对方解密的方式。但这种方式在对外的web服务场景下行不通,因为需要对外暴露对称算法的钥匙。

2. 非对称加密

1
2
3
4
5
      Client  ---- 🐶 ----  Server
① 公钥加密
| ------> | 私钥解密
② 私钥加密
公钥解密 | <------ |

阅读全文

搭建Kubernetes集群

k8s集群安装准备工作

修改服务器hostname

1
2
hostnamectl set-hostname k8s-master-0
# 退出重新登陆即可显示新设置的主机名master01,各服务器修改为对应的主机名

修改hosts

1
2
3
4
5
cat >> /etc/hosts << EOF
10.23.73.44 kz-k8s-master-1
10.23.73.34 kz-k8s-master-2
10.23.73.13 kz-k8s-master-3
EOF

生产环境开启防火墙

1
2
systemctl start firewalld 
systemctl enable firewalld

阅读全文

数据结构之八大排序

选择排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void selectSort(int[] array) {
for (int i = 0; i < array.length; i++) {
int k = i;
for (int j = k+1; j < array.length; j++) {
if (array[j] < array[k]) {
k = j;
}
}
if (i != k) {
int temp = array[i];
array[i] = array[k];
array[k] = temp;
}
}
}

public static void main(String args[]) {
int[] array = {5, 1, 3, 0, 1, 4, 8, 9};
selectSort(array);
System.out.println(Arrays.toString(array));
}

简单选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数永远都是N (N - 1) / 2。而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 0。当序列反序时,移动次数最多,为3N (N - 1) / 2。

阅读全文

了解Nginx架构设计

管理进程、多工作进程

nginx采用一个master管理进程、多个worker进行(cache manager | cache loader进程)的设计。

好处
  • 利用多核系统的并发处理能力
  • 负载均衡
  • 管理进程监控工作进程的状态,负责管理其行为
    • 占用资源少
    • 管理其它进程,提高系统可靠性
    • nginx运行中升级,实现动态扩展、定制、进化
Nginx 在启动时的流程
  • 解析命令行,处理参数。

  • 第2步,这里就是nginx的平滑升级(源码ngx_add_inherited_sockets方法),旧版本的master进程会通过execve系统调用来启动现版本的master进程(先fork出子进程再调用exec运行新的程序)。Nginx通过环境变量,旧版本的master告诉新版本master是在平滑升级,并对Nginx服务监听的句柄做继承处理。

阅读全文

Java面试知识点汇总(一)

Java中的四种引用及应用场景是什么?

  • 强引用:通常new操作符创建一个对象时所返回的引用即为强引用
  • 软引用:若一个对象只能通过软引用到达,那么这个对象在内存不足时会被回收
  • 弱引用:若一个对象只能通过弱引用到达,那么它就会被回收(即使内存充足)
  • 虚引用:虚引用是Java只最‘弱’的引用,通过它甚至不能获取被应用的对象,它存在的唯一作用就是当它指向的对象回收时,它本身会被加入到引用队列中,这样我们可以知道它指向的对象何时被销毁。

ArrayList, LinkedList, Vector的区别是什么?

  • ArrayList: 内部采用数组存储元素,支持高效随机访问,支持动态调整大小

  • LinkedList: 内部采用链表来存储元素,支持快速插入/删除元素,但不支持高效地随机访问

  • Vector: 可以看作线程安全版的ArrayList

阅读全文