4

原文地址:https://dzone.com/articles/10-tricky-interview-questions-for-...

这里列出了十个常见而又刁钻的 Java 开发人员面试题及答案,这些题目是我从 StackOverflow 上找来的。如果你是初中级 Java 开发人员,而且近期准备面试的话,这些题目可能对你有些帮助。

Q1: Java 是“传引用”的还是“传值”的?

答:Java 总是传值的。关于这点的详细论述请参考 Is Java “pass-by-reference” or “pass-by-value”?

Q2: 如何用 Java 构建一个内存溢出的场景?

答:可以用一个类加载器(class loader)和 ThreadLocal 来实现。详情参考 Creating a memory leak in Java

Q3: 成员修饰符 package private、public、protected 和 private 之间的区别是什么?

答:

  • private 成员只能在当前类中访问到。
  • package private 成员(即没有访问修饰符的成员)可以在当前包下的所有类中访问到。
  • protected 成员可以在当前包下的所有类和其他包下的所有子类中访问到。
  • public 成员可以在所有类中访问到。

更详细的解释在这里

Q4: HashMap 和 Hashtable 的区别在哪里?

答:Hashtable 是同步的,而且不允许 key 或 value 为 null。详情参考 differences between HashMap and Hashtable

Q5: 有哪些可以避免 != null 语句(非空校验)的方法?

答:一种方法是用 assert 断言。自定义的注解(annotation)也可以用来做非空校验。详情参考 How to avoid != null Statements

Q6: 在 Java 中,“finally” 块是一定会执行的吗?

答:在以下情形中不会执行:遇到“System.exit()”、遇到无限循环、遇到系统崩溃之类的。详情参考 Does finally always execute in Java?

Q7: Java 中可以在一个构造函数里面调用另一个构造函数吗?

答:可以,但也只能调用一次其他构造函数,并且必须是本构造函数的第一条语句。详情参考 How do I call one constructor from another in Java?

译注:从 Java 22 开始这个情况有变化,具体请参考 JEP 447

Q8: “implements Runnable” 和 “extends Thread” 相比哪种方式更好?

答:最好是用“implements Runnable”的方式。详情参考 Implements Runnable vs. Extends Thread

Q9: Java 中可以从内嵌的多层循环中跳出吗?

答:可以。这里有一个例子:Breaking out of nested loops in Java

Q10: 什么是反射(reflection),反射有什么用?

答:反射是一种用于探测同一系统内的其他代码的代码机制。它的具体作用请参考:Why Reflection is useful


捏造的信仰
2.8k 声望272 粉丝

Java 开发人员