[刘阳Java]_Java面试中遇到的五个棘手的问题【转载】 前言 Java是值传递还是引用传递? 如何让Java程序产生内存泄露? 如何来做not null check来避免程序抛出空指针异常? Java里面的finally代码块会永远都执行到么? Implement Runnable和extends Thread哪个比较好?

到了年底了,作为一线的Java工程师相比大家都对自己的未来和现状有所考量吧。有人已经乐呵呵的升职加薪了,也有人还在挣扎要不要出去闯闯。不管怎样。在现在或者将来,面试都是我们必须面对的事情。而作为Java工程师面试的过程中如果给一个陌生的面试官一个专业技能扎实的印象。相比会给你的薪资带来一个不错的提高。今天我们就来分享几个相对来说比较常见但是不一定大家都掌握的面试问题

[刘阳Java]_Java面试中遇到的五个棘手的问题【转载】
前言
Java是值传递还是引用传递?
如何让Java程序产生内存泄露?
如何来做not null check来避免程序抛出空指针异常?
Java里面的finally代码块会永远都执行到么?
Implement Runnable和extends Thread哪个比较好?

Java是值传递还是引用传递?

这个问题想必大家都有印象,但是大家真的立刻能回答出来么?

答案是:Java是值传递的

如何让Java程序产生内存泄露?

这个问题想必就有点挠头了,Java不是都用容器来管理内存了么?一时半会儿如果想不起怎么玩的话在面试的时候就尴尬了。这里我给个答案。只是一个思路,大家可以用其它的思路来玩。以下是步骤

  1. 创建一个一直在运行的线程。

  2. 线程通过ClassLoader来加载一个类

  3. 给这个类分配一个很大的内存例如(new byte[](1000000))这样的。然后将其的引用存在静态变量中和ThreadLocal中。

  4. 线程清理类和ClassLoader的所有引用。

  5. 重复上面的所有动作

如何来做not null check来避免程序抛出空指针异常?

当然大家都可以在程序里面在调用某个对象之前写一下:object !=null的判断条件。但是这个是不是有点太恶心了呢?

Java提供给大家一个优雅的方式,就是用Java8提供的java.util.Optional来实现。具体的如何实现我们后面的文章会细致分析

Java里面的finally代码块会永远都执行到么?

答案肯定是否定的,那么在什么情况下是不会执行到的呢?这里我给一个例子:你在这个finally代码块前面加:System.exit()的话。它就不会执行到了

Implement Runnable和extends Thread哪个比较好?

这个问题以前还是仁者见仁智者见智的,但是经过多番讨论,还是推荐大家在面试的时候说前者比较好。具体以后的文章会精致分析