疫情以来,好久没出差了,今天出差去趟上海,早上 4 点多就起床了,到机场天都没亮。到登机口离起飞还一小时,趁着等飞机的时间,抓紧码字,把这篇文章收个尾。

今天和大家说说学 Java 的读书路线。路线中的书籍我自己都看过,希望整理的这份读书路线,能帮大家少走弯路,对大家学 Java 有个参考。

初学乍练

入门 Java,推荐《Java核心技术》第 11 版,这其实是一套书,分为两本:

  • 卷1 基础知识(豆瓣 9.2 分)
  • 卷2 高级特性(豆瓣 8.4 分)

我估计 70% 的 Java 程序员入门看的是这本书,写的经典、全面,对 Java 各种特性,都会有对应的代码示例。

不过,这里的内容,有不少是没必要学的。我在以前的文章提起过,大家可以参考。

同时,光看这本书作为入门有个问题,就是只能知其然,却不知所以然。而不知所以然,必然会导致咱们的基础会不够牢靠。

所以再推荐一本书配合《Java核心技术》一起看,书的名字叫《Java编程的逻辑》(豆瓣 9.1 分),作者马俊昌。

这本书讲解 Java 基础知识的基础上还会告诉你底层的原理,比如,Java 的枚举本质是什么,还会告诉你 Java 为什么这样设计 API。

总之,《Java核心技术》和《Java编程的逻辑》联合学习,算是珠联璧合,对入门 Java 是再合适不过的了。

这里多说几句,入门打基础十分重要,对于编程这种实践类的学习,想打好基础,光靠读书,是远远不够的。一定要经过大量的代码练习。所以,在这个时期一定要多作代码练习。这里,我给出一些可以自己尝试的练习:

  • 排序算法的小练习
  • 字符串查找的小练习
  • 对系统文件做下增删查改
  • 递归的小练习
  • 使用 Java 集合的小练习
  • 写个小游戏、小东西能综合训练下学到的所有技能

得窥门径

做程序员,大部分的时候,咱们都需要通过写各种各样的 SQL 操作数据库。咱们是 CRUD Boy 嘛。

所以,SQL 咱们要学,学 SQL 我推荐《SQL必知必会(第5版)》(豆瓣 9.5 分)。

这本书的组织结构非常好,哪怕是你对 SQL 一窍不通,也能通过这本书的引导,由浅入深的把 SQL 语言学个七七八八。

更重要的是,这本书叫必知必会,也就是说,它的内容都是精挑细选,必须学的内容。里面半分冗余的知识点都没有,内容全是干货。一定要好好读这本书。

略有所成

学会了 Java 基础,知道了怎么用 SQL 之后,如果往下走,想继续提升自己该学什么?

我的答案是去深入掌握多线程编程。因为只有懂了多线程编程,咱们才能处理各种稍微困难的需求。比如,快速处理大量用户对系统的访问;又比如,想同时访问多个第三方接口。

多线程编程又叫并发编程,其实是很复杂的事情,看一本书就想掌握它是不太现实的。我这里会推荐三本书,配合起来,一步步从多线程的原理到多线程的实战全部贯穿起来。

对于多线程的理解,我推荐的第一本书是《Java并发编程实战》(豆瓣 9.0 分)。

这本书是一本非常经典的关于多线程编程的书。里面对Java的多线程方方面面的细节都讲的非常到位。只是由于多线程确实太复杂,涉及到的知识也太广了,导致这本书出现了两个问题:

  1. 理论过多:《Java并发编程实战 》里会花费很大篇幅,去阐述一些多线程涉及到的理念和思想,但是代码例子却给的极少,这就导致咱们看的很吃力、很累。
  2. 某些点讲的不够透:多线程涉及到的知识非常广,《Java并发编程实战 》是尽量全涉及了。这就造成很多知识点讲的很浅,没有讲透。这就会让人很困惑,导致有些知识点连不起来,影响对整本书的理解。

所以,我这里推荐第二本书《Java多线程编程实战指南(核心篇)》(豆瓣 9.0 分)。

这本书代码例子多,《Java并发编程实战 》有些讲不透的知识点,这本书会有所弥补。所以,当看《Java并发编程实战 》的时候,不管是需要练习代码,还是想去搞清楚知识点,《Java多线程编程实战指南 》这本书都极为合适。

