Java的学习路线(非常完整)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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。

Web 前端技术

说明

HTML

一种用于创建网页的标记语言主要负责搭建网页结构展示网页内容。

CSS

一种用于美化网页的样式表语言能够让页面更加美观、布局更加合理、颜色更加炫酷。

JavaScript

一种运行在浏览器中的脚本编程语言用来给网页添加特效、发送网络请求、制作动画等。


HTML 和 CSS 都是标记语言或者格式语言不具备编程能力很多写法都是固定的记住即可JavaScript 是一种灵活轻巧的脚本编程语言它能够处理各种逻辑任务和计算场景。

2. Java 基础

学习 Java 基础也就是学习 Java 语法以及常见的包和类。这一部分比较容易找两本入门书籍看看就行。

Java 同时支持面向对象编程和泛型编程学习 Java 时一定要搞明白三个重要概念分别是类Class、对象Object和泛型Generics。

下表列出了 Java 基础所包含的重要知识点

阶段

知识点

开发环境搭建

熟悉 JVM、环境变量、常用 IDE、Java 命令了解 Java 程序从开发到运行的整个过程。

Java 语法

变量、数据类型、运算符、流程控制语句、数组等。

Java 面向对象

类、对象、封装、继承、多态、抽象类、接口等。

Java 高级特性

XML、多线程与网络编程、集合框架、泛型、实用类、I/O 流等。

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 系统的能力了。接下来我们需要动手实践一下把学到的知识沉淀下来顺便培养一下编程思维。

比如你可以开发一个商城系统它包括了登录注册、商品列表、商品搜索、商品管理、添加购物车、下单购买等功能可以综合利用前面学到的知识。

在该系统中不同技术将扮演不同的角色

技术

说明

Servlet

负责处理用户请求并将处理后的结果返回给 JSP 或 Thymeleaf 模板引擎。

MySQL

负责数据的存储。

JDBC

负责对数据库进行操作。

JSP/Thymeleaf

负责将后台处理结果填充到 HTML 文档然后发送给浏览器显示。

 

注意大家一定要认真地完成项目实践这样不仅能够巩固前面学到的知识还能为后续学习企业级框架铺平道路。

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. 其它技术

除了上面的知识我们还需要学习一些实际项目开发中经常用到的相关工具。这些工具不必十分精通只要能够熟练使用就足以应对日常开发任务。

工具

说明

Maven

目前最流行的项目管理和理解工具之一通过它可以很方便地引入项目所需的依赖包完成项目的构建。

Git

目前最流行的分布式版本控制工具更是大多数互联网公司首选的版本控制工具。Git 主要负责记录文件包括代码和配置的变更将文件的修改时间、文件名、修改人、修改内容等信息一一记录下来。

Git 有效地解决了团队协同开发多人同时开发同一个项目中代码和配置的版本同步问题提高了团队协同开发的效率。

日志框架

在项目开发中日志十分的重要不管是记录运行情况还是定位线上问题都离不开对日志的分析。目前常用的 Java 日志日志框架有 Log4j、Logback 等。

Linux

大多数互联网公司都会选择将项目部署在 Linux 系统上主要看重 Linux 系统的稳定性我们在开发时或多或少都需要与 Linux 系统打交道因此掌握一定的 Linux 知识是很有必要的。

作为一名 Java 开发人员我们只要掌握 Linux 的基本操作以及常用的 Linux 命令即可。

Redis

一款开源的键值型非关系型NoSQL数据库。

Redis 通常被用来缓存一些经常被访问的热点数据或者需要耗费大量资源的内容。把这些内容放到 Redis 中可以让应用程序快速地读取它们。例如网站首页就会经常被访问并且在创建首页的过程中会消耗的很多资源此时就可以使用 Redis 将整个首页缓存起来从而降低网站的压力加快页面访问的访问速度。

消息队列

我们可以把消息队列理解成一个存放消息的容器当我们需要使用消息时就可以直接从这个容器中获取。

消息队列通常是分布式微服务系统中不可或缺的重要组件目前流行的消息队列中间件有 ActiveMQ、RabbitMQ、Kafka、RocketMQ 等。

11. 总结

以上学习路线可能比较混乱为了让读者有一个更加直观的印象我特地制作了一份简明扼要的汇总表格并标注出了不同技能的重要程度其中

对于不同的学习场景我也标注了各个知识板块的重要程序

  • ☆☆ 表示可以跳过或者放弃以后有需要的话再来学习
  • ★☆ 表示需要进行了解但是不需要深度学习
  • ★★ 表示非常重要需要深度学习。

序号

技术栈

说明

重要性

01

Web 前端

学习 HTML+CSS+JavaScript具备独立开发静态网页的能力。

★☆

02

Java 基础

重点掌握 Java 语法、面向对象概念和某些高级特性

★★

03

Servlet

理解 Servlet 的原理和流程能写出简单的 Servlet 程序。

★☆

04

JSP

理解 JSP 的原理和思想能写出简单的 JSP 程序。

★☆

05

Thymeleaf

最流行的模板引擎重点学习它的基本用法和常见属性。

★★

06

数据库

了解 JDBC 技术重点掌握一种数据库并熟悉 SQL 语句。

★★

07

项目实践

沉淀所学知识培养编程思维。

★★

08

企业级框架

学习 SSM也即 Spring + Spring MVC + MyBatis。

★★

09

分布式微服务框架

学习 Spring Boot + Spring Cloud。

★☆

10

其它技能

主要是一些效率工具和相关组件。

☆☆

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Java