今天给大家分享一些中高级java开发面试题,中高级java跟初级java肯定是有所不同的,知识点上肯定更有难度,所以大家可以收集这些中高级java开发面试题,为自己沉淀知识。
1. Java中的异常有哪几类?分别怎么使用?
检出异常,非检出异常。检出异常需要try...catch才能编译通过。非检出异常不用try...catch也能编译通过。
RuntimeException是非检出异常,不需要try...catch也能编译通过。
IoException,SQLException等等其他所有异常都是检出异常,必须要try...catach才能编译通过。
2.ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和各自适应的场景是什么?
ArrayList,是数组结构:少用与中间的增删。多用于查询,修改。每次增删元素顺序都会操作每个元素。
LinkedList,是链表结构:多用于中间,开头增删。少用查询,修改。查询时会遍历大量元素。
3. 内存溢出是怎么回事?
对象有被指向的引用,但是再也用不到它就是内存溢出了。
GC机制:复制回收,标记清除,引用计数(如果有循环引用后,会影响垃圾回收,所以JVM虚拟机没有采用此方法进行垃圾回收)。
4. ClassLoader有什么用?
类加载器:所有类都需要Classloader来加载。
BoostrapClassLoader,加载系统(java包下)的类,SystemClassLoader,加载系统扩展类(少用),AppClassloader应用类加载器,还有针对每个项目的类加载器。
5.Java中如何获取到线程dump文件
死循环、死锁、阻塞、页面打开慢等问题,打线程dump是最好的解决问题的途径。所谓线程dump也就是线程堆栈,获取到线程堆栈有两步:
(1)获取到线程的pid,可以通过使用jps命令,在Linux环境下还可以使用ps-ef|grepjava
(2)打印线程堆栈,可以通过使用jstackpid命令,在Linux环境下还可以使用kill-3pid
另外提一点,Thread类提供了一个getStackTrace()方法也可以用于获取线程堆栈。这是一个实例方法,因此此方法是和具体线程实例绑定的,每次获取获取到的是具体某个线程当前运行的堆栈,
这些都是一些常见的中高级java开发面试题,大家觉得有价值的话,可以将这些题目收藏起来。最后大家如果想要了解更多java面试题知识,敬请关注奇Q工具网。
推荐阅读: