2万5千字零基础自学Java指南,建议收藏

880 阅读33分钟

零基础自学 Java,大概多久可以找到工作?

最近又有一个读者“在你的世界各地”向我提了上面这个问题。但说实话,这个问题并不太好问答。因为 Java 是一门“历史悠久”的编程语言,它的学习资料多到令人眼花缭乱。

但不能为自己找借口啊,毕竟读者就是上帝。于是我花了一个月的时间,精心为你准备了一份万字长文,史上最佳的 Java 自学指南,保证你能找到一份满意的工作。

先来梳理一下读者强调的关键词,有 3 个,分别是“零基础”、“自学”、“找到工作”。

1)“零基础”意味着我提供的学习路线不能太难,或者说应该是循序渐进的。

2)“自学”意味着我提供的学习素材不能太枯燥,或者说应该是幽默风趣的。

3)“找到工作”意味着学习周期要尽可能的短,但还要学有所成。

01、为什么要学 Java

因为 Java 是世界第一的编程语言啊!谁给的底气?大概是 TIOBE 这个编程语言排行榜吧。

TIOBE 是编程语言流行趋势的一个指标,每月更新,基于互联网上有经验的程序员、课程和第三方厂商的数量。排名使用著名的搜索引擎(Google、Bing、Wikipedia)进行计算。

上面这幅图是几个热门编程语言(Java、C、Python、JavaScript 等等)近些年来的增长趋势。可以看得出,Java 霸占这份榜单很多年,并且还会持续更久。

1)简单易学,老少咸宜。Java 继承了 C++ 语言面向对象的核心技术,舍弃了容易引起错误的指针,移除了运算符重载和多重继承等难以理解的概念,增加了垃圾回收机制,这些大大简化了程序员的开发成本。

2)跨平台。任何平台只要安装了 JVM(Java 虚拟机),就能运行 Java 程序。真正实现了“Write once, run anywhere”。

3)丰富的类库。全球约有 900 万名 Java 开发人员,创造了一个充满活力和积极进取的 Java 社区,开源类库非常丰富。借助这些类库可以让开发者避免重复造轮子,不用去关注 Java 底层的开发,只关注业务的实现。

4)广泛使用。据估计,全球范围内有超过 30 亿部设备运行 Java,超过其他任何一种语言。Java 被用于众多全球知名的网站中,包括 eBay.com、Linkedin.com、Amazon.com 和 Facebook.com。这一点应该是 Java 屹立不倒的深层次原因吧,大家都在用,才是真的强啊。

5)薪资可观。很多企业都需要 Java 方面的人才,这是一个非常现实的原因,为了生计着想,学习 Java 这个方向不会有错!

02、哪些 Java 知识不需要再学了

张无忌在学太极拳的时候,他爹的师父张丰告诫他一定要把之前所学习的武功全部忘掉,忘得越多就会学得越快。

同样的,自学 Java 的时候一定要先知道哪些 Java 知识不需要再学了,毕竟技术的更新迭代就好像火箭一样快,Java 的一些知识点早已经过时了。如果不懂得断舍离,那学起来就不免太痛苦了。

1)AWT 和 Swing

真不知道为什么,有些书籍还在介绍 AWT 和 Swing,这就好像不知道大清朝早已经亡了几百年一样。已经 9102 了,谁还会用 AWT 和 Swing 去开发桌面应用呢?

就我所知,C++ 程序员会用 MFC,C# 程序员会用 Winform 和 WPF。甚至还可以用一种更时髦的技术(比如 Electron)把 Web 网页裹一层华丽的外衣,变成可执行文件。

2)Applet

作为网页插件技术,Applet 压根就没流行起来,就连曾经的热门 Flash 也要淘汰了。

3)XML

XML 还没有被淘汰,应用的地方还有不少。但是作为一种数据传输格式,它正在被 JSON 替代。

4)JDBC

我个人不建议再学习偏底层的 JDBC 了,尤其是对于时间宝贵的自学程序员来说。与其花这点时间,不如把力投入到 MyBatis 的学习上。