多线程我再强调一下,这是 Java 很高级的特性,也是很难的部分,很多哪怕是工作了 3、4 年的程序员,对此也掌握的不到位。

上面说的两本书,有原理,有代码示例,如果是换成别的知识,那可能足够了。可是对于多线程这么复杂的东西,我们还需要把学过的所有零碎知识点去综合贯穿起来,形成关于多线程的知识体系才算是真正掌握到位。

所以,这就得推荐第三本书《图解Java多线程设计模式》(豆瓣 8.6 分)。

跟着这本书的讲解,把咱们所有的知识点通过练习书中介绍的所有模式,去串起来,才最终算是多线程的学习告了一个段落。

登堂入室

学会了多线程编程,咱们此时要知道一件事,大部分时候,多线程编程,其实就是网络编程的最重要的一种手段。而网络编程,虽然有了 Netty 框架等很优质的网络框架了,但是理解背后的原理,对咱们定位项目的 bug,优化代码的性能,帮助非常大。

《Java TCP/IP Socket编程》(豆瓣 8.0 分)

这本书,我们既可以去学到必要的网络基础,也能学会怎么用 Java 去网络编程,非常推荐。

对于网络编程,大家都知道,这是易学难精的技能。学懂原理,了解网络编程,看看我上面推荐的书就够了。但是,要精通网络编程,写好网络相关的程序,那是相当不容易的。

所以,在 Java 圈,一旦遇到网络编程相关的事情,大家都会采用 Netty 框架去做。Netty 框架让我们能不需要成为网络编程大师,就能写出非常优秀的网络应用。

了解 Netty 框架对咱们也是非常重要的一件事,学习 Netty 框架,推荐《Netty实战》(豆瓣 7.5 分)。

这本书,把 Netty 的方方面面讲的很全,Netty 的设计思想也覆盖了大部分,对于熟练使用 Netty 完全够用了。

融汇贯通

作为 Java 后端工程师,几乎都要用到 Spring 框架的。哦不对,Spring 已经不能叫框架了,得叫体系、生态了。学好 Spring,对咱们找工作,做项目,甚至设计架构,都是极其重要的。

但是,学好 Spring 也没那么容易。Spring 发展到现在,它已经成为了一套完整的体系了,而且 Spring 迭代非常快,几乎每年都会出现大的变化。所以,市面上的书籍,单独靠那么一两本书,是不太可能学好的,建议把一些经典的 Spring 的书联合起来读,才有希望深入掌握Spring。

对于 Spring 这套体系,它现在是又多又繁杂,就算要入门,都不知道从何处下手。这里,我想谈谈我的经验。

虽然 Spring 变化确实很快,但是,它有几个地方,是这么多年几乎没发生过什么变化的。

没有什么变化的第一部分,就是 Spring 的设计思路。Spring 的设计思路,永远都是作为 Bean 的容器,去管理好 Bean ,这是它永恒不变的地方。

没有什么变化的第二部分,就是 Spring 的内核。Spring 的 ApplicationContext 等核心 API 是没有什么大的变化的。

所以,咱们就应该先从 Spring 这些不变的核心先入手。掌握住 Spring 的思想,Spring 的内核,哪怕 Spring 本身再变化,对咱们来说,也只是一种外在的 API 变化而已。

要达到这个目的,我会推荐大家看一本很老的书《Spring揭秘》(豆瓣 9.1分)。

虽然这本书主要是以 Spring3 的讲解为基础,但是,这本书对于 Spring 的编程思想讲的极为透彻,是有关 Spring 的书中,难得一见的好书。入门 Spring,这是我推荐的第一本书。

理解了 Spring 的编程思想不够,我们需要利用这些思想,去实践演练,加强我们对 Spring 的理解。

这时候,就得有本书,能真正的带我们实战下Spring的各个组件——《精通Spring 4.x》(豆瓣 8.5 分)。

我知道现在 Spring 5 在逐渐进入主流,但是,Spring 5 也只是在 Spring 4 的基础上增加了一些新特性。而 Spring 5 的书,我至今没看到有《精通Spring 4.x》这本讲的这么全的,所以,写代码做练习,还是推荐用《精通Spring 4.x》。

理解了 Spring 的理念,用很多代码练习练习实践之后,我们就只需要知道 Spring 5 的一些特性就能跟上 Spring 发展的步伐了。

