gitbook/Java核心技术面试精讲/docs/12188.md
2022-09-03 22:05:03 +08:00

84 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 周末福利 | 一份Java工程师必读书单
你好我是杨晓峰。今天这期周末福利我整理了几本自己在学习和使用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、面向对象等各种知识的综合运用对于设计和实现高质量的代码很有帮助。
![](https://static001.geekbang.org/resource/image/bf/06/bf6e3f87d162595ddaa5d0786c0ed806.jpg)

**《Head First设计模式》** 这本书就不用我再费笔墨去介绍了吧,能把设计模式用这种轻松的形式展现本身已经十分不易了,章节之间的联系让你可以反复加深印象,加上生动的表达方式和丰富的习题更容易沉浸其中。
![](https://static001.geekbang.org/resource/image/17/0e/17ed56811412ccab5024a119511e0f0e.jpg)
这本书非常适合对面向对象和设计模式基础有限的同学。设计模式不是银弹,实践中也莫要为了模式而模式,掌握典型模式,能够举一反三就很好了,就当作是程序员之间沟通的“方言”。
谈过了Java基础接下来聊聊**并发和虚拟机**的参考书。
**《Java并发编程实战》**作者全是响当当的人物比如Brian Goetz我多次在专栏里引用他的观点众多强力作者也保证了书的质量。抛开作者光环这本书的内容全部建立在理论之上先讲清道理再谈实践可以真正让你知其然也知其所以然。这本书更加侧重并发编程中有哪些问题如何来深刻地理解和定义问题如何利用可靠的手段指导工程实践并没有过分纠结于并发类库的源码层面。
![](https://static001.geekbang.org/resource/image/04/3f/0432ac1e431256fb894144aa2e66b03f.jpg)
这本书的我的学习建议是,尽量充分利用其中提供的样例代码,结合自己的业务实践去深入学习,毕竟这本书的内容有些偏理论,可能并不适合你快速掌握所谓并发“核心”技术。

关于JVM的学习不用我多说了吧看过专栏的同学肯定都知道我经常推荐**周志明的《深入理解Java虚拟机》**可以说是国内最好的JVM书籍之一。
![](https://static001.geekbang.org/resource/image/98/5f/98d02b66e1d3fdf8cc1f7f7c6f974b5f.jpg)
我这里并没有单独推荐类似GC算法等书籍它们对于大多数Java工程师的价值也许有限。
关于性能优化,我推荐**Charlie Hunt和Binu John所著的《Java性能优化权威指南》Java Performance**也是我上次在直播时向大家推荐的。Java之父James Gosling也力荐这本参考书。
![](https://static001.geekbang.org/resource/image/c9/10/c9fae97c8a4954cb91b59dc7e59ab710.jpg)
但这本书也存在着不足里面过于偏重Solaris等商业操作系统和相关工具我建议你在阅读的时候尽量体会其思路和原理更加侧重于Linux等主流开放平台。
还有一些如开源软件和互联网架构相关的图书可以作为扩展阅读,你可以参考下面这几本。
《Spring实战》
![](https://static001.geekbang.org/resource/image/75/61/7559562971dc2eadd8fd03f02980a461.jpg)
可以说Spring等相关框架已经成为业务开发的事实标准系统性地掌握Spring框架的设计和实践是必需的技能之一。
《Netty实战》
![](https://static001.geekbang.org/resource/image/f8/d9/f8b11bdcb1559e472b77e23fcf184dd9.jpg)
Netty在性能、可扩展性等方面的突出表现已经得到充分验证作为基础的通信框架已经广泛应用在各种互联网架构、游戏等领域甚至可以说如果没有仔细分析过Netty对NIO等方面的理解很可能还在很肤浅的阶段。
《Cloud Native Java》
![](https://static001.geekbang.org/resource/image/d2/12/d286554382cbba791f85e667ea124e12.jpg)
Java应用程序架构处于飞快的演进之中微服务等新的架构应用越来越广泛即使未必是使用Spring Boot、Spring Cloud等框架但是系统的学习其设计思想和实践技术绝对是有必要的。当然如果你在实践中使用Dubbo等框架也可以选择相关书籍。
前沿领域的变化非常快,很多风靡一时的开源软件,在实践中逐渐被证明存在各种弊端,或者厂商停止维护。所以这部分的学习,我建议不要盲目追新,最好是关注于分布式设计中的问题和解决的思路,做到触类旁通,并且注重书籍之外的学习渠道。
下面两本并不算是Java书籍但Java程序员进阶少不了对互联网主流架构的学习了解分布式架构、缓存、消息中间件等令人眼花缭乱的技术对于有志于成为架构师的Java工程师来说非常有帮助。
《大型分布式网站架构设计与实践》
![](https://static001.geekbang.org/resource/image/4a/4f/4ab17456a34278a8ca18de54fea76f4f.jpg)
这本书总结了作者在构建安全、可稳定性、高扩展性、高并发的分布式网站方面的心得。
《深入分布式缓存:从原理到实践》
![](https://static001.geekbang.org/resource/image/3d/b8/3d70890354f556d1b3acbc2f2fdd99b8.jpg)
这本书融合了原理、架构和一线互联网公司的案例实践,值得参考。
* * *
下面给入选精选留言的同学送出15元学习奖励礼券。专栏即将进入尾声希望所有订阅的同学能够坚持到底也欢迎大家留言分享自己学习或面试的心得体会。
![](https://static001.geekbang.org/resource/image/35/bf/35c9a5cab69eae467adb7d85d76d41bf.jpg)
* * *