专业考试是Java程序员面试过程中必不可少的环节,那么面试者在面试过程中会问哪些问题呢?接下来,黑马君将带你进入面试环节!
Java开发实用的面试题及参考答案
1、进程,线程,协程之间的区别是什么?
简而言之,过程是程序运行和资源分配的基本单位。一个程序至少有一个进程,一个进程至少有一个线程。在执行过程中,进程有独立的内存单元,多个线程共享内存资源,减少了切换次数,从而达到更高的效率。线程是进程的一个实体,是cpu调度和分派的基本单位,也是比可以独立运行的程序小的基本单位。同一进程中的多个线程可以并发执行。
2、你了解守护线程吗?它和非守护线程有什么区别?
程序运行后,jvm将等待非守护线程完成,然后关闭,但jvm不会等待守护线程。守护线程最典型的例子是GC线程。
3、什么是多线程上下文切换?
多线程上下文切换是指CPU控制权从一个已经运行的线程切换到另一个已经准备好等待获得CPU执行权的线程的过程。
4、创建两种线程的方式?他们有什么区别?
通过实现java.lang.Runnable或扩展java.lang.Thread类。与扩展Thread相比,实现Runnable接口可能更好,原因有二:Java不支持多重继承。因此,扩展Thread类意味着这个子类不能扩展其他类。实现Runnable接口的类也可以扩展另一个类。类可能只要求是可执行的,因此继承整个Thread类的开销太高。
5、Thread类中的start()和run()方法有什么区别?
start()方法用于启动新创建的线程,run()方法在start()内部调用,不同于直接调用run()方法的效果。当您调用run()方法时,它将只在原始线程中被调用,如果没有新线程启动,start()方法将只启动新线程。
6、怎么检测一个线程是否持有对象监视器?
线程类提供了一个holdsLock(对象
Obj)方法,只有当对象obj的监视器由线程持有时,该方法才返回true。请注意,这是一个静态方法,这意味着“一个线程”指的是当前线程。
7、你知道哪些垃圾回收算法?
垃圾回收理论上很好理解,具体方法如下:
1\.标记-清除
2\.标记-复制
3.标记整理
4.世代循环
8、如何判断一个对象是否应该被回收?
这就是所谓的物体生存性判断。常用的方法有两种:1。参考计数法;
2.对象可达性分析。由于引用计数法因相互引用而无法进行GC的问题,目前JVM虚拟机大多采用对象可达性分析算法。
9、调用System.gc()会发生什么?
通知GC开始工作,但GC的实际开始时间不确定。
10、64位的JVM当中,int的长度是多少?
在Java中,int类型变量的长度是一个固定值,不管平台如何,都是32位。也就是说,在32位和64位Java虚拟机中
类型的长度是相同的。
11、int和Integer的区别?
Integer是int的封装类型,在拆包和打包时会自动转换。Int是一个基本类型,直接存储数值,而integer是一个对象,用引用指向这个对象。
12、int 和Integer谁占用的内存更多?
整数对象将占用更多内存。Integer是一个需要存储其元数据的对象。但是int是一种原始类型的数据,所以它占用的空间更少。
13、String, StringBuffer和StringBuilder区别?
String是字符串常量,最终修饰:StringBuffer字符串变量(线程安全);
StringBuilder字符串变量(线程不安全)。
14、java当中使用什么类型表示价格比较好?
如果内存和性能不是特别重要,使用BigDecimal否则,使用具有预定义精度的双精度类型。
15、如何将byte转为String?
您可以使用字符串接收字节[]
参数构造函数,需要注意的是要使用的正确编码,否则将使用平台默认编码,它可能与原始编码相同,也可能不同。
16、可以将int强转为byte类型么?会产生什么问题?
我们可以强制转换,但是在Java中,int是32位的,byte是8位的,所以如果强制转换,int类型的高24位将被丢弃,byte。
类型的范围从-128到128。
以上是黑马君为大家整理的Java开发实用的面试题及参考答案分享内容,希望对即将面对采访的朋友有所帮助!