
你好，我是杨晓峰。今天这期周末福利，我整理了几本自己在学习和使用Java时用过的参考书，把它们分享与你。在专栏里，有不少同学留言让我推荐一些参考书。另外，我认为，书是个好的系统化知识来源，但更多提高还是来源于实践、阅读源码、技术交流等，毕竟书籍也很难完全跟上技术和架构的变革，另外我也尽量缩减了书单的长度。

**关于夯实Java编程基础，我推荐Bruce Eckel的《Java编程思想》（Thinking in Java）**，非常有名的经典书籍。这本书的特点是，不仅仅介绍Java编程的基础知识点，也会思考编程中的各种选择与判断，包括穿插设计模式的使用，作者从理论到实践意义从不同的角度进行探讨，构建稳固的Java编程知识体系。

当然这本书也有不足之处，毕竟每个人的基础不太一样，如果你完全没有Java编程基础，也可以考虑其他的参考书，例如 **《Java核心技术》**。

另外，这两本书的部分内容已经多少有点过时了，尤其是《Java编程思想》。例如，目前很少会需要学习Java桌面图形类库等，较新的语法和API当然也没有包含，我的建议是尽管忽略过时内容，适当补充Java新技术的学习。

提到经典，自然也少不了 **《Effective Java》**，这本书的英文第三版已经在国内上市，涵盖了Java 7到Java 9的各种新特性。严格来说，这本书不算是一本基础书籍，但当你有一定基础后，还是非常建议通读一下的。关于这本书的阅读，我的建议是边学习边回顾，在吸收书中的经验时，多去想想自己在实际应用中是如何处理的。虽然《Effective Java》的具体章节可能是从某个点出发，但可以说都是对Java、JVM、面向对象等各种知识的综合运用，对于设计和实现高质量的代码很有帮助。

<img src="https://static001.geekbang.org/resource/image/bf/06/bf6e3f87d162595ddaa5d0786c0ed806.jpg" alt=""><br>
﻿<br>
**《Head First设计模式》** 这本书就不用我再费笔墨去介绍了吧，能把设计模式用这种轻松的形式展现本身已经十分不易了，章节之间的联系让你可以反复加深印象，加上生动的表达方式和丰富的习题更容易沉浸其中。

<img src="https://static001.geekbang.org/resource/image/17/0e/17ed56811412ccab5024a119511e0f0e.jpg" alt="">

这本书非常适合对面向对象和设计模式基础有限的同学。设计模式不是银弹，实践中也莫要为了模式而模式，掌握典型模式，能够举一反三就很好了，就当作是程序员之间沟通的“方言”。

谈过了Java基础，接下来聊聊**并发和虚拟机**的参考书。

**《Java并发编程实战》**，作者全是响当当的人物，比如Brian Goetz，我多次在专栏里引用他的观点，众多强力作者也保证了书的质量。抛开作者光环，这本书的内容全部建立在理论之上，先讲清道理再谈实践，可以真正让你知其然也知其所以然。这本书更加侧重并发编程中有哪些问题，如何来深刻地理解和定义问题，如何利用可靠的手段指导工程实践，并没有过分纠结于并发类库的源码层面。

<img src="https://static001.geekbang.org/resource/image/04/3f/0432ac1e431256fb894144aa2e66b03f.jpg" alt="">

这本书的我的学习建议是，尽量充分利用其中提供的样例代码，结合自己的业务实践去深入学习，毕竟这本书的内容有些偏理论，可能并不适合你快速掌握所谓并发“核心”技术。<br>
﻿<br>
关于JVM的学习，不用我多说了吧，看过专栏的同学肯定都知道，我经常推荐**周志明的《深入理解Java虚拟机》**，可以说是国内最好的JVM书籍之一。

<img src="https://static001.geekbang.org/resource/image/98/5f/98d02b66e1d3fdf8cc1f7f7c6f974b5f.jpg" alt="">

我这里并没有单独推荐类似GC算法等书籍，它们对于大多数Java工程师的价值也许有限。

关于性能优化，我推荐**Charlie Hunt和Binu John所著的《Java性能优化权威指南》（Java Performance）**，也是我上次在直播时向大家推荐的。Java之父James Gosling，也力荐这本参考书。

<img src="https://static001.geekbang.org/resource/image/c9/10/c9fae97c8a4954cb91b59dc7e59ab710.jpg" alt="">

但这本书也存在着不足，里面过于偏重Solaris等商业操作系统和相关工具，我建议你在阅读的时候，尽量体会其思路和原理，更加侧重于Linux等主流开放平台。

还有一些如开源软件和互联网架构相关的图书可以作为扩展阅读，你可以参考下面这几本。

《Spring实战》

<img src="https://static001.geekbang.org/resource/image/75/61/7559562971dc2eadd8fd03f02980a461.jpg" alt="">

可以说Spring等相关框架已经成为业务开发的事实标准，系统性地掌握Spring框架的设计和实践，是必需的技能之一。

《Netty实战》

<img src="https://static001.geekbang.org/resource/image/f8/d9/f8b11bdcb1559e472b77e23fcf184dd9.jpg" alt="">

Netty在性能、可扩展性等方面的突出表现，已经得到充分验证，作为基础的通信框架，已经广泛应用在各种互联网架构、游戏等领域，甚至可以说，如果没有仔细分析过Netty，对NIO等方面的理解很可能还在很肤浅的阶段。

《Cloud Native Java》

<img src="https://static001.geekbang.org/resource/image/d2/12/d286554382cbba791f85e667ea124e12.jpg" alt="">

Java应用程序架构处于飞快的演进之中，微服务等新的架构应用越来越广泛，即使未必是使用Spring Boot、Spring Cloud等框架，但是系统的学习其设计思想和实践技术，绝对是有必要的。当然如果你在实践中使用Dubbo等框架，也可以选择相关书籍。

前沿领域的变化非常快，很多风靡一时的开源软件，在实践中逐渐被证明存在各种弊端，或者厂商停止维护。所以这部分的学习，我建议不要盲目追新，最好是关注于分布式设计中的问题和解决的思路，做到触类旁通，并且注重书籍之外的学习渠道。

下面两本并不算是Java书籍，但Java程序员进阶少不了对互联网主流架构的学习，了解分布式架构、缓存、消息中间件等令人眼花缭乱的技术，对于有志于成为架构师的Java工程师来说非常有帮助。

《大型分布式网站架构设计与实践》

<img src="https://static001.geekbang.org/resource/image/4a/4f/4ab17456a34278a8ca18de54fea76f4f.jpg" alt="">

这本书总结了作者在构建安全、可稳定性、高扩展性、高并发的分布式网站方面的心得。

《深入分布式缓存：从原理到实践》

<img src="https://static001.geekbang.org/resource/image/3d/b8/3d70890354f556d1b3acbc2f2fdd99b8.jpg" alt="">

这本书融合了原理、架构和一线互联网公司的案例实践，值得参考。

下面给入选精选留言的同学送出15元学习奖励礼券。专栏即将进入尾声，希望所有订阅的同学能够坚持到底，也欢迎大家留言分享自己学习或面试的心得体会。

<img src="https://static001.geekbang.org/resource/image/35/bf/35c9a5cab69eae467adb7d85d76d41bf.jpg" alt="">