可以看下《Spring 5 开发大全》(豆瓣 8.3 分),这本书对 Spring 5 的新特性介绍很全。我们只需要翻翻,熟悉新特性、新 API 即可。

另外,Spring 5 有个变化最大的地方:它用了很多响应式编程的东西。这方面,大家相对比较陌生,有闲有钱的话,可以看看《Spring响应式编程》。

关于 SpringBoot,由于它的易用性,它已经迈入主流。不过 SpringBoot 也只是以 Spring 为内核的一套应用框架而已。找本书,学习它是如何通过添加一些模块和功能,去降低大家使用 Spring 的门槛的,也就够了。

同样,有闲有钱的话,可以读下《Spring Boot 2实战之旅》。

返璞归真

前面大家跟着我推荐的书学习完了,基本就可以是一位非常合格的程序员了。但是,注意,你只是合格,但是还不算优秀。

如果我们想更加优秀,让自己职业道路能走的更远,还需要一些非开发的知识学习。只有通过叠加这些 Buff,我们才能在众多的技术同事中,脱颖而出,锥出于囊。

在实际开发里,代码可读是我们评价同事好不好合作的一个重要标准。一位同事,写的代码乱七八糟,你不管是接手维护还是想只是用一些对方的代码,都非常别扭难受。

所以,咱们的代码一定要写的干净整洁可读,给别人非常好的印象。这样,对咱们的团队合作和职场发展,才会有更大的帮助。

把代码写的干净可读,我推荐看《代码整洁之道》(豆瓣 8.7 分)。

这本书,讲解了什么才是好的代码,跟着这本书学,你写的代码会更让人赞赏,也更让人愿意和你合作。

除了代码可读,咱们还得让咱们写的代码好维护,易扩展。因为需求是千变万化的,如果你写的代码可维护性,可扩展性不够,那后续你会陷入无休止的改代码海洋里,你所有的精力都会被这些不停变换的需求吃干抹净,直接让你寸步难行。

而写易扩展,易维护的代码,就必须知道设计模式。有了设计模式,你闭眼都能写出不错的代码来。学习设计模式,推荐《Java设计模式》(豆瓣 9.1 分)。

这本书,对设计模式的来历发展,概念思想,讲解的淋漓尽致,推荐阅读。

Java 这套读书的学习路线,是我一本一本全部读过,才推荐给大家的,希望大家最终能坚持读完,学透。

最后再总结一下这个书单:

  • 《Java核心技术》卷1、2
  • 《Java编程的逻辑》
  • 《SQL必知必会》
  • 《Java并发编程实战》
  • 《Java多线程编程实战指南(核心篇)》
  • 《图解Java多线程设计模式》
  • 《Java TCP/IP Socket编程》
  • 《Netty实战》
  • 《Spring揭秘》
  • 《精通Spring 4.x》
  • 《Spring 5 开发大全》
  • 《Spring响应式编程》
  • 《Spring Boot 2实战之旅》
  • 《代码整洁之道》
  • 《Java设计模式》

以上书单都是我推荐的,其他没列的书籍,比如《Java编程思想》、《重构》等等,也都是好书,大家自己酌情补充。


你好,我是四猿外。

一家上市公司的技术总监,管理的技术团队一百余人。

我从一名非计算机专业的毕业生,转行到程序员,一路打拼,一路成长。

我会把自己的成长故事写成文章,把枯燥的技术文章写成故事。

不知不觉,我原创了不少文章,最近把其中的一些精华文章做了个汇总整理,优中选优,整了一份文档——《爬坡》。

《爬坡》里包括了 15 篇技术文章(包括学习编程技巧、架构师、MQ、分布式)和 13 篇非技术文章(主要是程序员职场),一共十万多字。

这个文档的获取方式戳这里

