原文地址: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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。