<audio id="audio" title="开篇词 | 以面试题为切入点，有效提升你的Java内功" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/c3/b2/c3cdb7435e2e451bce01ccb96822b1b2.mp3"></audio>

Java是一门历史悠久的编程语言，可以毫无争议地说，Java是最主流的编程语言之一。全球有1200万以上Java程序员以及海量的设备，还有无所不能的Java生态圈。

我所知道的诸如阿里巴巴、京东、百度、腾讯、美团、去哪儿等互联网公司，基本都是以Java为首要编程语言的。即使在最新的云计算领域，Java仍然是AWS、Google App Engine等平台上，使用最多的编程语言；甚至是微软Azure云上，Java也以微弱劣势排在前三位。所以，在这些大公司的面试中，基本都会以Java为切入点，考评一个面试者的技术能力。

应聘初级、中级Java工程师，通常只要求扎实的Java和计算机科学基础，掌握主流开源框架的使用；Java高级工程师或者技术专家，则往往全面考察Java IO/NIO、并发、虚拟机等，不仅仅是了解，**更要求对底层源代码层面的掌握，并对分布式、安全、性能等领域能力有进一步的要求**。

我在Oracle已经工作了近7年，负责过北京Java核心类库、国际化、分发服务等技术团队的组建，面试过从初级到非常资深的Java开发工程师。由于Java组工作任务的特点，我非常注重面试者的计算机科学基础和编程语言的理解深度，我甚至不要求面试者非要精通Java，如果对C/C++等其他语言能够掌握得非常系统和深入，也是符合需求的。

工作多年以及在面试中，我经常能体会到，有些面试者确实是认真努力工作，**但坦白说表现出的能力水平却不足以通过面试**，通常是两方面原因：

<li>
“知其然不知其所以然”。做了多年技术，开发了很多业务应用，但似乎并未思考过种种**技术选择背后的逻辑**。坦白说，我并不放心把具有一定深度的任务交给他。更重要的是，我并不确定他未来技术能力的成长潜力有多大。团队所从事的是公司核心产品，工作于基础技术领域，**我们不需要那些“差不多”或“还行”的代码，而是需要达到一定水准的高质量设计与实现**。我相信很多其他技术团队的要求会更多、更高。
</li>
<li>
知识碎片化，不成系统。在面试中，面试者似乎无法完整、清晰地描述自己所开发的系统，或者使用的相关技术。平时可能埋头苦干，或者过于死磕某个实现细节，并没有抬头审视这些技术。比如，有的面试者，有一些并发编程经验，但对基本的并发类库掌握却并不扎实，似乎觉得在用的时候进行“面向搜索引擎的编程”就足够了。这种情况下，我没有信心这个面试者有高效解决复杂问题、设计复杂系统的能力。
</li>

前人已经掉过的坑，后来的同学就别再“前仆后继”了！

起初，极客时间邀请我写《Java核心技术面试精讲》专栏，我一开始心里是怀疑其形式和必要性的。经典的书籍一大堆呀，网上也能搜到所谓的“面试宝典”呀，为什么还需要我“指手画脚”？

但随着深入交流，我逐渐被说服了。我发现很多面试者其实是很努力的，只是

<li>
很难甑别出各种技术的核心与要点，技术书籍这么庞杂，对于经验有限的同学，找到高效归纳自己知识体系的方法并不容易。
</li>
<li>
各种“宝典”更专注于问题，解答大多点到即止，甚至有些解答准确性都值得商榷，缺乏系统性的分析与举一反三的讲解。
</li>

我在极客时间推出这个专栏，就是为了让更多没有经验或者经验有限的开发者，在准备面试时：

<li>
**少走弯路，利用有限的精力，能够更加高效地准备和学习**。
</li>
<li>
**提纲挈领，在知识点讲解的同时，为你梳理一个相对完整的Java开发技术能力图谱，将基础夯实**。
</li>

Java面试题目千奇百怪，有的面试官甚至会以黑魔法一样的态度，刨根问底JVM底层，似乎不深挖JVM源代码、不谈谈计算机指令，就是不爱学习，这是仁者见仁智者见智的事儿。我会根据自己的经验，围绕Java开发技术的方方面面，精选出5大模块，共36道题目，给出典型的回答，并层层深入剖析。

5大模块分为：

<li>
** Java基础**：我会围绕Java语言基本特性和机制，由点带面，让你构建牢固的Java技术功底。
</li>
<li>
**Java进阶**：将围绕并发编程、Java虚拟机等领域展开，助你攻坚大厂Java面试的核心阵地。
</li>
<li>
**Java应用开发扩展**：从数据库编程、主流开源框架、分布式开发等，帮你掌握Java开发的十八般兵器。
</li>
<li>
** Java安全基础**：让你理解常见的应用安全问题和处理方法，掌握如何写出符合大厂规范的安全代码。
</li>
<li>
**Java性能基础**：你将掌握相关工具、方法论与基础实践。
</li>

这几年我从业务系统或产品开发，切换到Java平台自身，接触了更多Java领域的核心技术，我相信我的分享能够提供一些独到的内容，而不是简单的人云亦云。

时移世易，很多大家耳熟能知的问题，其实在现代Java里已经发生了根本性的改变。在技术领域，即使你打算或已经转为技术管理等，扎实的技术功底也是必须的。希望通过我的专栏，不仅可以让你面试成功，还能帮助你未来职业发展更进一步。

万丈高楼平地起，愿我这个Java老兵，能与你一道，逐个击破大厂Java面试考点，直击Java技术核心要点，构建你的Java知识体系。