学Java,Java书籍的最佳阅读顺序的更多相关文章

  1. 【转】O'Reilly Java系列书籍建议阅读顺序(转自蔡学庸)

    Learning Java the O'Reilly's Way (Part I) Java 技术可以说是越来越重要了,不但可以用在计算机上,甚至连电视等家电用品,行动电话.个人数字助理(PDA)等电 ...

  2. Java源码阅读顺序

    阅读顺序参考链接:https://blog.csdn.net/qq_21033663/article/details/79571506 阅读源码:JDK 8 计划阅读的package: 1.java. ...

  3. Java 推荐读物与源代码阅读

    Java 推荐读物与源代码阅读                                                     江苏无锡  缪小东 1. Java语言基础     谈到Java ...

  4. JAVA程序员必看的15本书-JAVA自学书籍推荐

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水 ...

  5. 学习Java的书籍资料

    对于程序员来说,编程技术至关重要,然而技术的提高不是一蹴而就的,它需要时间的积累和经验的沉淀.因此本文为大家推荐Java学习的书籍,学虽容易,学好不易,且学且珍惜. 基础类.<Java从入门到精 ...

  6. java相关书籍及网站

    原文链接:http://developer.51cto.com/art/201408/448609.htm 对于 Java™ 语言开发人员来说,信息过量是一个真正的问题.每个新入行的程序员都要面临一个 ...

  7. Java高并发系列——检视阅读

    Java高并发系列--检视阅读 参考 java高并发系列 liaoxuefeng Java教程 CompletableFuture AQS原理没讲,需要找资料补充. JUC中常见的集合原来没讲,比如C ...

  8. java进阶书籍推荐

    第一部分: Java语言篇 1 <Java编程规范>   星级:   适合对象:初级,中级   介绍:作者James Gosling(Java之父),所以这本书我觉得你怎么也得读一下.对基 ...

  9. Java 系书籍,,,,,,,,,,,,,

    Java 系书籍 本文仅对每本书做简单介绍,里面的精华我是希望留给各位看官仔细去阅读去琢磨~~ Java 1. <Java核心技术 卷1 基础知识> 2. <Java核心技术 卷II ...

随机推荐

  1. Java设计模式之(二)——工厂模式

    1.什么是工厂模式 Define an interface for creating an object,but let subclasses decide which class toinstant ...

  2. R数据分析:生存分析与有竞争事件的生存分析的做法和解释

    今天被粉丝发的文章给难住了,又偷偷去学习了一下竞争风险模型,想起之前写的关于竞争风险模型的做法,真的都是皮毛哟,大家见笑了.想着就顺便把所有的生存分析的知识和R语言的做法和论文报告方法都给大家梳理一遍 ...

  3. [atAGC045E]Fragile Balls

    构造一张有向图$G=([1,n],\{(a_{i},b_{i})\})$(可以有重边和自环),定义其连通块为将其看作无向图(即边无向)后分为若干个连通块 记$in_{i}$为$i$的入度(即最终盒子中 ...

  4. 解决springboot启动日志异常问题

    问题描述:springboot启动异常,启动后没有日志打印. 问题原因:slf4j日志实现重复,找不到对应实现类. 问题应对: 1. 是不是项目没起来---->打印的日志数据,到这里就不打印了, ...

  5. mybatis一对多查询resultMap只返回了一条记录

    问题描述:因为领导的一个需求,需要用到使用resultMap,很久没使用了,结果就除了点意外.就记录下这个问题 准备两个类:author(作者)和book(书),数据库创建对应的author-> ...

  6. pytest-rerunfailures/pytest-repeat重跑插件

    在测试中,我们会经常遇到这种情况,由于环境等一些原因,一条case运行5次,只有两次成功 其它三次失败,针对这种概率性成功或失败,若是我们每次都运行一次就比较耗时间,这个时候 就需要pytest提供的 ...

  7. 模数不超过 long long 范围时的快速乘

    笔者的话:使用前请确保评测系统的long double严格为16B ! 模数不在 int 范围内的乘法在 OI 中运用广泛,例如Millar-Rabin,Pollard-Rho等等.这样的乘法,直接乘 ...

  8. fluidity详解

    fluidity详解 1.fluidity编译过程 1.1.femtools库调用方法 编译fluidity/femtools目录下所有文件,打包为libfemtools.a静态库文件: 通过-lfe ...

  9. shell 脚本在linux中的应用

    shell脚本在linux中应用广泛,之前一直选用python写脚本来进行一些文件操作,但是最后发现shell脚本非常方便,所以特意来学习下皮毛,便于提高自己效率 定义变量 1 country=&qu ...

  10. snakmake 小练习

    最近在学习snakemake 用于生信流程管理,现在用一个snakemake 来完成小任务:将在某一文件夹下的多个bam文件截取一部分,然后建立索引,在提取出fastq序列,最后比对回基因组. 需要两 ...