面试中经常会被问到一个“小”问题,就是“你能说出来5个常见的Java异常吗”?之所以“小”字加了引号,是因为其实这个问题看似简单,但是却很考验你的技术功底和平时的编码难易程度。
首先,来一个大家都能直接想到的回答:
- NullPointerException
- ClassCastException
- ArrayIndexOutOfBoundsException
- NumberFormatException
- IOException
具体异常是什么意思和在什么场景下会出现,我在这里就不展开说了,毕竟这都是最最最基本的回答了。
今天我要给你带来的是一些不一样的回答,立马让你显得高大上,让面试官对你刮目相看。
-
java.lang.StackOverflowError
栈内存溢出,一般方法递归调用的时候会出现该异常,递归的时候没有正确的结束递归调用,就会导致栈被打满,最后抛出该异常
-
java.lang.OutOfMemoryError:Java heap space
堆内存溢出,当老年代对象过多,或者存在大对象的时候出现
-
java.lang.OutOfMemoryError:GC overhead limit exceeded
GC花费超过98%的时间,只回收了不到2%的内存,如果不抛出异常,则会一直进行GC,占用cpu使用,还没有效果,这个时候就会抛出该异常
-
java.lang.OutOfMemoryError:Direct buffer memory
使用了大量的本地内存(本地内存默认是电脑内存的1/4),而本地内存不受GC限制,则会出现内存溢出,当使用NIO的ByteBuffer读取数据的时候可能会出现(Buffer.allocateDirect(capability))
-
java.lang.OutOfMemoryError:unable to create new native thread
创建了太多的线程,linux服务器中默认单个进程最多创建1024个线程
-
java.lang.OutOfMemoryError :Metaspace
1.8中元空间是方法区的实现,不断创建新的类就会溢出
-
java.util.ConcurrentModificationException
并发修改异常,hashmap当同时操作修改时就会出现该问题
看看,上面的几个异常是不是显得“高大上”不少了,下次面试官再问你的时候,不要再回答那些“烂大街”的了,试试上边那几个,面试官会对你刮目相看的。