Please enable Javascript to view the contents

传奇程序员陈皓推荐的 Java 书籍

 ·  ☕ 4 分钟

最近在看已故程序员陈皓的**《左耳听风:传奇程序员练级攻略》**,他推荐的一些 Java 书籍,感觉很经典,分享给大家。

左耳听风 (豆瓣)

左耳听风

学习以下与 Java语言相关的入门图书(注意:下面的图书在入门篇中有所提及,但为了完整性,还是要在这里提一下,因为有的读者可能会选择性地阅读某部分)。

**《Java核心技术·卷1:基础知识》**是Sun公司的官方用书,是一本 Java 入门参考书。对于Java 初学者来说,该书是一本非常不错且值得时常翻阅的技术手册,书中有较多地方将Java与C++做比较,这是因为Java 面世的时候,又被叫作“C++ 杀手”。我在看这本书的时候,发现书中有很多C++的知识,于是去学习了C++。学习C++的时候,发现有很多C的知识看不懂,又顺着去学习了C。然后,“C → C++ → Java”整条学习线路融会贯通,这对我未来的技术成长有非常大的帮助。

Java 的Spring框架是你无法回避的,所以有了上述的入门之后,接下来是两本与 Spring 相关的书 ——《Spring 实战》《SpringBoot 实战》。前者是传统的 Spring,后者是新式的微服务 Spring 如果你只想看一本,那么就看后者吧。

以上几本图书可以帮助你入门Java,但如果想要进一步成就需要看以下几本进阶图书了。

首先,你需要了解如何编写高效的代码,因此必须看一下 Effective Java(注意,这里我给的引用是原书第三版,也就是2017年末出的那一版)。这本书模仿了ScottMeyers 的经典图书 Effective c++ 的。这两本书中的内容都是技术大师的各种经验之谈,非常不错,一定要读。此处再推荐一下 Google Guava 库,其中核心库有:集合(Collections)、缓存(Caching)、原生类型支持(Primitives Support)并发库(Concurrency Libraries)、通用注解(Common Annotations)字符串处理(String Processing)、I/O等。它不仅是 JDK 的升级库而且还是Effective Java 这本书中作者最佳实践经验的代表。

**《Java 并发编程实战》**是一本完美的 Java 并发参考手册。该书从并发性和线程安全性的基本概念出发,介绍了以下几点:如何使用类库提供的基本并发构建块,将其用来避免并发危险、构造线程安全的类及验证线程安全的规则;如何将小的线程安全类组合成更大的线程安全类;如何利用线程来提高并发应用程序的吞吐量;如何识别可并行执行的任务;如何提高单线程子系统的响应性;如何确保并发程序执行预期任务;如何提高并发代码的性能和可伸缩性;等等。最后,书中介绍了一些高级主题,如显式锁、原子变量、非阻塞算法,以及如何开发自定义的同步工具类。

了解如何编写并发程序后,你还需要了解如何优化Java的性能。对此,我推荐**《Java 性能权威指南》**。通过学习这本书,你可以大幅提升性能测试的效果。其中内容包括:使用DK中自带的工具收集Java 应用的性能数据; 理解 JIT 编译器的优缺点;调优JVM垃圾收集器,以减少其对程序的影响:学习管理堆内存和 JVM 原生内存的方法;了解如何最大程度地优化Java线程及同步的性能;等等。看完这本书后,如果你还有余力且想了解更多的底层细节。那么,你有必要读一下 《深入理解Java虚拟机: JVM 高级持性与最佳实践》。

**《Java 编程思想》**是一本透着编程思想的书。上面提到的书让你从微观角度了解 Java,而这本书则可以让你从宏观角度了解 Java。这本书和《Java核心技术·卷1:基础知识》的厚度差不多,但信息密度比较大。因此,读此书非常耗费脑力,它会让你不断思考。对于想要学好 Java的程序员来说,这是一本必读的书。

**《精通 Spring 4.x》**也是一本很不错的书,虽然它有点厚,一共有800多页,但内容都是干货。其中最不错的是分析原理,尤其是针对前面提到的 Spring 技术,把应用与原理都讲得很透彻,IoC和 AOP 部分的分析也很棒,娓娓道来。对于任何一项技术,该书都做了细致和全面的介绍。不足之处是内容太多,导致书很厚,但这并不影响它是一本不错的工具书。

当然,学习Java时你必须学习面向对象的设计模式。这里有一本经典的书《设计模式》推荐给你。不过,如果你觉得这本书有些难度,可以看一下《Head First 设计模式》。在学习面向对象的设计模式时,你不要迷失在那 23 种设计模式中,而要明白这两个原则:

“Program to an interface, not an implementation.”

使用者不需要知道数据类型、结构、算法的细节,也不需要知道实现细节,只需要知道提供的接口。这对抽象、封装、动态绑定和多态有利,符合面向对象的特征和理念。

“Favor object composition over class inheritance.”

维承要求给子类暴露一些父类的设计和实现细节。父类实现的改变会影响到子类,因此,在子类中需要重新实现很多父类的方法。我们认为继承主要是为了实现代码的重用,但是实际上更多的是为了多态。

分享

码中人
作者
码中人
Web Developer