学习 Java 最强书单推荐,附学习方法

8,525 阅读20分钟

请肆无忌惮地点赞吧,微信搜索【沉默王二】关注这个在九朝古都洛阳苟且偷生的程序员。
本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题。

回想起 10 年前我学习 Java 那会,资源极度匮乏,老师给我们推荐了两本书,一本《Java 编程思想》,一本《Java 开发宝典》。老师以为第一本书讲理论,第二本书讲实战,完美的组合。

但实际上呢,毕业的时候,班里面只有 13 名同学从事了软件开发的工作,其余 30 多名学生要么大一的时候转专业,要么很早就放弃编程了。

《Java 编程思想》是本经典的好书,没错,但作为入门书籍的话,只会劝退。《Java 开发宝典》更是劝退书,里面用 Java 做成的项目都很经典,比如说浏览器,五子棋,但小白根本驾驭不了啊!

10 年过去了,我已经拥有 10 多年的编程经验了。别问,问就是加班加出来的。那我在 Java 编程方面已经有了自己的一些心得和体会,所以我在知乎上推荐了一个书单,阅读人数超过了 66 万,点赞数 1200+,说明大家都很受用,都很喜欢啊。

地址贴一下,需要的同学可以去围观一下。

www.zhihu.com/question/26…

上面这个回答里面包含了 13 本经典的书籍,并且是按照循序渐进的方式,相信同学们看完后会来私信感谢我的。不过,这个回答已经过去了一年多时间了,我想再添加一些书单进去,仍然按照入门→进阶→深入的顺序。

01、入门

  • 《Java 核心技术卷 1》

  • 《Head First Java》

注意跳过 Swing、AWT、Applet 这些章节。当然了,你也可以看一下我写的这些 Java 教程,比较通俗易通一些,数了数,差不多 200 篇,还是非常全面给力的。

www.itwanger.com/java.html

  • 《鸟哥的 Linux 私房菜》

为什么要学 Linux 呢?因为在实际的开发工作中,项目基本上都要部署到 Linux 环境下。Windows 作为服务器的很少,除了慢没别的原因。

假如能够提前掌握一些 Linux 基本操作的话,不仅简历上是加分项,工作中更能快人一步。

  • 《Maven 实战》

  • 《Git 权威指南》

在我刚学 Java 那会,代码只能在本地,要想进行版本控制的话,还得装一个 SVN 服务器和客户端。另外,还不能云同步,换台电脑的话,基本上要把代码和项目依赖的 jar 包重新拷贝一遍。

要知道,代码都是很琐碎的文件,复制粘贴起来非常慢;如果项目比较大的话,依赖的 jar 包也比较多,复制粘贴起来就更慢了。

现在好了,有码云、GitHub 这些云仓库可以用,多台电脑进行同步非常方便。再配合 Maven(项目构建工具) 和 Git(版本控制工具),玩起来 666 啊!

02、进阶

  • 《Java 编程思想》

《Java 编程思想》这本书确实没得说,质量很高,但需要放在 Java 入门后再去读,这样才能真正地去理解思想。

很多没有足够编程基础的同学,盲目自信,直接开啃这本书,然后他们发现,啃得很痛苦,这就是因为没有根基的原因造成的,就像没有学会走就开始跑一样,摔得很痛。

作者在前言里已经表明了,读者需要知道基本的程序语句(比如 C里面的 if 和 for),也就是说,作者假设读者已经熟悉 C 的一些语法。可想而知,没有编程基础的同学在读这本书的时候是多么痛苦啊。

我就是在大学老师的误导下开啃这本书的,第一遍,只读了前言,就读不下去了,晦涩,难懂。实习了一年结束后,我第二次读这本书,仍然觉得头大,强忍着,读了差不多 200 页,耐力就消耗殆尽了。

直到两年前,我再重拾这本书,发现读起来津津有味,每读一个章节就产出一篇文章,这本书的价值真正地体现了。为什么呢?因为我已经有多年的编程经验,结合书中的理论知识,读起来就有一种“恍然大悟”的感觉。

《Java 编程思想》不仅教我们怎么做,还告诉我们为什么要这样做,这才是 Java 这门编程语言的精髓。