5)Struts

Struts 是早年一个优秀的 MVC 框架,单从技术的角度来看,还是蛮不错的。但是自从有了 SpringMVC 后,Struts 就被拍在沙滩上了。

6)Hibernate

在我刚参加工作那会(2010 年的时候),持久层框架用的正是 Hibernate。但时过境迁,Hibernate 太重量级了,学习成本太高,取而代之的是轻量级的 MyBatis(支持定制化 SQL、存储过程以及高级映射)。

7)JSP

说起来惭愧,我现在维护的一个项目,视图层用的依然是 JSP。但如今流行的是“前后端分离”,JSP 就显得不合时宜了。

03、学习 Java 需要安装的软件

工欲善其事必先利其器,战斗之前我们要先配备好武器。

1)JDK

JDK 是 Java Development ToolKit 的简称,也就是 Java 开发工具包。JDK 是整个 Java 的核心,包括 Java 运行环境(Java Runtime Envirnment,简称 JRE),Java 工具(比如 javac、java、javap 等等),以及 Java 基础类库(比如 rt.jar)。

Windows 安装 JDK 与环境变量配置

2)IDE

集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。

在我初学 Java 的时候,老师竟然告诫我们不要使用 IDE(当时是 MyEclipse 风靡的年代),而要使用文本编辑工具,比如说 Editplus、Nodepad++。

老师说的有一定的道理,比如说,在没有代码提醒的帮助下,我们能够通过不停的手敲记住一些 Java 的常见名词。但在我看来也就仅此而已。

没有 IDE 的帮助,让初学者对编程望而生畏,因为那些名词实在是太多了。我们班当时很多同学就是因为觉得太痛苦了,就放弃编程了。

我到现在也不太会敲 extendsimplements(在 Eclipse 中复制出来的),不会敲又怎样呢?有好的工具,我们就应该利用,不应该受苦

下面是最为受欢迎的 IDE 的榜单。

对于我来说,一直喜欢的是 Eclipse,这可能是一种情怀吧。

安装 Eclipse

据说,喜欢 IntelliJ IDEA 的 Java 程序员越来越多了。

安装 IntelliJ IDEA

3)JAD

将源代码转换成二进制执行代码的过程叫做“编译”,一般指的是将 Wanger.java 编译成 Wanger.class 字节码文件;而将字节码文件转换成源代码的过程叫做“反编译”,比如将 Wanger.class 转成 Wanger.java。

JAD 是一款老牌的、经典的 Java 反编译工具。更重要的是,JAD 能够让我们深入的了解 Java 代码的工作机制。

比如说有这样一段代码:

String chenmo = "沉默";
String wanger = "王二";

System.out.println(chenmo + wanger);

它的“庐山真面目”是下面这样子的。

String chenmo = "\u6C89\u9ED8"; // 沉默
String wanger = "\u738B\u4E8C"; // 王二
System.out.println((new StringBuilder(String.valueOf(chenmo))).append(wanger).toString());

JAD 下载、配置、使用说明

4)Maven

Maven 是一个项目管理和自动化构建工具,基于项目对象模型(POM)的概念,可以管理项目的构建、报告以及文档。作为 Apache 组织中的一个颇为成功的开源项目,Maven 主要服务于基于 Java 的项目构建、依赖管理和项目信息管理。

Maven入门,读这篇文章就够了

04、推荐一些优质的 Java 学习网站

经常有一些读者问我:“二哥,学习 Java 应该关注哪些网站?”,我之前的态度一直是上知乎、上搜索引擎搜一下不就知道了。但读者对我这个态度很不满意,他们说,“我在问你,又不是问知乎,问搜索引擎。”你还别说,读者说得有道理。

于是我想,那就推荐一些吧。先说我心目中的前三名,但不局限于 Java 学习者。

1)Google

啥都不说了,说多了都是泪,可气的是 Robn 李的搜索引擎实在是不争气。说句良心话,Google 的搜索结果比前者的质量高出一百(零一)倍。

