java面试积累
1.进程、线程、协程
【面试篇】- 线程和协程的区别是什么?_线程和协程的区别 面试_mind_programmonkey的博客-CSDN博客
2.加密算法
非对称加密算法:该算法需要两个密钥:公开密钥和私有密钥。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
3.哈夫曼树与哈夫曼编码
数据结构-哈夫曼树的构造与哈夫曼编码_哔哩哔哩_bilibili
4.哈希冲突
线性散列法、二次探测散列法
5.索引——最左前缀原则
6.索引——类中对象执行顺序
当一个Java类被加载时,它的静态成员变量和静态代码块会被首先初始化,且只会被初始化一次。这发生在类的实例对象被创建之前,因此无论创建多少个实例对象,静态变量和静态代码块只会被初始化一次。
接下来,实例变量和实例代码块将被初始化。实例代码块是在每次创建新的实例对象时都会执行一次的代码块。
最后,构造函数会被调用,它用于对实例变量进行初始化,即为新创建的实例对象设置初始值。
下面是一个示例代码,其中演示了类变量、实例变量、静态代码块、实例代码块和构造函数的初始化顺序:
``` public class MyClass { static int classVariable = 0; // 类变量 int instanceVariable = 0; // 实例变量 static { System.out.println("Static block, classVariable = " + classVariable); classVariable = 1; } { System.out.println("Instance block, instanceVariable = " + instanceVariable); instanceVariable = 2; } public MyClass() { System.out.println("Constructor, instanceVariable = " + instanceVariable); instanceVariable = 3; } public static void main(String[] args) { MyClass obj1 = new MyClass(); MyClass obj2 = new MyClass(); } } ``` 该程序的输出结果为: ``` Static block, classVariable = 0 Instance block, instanceVariable = 0 Constructor, instanceVariable = 3 Instance block, instanceVariable = 0 Constructor, instanceVariable = 3 ```
从输出结果可以看到,先初始化了静态变量和静态代码块,然后是实例变量和实例代码块,最后才调用构造函数。每次创建一个新的实例对象,就会执行一次实例代码块和构造函数。