Java面试题(难度递增)

1星:Java的基本数据类型有哪些
boolean,char,byte,short,int,long,float,double

1星:==和equals的区别
引用地址比较和对象内容比较

1星:String类型在Java中是不可变的
不可变对象可以提高String Pool(字符串常量池)的效率和安全性

1星:HashMap 和 Hashtable 有什么区别?
一. HashMap可以接受null键和值,HashTable不行
二. HashTable是线程安全的,通过synchronized来保证,而HashMap线程不安全
三. HashMap的迭代器是fail-fast迭代器,而HashTable的enumerator迭代器不是fail-fast.

2星:在程序开发中,异常的处理方式

2星:值传递和引用传递
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。 所以对引用对象进行操作会同时改变原对象.

2星:深拷贝和浅拷贝的区别是什么?
浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。
深拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深拷贝把要复制的对象所引用的对象都复制了一遍。

3星:当一个线程调用了cancel方法时,内部如何处理的
调用calcel方法,传入true会中断线程停止任务,传入false则会让线程正常执行至完成
1:主线程调用子线程的cancel方法时,会在子线程内部设置中断标志位置为true
2:当子线程此时为运行状态,则不会对此线程产生任何影响
3:当子线程从等待状态进入到运行状态时,会判断当前线程的中断标志是否为true
4:结束任务的正常运行状态,并抛出InterruptedException

3星:如果你提交任务时,线程池队列已满。会时发会生什么?
如果你使用的LinkedBlockingQueue,也就是无界队列的话,没关系,继续添加任务到阻塞队列中等待执行,因为LinkedBlockingQueue可以近乎认为是一个无穷大的队列,可以无限存放任务;
如果你使用的是有界队列比方说ArrayBlockingQueue的话,任务首先会被添加到ArrayBlockingQueue中,ArrayBlockingQueue满了,则会使用拒绝策略RejectedExecutionHandler处理满了的任务,默认是AbortPolicy。

3星:Java的内存划分
寄存器:记录正在执行的JVM指令的地址
本地方法栈:保存native方法进入区域的地址
方法区:method(方法区)又叫静态区,存放所有的①类(class),②静态变量(static变量),③静态方法,④常量和⑤成员方法
堆内存:类的对象放在heap中
栈内存:对象的引用存放在堆内存中

3星:Java的垃圾回收算法有哪些
引用计数法
可达性分析算法
标记-清除算法
分代收集算法

4星:请简述可达性分析算法和垃圾回收过程
GCRoots的对象做为起点,从起点开始向下搜索,搜索的走过路径叫引用链,当一个对象到GCRoots没有引用链时,判断对象死亡。
在jvm中,做为GCRoots的对象:
虚拟机栈(栈桢中的本地变量表)中的引用的对象
方法区中的类静态属性引用的对象
方法区中的常量引用的对象
本地方法栈中JNI的引用的对象
当一个对象进入到垃圾回收过程时,会调用对象的finalize方法

你可能感兴趣的:(Java面试题(难度递增))