Google 也算是网站?必须算啊。只要你想要学习,它会给你所有。

2)Stack Overflow

Stack Overflow 可以说是解决问题的杀手锏。下面这些问题是不是都很常见?

如果英语能力不太好的话,可以借助一下 Chrome 浏览器的自动翻译功能。

3)GitHub

GitHub 是一个拥有数十亿行代码的网站,每天有数百万开发者聚集在一起,研究开源软件中存在的问题。

对于普通的程序员来说,如果不想重复造轮子,就必须要站在巨人的肩膀上,那么巨人是谁呢?就是 GitHub。那些牛逼的开源软件库,99% 的情况下会在 GitHub 上找到它。

对于成功的程序员来说,如果想要被别人膜拜,最好能在 GitHub 上贡献一个开源库,如果星标超过 1W,那可是相当的牛逼,在业界应该算是响当当的人物。

然后,我再推荐一些 Java 程序员必须要关注的网站。

4)IBM Developer

IBM developerWorks 提供了中文版,里面的文章都属于非常高质量的。

5)Java SE 技术文档,docs.oracle.com/javase/8/do…

即使是 Java 编程的大牛 , 也离不开这份文档。中文版的 API 可以参照:tool.oschina.net/apidocs/api…

6)Java World

这个网站包含了大量的 Java 教程 , 涉及各种各样的话题。其中很多文章都写的很好 , 并且有图片、插图进行说明。它可以被用来当作深度学习的教科书。英文能力有限的话,可以使用谷歌翻译。

7)Program Creek

Program Creek 在维护方面做的很好 , 文章读起来也比较有趣。在这里 , 你可以找到其他任何网站都不曾涉及到的话题 , 而且几乎每篇文章都包含漂亮的插图或者示例代码。

8)LeetCode

备战技术面试?力扣提供了海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。

刷题的话,还有一个牛客网值得推荐,里面各个公司的面试题和面经分享,找工作前认真刷一刷,一定会大有所获。这里强调一下刷题的重要性:

  • 可以让思维保持活跃
  • 强化对基本知识的理解
  • 要想找到工作,就要过面试,不刷题怎么能行

9)掘金

网站很多,重要的是挑几个自己喜欢的关注,持续不断地学习,就能够取得显著的进步。

05、推荐一些优质的 Java 书籍

不知不觉,我已经接触 Java 11 年了——从 2008 年北京奥运会那年开始,到现在;未来还会更久。

这期间我读了不少 Java 方面的书籍,纸质版的少说有三十来本吧,更何况还有不少的电子书。万事都有好坏,书也一样。有的是精神粮食,有的纯粹是浪费时间。

这里就分享一些我精挑细选后的优质书籍,希望能帮大家少走点弯路。

1)《Java 编程思想》

这本书在豆瓣的评分高达 9.1 分,但我总觉得有点虚高。

记得刚上大学那会,就在某宝上买了一本影印版的《Java 编程思想》,但由于初学 Java,对编程极度缺乏信心,导致看这本书有一种看天书的感觉。后来,去苏州参加工作的时候把它作为最宝贵的纪念品带了过去。

2014 年回洛阳的时候把它送给了一位关系还不错的同事,权当是分别的礼物吧。2016 年的时候,我又重新买了一本,希望自己能够夯实一下基础。但事与愿违,它被我束之高阁了,读起来无比的枯燥。2018 年的时候,我重新捧起它读了一遍,总觉得有一种莫名的负罪感。

《Java 编程思想》是个大部头,足足 880 页,文字更是密密麻麻。我不建议大家一个字一个字的读,知晓其中的精华就可以了。如果你觉得这本书读起来很痛苦,不妨来读一读我加工润色后分享博文,足足 25 篇,每一篇都很精彩。

先来通过思维导图看一下这 25 篇 Java 博文涉及到的知识点。

下面是这 25 篇 Java 技术博文对应的链接。

Java 的核心目的和并发编程

Java:程序不过是几行代码的集合

什么是面向对象编程(OOP)?

如何理解 Java 中的继承?