不过,《Java 编程思想》出版的时间是 2007 年,已经十多年过去了,虽然经典,但避免不了过时。但幸好,有《On Java 8》,这本书的作者就是 Bruce Eckel,即《Java 编程思想》的作者。事实上,《On Java 8》就是《Java 编程思想》的第五版,第四版用的 JDK 还是 1.5,《On Java 8》用的 JDK 已经升级到了 Java 8。

那同学们可能就要问了,《On Java 8》上哪买啊?

github.com/LingCoder/O…

不用买了,雷锋已经将这本书翻译成中文并且开源了,访问上面的链接就可以在 GitHub 上阅读了。

  • 《Java 网络编程》

《Java 网络编程》这本书的整体评价并不算高,但是,对于学习 Java 网络编程的基础知识非常的有用。

  • 《Netty 实战》

无论是构建高性能的 Web、游戏服务器、推送系统、RPC 框架、消息中间件还是分布式大数据处理引擎,都离不开 Netty,在整个行业中,Netty 广泛而成功的应用,使其成为了 Java 高性能网络编程的卓绝框架。

  • 《Effective Java》

《Effective Java》第三版一共包含了 90 条极具实用价值的经验规则,每条规则都值得 Java 程序员在实战中去参照。这本书不需要按部就班地从头到尾读,可以随意挑选任意小节进行阅读,因为每条规则相对都是独立的,尽管它们之间会交叉引用,但并不妨碍我们随心所欲地阅读。

作者 Josh Bloch 非常的牛逼,曾是 Google 的首席 Java 架构师,《Java开发者杂志》将他列为世界上最顶尖的四十名软件人物之一。Java 之父詹姆斯·高斯林对《Effective Java》的评价也非常的高。

  • 《阿里巴巴 Java 手册》

《阿里巴巴 Java 开发手册》这本小册子虽然只有几十页,但讲的主要是一些典型的开发规约、编程规范、以及最佳实践,已经成为业界普遍遵循的开发规范。

最新版是嵩山版,封面就有一个扫地僧,唉,这就厉害了呀!

  • 《代码整洁之道》

软件的质量,不仅依赖于架构,更与代码质量息息相关。而代码的质量与其整洁度成正比关系,越整洁的代码,其质量毫无疑问的就会越高。

《代码整洁之道》的第一章,对整洁代码下了一个定义,每个程序员都应该铭记在心。

1、整洁的代码力求专注,每个方法、每个类都应该全神贯注于一件事;命名更要给人一种“顾名思义”的感觉。 2、整洁的代码简单直接,从不隐藏设计者的意图。 3、整洁的代码应当有单元测试。 4、整洁的代码拒绝重复,其表达力直击人的心灵。

  • 《Java 并发编程实战》

  • 《Java 并发编程之美》

  • 《实战 Java 高并发程序设计》

对于程序来说,如果具有并发的能力,效率就能够大幅度地提升。对于程序员来说,如果精通 Java 并发编程的话,挣钱能力就会大幅提升,这话真的不是调侃,而是良心话啊。

这三本 Java 并发方面的书可以结合起来看,互相补充,帮助同学们在这方面快速地提高。

  • 《Java 性能权威指南》

通过阅读《Java 性能权威指南》这本书,我们可以运用 4 个基本原则最大程度地提升性能测试的效果、使用 JDK 自带的工具收集程序的性能数据、理解 JIT(即时编译器)编译器的优缺点、调优 JVM 垃圾收集器、最大程度优化多线程等等。

  • 《Spring 实战》

  • 《Spring 揭秘》

Spring 是 Java 平台的一个开源框架,为基于 Java 构建的 Web 应用程序提供了大量的拓展支持。

1、Spring 能帮我们根据配置文件创建以及组装对象之间的依赖关系。

2、Spring 面向切面编程能帮助我们无耦合的实现日志记录、性能统计、安全控制。

3、Spring 能非常简单地帮我们管理数据库事务。

4、Spring 能与第三方数据访问框架(如 MyBatis、JPA)无缝集成。

5、Spring 能方便的与 Java EE(如 Java Mail、任务调度)整合。

