Java 是一种跨平台的、面向对象的高级编程语言,主要用来进行网站后台开发,也就是服务器端开发,或者动态网站开发。
Java 是全球最受欢迎的编程语言之一,在世界编程语言排行榜 TIOBE 中,Java 一直霸占着前三名,有好多年甚至都是第一名。
JetBrains 每年都会发布一个开发者生态系统调查报告,根据该报告的统计数据,最近几年全球约有 1/3 的专业程序员将 Java 作为主要编程语言,这一比例在我国更是高达 1/2,我国也因此成为全球 Java 程序员最多的国家,没有之一。
JetBrains 是一家总部位于捷克的 IDE 开发商,大名鼎鼎的 IntelliJ IDEA、PyCharm、WebStorm、CLion、PHPStorm 就是出自 JetBrains 之手。
我国互联网产业的发展非常充分,市场对于程序员的需求量也巨大,这其中,Java 程序员的需求最多,占到全部需求量的 60%~70%。
与此同时,Java 程序员的工资也一路高涨,新入职大厂/独角兽的应届生,年包都在 30W 以上;最土豪的是腾讯,应届生年包已经超过了 40W。大部分学习 Java 的读者也都希望找一份靠谱的工作,获得一份不错的收入。
除了 Java 程序员,其它程序员的年包其实也达到了这个数字。
这是一套非常详细的 Java 学习路线,它坚持实用主义,追求前沿技术,不但为初学者规划好了具体的学习步骤,还为初学者指明了常见的陷阱和困难。
这套 Java 学习路线将解决以下几个问题:
- Java 程序员需要掌握哪些技能,每种技能都需要掌握到什么程度?
- 先学什么,再学什么,具体的学习顺序是怎样的?
- 哪些技能可以暂时跳过,哪些技能可以浅尝辄止,哪些技能必须深入学习?
- 哪些技能已经被淘汰,不需要再关注?
和互联网上其他博主分享的学习路线相比,这套学习路线不仅更加完整和详细,而且还会帮你做出选择和取舍,让你尽快学有所成,找到一份高薪工作。
注意,拥有选择权是一件非常重要的事情!
Java 开发涉及到的技能板块非常繁杂,短期内不可能全部都掌握,为了加快学习进度,尽早达到工作要求,我们需要暂时先舍弃一些过时的技能,或者对这些技能浅尝辄止,等到以后有余力/有需要的话再回来学习。
这套学习路线就肩负了这个使命,它将告诉你各种技能的重要程度,以及在不同场景下的适用情况,让你知道如何选择,避免折腾和踩坑。
1. Web 前端
从技术架构的角度看,动态网站可以分成两部分,一个是 Web 后台,一个是 Web 前端:
- Web 后台就是位于服务器上的 Java 程序,它会根据用户请求的 URL 和参数生成对应的网页内容,然后发送给浏览器。
- Web 前端就是我们在浏览器上看到的网页,它由 HTML、CSS 和 JavaScript 三种语言构成。
要想学习 Java 后台开发,必须要先了解 Web 前端部分,知道如何制作一个简单的静态网页。
所谓静态网页,就是没有经过后台程序处理的网页,它的内容和样式通常都是固定的,不会随着请求参数的改变而改变。
不管是 Web 前端还是 Java 后台,都有很多技术板块需要学习,一个人很难全部精通,所以几乎在所有的互联网公司中都会设置两个岗位——Web 前端工程师和 Java 后台工程师。
Java 程序员只需要掌握基本的 Web 前端技术,设计出简单的静态页面即可,那些更加复杂的交互和更加优美的界面,交给 Web 前端程序员即可。
Web 前端主要包括三大核心技术,分别是 HTML、CSS 和 JavaScirpt。
HTML 和 CSS 都是标记语言或者格式语言,不具备编程能力,很多写法都是固定的,记住即可;JavaScript 是一种灵活轻巧的脚本编程语言,它能够处理各种逻辑任务和计算场景。
2. Java 基础
学习 Java 基础,也就是学习 Java 语法以及常见的包和类。这一部分比较容易,找两本入门书籍看看就行。
Java 同时支持面向对象编程和泛型编程,学习 Java 时一定要搞明白三个重要概念,分别是类(Class)、对象(Object)和泛型(Generics)。
下表列出了 Java 基础所包含的重要知识点:
3. Servlet
Servlet 是第一代 Java Web 开发技术,其原理非常简单粗暴,就是通过 Java 程序将 HTML 代码以字符串的形式、一行一行地输出到网页文件中,然后再发送给浏览器。
Servlet 是一种古老的技术,使用起来非常麻烦,也非常低效,实际开发中不会有人去手撸 Servlet 代码。但是,这并不意味着 Servlet 不重要,相反,Servlet 是必须掌握的技能之一,不能被忽略。
那些热门的 Java Web 框架,比如 Spring MVC、Struts2 等,本质上都是对 Servlet 的封装,都是以 Servlet 为基础和内核开发出来的,只有学习了 Servlet,才能知道 Java 程序到底是如何生成 HTML 页面的。
Spring MVC 和 Struts2 是两个类似的 Java Web 框架,但是随着 Spring 家族的强大,以及 Struts2 漏洞的爆出,Spring MVC 基本已经取代了 Struts2,企业在启动新项目时也不再考虑 Struts2 了。
网上有不少人建议跳过 Servlet,直接学习 Web 框架,这种观点简直是误人子弟,给初学者制造学习障碍。
注意,学习 Servlet 时重在理解它的原理和思想,能写出简单的 Servlet 程序即可,这样就能为以后学习 Web 框架打下坚实的基础。
4. JSP
JSP 是继 Servlet 之后的第二代 Java Web 开发技术,它的基本原理是在 HTML 文档中嵌入 Java 代码:固定内容依然使用 HTML 书写,可变内容使用 Java 代码生成。
其实 JSP 也离不开 Servlet!当浏览器发送一个请求时,JSP 引擎会先将 JSP 文件转换成一段 Servlet 代码,让 Servlet 生成 HTML 文件,然后再发送给浏览器。
虽然 JSP 比 Servlet 进步了很多,也方便很多,具有了现代 Web 开发的样子,能够 hold 住一些简单的页面,但是 JSP 技术仍然是将前端页面与后台 Java 代码混合在一起,不利于在中大型项目中采用「前后端分离」的开发模式,所以在实际生产中一般不会有人直接使用 JSP。
好吧,既不使用 Servlet 也不使用 JSP,那到底使用什么呢?答案是模板引擎,这就是接下来要说的内容。
其实从本质上讲 JSP 也是一种模板引擎,只不过它的思想老旧,使用不方便。
因为 JSP 已经不再广泛使用,所以我们只需要简单学习,了解一下它的原理和思想,能做出一个简单的页面即可,千万不要陷在 JSP 中不能自拔。
5. Thymeleaf 模板引擎
Thymeleaf 是新一代 Java 模板引擎,与 JSP 类似,它也是一种动态网页开发技术。
Thymeleaf 可以看做是对 HTML 的一种增强,它在 HTML 的基础上增加了一些额外的 Thymeleaf 属性,从而实现了「模板和数据分离」的开发方式,让前后端配合变得更加轻松和高效。
近些年来,随着前后端分离的流行,JSP 已经逐步走向了衰落,基本上不会有人再使用 JSP 进行开发了,而 Thymeleaf 可以说是 JSP 最好的替代品之一。
除此之外,当下最炙手可热的 Spring Boot 框架也极力推荐我们使用 Thymeleaf 来代替 JSP 进行 Web 开发,并为 Thymeleaf 提供了自动化配置解决方案,因此在 SpringBoot 中使用 Thymeleaf 非常方便。
在学习 Thymeleaf 过程中,需要重点关注它的基本用法和常见属性。
6. 数据库
网站后台在存储各种数据时都需要数据库的支持,比如用户信息、文章内容、操作日志、商品详情、购买记录等。没有数据库,就没有互联网,数据库是 Web 开发人员必须掌握的技术。
文件系统
有些初学者为了逃避数据库的学习,可能想过使用文件来保存数据。
的确,使用文件确实可以达到目的,早期的互联网就是这个干的。但是,文件系统的“增删改查”效率极其低下,操作也非常麻烦,有了数据库以后,再也没有程序员使用这种原始的解决方案了。
总之,不学习数据库就没法从事 Web 开发,不学习数据库就是耍流氓。
学习哪种数据库?
市面上有很多优秀的数据库,其中最流行、最受欢迎、适用于 Web 项目的有两个,分别是 MySQL 和 Oracle。
MySQL 是一款免费开源的中型数据库,受到了大量个人开发者和中小型公司的青睐;而 Oracle 通常被应用在安全级别较高的企事业单位或者金融机构,比如银行系统、证券系统、电信系统、政府 OA 系统等。
我建议初学者从 MySQL 入手,先玩转数据库的基本操作,包括安装、配置、连接和增删改查等。如果有余力的话,再继续学习一下 Oracle 数据库。
SQL
MySQL 和 Oracle 属于关系型数据库,所有的关系型数据库都使用 SQL 语言来进行操作。学习数据库的同时,也要配合学习 SQL 语言。
SQL 语言虽然有标准版本,但是基本所有数据库都针对自己的应用场景对标准 SQL 进行了裁剪或者扩充,这导致不同数据库所支持的 SQL 细节有所区别。
当然,这些版本的 SQL 都是从标准 SQL 演化而来,整体用法都是类似的,只要我们玩转了一种数据库,也会很快掌握其它数据库。
JDBC
Java 语言提供了一种操作数据库的技术,它由一组特定的接口和类组成,可以访问几乎所有常见的关系型数据库,包括 MySQL 和 Oracle。这种访问数据库的技术,就叫做 JDBC。
JDBC 是 Java 程序和数据库之间沟通的桥梁,它使得数据可以在 Java 程序和数据库之间自由流通。
从本质上讲,JDBC 也是通过解析和执行 SQL 语句来控制数据库的。
注意,JDBC 是一种古老的访问数据库的技术,使用起来非常繁琐,所以在实际开发中很少有人直接手撸 JDBC 代码,而是使用一些持久化框架,比如 Mybatis、Hibernate 等。持久化框架对 JDBC 进行了封装,它使得数据库操作更加方便和高效。
你看,虽然我们不直接使用 JDBC,但是也不得不了解一下它,因为它是 Mybatis、Hibernate 等持久化框架的基础。
提示
数据库是 Java 程序员必备的硬核技能之一,从某种程度上来说,它决定了一个 Java 程序员的上限。当然,初学者的首要任务还是掌握数据库的基本概念,并能够熟练地使用 SQL 语句对数据库进行增加、删除、修改、查询等操作。
7. Java Web 项目实战
在掌握了以上知识以后,恭喜你,你已经具备了独立开发一套完整 Java 系统的能力了。接下来,我们需要动手实践一下,把学到的知识沉淀下来,顺便培养一下编程思维。
比如你可以开发一个商城系统,它包括了登录注册、商品列表、商品搜索、商品管理、添加购物车、下单购买等功能,可以综合利用前面学到的知识。
在该系统中,不同技术将扮演不同的角色:
注意,大家一定要认真地完成项目实践,这样不仅能够巩固前面学到的知识,还能为后续学习企业级框架铺平道路。
8. 企业级框架
所谓的“框架”,就是别人已经封装好的、可以重复使用的代码,它们都是从很多实际项目中抽取出来的、具备很好通用性的功能模块。
框架不是万能的,不同框架有不同的应用场景,一种框架往往也只能解决某个方面的问题,所以在实际开发中通常需要多种框架相互配合。
市面上优秀的 Java 框架有很多,目前最流行的组合是 SSM,也即 Spring + Spring MVC + MyBatis,它们都是 Java 程序员必须掌握并精通的技能。
8.1 Spring
Spring 框架有三个方面的作用。
第一,Spring 框架是一个效率工具,它能够自动化管理 Java 对象。
在实际项目开发中,创建 Java 对象是一个非常高频的操作,这会导致程序中有很多重复性的代码,非常不利于后期迭代和维护。而使用了 Spring 以后,只需要简单的配置就能自动化完成对象的创建,不仅提高了开发效率,还保证了代码的整洁性。
Spring 在底层依赖于两个核心,分别是控制反转(IOC)和面向切面编程(AOP),初学者只有充分地理解了这两个概念才算真正地学会了 Spring。
第二,Spring 家族还有很多其它框架,而 Spring 就是这些框架的基石。
由于 Spring 框架的优秀以及社区的大力支持,后来又在 Spring 的基础上衍生出了很多其它框架,包括 Spring MVC、Spring Boot、Spring Cloud 等,它们都是基于 Spring 而构建的,要想使用这些框架,必须先配置好 Spring。
第三,Spring 还是一个平台,它能够集成很多其它的开源框架,让它们在一起协调地工作,例如 Struts2、Hibernate、Mybatis 等。
有了 Spring,开发人员可以根据自身需求自由地选择开发框架,并以最低的成本解决兼容性问题,从而将它们以最佳的方式整合到 Java 项目中。
Spring 在 Java 开发领域具有绝对的统治力,截至 2020 年,Spring 的用户占比达到了 86%,而这一比例还在不断攀升。
Spring 是 Java 程序员必须掌握并精通的技能,一个 Java 程序员如果不懂 Spring,那基本是找不到任何工作的。
8.2 Spring MVC
Spring MVC(全称 Spring Web MVC)是一款基于 MVC 模式的轻量级 Web 开发框架,它解决的是「前后端交互」的问题。
Spring MVC 并不是什么新的技术,它只是对 Servlet 进行了封装。
Spring MVC 属于 Spring 家族的一个子项目,能够和 Spring 框架无缝集成,从而使用 Spring 框架的所有功能。
和 Spring 一样,Spring MVC 也是 Java 程序员必须掌握并精通的技能,更是绝大多数企业对 Java 开发职位的普遍要求。
8.3 Mybatis
MyBatis 是一个开源的、半自动化的、轻量级的数据库框架,它在内部对 JDBC 进行了封装,简化了操作数据库的过程,使得开发人员从繁杂的工作中解放出来,只需要关注 SQL 语句本身即可。
MyBatis 的主要思想是将程序中的 SQL 语句剥离出来,使用 XML 文件或注解的方式进行灵活配置,如此一来,开发人员就不需要再修改程序代码,直接在配置文件中修改 SQL 语句即可。
MyBatis 是国内 Java 开发领域内最主流的数据库操作框架,绝大多数企业都要求 Java 开发人员掌握 Mybatis,所以我们必须要好好学习,力求精通。
9. 分布式微服务框架
传统的 Java 开发模式会将所有的代码和配置都集中在同一个工程/项目中,随着业务量和用户量的增加,系统将会变得越来越复杂,同时需要的开发人员也越来越多。复杂生乱,人多生乱,在这种情况下,哪怕一行代码出现问题,都有可能导致整个系统不可用,可谓“牵一发动全身”。
为了解决这个问题,企业需要采用分布式微服务架构:
所谓“微服务”,就是将原来复杂而庞大的系统拆分成多个能够独立运行的小型模块,其中每个模块只负责实现一部分功能,然后再将它们结合起来组成完整的系统。
因为每个微服务模块都是相互独立的,所以它们可以部署到不同的服务器上,然后再使用 HTTP(S) 通信交换数据,共同完成用户的请求,这就是所谓的“分布式”。
总起来说,分布式微服务的核心思想就是先打散,再拼装。
目前,我们通常使用 Spring Boot 框架来构建一个一个的微服务,然后再使用 Spring Cloud 框架治理,也即将多个微服务组合成一个大系统。
9.1 Spring Boot
Spring Boot 是在 Spring 的基础上推出的一套全新的 Java 开源框架,它能够简化 Spring 应用的搭建和开发过程,让 Spring 项目使用最少的配置,以最快的速度运行起来。
Spring Boot 为 Spring 应用提供了大量的自动配置,使得 Spring 应用只需要非常少量的配置甚至是零配置便可以运行起来,从而让开发人员从 Spring 的繁琐的配置中解放出来,将更多的精力投入到业务逻辑的中。
可以这么说,Spring Boot 的出现大大地降低了 Spring 开发人员的入门门槛。
Spring Boot 自诞生以来就备受业界的关注,微服务的流行更是让它成为当下最炙手可热的技术之一,所以已经有越来越多的中大型企业把 Spring Boot 作为 Java 程序员的必备技能。
在分布式微服务架构中,Spring Boot 主要用来构建一个一个的微服务。
另外,Spring Boot 还是 Spring Cloud 的前置知识,不学习 Spring Boot,就无法理解 Spring Cloud。
9.2 Spring Cloud
Spring Cloud 是一款基于 Spring Boot 的微服务治理框架,是分布式微服务架构的一站式解决方案,它能够简化微服务的构建,并将各个微服务协调起来。
可以这么说,Spring Cloud 用来将 Spring Boot 创建的各个微服务拼装成一个完整的系统。
Spring Cloud 并不是一种新的技术,它只是一系列现有微服务解决方案/框架的有序集合。
Spring 将那些市面上成熟的、经过验证的微服务框架整合起来,并通过 Spring Boot 的思想进行再封装,屏蔽掉其中复杂的配置和实现原理,最终为 Java 开发人员提供了一套易学习、易部署、易维护的分布式微服务系统开发工具包。
Spring Cloud 共有两代实现,分别是 Spring Cloud Netflix 和 Spring Cloud Alibaba;在学习 Spring Cloud 时,我们需要先学习 Spring Cloud Netflix,再学习 Spring Cloud Alibaba。
与 Spring Boot 相似,随着微服务的流行,Spring Cloud 也成了当下最炙手可热的框架之一,所以要想进入中大型企业,我们还是需要掌握 Spring Cloud 的。
10. 其它技术
除了上面的知识,我们还需要学习一些实际项目开发中经常用到的相关工具。这些工具不必十分精通,只要能够熟练使用,就足以应对日常开发任务。
11. 总结
以上学习路线可能比较混乱,为了让读者有一个更加直观的印象,我特地制作了一份简明扼要的汇总表格,并标注出了不同技能的重要程度,其中:
对于不同的学习场景,我也标注了各个知识板块的重要程序:
☆☆ 表示可以跳过或者放弃,以后有需要的话再来学习;
★☆ 表示需要进行了解,但是不需要深度学习;
★★ 表示非常重要,需要深度学习。