吃人的那些 Java 名词:对象、引用、堆、栈

Java 的操作符——“=”号

害死人的自动递增,不偿命的自动递减

Java 流程控制语句

Java是通过什么机制来确保对象初始化呢?

Java 访问权限控制:public、private、protected

Java代码复用的三种常用方式:继承、组合和代理

Java:多态乃幸福本源

Java 抽象类和接口,看这一篇就够了

Java内部类

Java String,看这篇就够了

Java 数组,看这一篇就够了

Java 集合类入门篇

HashMap,难的不在Map,而在Hash

Java泛型的重要目的:别让猫别站在狗队里

Java异常处理:给程序罩一层保险

如果有人再问你 Java 的反射,把这篇文章扔给他

Java枚举:小小enum,优雅而干净

Java注解(Annotation):请不要小看我!

Java I/O 入门篇

Java:并发不易,先学会用

《Java编程思想》无疑一直都会被大力推荐,可是第四版的出版时间竟然早在 2007 年,全书大部分的代码是基于 JDK 1.5 完成的。如今什么年代了?

告诉你一个好消息,《Java编程思想》的作者 Bruce Eckel 在 2017 年的时候发布了第五版,没想到吧?为什么在网上都看不到这本书的消息呢?因为改名了,而且只有电子版。

这本书的所有源代码已经开源在 GitHub,传送门:

github.com/BruceEckel/…

如果英语水平像我一样菜,看英文版比较费劲,可以在 GitHub 上查看大婶们的译本,传送门:

github.com/LingCoder/O…

如果英语水平还不错,可以自行购买电子版的《On Java 8》,虽然比较贵。

2)《Java 核心技术卷一》

《Java核心技术卷一》是唯一可以和《Java编程思》媲美的一本 Java 入门书。单从技术的角度来看,前者更好一些。但上升到思想层面嘛,自然后者更好,两者的偏重点不同。

思想不会变,所以《Java编程思想》还停留在第 4 版(2007 年);而技术是要更新迭代的,所以《Java核心技术卷一》来到了第十版(2016 年)。

我们来看一下《Java核心技术卷一》第十版的大纲。

前九章:包括 “Java 程序设计概述”、“Java 程序设计环境”、“Java 的基本程序设计结构”、“对象与类”、“继承”、“接口”、“lambda 表达式与内部类”、“异常”、“断言和日志”、“泛型程序设计”、“集合”。这九章讲述的是 Java 基础知识点,是 Java 程序员必须要掌握的内容,所以必看。

第十到第十二章:讲的是 AWT 和 Swing,个人感觉这部分内容属于不需要再学的 Java 知识点。当然了,窗口编程涉及到的“事件驱动-监听-方法回调”的机制蛮重要的,需要掌握,但和 AWT 和 Swing 的关联度不大。就好像,我们取钱直接去招商银行,没必要把招商银行的钱转到工商银行再取出来。

第十三章:讲的是应用部署和 Applet,显然 Applet 也没必要学了。出版社没有把这部分内容删掉,纯粹是为了让这本书变得更笨重(定价就高了)。

第十四章:并发编程。这也是 Java 学习过程中最难的一块之一,另外一难是 Java 虚拟机。但这是初级程序员迈向高手的必经之路。

整体上来讲,《Java核心技术卷一》非常值得一读,广度和深度都恰到好处。强烈推荐。

我知道,有些同学因为工作时间的原因,一直没有时间读书。像《Java核心技术卷一》这样厚得像特x的脸皮一样的书,更是没有时间读了。不过,不要担心,二哥替大家解决了这个烦恼,我用了一个月的时间把这本书完整地读了一遍,并写了 9 篇高质量且通俗易懂的文章,供大家作为参考。

先来通过思维导图看一下这 9 篇 Java 核心技术博文涉及到的内容。

Java 核心技术博文思维导图

下面是这 9 篇 Java 核心技术博文对应的链接。

Java面试官:兄弟,你确定double精度比float低吗?

请用面向对象的思想,谈一谈这次面试的过程