《Spring 实战》和《Spring 揭秘》能够帮助同学们对 Spring 有一个更加全面的了解和掌握。

  • 《Spring Boot+Vue全栈开发实战》

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。简单来说,就是 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。

Spring Boot 方面的好书不多,索性就推荐一下我的好朋友江南一点雨的书,他本人还录制了很多免费的视频,这些视频配套着他的书看,绝对可以对 Spring Boot 有着充分的掌握。

springboot.javaboy.org/

这个链接是江南一点雨的教程合集,我觉得质量还是很高的,我自己在学习 Spring Boot 的时候就参照了不少。

  • 《图解 HTTP》

  • 《HTTP 权威指南》

程序员,毕竟是搞 IT(Information Technology)的,网络这一块还是很重要的。HTTP 全称是 HyperText Transfer Protocal ,即:超文本传输协议,从 1990 年开始就在 WWW 上广泛应用,是现在 WWW 上应用最多的协议,HTTP 是应用层协议,当你上网浏览网页的时候,浏览器和 Web 服务器之间就会通过 HTTP 在 Internet 上进行数据的发送和接收。

《图解 HTTP》和《HTTP 权威指南》很值得去读一读。

  • 《高性能 MySQL》

  • 《MySQL 必知必会》

  • 《MySQL 技术内幕-InnoDB 存储引擎》

MySQL 由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,随着 MySQL 不断的成熟,越来越多大规模的网站开始使用 MySQL,比如维基百科、Google 等。

作为一名 Java 程序员,MySQL 必知必会啊。

  • 《MyBatis 从入门到精通》

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

除了《MyBatis 从入门到精通》这本书,同学们还可以直接阅读 MyBatis 的中文网。

mybatis.org/mybatis-3/z…

  • 《Redis 实战》

  • 《Redis 深度历险:核心原理与应用实战》

Redis 是互联网技术领域中使用最广泛的存储中间件,它是 Remote Dictionary Service 三个单词中加粗字母的组合。

Redis 以超高的性能、完美的文档、简洁的源码著称,国内外很多大型互联网公司都在用,比如说阿里、腾讯、GitHub、Stack Overflow 等等。它的版本更新非常的快,功能也越来越强大,最初只是用来作为缓存数据库,现在已经可以用它来实现消息队列了。

可以这么说吧,掌握 Redis 已经变成了一项后端工程师必须具备的基础技能。

  • 《RabbtiMQ 实战指南》

RabbitMQ 是一款开源的消息队列系统。主要特点在于健壮性好、易于使用、高性能、高并发、集群易扩展,以及强大的开源社区支持。《RabbitMQ 实战指南》从消息中间件的概念和 RabbitMQ 的历史切入,主要阐述 RabbitMQ 的安装、使用、配置、管理、运维、原理、扩展等方面的细节。

  • 《Kafka 权威指南》

每个应用程序都会产生数据,包括日志消息、度量指标、用户活动记录、响应消息等。如何移动数据,几乎变得与数据本身一样重要。如果你是架构师、开发者或者产品工程师,同时也是 Apache Kafka 新手,那么这本实践指南将会帮助你成为流式平台上处理实时数据的专家。

  • 《第一本 Docker 书》

Docker 是一个开源的应用容器引擎,开发者可以利用 Docker 打包自己的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

《第一本 Docker 书》可以帮助我们学习到 Docker 的安装、部署、管理和扩展。

03、深入

  • 《深入理解 Java 虚拟机》

《深入理解 Java 虚拟机》这本书牛逼到什么程度,几乎所有写 Java 虚拟机方面的文章,没有一个不在文章最后注明:本文参考字周志明老师的《深入理解 Java 虚拟机》。假如这篇文章最后没有注明的话,那保不准是不尊重版权。

  • 《重构,改善既有代码的设计》

《重构,改善既有代码的设计》这本书在业界的名声也非常的响,只不过看起来就需要一些精力和耐力,上面这些书看完后,可以看这一本,对于重新审视现有代码有极大的帮助。

  • 《深入理解 Nginx》

