208.md 22.3 KB
Newer Older
W
wizardforcel 已提交
1 2 3 4 5 6 7 8 9 10
# Java 面试问题

> 原文: [https://howtodoinjava.com/java-interview-questions/](https://howtodoinjava.com/java-interview-questions/)

未来几天有计划的面试吗? 本指南包含 100 多个 **Java 面试问题**,将帮助您针对经验丰富的开发人员以及从小型初创公司到大型公司的大多数 Java 核心面试问题进行修订。

从这些基本的核心 Java 问题开始。 我写这些教程是为了帮助您回答您可能会遇到的一些难题。 我试图在每个答案后面尽可能多地推理。 尽管如此,仍不可能在本指南中包含所有可能的问题,因此我在本访谈指南的末尾提供了一些很好的资源。

## 1.核心 Java 面试问题

W
wizardforcel 已提交
11
#### 1.1 [核心 Java 面试问题系列](//howtodoinjava.com/java/interviews-questions/core-java-interview-questions-series-part-1/)
W
wizardforcel 已提交
12 13 14 15 16 17 18

通常,每位访问者都将从 Java 核心概念入手,然后再进入更高级的主题。 原因很简单,他想放松您并使您感到舒适。

这些问题的范围可能从简单的面向对象原理到最常用的 Java 类,例如`String``HashMap`。 我之所以说这些简单问题,是因为它们测试了您的基础,基础知识以及对细节的好奇心。 尝试回答所有此类问题。 它们是低挂的水果,您不应该错过。

该系列分为 3 部分。 这些问题将帮助您在很短的时间内快速修订最常见的核心 Java 问题。 开始准备下一次面试的最佳方法。

W
wizardforcel 已提交
19 20 21
*   [核心 Java 面试问题 – 第 1 部分](//howtodoinjava.com/java/interviews-questions/core-java-interview-questions-series-part-1/)
*   [核心 Java 面试问题 – 第 2 部分](//howtodoinjava.com/java/interviews-questions/core-java-interview-questions-series-part-2/)
*   [核心 Java 面试问题 – 第 3 部分](//howtodoinjava.com/java/interviews-questions/core-java-interview-questions-series-part-3/)
W
wizardforcel 已提交
22

W
wizardforcel 已提交
23
#### 1.2 [对象初始化最佳做法](//howtodoinjava.com/java/related-concepts/object-initialization-best-practices-internal-caching-in-wrapper-classes/)
W
wizardforcel 已提交
24 25 26

在 Java 中,**对象初始化**被认为是一个繁重的过程,您应该了解每个新创建的对象如何影响内存和应用程序性能。 一个简单的例子是 Java 包装器类,它从外部看起来很简单,就像**原语**一样,但是它们并不像它们看起来那么简单。 了解 Java 如何在包装类(例如`Double``Long``Integer`)内对对象进行内部缓存。

W
wizardforcel 已提交
27
#### 1.3 [HashMap 在 Java 中的工作方式](//howtodoinjava.com/java/collections/how-hashmap-works-in-java/ "How hashmap works in java")
W
wizardforcel 已提交
28

W
wizardforcel 已提交
29
如果您参加任何初级或中级面试,[`HashMap`](https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html)可能是讨论最多且最具争议的话题。 如果您知道 hashmap 在内部如何工作,您可以面对与`**HashMap**`相关的任何面试问题。 这篇文章将帮助您回答一些很好的问题,例如 –
W
wizardforcel 已提交
30 31 32 33 34 35 36

*   HashMap 如何存储键值对?
*   HashMap 如何解决冲突?
*   HashMap 中如何使用 hashCode()和 equals()方法?
*   密钥的随机/固定 hashCode()值的影响?
*   在多线程环境中使用 HashMap?

W
wizardforcel 已提交
37
#### 1.4 [为 HashMap 设计一个好的密钥](//howtodoinjava.com/java/collections/how-to-design-a-good-key-for-hashmap/)
W
wizardforcel 已提交
38 39 40 41 42 43 44 45

因此,您现在知道`HashMap`的工作原理吗? 现在了解有关为`HashMap`设计一个好的密钥的信息。 这是测试您是否正确理解 HashMap 内部工作的一种好方法。 这将帮助您回答以下问题:

*   为什么`String`是 HashMap 的好钥匙?
*   您将如何设计用作键的类?
*   您将重写 Key 类中的 hashCode()方法吗? 有什么影响?
*   为可以作为 HashMap 关键对象的类编写语法?

W
wizardforcel 已提交
46
#### 1.5 [关于 ConcurrentHashMap](//howtodoinjava.com/tag/concurrenthashmap/ "concurrenthashmap") 的问题
W
wizardforcel 已提交
47 48 49 50 51

HashMap 不是线程安全的。 我们可以在并发应用程序中使用 **HashTable** ,但这会影响应用程序性能。 所以我们有`ConcurrentHashMap`。 它是`HashMap`的并发版本,具有与 HashMap 相同的性能,并且同时也是线程安全的。

您应该进一步了解 **ConcurrentHashMap** 。 仅此一个类就有很多概念。 这也是准备下一次面试时要学习的另一个好话题。

W
wizardforcel 已提交
52
#### 1.6 [Java Collections 面试问题](//howtodoinjava.com/java/collections/useful-java-collection-interview-questions/)
W
wizardforcel 已提交
53 54 55

我是否应该建议您准备**收集框架**及其所有主要类别? 我想你已经足够聪明了。

W
wizardforcel 已提交
56
如果没有任何与馆藏框架有关的问题,则任何面试(初中和中级)都将是不完整的。 它真正测试您的编程技能和对核心 Java API 的了解。 问题可能像集合层次结构一样简单,而困难的问题例如队列和堆栈。 这是此类常见收藏采访问题的列表 –
W
wizardforcel 已提交
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

*   解释馆藏层次?
*   **设置****列表**之间的区别?
*   **向量****ArrayList** 之间的差异?
*   HashMap 和 HashTable 之间的区别?
*   **迭代器****ListIterator** 之间的区别?
*   为什么 Map 接口没有扩展 Collection 接口?
*   如何将 String 数组转换为 ArrayList?
*   如何扭转名单?
*   HashSet 如何存储元素?
*   是否可以将空元素添加到 **TreeSet****HashSet**
*   什么是 **IdentityHashMap****WeakHashMap**
*   什么时候使用 HashMap 或 TreeMap?
*   如何使收藏集只读?
*   如何使收集线程安全?
*   **故障快速****故障安全**有什么区别?
*   什么是**比较器****比较器**接口?
*   什么是集合和**数组**类?
*   什么是**队列****堆栈**? 列出他们的差异?

W
wizardforcel 已提交
77
#### 1.7 [Java 中的多态是什么?](//howtodoinjava.com/object-oriented/what-is-polymorphism-in-java/)
W
wizardforcel 已提交
78 79 80 81 82

简而言之,**多态性**是一种能力,通过它我们可以创建在不同程序环境下表现不同的函数或参考变量。 与继承,抽象和封装一样,多态是面向对象编程的主要构建块之一。

通过示例更详细地了解该概念。 这是如此重要。

W
wizardforcel 已提交
83
#### 1.8 [Java 中的抽象是什么?](//howtodoinjava.com/object-oriented/understanding-abstraction-in-java/)
W
wizardforcel 已提交
84 85 86

在上一个问题中,您学习了多态。 现在是时候通过理解**抽象**来扩展您的知识了。 任何 Java 面试的话题都非常复杂。

W
wizardforcel 已提交
87
#### 1.9 [抽象与封装?](//howtodoinjava.com/object-oriented/encapsulation-in-java-and-its-relation-with-abstraction/ "Encapsulation in java and its relation with abstraction")
W
wizardforcel 已提交
88 89 90 91 92

了解抽象和**封装**之间的区别是深入理解这两个概念的关键。 您不能孤立地学习两者。 它们采用 Java 编写,因此必须加以集体理解。

在这篇文章中,我已经解释了封装并通过抽象来区分它。 在继续之前,必须阅读 Java 面试问题。

W
wizardforcel 已提交
93
#### 1.10 [接口和抽象类之间的区别?](//howtodoinjava.com/object-oriented/exploring-interfaces-and-abstract-classes-in-java/ "Exploring interfaces and abstract classes in java")
W
wizardforcel 已提交
94 95 96 97 98

自从 Java 语言诞生以来,在**抽象类****接口**中就有非常清晰的分离。 但是自从 Java 8 发行到市场以来,发生了很多变化。 它的核心概念之一是功能接口。

[**功能接口**](https://howtodoinjava.com/java8/functional-interface-tutorial/) 完全改变了我们查看 Java 语言的两个基本构建块的方式。 如果您的简历说您使用 Java 8,就不能跳过这个问题。在链接的教程中,我将向您展示正确的场景,这将帮助您解决一些复杂的面试问题和案例研究。

W
wizardforcel 已提交
99
#### 1.11 [枚举面试问题](//howtodoinjava.com/java-5/guide-for-understanding-enum-in-java/)
W
wizardforcel 已提交
100

W
wizardforcel 已提交
101
枚举已成为核心构建块很长时间了。 在大多数流行的 Java 库中都可以看到它们。 它们帮助您以更加面向对象的方式管理常量。 它们看起来非常简单,但是如果您深入研究,它们会隐藏很多复杂性。 一些枚举问题可能是 –
W
wizardforcel 已提交
102 103 104 105 106 107 108 109

*   枚举与枚举类之间的区别?
*   枚举可以与 String 一起使用吗?
*   我们可以扩展枚举吗?
*   写枚举的语法?
*   如何在枚举中实现反向查找?
*   什么是 EnumMap 和 EnumSet?

W
wizardforcel 已提交
110
#### 1.12 [Java 序列化和可序列化接口](//howtodoinjava.com/java/serialization/a-mini-guide-for-implementing-serializable-interface-in-java/)
W
wizardforcel 已提交
111

W
wizardforcel 已提交
112
如果您准备对电信公司或在其应用程序流程中使用**序列化**的任何此类域进行 Java 采访,那么您将从本教程中受益匪浅。 用 Java 进行序列化的可做与不可做的一个很好的清单。 可能的问题可能包括 –
W
wizardforcel 已提交
113 114 115 116 117 118 119

*   什么是 **serialVersionUID**
*   什么是 **readObject****writeObject**
*   ow,您将序列化和反序列化一个类吗?
*   您将如何对类进行更改,以使序列化不中断?
*   我们可以序列化静态字段吗?

W
wizardforcel 已提交
120
#### 1.13 [Java 主要方法](//howtodoinjava.com/java/related-concepts/a-mini-guide-to-main-method-in-java/ "A mini guide to main method in java")
W
wizardforcel 已提交
121 122 123 124 125 126 127 128 129

有没有想过为什么`**main()**`是公共的,静态的和无效的? 在 Java 面试中,这不是一个经常问到的面试问题,但我仍然建议您阅读这篇文章来回答以下问题:

*   Java 主要方法语法?
*   为什么主要方法是公开的?
*   为什么主要方法是静态的?
*   为什么主要方法无效?
*   当您调用 main 方法时,内部会发生什么?

W
wizardforcel 已提交
130
#### 1.14 [Java 对象克隆](//howtodoinjava.com/java/cloning/a-guide-to-object-cloning-in-java/ "A guide to object cloning in java")
W
wizardforcel 已提交
131 132 133 134 135 136 137 138 139

Java 中的对象**克隆**并非易事。 我自己花了很长时间了解 Java 的克隆。 看起来真的很简单; 使用`Cloneable`界面并覆盖`clone()`方法。 可是等等; 在面试中还有很多要说的和要问的。 例如

*   clone()方法如何工作?
*   Java 中的浅表复制是什么?
*   什么是复制构造函数?
*   Java 中的深层复制是什么?
*   创建对象的深层副本的不同方法?

W
wizardforcel 已提交
140
#### 1.15 [什么是 CountDownLatch?](//howtodoinjava.com/java/multi-threading/when-to-use-countdownlatch-java-concurrency-example-tutorial/)
W
wizardforcel 已提交
141 142 143

从 Java 5 开始,`java.uti.concurrent`包具有许多有用的但很复杂的类来在并发应用程序上工作。 `CountDownLatch`是在任何 Java 采访大型企业中都要求很高的类之一。 在本教程中,`CountDownLatch`附带示例和概念进行了解释。

W
wizardforcel 已提交
144
#### 1.16 [为什么字符串是不可变的?](//howtodoinjava.com/java/string/java-interview-question-why-strings-are-immutable/ "Java interview question: Why Strings are immutable?")
W
wizardforcel 已提交
145 146 147 148 149

这个问题是初学者中非常受欢迎的面试问题。 基本上,面试官测试您对 String 类,**字符串池**,内存区域和对象创建的了解。

我分开写这篇文章是因为这个概念非常重要。 实际上,**不变性**本身是 Java 中非常重要的概念。 感受冰山一角。

W
wizardforcel 已提交
150
#### 1.17 [如何使 Java 类不可变?](//howtodoinjava.com/java/related-concepts/how-to-make-a-java-class-immutable/ "How to make a java class immutable")
W
wizardforcel 已提交
151 152 153 154 155 156 157

不变类是一种一旦创建便无法更改其状态的类。 在 Java 中创建不可变的类有某些准则,您必须知道它们才能正确回答此问题。

请注意,不变性在许多设计方面都很重要,并且是所有 Java 专家推荐的设计模式。 了解如何使 Java 类不可变,如何使 Java 类受益于应用程序设计,并准备在其上遇到更多软件设计面试问题。

## 2\. Java 并发面试问题

W
wizardforcel 已提交
158
#### 2.1 [什么是线程安全性?](//howtodoinjava.com/java/multi-threading/what-is-thread-safety/ "What is Thread Safety?")
W
wizardforcel 已提交
159 160 161 162 163 164 165 166 167 168

定义**线程安全性**非常棘手。 线程安全性的任何合理定义的核心是正确性的概念。 因此,在了解线程安全性之前,我们应该首先了解这种“正确性”。

在这个必读的 Java 教程中,清除您的疑问并准备回答一些流行的面试问题。 例如

*   线程安全的正确性是什么?
*   举个线程安全类的例子吗?
*   您将如何设计线程安全的 Java 类?
*   不变类线程安全吗?

W
wizardforcel 已提交
169
#### 2.2 [对象级别锁定与类级别锁定](//howtodoinjava.com/java/multi-threading/thread-synchronization-object-level-locking-and-class-level-locking/)
W
wizardforcel 已提交
170 171 172 173 174 175 176 177

**并发**的核心是对象锁定的概念。 锁定发生在实例级别以及类级别。

*   当您要同步非静态方法或非静态代码块时,只有一个线程将能够在给定的类实例上执行代码块,因此对象级锁定是一种机制。 应该始终这样做以确保实例级数据线程安全。
*   类级别锁定可防止多个线程在运行时在所有可用实例中的任何一个中进入同步块。 这意味着,如果在运行时有`DemoClass`的 100 个实例,则一次只有一个线程能够在任何一个实例中执行`demoMethod()`,而所有其他实例将被其他线程锁定。 为了确保静态数据线程的安全,应该始终这样做。

在本教程中详细了解整个概念。

W
wizardforcel 已提交
178
#### 2.3 [“可运行的实现”和“扩展线程”之间的区别?](//howtodoinjava.com/java/multi-threading/difference-between-implements-runnable-and-extends-thread-in-java/)
W
wizardforcel 已提交
179 180 181

这也是一个非常受欢迎的面试问题。 如果您的角色要求为并发应用程序创建设计,那么您必须知道此问题的正确答案。 这个问题的答案决定了您在两者之间选择哪种结构。

W
wizardforcel 已提交
182
此外,它将帮助您回答一些基本问题,例如 –
W
wizardforcel 已提交
183 184 185 186 187

*   线程和可运行之间的区别?
*   编写 Java 代码以使用 Runnable 接口创建线程?
*   两者之间应首选哪种方法?

W
wizardforcel 已提交
188
#### 2.4 [比较并交换[CAS]算法](//howtodoinjava.com/java/multi-threading/compare-and-swap-cas-algorithm/)
W
wizardforcel 已提交
189 190 191 192 193 194 195 196

此问题针对中级或高级开发人员。 在回答这个问题之前,这需要对其他并发概念有深刻的理解。 因此,这是测试 Java 并发知识的好方法。

*   什么是乐观锁定和悲观锁定?
*   什么是比较和交换算法?
*   什么是原子操作?
*   AtomicInteger 和 AtomicLong 如何工作?

W
wizardforcel 已提交
197
#### 2.5 [什么是 Fork / Join 框架?](https://howtodoinjava.com/java7/forkjoin-framework-tutorial-forkjoinpool-example/)
W
wizardforcel 已提交
198 199 200 201 202

自 Java 8 发行以来,这不是一个新概念,但现在已以多种方式使用。Fork-Join 将手头的任务分解为多个微型任务,直到该微型任务足够简单,无需进一步分解即可解决。 这就像分而治之的算法。 在此框架中要注意的一个重要概念是,理想情况下,没有工作线程处于空闲状态。 他们实现了一种偷窃工作的算法,即闲置的工人从忙碌的工人那里窃取了工作。

学习这个精巧而高效的算法,以更好地准备下一次面试。

W
wizardforcel 已提交
203
#### 2.6 [什么是 ThreadPoolExecutor?](https://howtodoinjava.com/java/multi-threading/java-thread-pool-executor-example/)
W
wizardforcel 已提交
204 205 206 207 208 209 210

在并发 Java 应用程序中,创建线程是一项昂贵的操作。 而且,如果您每次都开始创建新的线程实例来执行任务,则应用程序性能肯定会降低。 ThreadPoolExecutor 解决了此问题。

ThreadPoolExecutor 将任务创建和执行分开。 使用 ThreadPoolExecutor,您仅需实现 Runnable 对象并将其发送给执行程序。 它负责它们的执行,实例化以及使用必要的线程运行。

阅读 ThreadPoolExecutor 如何解决各种问题以及如何与 [BlockingQueue](https://howtodoinjava.com/java/multi-threading/how-to-use-blockingqueue-and-threadpoolexecutor-in-java/) 一起使用。

W
wizardforcel 已提交
211
#### 2.7 [Java 执行程序框架教程和最佳实践](//howtodoinjava.com/java-5/java-executor-framework-tutorial-and-best-practices/ "Java executor framework tutorial and best practices")
W
wizardforcel 已提交
212 213 214

您将在上一个链接中学习执行器,但是要想有效地使用这些执行器,您需要了解某些事情。

W
wizardforcel 已提交
215
#### 2.8 [如何用 Java 写死锁并解决](//howtodoinjava.com/java/multi-threading/writing-a-deadlock-and-resolving-in-java/)
W
wizardforcel 已提交
216 217 218 219 220 221 222 223 224

它可能以难题的形式出现。 最好为此做好准备。 面试官可以测试您的并发知识以及对`wait()``notify()`方法调用的深刻理解。

指尖准备好一个**死锁**源代码示例。 您将需要它。

> 在出现任何 Java 采访之前,必须阅读以上给出的问题。 但是,它们仍无法提供完整的覆盖范围。 您需要了解的越来越多,才能在面试中表现更好。 我建议您按照给定的顺序阅读以下各节中的更多主题。

## 3.有经验的开发人员的 Java 面试问题

W
wizardforcel 已提交
225
#### 3.1 [最佳做法指南](//howtodoinjava.com/java-best-practices/ "Best practices")
W
wizardforcel 已提交
226 227 228

强烈推荐的最佳做法列表。 他们将打开您的思路,朝着不同的方向思考。 简而言之,他们将为您的下一次 Java 面试提供帮助。

W
wizardforcel 已提交
229
#### 3.2 [结识一些难题](//howtodoinjava.com/category/puzzles/ "Puzzles")
W
wizardforcel 已提交
230 231 232

解决这些**难题**并在它们周围玩耍。 您永远不知道在糟糕的一天会遇到什么。

W
wizardforcel 已提交
233
#### 3.3 [整理设计模式](//howtodoinjava.com/category/design-patterns/ "Design patterns")
W
wizardforcel 已提交
234 235 236

为了在下一次 Java 面试中获得更高的职位,您必须知道这些设计模式可以处理一些复杂的应用程序设计问题,这些问题通常在当今的所有面试中都得到讨论。

W
wizardforcel 已提交
237
#### 3.4 [随机浏览核心 Java 主题](//howtodoinjava.com/category/java/ "Core java topics")
W
wizardforcel 已提交
238 239 240 241 242

仍然有实力阅读更多。 在此处浏览更多 Java 面试问题。

## 4.春季面试题

W
wizardforcel 已提交
243
#### 4.1 [春季核心面试问题](https://howtodoinjava.com/interview-questions/top-spring-core-interview-questions-with-answers/)
W
wizardforcel 已提交
244 245 246 247 248 249 250 251 252 253 254 255 256 257

我已经尝试收集一些春季热门核心面试问题,您将在下次技术面试中面对这些问题,例如

*   什么是控制反转(IoC)和依赖注入(DI)?
*   BeanFactory 和 ApplicationContext 之间的区别?
*   什么是基于 Spring Java 的配置?
*   解释 Spring Bean 的生命周期?
*   Spring Bean 范围有哪些不同?
*   在 Spring Framework 中,Singleton bean 线程安全吗?
*   解释 Bean 自动装配的不同模式?
*   用示例解释@Qualifier 注释?
*   构造函数注入和 setter 注入之间的区别?
*   命名 Spring 框架中使用的一些设计模式?

W
wizardforcel 已提交
258
#### 4.2 [春季 AOP 面试问题](https://howtodoinjava.com/interview-questions/top-spring-aop-interview-questions-with-answers/)
W
wizardforcel 已提交
259 260 261

Spring **AOP** (面向方面​​的编程)在某种意义上补充了 OOP,因为它也提供了模块化。 在 OOP 中,关键单位是“对象”,但在 AOP 中,关键单位是方面或横切关注点,例如日志记录和安全性。 AOP 提供了一种使用简单的可插拔配置在实际逻辑之前,之后或周围动态添加横切关注点的方法

W
wizardforcel 已提交
262
通过这些最常见的 AOP 面试问题 -
W
wizardforcel 已提交
263 264 265 266 267 268 269 270

*   关注点和跨领域关注点之间的区别?
*   有哪些可用的 AOP 实现?
*   春季 AOP 中有哪些不同的建议类型?
*   什么是 Spring AOP 代理?
*   什么是**接合点****切点**
*   什么是纵横编织?

W
wizardforcel 已提交
271
#### 4.3 [Spring MVC 面试问题](https://howtodoinjava.com/interview-questions/spring-mvc-interview-questions-with-answers/)
W
wizardforcel 已提交
272

W
wizardforcel 已提交
273
这些 Spring MVC 面试问题和答案已被编写,可帮助您为面试做准备,并快速地对总体概念进行修订。 如果有多余的时间,我强烈建议您更深入地研究每个概念。 一般来说,您应该能够回答以下问题 -
W
wizardforcel 已提交
274 275 276 277 278 279 280 281 282 283 284 285 286 287

*   什么是 MVC 架构?
*   什么是 DispatcherServlet 和 ContextLoaderListener?
*   如何使用基于 Java 的配置?
*   我们如何使用 Spring 创建返回 JSON 响应的 Restful Web Service?
*   < contextannotation-config >< contextcomponent-scan >之间的区别?
*   @ Component,@ Controller,@ Repository & @Service 批注之间的区别?
*   Spring MVC 如何提供验证支持?
*   什么是 Spring MVC 拦截器以及如何使用?
*   如何在 Spring MVC Framework 中处理异常?
*   如何在 Spring MVC 应用程序中实现本地化?

## 5.测试您的知识

W
wizardforcel 已提交
288
#### 5.1 [针对 Oracle 企业管理器项目](https://howtodoinjava.com/interview-questions/real-java-interview-questions-asked-for-oracle-enterprise-manager-project/)的 Real Java 采访问题
W
wizardforcel 已提交
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311

到目前为止,您已经学习了 Java 中的所有不同概念,这些概念可以通过面试问题的形式出现在您面前。 现在该看看您是否准备好了。 在接受 Oracle Corporation 采访时,请回答 Sreenath Ravva 提出的一些实际问题。

*   您可以开始讲述自己和您的项目吗?
*   什么是 Java 中的抽象和封装?
*   方法重载规则?
*   Java 的扩大和缩小?
*   我只能试一下代码块吗?
*   线程:生产者和消费者有问题吗?
*   为什么在 Object 类中定义了 wait(),notify()和 notifyAll()?
*   我们可以覆盖 wait()或 notify()方法吗?
*   wait(),sleep()和 yield()之间的区别?
*   解释一下线程类中的 join()方法?
*   您是否遇到了内存不足错误? 如果是,您如何解决? 告诉不同的情况为什么会这样?
*   数据库连接泄漏?
*   编写程序以使用第三个变量交换两个数字?
*   编写程序对数组进行排序并删除重复项?
*   在 Singleton 上编写程序?
*   写一个程序合并两个数组?
*   final 和 final 关键字有什么用?
*   我可以将类声明为静态还是私有的吗?
*   为什么要更改公司?

W
wizardforcel 已提交
312
#### 5.2 [针对中级开发人员的 Java 面试问题](//howtodoinjava.com/interviews-questions/java-interview-questions-for-mid-level-developers/)
W
wizardforcel 已提交
313 314 315 316 317 318 319

Nikhil 在 Java / j2ee 开发人员方面有 6 年的经验,他打算改变公司。 我向他提出了这些中级面试问题。

他的面试很成功。 您也可以从中受益。

## 6.推荐书籍

W
wizardforcel 已提交
320
#### 6.1 [Java Puzzlers](https://www.amazon.com/gp/offer-listing/032133678X/ "java puzzlers")
W
wizardforcel 已提交
321 322 323

每种编程语言都有其怪癖。 本书通过编程难题揭示了 Java 编程语言的奇特之处。

W
wizardforcel 已提交
324
#### 6.2 [实践中的 Java 并发性](https://www.amazon.com/gp/offer-listing/ " Java Concurrency in Practice ")
W
wizardforcel 已提交
325 326 327

实践中的 Java 并发为您提供了为当今和未来的系统编写安全且可扩展的 Java 程序所需的概念和技术。

W
wizardforcel 已提交
328
#### 6.3 [Joshua Bloch 撰写的有效 Java](https://www.amazon.com/gp/offer-listing/0321356683/ "Effective Java")
W
wizardforcel 已提交
329 330 331 332

第二版的《有效 Java》汇集了七十八个不可或缺的程序员经验法则:针对您每天遇到的编程挑战提供可行的最佳实践解决方案。

学习愉快!