再谈 Java 的继承和超类 Object

Java:接口和抽象类,傻傻分不清楚?

Java生成二维码分享海报

Java:优雅地处理异常真是一门学问啊!

教妹学 Java:晦涩难懂的泛型

教妹学Java:大有可为的集合

教妹学 Java:难以驾驭的多线程

3)《Head First Java》

在我遇到《Head First Java》之前,如果你要我推荐 Java 技术书,我会毫不犹豫地推荐《Java 编程思想》和《Java 核心技术卷》,因为大家都说好嘛,我只能“同流合污”了(强颜欢笑);但换成是现在的话,我会优先推荐《Head First Java》。

尽管《Head First Java》也非常的厚,至少比我的脸皮后,但趣味性就要甩前面两本好几条街了。这年头,大家都没时间读枯燥的技术书,尤其是厚的。上一张图大家感受一下《Head First Java》的调皮吧。

就冲着这张图,我觉得《Head First Java》的作者就足够的大胆。作者挑选的图片可以说张张经典,真正实现了“图文并茂”的需求,搞得你感觉有点不好意思,仿佛不是在读一本 Java 技术书,而是在读一本《知音》。

不止是图片,还有游戏、拼图、解谜题以及意想不到的内容。真的是一点都不“正经”,正因为如此,阅读起来才感觉兴趣盎然。

第一章主要介绍了 Java 的工作原理、发展简史、程序结构。

第二章主要介绍了 Java 的面向对象,包括继承、覆盖等内容。

什么是面向对象编程(OOP)?

第三章主要介绍了 Java 的变量。关键点:引用变量存储的是对象的地址(储存方式)、数组也是对象。

为什么要将局部变量的作用域最小化?

第四章主要介绍了 Java 的方法。关键点:实参和形参、值传递和引用传递、== 和 equals()。

Java到底是值传递还是引用传递?

如何比较 Java 的字符串?

第五章主要介绍了程序设计与实现的步骤。

第六章主要介绍了 Java 的 API。关键点:ArrayList。

第七章主要介绍了继承和多态。关键点:覆盖和重载。

第八章主要介绍了接口和抽象类。关键点:超类 Object。

再谈 Java 的继承和超类 Object

第九章主要介绍了构造器与垃圾收集器。关键点:对象存储在堆中,对象引用在栈中;当对象失去最后一个引用变量时,它会被回收。

第十章主要介绍了静态类、静态方法、静态变量。关键点:final、常量、数字格式化、日期表示法。

第十一章主要介绍了异常处理。

第十二章和第十三章,主要介绍了 GUI 和 Swing。关键点:事件处理机制。

第十四章主要介绍了序列化和文件输入/输出。关键点:Serializable接口。

Java Serializable:明明就一个空的接口嘛

第十五章主要介绍了网络 Socket 和多线程。

Java Socket:飞鸽传书的网络套接字

Java 网络编程:必知必会的 URL 和 URLConnection

第十六章主要介绍了集合和泛型。

第十七章主要介绍了程序的打包和发布。

第十八章主要介绍了远程服务调用。

4)《Effective Java》

《Effective Java》除了翻译让众多 Java 程序员诟病之外,再没有任何缺点了(有读者戏称:“这本书为翻译们作出了杰出的表率”)。其目标是帮助 Java 程序员更加有效地使用 Java 编程语言及其基本类库,主要涉及到 java.langjava.utiljava.io 包下面的类。

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

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

这里有一份第三版的中文在线翻译文档,大家可以参照一下。

github.com/sjsdfg/effe…

我在读这本书的时候,曾写过两篇文章,大家也可以阅读一下。

为什么要将局部变量的作用域最小化?

面试官:兄弟,说说基本类型和包装类型的区别吧

5)《Java网络编程》