Nginx 是异步框架的网页服务器,也可以用作反向代理、负载平衡器和 HTTP 缓存。《深入理解 Nginx》这本书通过还原 Nginx 设计思想,剖析 Nginx 架构来帮助我们快速高效地开发 HTTP 模块。

  • 《深入剖析 Tomcat》

Tomcat 是一个 Servlet 容器,并提供了作为 Web 服务器的一些特有功能。基本上写过 Web 程序的 Java 程序员都用过 Tomcat 作为服务器,所以有时间的话,对 Tomcat 深入剖析一下还是非常值得去做的。

  • 《JDK 里的设计模式》

这并不是一本书,而是左耳朵耗子的一个帖子,文中列出了 JDK 中 23 个经典的设计模式,非常值得一看。

coolshell.cn/articles/33…

  • 《深入浅出设计模式》

  • 《设计模式之禅》

  • 《Head First 设计模式》

大家都听说过,学习设计模式非常的重要,那么为什么这么重要呢,设计模式到底是什么?打个比喻学编程就像学武功一样。

武功要练得很牛逼,有两样东西不能丢。第一,是内功;第二,是武功秘籍。内功对应到编程就是我们编程基础能力,那编程的设计模式就可以想象成武术中的武功秘籍。

设计模式就是根据不同类型场景,设计优雅的(编码)解决方案。学好设计模式有很多好处,比如,容易看懂经典代码中的逻辑(很多优秀的开源框架大量使用了设计模式);应对面试时对答如流(设计模是面试重点);可以编写出优雅的解决方案(或者代码)。

  • 《算法》

  • 《大话数据结构》

现在的大厂面试,都特别喜欢考算法和数据结构方面的知识,把这个作为程序员水平高低的一个考核标准。对于大部分业务开发来说,平常更多的是利用已经封装好的现成接口、类库,很少需要自己实现数据结构和算法。

但是,如果知道这些类库背后的原理,懂得时间、空间复杂度分析,绝对可以在工作中得心应手。掌握数据结构和算法,不管对于阅读框架源码,还是理解背后的设计思想,都是非常有用的。写出高质量,达到开源级别的代码,算法和数据结构,值得我们去掌握。

  • 《大型网站系统与 Java 中间件实践》

  • 《大型网站技术架构:核心原理与案例分析》

  • 《亿级流量网站架构核心技术》

这三本书,如果能够驾驭得了,那基本上可以这么说,你已经是一名不可多得的 Java 方面的高级人才了。

没有什么难题是百度云盘不能解决的,别忘了点赞!

链接:cowtransfer.com/s/f38807155… 提取码:9js99v 备用链接:shimo.im/docs/pJQv6q…

04、学习方法

我们都经历过学生时代(有些同学还正在经历),同一个班级,同一个老师,为什么成绩截然不同呢,有些同学天资聪颖,学什么都快,有些同学学习能力差,但方法得体,也能取得好成绩。如果既没有天赋,又没有学习方法,那就只配俩字了——对,学渣(大学的我就是一个学渣,不堪回首)。

那正确的学习方法是什么呢?

第一,善用搜索引擎。平常需要找资料,需要解决问题,如果自己一时半会没有方法的话,就去搜。

Google 是第一选择,Bing 是第二选择,微信搜索是第三选择。PC 端的话,Google 和 Bing 就很靠谱,基本上要找的东西,都有好的结果。手机端的话,就用微信搜,答案也很靠谱。

第二,学会提问。如果搜索引擎找不到答案的话,不要直接把问题抛到群里,抛给同事、领导,或者大牛,要先对问题梳理一下。

我想问什么,我的环境是什么,问题的描述是否足够清楚,态度是否端正。

不要唐突,不要冒昧,还要脸皮厚,很难,对吧?这就是提问的艺术啊。

第三,善于总结和归纳。很多同学给我反馈,“二哥,怎么总是感觉记不住啊,学完就忘啊,有什么好的办法吗?”

有啊,当然有。学完一个知识点,如果需要动手去实践,那就去敲代码,敲一遍,还是理解,再敲一遍。如果真的感觉自己理解,尝试写篇文章,把自己的学习心得分享出来,看看是否能够教会别人。

