如果你完全没有 Java 编程基础,也可以考虑其他的参考书,例如 《Java 核心技术》。
关于夯实 Java 编程基础,我推荐 Bruce Eckel 的《Java 编程思想》(Thinking in Java)
目前很少会需要学习 Java 桌面图形类库等,较新的语法和 API 当然也没有包含,我的建议是尽管忽略过时内容,适当补充 Java 新技术的学习。
提到经典,自然也少不了 《Effective Java》,涵盖了 Java 7 到 Java 9 的各种新特性。
《Head First 设计模式》 这本书就不用我再费笔墨去介绍了吧,能把设计模式用这种轻松的形式展现本身已经十分不易了,章节之间的联系让你可以反复加深印象,加上生动的表达方式和丰富的习题更容易沉浸其中。
关于设计模式,我推荐一本书《设计模式之蝉》
《Java 并发编程实战》,作者全是响当当的人物,比如 Brian Goetz,我多次在专栏里引用他的观点,众多强力作者也保证了书的质量。
关于 JVM 的学习,不用我多说了吧,看过专栏的同学肯定都知道,我经常推荐周志明的《深入理解 Java 虚拟机》,可以说是国内最好的 JVM 书籍之一。
关于性能优化,我推荐Charlie Hunt 和 Binu John 所著的《Java 性能优化权威指南》(Java Performance)
还有一些如开源软件和互联网架构相关的图书可以作为扩展阅读,你可以参考下面这几本。
《Spring 实战》
《Netty 实战》
《Cloud Native Java》
《深入分布式缓存:从原理到实践》
《大型分布式网站架构设计与实践》
学习路线
下面介绍,从开始学 Java 到能够找到工作,再到工作两三年,再到后续的职业规划:
入门阶段,最重要的就是掌握 Java 基础(主要包括基本的语法,各种集合、文件读写、多线程等方面知识),此阶段一般通过视频来学习,然后自己动手多练习。
有了一定基础之后,要掌握 Linux 命令、数据库、版本管理、构建工具和 Web 服务器相关技术,这些都是工作必备的技能。
掌握好上述技术之后,想找 Java 相关工作,必然要掌握 Spring 、 Spring Boot 和 MyBatis,这是很多互联网公司的 “标配”。
一般来说掌握到第 3 个阶段基本可以开始考虑找工作了,此时如果能掌握部分第 4 阶段的内容,找工作会有些优势。
下面简单介绍第 4 部分的主要技术:
如果访问量较大,单机的承载量有限,就需要通过多台机器去分担请求,此时就需要负载均衡服务将请求分发到不同的机器上。
现在微服务比较流行,公司内不同服务之间通常会采用 RPC 实现跨机器的调用,因此要掌握 RPC 相关原理和技术(其中就包括注册中心)。
随着数据量和访问量越来越大,尤其是数据量达到千万级以后,查询的性能就会存在问题。因此可以利用化整为零的思想,将数据分摊到多台数据服务器来提高性能,因此就出现了分库分表中间件。
为了提升用户体验,提高响应时间,普遍会通过缓存的方式来加快查询速度。因为通常读缓存比直接查数据库更快,而且读缓存可以减少对数据库的压力。
消息队列是为了实现削峰、解耦和异步。稍微大一些的公司就会有多个二方服务,服务之间除了直接调用之外,通常会采用消息队列进行解耦。同一个服务内部也可以通过消息队列通过多实例加快处理速度,也可以通过消息队列处理耗时或者不需要同步的操作,来提高用户体验。
由于数据库搜索能力有限,有些场景下需要更强大的数据搜索能力,此时就要用到了搜索引擎。
随着并发越来越高,业务场景也来越复杂,传统的关系型数据库局限就暴露出来,有时候需要引入非关系型数据库来解决问题。
上述技术都是电商类网站比较常用的技术(且不限于此)。
第 4 阶段的技术,有条件的话可以购买视频看效果更好,其次可以阅读后面推荐的相关图书,对找工作帮助也很大。
除了前面讲到的技术之外如果想进一步进阶,还要推荐掌握下面的知识,如 UML 作图、设计模式、领域驱动设计,还需要巩固好专业基础,还需要提供沟通表达能力。
图书推荐
初学者建议看视频为主,不建议看书。
下面推荐大家在阶段 3 时,在找工作前可以读读下面几本书。
- 《Java 8 实践》(基础)
- 《Java 编程的逻辑》(基础)
- 《阿里巴巴 Java 开发手册》(基础)
- 《码出高效》(基础)
- 《深入理解 JVM》(进阶,面试必问)
- 《Java 多线程编程核心技术》(重要)
- 《Java 并发编程的艺术》(重要)
- 《设计模式之禅》(重要)
- 《剑指 Offer》(重要)
- 《MySQL 技术内幕》(选读)
上面推荐的图书,标注为 “基础” 的图书相对来说比较容易,有助于巩固基础。现在 Java 面试,虚拟机几乎是必须问的问题,一般都不出《深入理解 JVM》这本书,建议反复阅读。找工作如果出算法题,一般都在《剑指 Offer》或者 LeetCode 里。MySQL 也是面试的重点,可以读读《MySQL 技术内幕》或者购买相关专栏重点学习(尤其是聚簇索引,最左前缀原则,B+ 树,SQL 优化等)。
如果有条件,推荐求职前读读下面几本书。尤其是《Redis 深度历险》面试时问 Redis 相关问题一般不会超过这本书的范畴。
- 《Redis 深度历险》(必读)
- 《Elasticsearch 实践》(选读)
- 《Hbase 不睡觉书》(选读)
一般说来,前 3 个阶段的知识都能熟练掌握,上面的图书都读地不错,本身又热爱技术,面试问题不大。
找到工作以后,建议大家要重视编码风格,提高代码可读性、可维护性。这有助于帮助你写一手优雅的代码:
- 《阿里巴巴 Java 开发手册》
- 《重构 - 改善既有代码的设计》
- 《代码整洁之道》
- 《编写可读代码的艺术》
- 《修改代码的艺术》
找到工作之后,建议大家重视 Java 官方文档并且可以读读 Java 领域非常知名和经典的图书:
- 《Java 语言规范基于 JavaSE8》
- 《Java 虚拟机规范》(Java SE 8 版)
- 《Java 编程思想》
- 《Java 核心技术》
- 《Effective Java》
工作两年左右就要从更宏观的角度思考问题、设计方案,此时可以考虑学学架构。可以读读下面几本架构相关的书:
- 《微服务架构与实践》
- 《微服务设计》
- 《聊聊架构》
- 《架构整洁之道》
- 《演进式架构》
- 《微服务架构设计模式》
再往后进阶架构师或管理岗。架构和管理方面的书非常多,大家可以在豆瓣、京东或当当上查看排行榜,有选择性购买。
下面推荐几本书:
- 架构:《架构师修炼之道》、《一线架构师实践指南》、《架构真经》
- 思想:《高效能人士的七个习惯》、《第 3 选择》
- 管理:《可复制的领导力》、《领导梯队》
- 产品:《产品方法论》
在读各种经典的设计理念和架构基础上要形成自己的方法论,还要学习沟通和团队管理方面的知识,不断进阶。