《Java网络编程》全面介绍了如何使用 Java 开发网络程序。网络编程是指编写运行在多个设备(计算机)上的程序,这些设备可以通过网络连接起来。这也是 Java 基础学习完后必须要学习的一大块内容,包括:Internet 底层协议(TCP/IP 和 UDP/IP)、网络输入和输出、DNS 交互、定位、识别和下载网络资源、HTTP 协议(REST、HTTP 头部和 Cookie)、Socket 通信等等。

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

6)《Java 并发编程实战》

《Java并发编程实战》深入浅出地介绍了 Java 线程和并发编程,是一本还算不错的 Java 并发编程参考手册。本书从并发和线程安全性的基本概念出发,介绍了如何使用类库来提供基本的并发方案,包括如何利用线程来提高并发应用程序的吞吐量、如何识别可并发执行的任务、如何提高单线程子系统的响应性、如何确保并发程序执行预期的任务,如何提高并发代码的性能和可伸缩性等等内容。

但我必须要说的是,《Java并发编程实战》这本书并没有摆脱翻译枯燥的老毛病,读起来很需要耐住性子,不然就很难把这本书吃透。当然了,并发编程本身就很难,大家要做好心理准备。

我之前写了四篇这本书的读书心得,大家可以参照一下。

Java 并发编程(一):简介

Java 并发编程(二):如何保证共享变量的原子性?

Java 并发编程(三):如何保证共享变量的可见性?

Java 并发编程(四):如何保证对象的线程安全性

7)《深入理解Java虚拟机》

《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(第 2 版)》是唯一一本我们国内程序员写的经典书,可以媲美《Java 编程思想》。

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

第 1 版两年内印刷近 10 次,好评(五星)如潮,是整个 Java 图书领域公认的经典著作和畅销书。

第 2 版共分为 5 大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对 JVM 进行了全面深入的分析,深刻揭示了 JVM 的工作原理。

第一部分主要介绍了 Java 的技术体系、Java 和 JVM 的发展历程。

第二部分主要介绍了 JVM 的自动内存管理,包括虚拟机的内存区域划分原理,内存溢出产生的原因、常见的垃圾收集算法、垃圾收集器的工作原理等等。

第三部分主要介绍了类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎。

第四部分主要介绍了程序的编译和代码的优化,阐述了泛型、自动装箱拆箱、条件编译等语法糖的原理;还有 HotSpot 的即时编译器。

第五部分主要介绍了 Java 实现高效并发的原理,包括 JVM 内存模型等。

作者周志明更成为了广大 Java 程序员心目中的大神级人物,厉害厉害了!有读者曾这样感叹道:“国内程序员很难再写出这么经典的书了!”

如果大家想要成为一名优秀的 Java 程序员,本书不得不读啊!并且是细细品味的那种。

8)《Java性能权威指南》

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

9)《代码整洁之道》

我可以这么肯定地说:《代码整洁之道》值得所有的程序员读一读。软件的质量,不仅依赖于架构,更与代码质量息息相关。而代码的质量与其整洁度成正比关系,越整洁的代码,其质量毫无疑问的就会越高。由于本书中的例子是由 Java 实现的,因此 Java 程序员在读这本书的时候有着天然的优势。

如何写出整洁的代码呢?Keep It Simple Stupid:代码简单直接,不仅能够提高代码的效率,还能够让阅读代码的人赏心悦目。

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

1、整洁的代码力求专注,每个方法、每个类都应该全神贯注于一件事;命名更要给人一种“顾名思义”的感觉。

2、整洁的代码简单直接,从不隐藏设计者的意图。

3、整洁的代码应当有单元测试。

4、整洁的代码拒绝重复,其表达力直击人的心灵。

10)《设计模式之禅》

《设计模式之禅(第 2 版)》是设计模式领域公认的 3 本经典著作之一,也是我们国内程序员写的一本书,趣味化十足,读起来也非常容易理解。这本书值得所有的程序员读一读,但 Java 程序员读起来更容易上手,因为源码是 Java 完成的。作者名叫秦小波,和我最喜欢的作家王小波同名。

本书可以分为五个部分:

第一部分(第 1~6 章),包含有单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则等内容,对面向对象程序员设计的 6 大原则进行了深刻解读。

第二部分(第 7~29 章)通过大量生动的案例讲解了 23 种最常用的设计模式。包含单例模式、工厂方法模式、抽象工厂模式、模板方法模式、建造者模式、代理模式、原型模式、中介者模式、命令模式、责任链模式、装饰模式、策略模式、适配器模式、迭代器模式、组合模式、观察者模式、门面模式、备忘录模式、访问者模式、状态模式、解释器模式、享元模式、桥梁模式。

我在《Java极客技术》星球上解读过几篇模式,这里推荐给大家读一读。

备忘录模式

解释器模式

组合模式

第三部分(第 30~33 章)对同类型和相关联的模式进行了比较,旨在说明它们之间的差别。

第四部分(第 34~36 章)探讨了如何在实际开发中将各种设计模式混合起来使用的可能性,以发挥设计模式的最大功效。

第五部分(第 37~38 章)主要讲解了 5 种新的设计模式的原理、意图和最佳实践。

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

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

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

11)《Java开发手册》

《Java开发手册》是每个 Java 程序员都值得拥有的一本参考指南。该手册涵盖了编程规约、异常日志、单元测试、安全规约、MySQL 数据库、工程结构、设计规约灯 7 个部分,参考价值极大。

《Java 开发手册》作为阿里官方的 Java 代码规范标准,是行业内领先的开发规范文档。如果能够认真践行该手册中提到的规约,绝壁能够帮助 Java 程序员养成良好的编程习惯,并且提高代码的质量和降低项目维护的难度。

据说,这本手册在阿里内部打磨了很久很久才对外开放的,所以倾注了很多大佬们的心血。况且,阿里作为一个大厂,拿出来一份有瑕疵的手册,多少会丢脸,所以这本手册绝对值得读一读。

本手册的作者孤尽曾说:

代码规范这事情,它是一个吃力不讨好,短期没结果,费心又费力的事情。唯有自己内心的技术情怀。

06、推荐一些优质的 Java 学习视频

我知道,有些同学更喜欢看视频教学,那么我也为大家精心准备了一些。这些视频我已经分门别类了,大家可以按需下载。

这些视频分为两大类,Java 基础和 Java 高级,先来看一下清单。

Java 基础视频名称 口令
Java 基础语法 javaboy4096
Java 面向对象 javaboy6148
深入面向对象和数组 javaboy8200
Java 常用类详解 javaboy4105
Java 集合与数据结构 javaboy2062
Java 数据结构和算法 javaboy6184
Java IO 流全解析 javaboy8209
Java 网络编程 javaboy6166
Java 异常机制解析 javaboy6157
深入理解 Java 多线程 javaboy4114
手动开发一个 Web 服务器 javaboy2071
独立开发 SORM 框架 javaboy8227
深入理解 Java 注解+反射 javaboy8218
Java 23 种设计模式 javaboy4123
学会 Java 正则表达式 javaboy6175
JDBC 详解 javaboy2080
深入理解 Java 虚拟机 javaboy2089
Java 解析XML文件 javaboy8236
IntelliJIDEA 视频教程 javaboy4285
Java 编程规范 javaboy4222
Java 高级视频名称 口令
Java 高并发秒杀方案 javaboy8299
高并发编程与线程池 javaboy2170
Java 并发编程与高并发实战 javaboy6256
Activiti 工作流实战解析 javaboy4204
ActiveMQ 消息中间详解 javaboy8326
Dubbo 详解 javaboy8335
Linux 快速入门 javaboy2161
Linux 基本操作 javaboy6328
Linux 基本命令 javaboy6409
Maven 详解 javaboy8308
Maven 实战视频 javaboy8443
Git 应用详解 javaboy4213
Gradle 从入门到精通 javaboy6391
Svn 入门教程 javaboy6265
系统优化与 JVM 调优 javaboy8317
JVM 虚拟机优化 javaboy2224
AIO、BIO、NIO 详解 javaboy6274
Netty 高级视频教程 javaboy2179
单点登录视频教程 javaboy4231
Redis缓存详解 javaboy6319
Redis全解析 javaboy4240
Redis 内存数据 javaboy4402
Nginx 视频教程 javaboy4267
VSFTPD+Nginx 视频教程 javaboy6292
Nginx 和高并发 javaboy2323
MyBatis 视频教程 javaboy2197
Hibernate4 视频教程 javaboy8353
Spring4 视频教程 javaboy8344
SpringMVC 视频教程 javaboy4249
MySQL 基础 javaboy2107
MySQL 高级教程 javaboy2305
MySQL 优化 javaboy6211
SSM 框架整合视频教程 javaboy6301
Jfinal 视频教程 javaboy4258
Shiro 视频教程 javaboy6310
Solr 视频教程 javaboy2215
Struts2 视频教程 javaboy8362
Zookeeper 详解视频 javaboy8371
JUC 视频教程 javaboy6400
Java 邮件开发教程 javaboy8452
自己 DIY 一个 Tomcat javaboy4339
架构师面试攻略(文档) javaboy2233
架构师面试攻略(视频) javaboy8380