如果自己是半瓶水,倒出去只能是半瓶水;只有自己是一瓶水,倒出去才可能多余半瓶水,对吧?

归纳总结的好处就是把零散的知识变成体系,在脑海中构建一副蓝图,日积月累,你就会发现自己也从一条小溪变成了海洋。

顺带推荐一下费曼学习法,灵感源于诺贝尔物理奖获得者理查德·费曼,运用费曼技巧,只需要花 20 分钟就可以深入理解知识点。听起来是不是很神奇?

费曼学习法的四个步骤:

第一步,能把一个孩子教懂。这有点类似我们古代的一名诗人,白居易,他希望自己的诗连老太婆都能看得懂,那就是好诗。

具体怎么做呢?拿出一张白纸,写下要学习的主题,想一下,怎么把它教给一个孩子,你会讲哪些,然后记下来。

同学们可以把白纸换成 iPad 了,有道云笔记了,等等。

第二步,回顾。当我们尝试把知识点讲给小孩子的时候,可能会卡壳,那就需要把这些卡壳的点重新学习,这些点可能就是我们认知的边界——重新学习的地方。

第三步,简化语言。如果发现表述的文字比较复杂,不够清晰,那就尝试把这些内容读出来,直到通顺,直到自然,直到足够简练。

第四,传授。这点虽然是可选项,但真的非常重要。如果确保自己理解了,那就把它教给别人,看你能否把别人教懂,也就是我说的善于总结和归纳。

整个思维导图( 推荐的在线网址有百度脑图、ProcessOn)了,或者博客(建议使用 markdown 格式)了。

第四,多去实践。实践出真知,到底马谡行不行,给他一个街亭守一守,对吧,收不住就是纸上谈兵,没啥鸟用。

GitHub 或者码云上有很多优秀的开源项目,挑一些优质的,down 下来,去研究研究,在原有的代码基础上,尝试做一些优化,或者增加一些功能。

自己动手去做的过程中,你会发现,哇,真的有新大陆呀!

第五,熟练使用开发工具。Intellij IDEA、VSCode 都是非常流行的开发工具,能够帮助我们在学习和工作中变得更加高效,里面有没有快捷键,有没有什么骚操作,对吧?

在使用 Intellij IDEA 编写代码的过程中,一定要注重代码规范。提前就把 SonarLint、阿里巴巴开发规约这些插件安装上,写完代码就 check 一下,按照提示对一些不良的习惯做出修正。

第六,学好英语。这一点真的真的真的非常非常非常重要重要重要,即便是英语功底本身很差,一定不要自暴自弃,对吧?雷军敢一句“are you ok”走天下,你怕什么?

况且,Chrome 浏览器可以安装 Google 翻译插件,Intellij IDEA 可以安装 Translation 翻译插件,只要稍微有点英语的底子,完全不用怵的。

英语水平提高了,可以看官方的文档,可以在 Stack Overflow 上找答案,可以查看 JDK 源码,等等,编程水平就会与日俱增啊。

第七,注意休息。身体健康非常重要,千万不要沦为工作的机器,认为年轻的时候就应该拼命的加班,通过加班提升技术,多挣点钱。这种想法可以有,但要节制,懂吗?

任务紧,马上要 deadline 了,可以适当的加班,但不要一年四季 365 天都在加班。花点时间去旅游了,读书了,学习了,谈恋爱了,享受生活了。

年轻人,不要做个“奋斗逼”,奋斗可以,但不要盲目。想想脑袋上的那点头发,就别熬夜了。一个人加班,就会有第二个人加班,第三个人加班,第四个人无休止的加班。只有大家都不去加班了,工作的良性氛围才会有啊!

以上,希望能够对同学们有所帮助,peace。


我是沉默王二,一枚在九朝古都洛阳苟且偷生的程序员。关注即可提升学习效率,感谢你的三连支持,奥利给🌹

如果你觉得文章对你有些帮助,欢迎微信搜索「沉默王二」第一时间阅读,回复关键字【小白】可以获取我手写的 10W+ 字的【Java 小白进阶之路】PDF;本文 GitHub github.com/itwanger 已收录,欢迎 star。