java高频面试题(2024最新)
HashMap使用哪些方法来解决哈希冲突?
- 使用链地址法(使用散列表)来链接拥有相同hash值的数据;
- 使用2次扰动函数(hash函数)来降低哈希冲突的概率,使得数据分布更平均;
- 引入红黑树进一步降低遍历的时间复杂度,使得遍历更快;
Java内存模型
堆->用来存放对象,数组等信息;方法区->用来存放常量,静态变量,类信息等;虚拟机栈->用来存放局部变量等;本地方法栈->用来供程序调用native方法使用;程序计数器->用来记录程序运行到哪一步。
类加载机制
加载-链接-初始化,链接又包含验证,准备,解析
加载:通过全类名获取该类的二进制字节流,将字节流代表的静态存储数据结构转化为方法区中的运行时数据结构,在内存中生成一个代表该类的Class对象作为方法区这些数据的访问入口。
验证:文件格式验证==》验证字节流是否符合Class文件格式规范。元数据验证==》对字节码描述的信息进行语义分析。字节码验证==》通过数据流和控制流分析,确定程序语义是合法的。符号引用验证==》确保解析动作能正确执行
准备:是正式为类变量分配内存并设置类变量初始值的,这些内存都将在方法区中分配。注意:这时候分配的只包括类变量(static),不包括实例变量。初始值通常情况下是默认的零值。
解析:就是虚拟机将常量池中的符号引用替换为直接引用的过程。也就是得到类,方法或字段在内存中的偏移量或指针
初始化:是执行类构造器()方法的过程
更多更全面试题尽在:
https://pan.quark.cn/s/0700b37c6577
内存泄漏和内存溢出
内存泄漏只分配出去的内存回收不回来了
内存溢出指的是内存不够用,类如OOM