学完这些视频,可以再把之前推荐的书籍结合起来读一读,一定会大有所获!要不,你来揍我😜!

07、推荐一些优质的 Java 实战项目

听过王阳明先生倡导的“知行合一”吧?我们学习,除了关注网站、博客、书籍、视频,最重要的还是要实战,总不能纸上谈兵。那么优质的 Java 实战项目就显得至关重要了。这里不推荐太多,只推荐两个。

1、mall :mall 项目是一套电商系统,包括前台商城系统及后台管理系统,基于 SpringBoot+MyBatis 实现。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。

作者我们线上聊过,人很亲切。他的 GitHub 地址:github.com/macrozheng/…

2、vhr :微人事是一个前后端分离的人力资源管理系统,项目采用SpringBoot+Vue开发。

这是我的好朋友「江南一点雨」自己维护的一个项目,目标星标 12.3k。

GitHub 地址:github.com/lenve/vhr

GitHub 上还有很多不错的开源项目,但活不在多,而在精。把这两个实战项目搞透彻,自学的道路上就已经成功了 70%。

08、推荐一份不错的 Java 面试题

自学了这么长时间,我相信大家已经跃跃欲试了,能不能一举拿下 offer,就需要面试题来测试一下了。

我们是 Java 程序员,那么有没有掌握整个 Java 知识体系就显得尤为重要了。很多小伙伴苦于没有合适的资料来回顾整个 Java 知识体系,或者不知道从哪开始复习。

我找「纯洁的微笑」要了一份资料,这份不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。

至于出处,好像是一份美团的大佬整理的,这里表示感谢。我截了几张图,大家感受一下。

经过这一轮面试题的洗礼,我相信大家在面试官前面就不会再战战兢兢了,而是自信满满。

09、技术没有终点

我记得,读者“在你的世界各地”向我提问的时候是 1 个月前,不过,我没有让他失望,终于把这份 2万5千字的指南整理完毕,其中花费了我大量的时间和精力,但我总觉得这份付出是值得的。我也相信,大家按照我制定的这份学习路线学习之后,肯定能够在最短的时间内找到工作!那么现在,我为你送上最真诚的祝福,加油!

当然了,技术这条路是没有终点的,即便是找到了工作,我们依然需要奋力前行,做最好的自己!

忘了说一句,以上提高的高质量教学视频、优质资料和面试题,都可以微信搜索「沉默王二」,回复关键字「666」、「1024」、「面试」免费获取。

兄dei,如果觉得我写的不错,不妨帮个忙:

1、给我点个赞呗,可以让更多的人看到这篇文章,不再迷茫,顺便激励下我,嘻嘻。

2、关注我的原创微信公众号「沉默王二」,每天准时推送原创文章,听说关注了的会变胖,不变棒!

作者简介:

作者:你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员,我有一个微星公众号『沉默王二』,专注于有趣的 Java 技术和有益的程序人生,二哥期待你的关注,和我一起变得优秀吧。