欢迎关注我的知乎专栏【数据池塘】,专注于分享机器学习,数据挖掘相关内容:HTTPS://zhuanlan.zhihu.com/datapool
本文中的知识都是我自己或同学在面试过程中常被问到的,在此整理记录一下比较好的答案。
1,简述JVM的内存模式。
JVM内存空间包含:方法区,爪哇的堆,爪哇的栈,本地方法栈,程序计数器。
区方法的英文各个线程共享的内存区域,用于它存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
的的Java的堆也是线程共享的区域,我们的类的实例就放在这个区域。
Java 栈是每个线程私有的区域,它的生命周期与线程相同,一个线程对应一个J ava 栈。
本地方法栈(本地方法栈)与虚拟机栈所发挥的作用英文英文英文的英文非常形容词:的,其区别不过的英文虚拟机栈为虚拟机执行的Java的的。方法(也字就是节码)服务,而方法本地栈则的英文为虚拟机使用到的本地方法服务。
计程序数器(程序计数器寄存器)一的英文块较小的内存空间,的它英文作用英文英文可以英文的当前看做线程所执行的字节码的行号指示器。
2,如何判断对象死活,以及如何回收?
引用计数文教释义法律:当对象被赋给任意变量时,引用计数器每次加1 ,当对象出了作用域后(该对象丢弃不再使用),引用计数器减1 ,一旦引用计数器为0 ,对象就满足了垃圾收集的条件。
3,简单描述线程与进程的区别。
开一个程序是进程,在一个程序内使用不同的功能是线程。进程是资源的分配和调度的一个独立单元,而线程是CPU 调度的基本单元型态型态型态。一个同进程中可以包括多个线程。
4,线程各种状态之间如何互相转换?
线程状态分为创建,就绪,运行和阻塞和结束五个状态。
- 创建:这个状态是线程刚刚创建,只是在堆内存中分配了空间。
- 就绪:这的英文的线程已经执行了开始()方法,等待获取CPU 的运行权限。
- 运行:这个时候该线程电子杂志的CPU。
- 阻塞:阻塞分成多种情况,总体来说,就是该线程因为某种原因放弃了对CPU 的控制权。
- 结束:线程结束,这个结束可能是正常的结束,或者是由于某种原因结束。
线程从运行状态到阻塞状态有这几种情况:
- 调用了wait()的的的方法,如果这是的线程在同步锁中,那么同步锁也会释放。这样的阻塞只有调用通知(),notifyAll的的的(),这俩个方法一个随即开启一个被等待()阻塞的,notifyAll的的()是唤醒所有的。
- 调用了睡眠()方法,这个方法是睡觉方法,高数该线程等待多长时间然后继续运行。那么如果进入等待方法,他的CPU 就会释放掉,但是如果这个的的螺纹。睡眠()的英文在同步锁中,则不会释放,只有等待执行完同步锁。
- 用了JION()方法,这个阻塞其实就是他自己执行过程中需要调用其他的线程,那么他自己就会挂起,等待调用线程执行完毕,他才能恢复,继续执行。这起中的IO 流就是这个样子的。
5,描述的的HashMap中的数据结构。
HashMap中的中的数据结构为:数组+ 。链表底层是一个数组,数组的每一项是一个链表,每次新建一个映射其实就是新建了一个数组。数组的每个元素都是一个链单的表头节点,链表的英文用来解决冲突的,如果不同的键映射到了数组的同一位置处,其就将放入单链表中。HashMap中的中底层的英文通过链表解决来散列冲突的。
6,如何解决哈希冲突?
链表法和开放地址法链表法就是将相同。散列值的对象组织分类照片中的翻译是一个链表放在哈希值对应的槽位;开放地址法是通过一个探测算法,当某个槽位已经被占据情况的下继续下查找一个可以使用的槽位。
欢迎关注我的知乎专栏【数据池塘】,专注于分享机器学习,数据挖掘相关内容:HTTPS://zhuanlan.zhihu.com/datapool
⬇️ 扫描下方二维码关注公众号【数据池塘】 ⬇️
回复【算法】,获取最全面的机器学习算法网络图: