很多朋友在学习Java时,会发现虽然资源很多但是无法形成一个知识体系,让自己由点到面、由浅入深的对Java有个比较全面认识。
写这篇文章目的,就是列出了一个Java的路线图,带刚开始学习Java或需要复习Java的朋友进行系统的学习。
整个体系分为5个阶段:Java基础、Java进阶、JavaWeb、Java框架、分布式,通过这5个阶段的学习,大家能掌握到目前互联网企业所需要的主流技术点。
每个课程后面都有我的博文地址,由于刚开始整理,有的文章还没有写,后面写好了会不定时更新上去,争取完成一个完整的体系,我也会不断学习,对内容不断进行扩展和深化,也欢迎大家给出宝贵的建议。
学习方法方面给初学朋友的建议就是:
1、坚持,Java的知识点多,而且是一个体系,必须一步一步坚持下去
2、思考,每个知识点除了知道怎么用,还需要思考不用行不行、有没有其他办法、实现的原理等
3、练习,学习编程就是多敲代码,每篇博文都有案例、练习和作业,多动手学习起来才有效果
第一阶段 Java基础 |
|||
序号 | 课程名称 | 内容简介 | 博客地址 |
1 | Java的安装和配置 | Java语言介绍 | https://blog.csdn.net/u013343114/article/details/112212873 |
JDK安装 | |||
环境变量配置 | |||
HelloWorld | |||
Java编译执行过程 | |||
Eclipse的使用 | |||
2 | 变量、标识符和类型转换 | Java标识符的规则和规范 | https://blog.csdn.net/u013343114/article/details/112217062 |
Java的关键字 | |||
变量的定义和使用 | |||
变量的数据类型 | |||
自动类型转换 | |||
强制类型转换 | |||
Scanner输入 | |||
3 | Java的运算符 | 赋值运算符 | https://blog.csdn.net/u013343114/article/details/112238345 |
算术运算符 | |||
关系运算符 | |||
逻辑运算符 | |||
三元运算符 | |||
4 | 分支语句 | 基本的 if | https://blog.csdn.net/u013343114/article/details/112272131 |
if-else | |||
多重if | |||
嵌套if | |||
switch | |||
5 | 循环结构 | for | https://blog.csdn.net/u013343114/article/details/112275496 |
while | |||
do-while | |||
break和continue | |||
嵌套循环 | |||
6 | 数组基础 | 数组简介 | https://blog.csdn.net/u013343114/article/details/112308634 |
数组的定义 | |||
数组的初始化 | |||
foreach循环 | |||
Arrays工具 | |||
二维数组的使用 | |||
7 | 数组算法 | 求最大值 | https://blog.csdn.net/u013343114/article/details/112314935 |
顺序查找 | |||
冒泡排序 | |||
选择排序 | |||
二分查找 | |||
8 | 方法 | 方法的概述 | https://blog.csdn.net/u013343114/article/details/112461550 |
无参的方法 | |||
有参的方法 | |||
基本类型和引用类型参数的区别 | |||
方法的重载 | |||
带返回值的方法 | |||
可变参数 | |||
9 | 面向对象~类和对象 | 面向对象的概念 | https://blog.csdn.net/u013343114/article/details/112345793 |
类和对象的概念 | |||
面向对象编程 | |||
属性和方法 | |||
构造方法 | |||
this关键字 | |||
面向对象的内存分配 | |||
10 | 面向对象~封装 | 封装的概念 | https://blog.csdn.net/u013343114/article/details/112358966 |
访问修饰符 | |||
getter和setter方法 | |||
包 | |||
对象之间的通信 | |||
11 | 面向对象~继承 | 继承的相关概念 | https://blog.csdn.net/u013343114/article/details/112463703 |
super关键字 | |||
继承中的构造方法 | |||
final关键字 | |||
抽象类 | |||
12 | 面向对象~多态 | 什么是多态 | https://blog.csdn.net/u013343114/article/details/112506137 |
多态的作用 | |||
如何实现多态 | |||
Object类 | |||
equals和==的区别 | |||
向上向下转型 | |||
instanceof运算符 | |||
13 | 面向对象~static关键字和单例模式 | 静态属性 | https://blog.csdn.net/u013343114/article/details/112509898 |
静态属性内存分析 | |||
静态方法 | |||
静态常量 | |||
静态导入 | |||
单例模式 | |||
14 | 面向对象~接口和内部类 | 接口是什么 | https://blog.csdn.net/u013343114/article/details/112523663 |
接口的作用 | |||
接口的使用 | |||
接口和抽象类的区别 | |||
静态内部类 | |||
成员内部类 | |||
局部内部类 | |||
匿名内部类 | |||
15 | Java常用类 | String类 | |
StringBuffer类和StringBuilder类 | |||
包装类 | |||
日期相关API | |||
Math类 | |||
Random类 | |||
Runtime类
|
|||
System类
|
|||
16 | 集合 | 集合框架体系介绍 | |
集合和数组的区别
|
|||
Collection接口
|
|||
List接口
|
|||
ArrayList集合
|
|||
LinkedList集合
|
|||
Vector集合
|
|||
泛型集合
|
|||
ArrayList和LinkedList的工作原理
|
|||
17 | 集合 | Map接口 | |
HashMap集合
|
|||
HashMap源码分析 | |||
TreeMap集合
|
|||
LinkedHashMap集合
|
|||
Hashtable集合
|
|||
Set接口
|
|||
HashSet集合
|
|||
HashSet源码分析 | |||
TreeSet集合
|
|||
LinkedHashSet集合
|
|||
18 | 集合 | Collections类 | |
Comparable接口
|
|||
Comparator接口
|
|||
Lambda表达式
|
|||
19 | 异常 | Java的异常体系 | |
异常的概念及分类 | |||
try-catch的基本用法 | |||
多重catch的用法 | |||
finally的基本用法 | |||
finally和return执行顺序 | |||
throw、throws的基本用法 | |||
自定义异常 | |||
20 | IO | 文件操作的概念 | |
使用递归读取文件夹
|
|||
文件的筛选
|
|||
IO流的分类及体系结构
|
|||
字节输入流
|
|||
字节输出流
|
|||
try with resource
|
|||
21 | IO | 字节缓冲流 | |
打印流
|
|||
字符流
|
|||
字符缓冲流
|
|||
装饰设计模式
|
|||
22 | IO | 数据流 | |
对象流
|
|||
序列化
|
|||
深复制和浅复制
|
|||
NIO
|
|||
23 | 网络编程 | 网络编程相关概念 | |
HTTP协议 | |||
HTTP网络编程 | |||
24 | 网络编程 | TCP/IP协议 | |
UDP协议 | |||
Socket编程 | |||
UDP编程 | |||
25 | 项目实战:网上云盘 | C/S架构,在控制台实现文件列表、搜索、上传、下载等功能 |
第二阶段 Java进阶 |
|||
序号 | 课程名称 | 内容简介 | 博客地址 |
1 | 线程基础 | 进程、线程的概念介绍 | https://blog.csdn.net/u013343114/article/details/111224268 |
线程的实现方式
|
|||
Thread类的常用方法介绍
|
|||
线程的启动和停止
|
|||
线程的生命周期
|
|||
线程的调度
|
|||
2 | 线程池 | 线程池的作用 | https://blog.csdn.net/u013343114/article/details/111224390 |
线程池相关API
|
|||
Executors常用方法
|
|||
线程池的配置
|
|||
线程池的原理
|
|||
3 | 线程同步 | 线程同步问题介绍 | https://blog.csdn.net/u013343114/article/details/111224459 |
同步方法
|
|||
同步代码块
|
|||
同步锁
|
|||
死锁问题 | |||
AtomicInteger原子类 | https://blog.csdn.net/u013343114/article/details/111224517 | ||
volatile关键字 | |||
4 | 线程通信 |
生产者消费者模式
|
https://blog.csdn.net/u013343114/article/details/111224625 |
阻塞队列 | |||
5 | XML解析和正则表达式 | XML介绍 | |
XML解析 | |||
正则表达式 | |||
6 | 反射 | 反射机制 | |
类加载机制 | |||
反射的API | |||
获得Class的几种方式 | |||
反射调用构造器、方法和属性 | |||
反射实现JSON解析 | |||
7 | MySQL基础 | MySQL的安装 | https://blog.csdn.net/u013343114/article/details/110475540 |
建库建表操作 | https://blog.csdn.net/u013343114/article/details/110483099 | ||
DML | |||
8 | MySQL基本查询 | select语句 | https://blog.csdn.net/u013343114/article/details/110486364 |
where子句 | |||
in\between\like子句 | |||
order by 排序 | |||
limit分页 | |||
9 | MySQL高级查询 | 外键约束 | https://blog.csdn.net/u013343114/article/details/110489588 |
内连接 | |||
外连接 | |||
子查询 | |||
行转列 | https://blog.csdn.net/u013343114/article/details/110490204 | ||
10 | MySQL索引、视图、存储过程 | 索引的作用 | https://blog.csdn.net/u013343114/article/details/110640134 |
索引的原理和数据结构 | |||
视图 | https://blog.csdn.net/u013343114/article/details/110648385 | ||
存储过程 | https://blog.csdn.net/u013343114/article/details/110649447 | ||
11 | JDBC基础 | JDBC简介 | |
JDBC API介绍
|
|||
实现基本的CRUD
|
|||
12 | JDBC高级 |
批处理
|
|
数据库连接池 | |||
反射编写数据库工具类
|
|||
13 | 项目实战:学生管理系统 | MySQL+JDBC实现用户登录和学生的CRUD |
第三阶段 JavaWeb |
|||
序号 | 课程名称 | 内容简介 | 博客地址 |
1 | html | HTML简介 | |
HTML基本结构
|
|||
HTML基本标签
|
|||
表单
|
|||
表格 | |||
内嵌框架 | |||
2 | css | CSS简介 | |
CSS的语法
|
|||
CSS的选择器
|
|||
CSS的分类
|
|||
CSS基本属性
|
|||
盒子模型
|
|||
DIV+CSS布局
|
|||
3 | javascript | JS基本语法 | |
DOM编程
|
|||
函数和事件处理
|
|||
表单验证
|
|||
正则表达式
|
|||
常用类:Date、Math、String、Array | |||
JS中的对象
|
|||
BOM编程
|
|||
6 | Tomcat | BS和CS结构 | |
主流服务器介绍
|
|||
Tomcat的安装和配置
|
|||
HTTP协议 | |||
GET和POST的区别
|
|||
手写简单的服务器 | |||
7 | Servlet | Servlet介绍 | |
Servlet的定义
|
|||
Servlet的配置
|
|||
Servlet的生命周期
|
|||
Servlet的方法参数
|
|||
中文乱码的处理
|
|||
Servlet线程安全
|
|||
8 | JSP | JSP的介绍 | |
JSP的原理
|
|||
JSP的指令
|
|||
JSP的内置对象
|
|||
页面跳转的方法
|
|||
EL表达式 | |||
JSTL标签
|
|||
9 | 上传下载 | 文件上传 | |
文件下载
|
|||
10 | 会话跟踪 | Cookie机制 | |
Cookie的使用 | |||
Session原理 | |||
Session的使用 | |||
11 | 过滤器/监听器 | 过滤器原理 | |
过滤器生命周期 | |||
过滤器链 | |||
过滤器实现登录验证 | |||
监听器原理 | |||
监听器的使用 | |||
监听在线用户 | |||
12 | JQuery | Jquery选择器 | |
Jquery常用方法 | |||
事件处理
|
|||
动画
|
|||
13 | Ajax | Ajax原理 | |
XMLHttpRequest
|
|||
JQuery的Ajax | |||
Ajax实现用户名重复验证 | |||
14 | 项目实战:酒店管理系统 | B/S架构实现酒店管理后台与前端 |
第四阶段 JavaEE框架 |
|||
序号 | 课程名称 | 内容简介 | 博客地址 |
1 | Maven | Maven介绍 | https://blog.csdn.net/u013343114/article/details/111193714 |
什么是Maven | |||
Maven的安装 | |||
Maven的仓库 | |||
Maven仓库的分类 | |||
Maven的配置 | |||
在IDEA配置Maven | |||
Maven项目的结构 | |||
POM文件介绍 | |||
依赖管理 | |||
项目生命周期管理 | |||
继承和聚合 | |||
依赖冲突的调解 | |||
2 | Git | 版本控制 | https://blog.csdn.net/u013343114/article/details/110927058 |
GIT的特点 | |||
GIT的工作流程 | |||
GIT使用方法 | |||
IDEA中配置GIT | |||
3 | Spring IOC | Spring框架简介 | https://blog.csdn.net/u013343114/article/details/111194463 |
Spring框架的组件
|
|||
IOC概念
|
|||
Spring IOC的XML的实现
|
|||
Spring IOC的注解的实现
|
|||
使用反射+注解实现IOC
|
|||
IOC源码解析 | https://blog.csdn.net/u013343114/article/details/111195142 | ||
4 | Spring AOP | AOP的相关概念 | https://blog.csdn.net/u013343114/article/details/111194829 |
AOP在Spring中的实现
|
|||
注解配置
|
|||
AOP在项目中的应用
|
|||
AOP实现日志收集
|
|||
SpringAOP的实现原理 | https://blog.csdn.net/u013343114/article/details/111194967 | ||
静态代理
|
|||
JDK动态代理 | |||
Cglib动态代理 | |||
AOP源码解析 | https://blog.csdn.net/u013343114/article/details/111221758 | ||
5 | SpringMVC基础 | MVC设计模式 | https://blog.csdn.net/u013343114/article/details/111466886 |
MVC的执行流程 | |||
Struts2.0和SpringMVC的区别 | |||
SpringMVC执行流程 | |||
入门案例 | |||
处理参数 | |||
处理返回数据 | |||
SpringMVC的常用注解 | |||
页面跳转 | |||
简单的登录案例 | |||
6 | SpringMVC高级 |
拦截器概念
|
https://blog.csdn.net/u013343114/article/details/111467099 |
拦截器的使用 | |||
文件上传 | |||
文件下载 | |||
前后端分离 | |||
RestFul | |||
RESTFul风格的API | |||
7 | MyBatis基础 | MyBatis简介 | https://blog.csdn.net/u013343114/article/details/111467193 |
什么是ORM | |||
MyBatis和Hibernate的区别 | |||
MyBatis的基本使用 | |||
MyBatis的查询 | |||
8 | MyBatis高级 | 动态SQL | https://blog.csdn.net/u013343114/article/details/111467277 |
if/where/set/trim/foreach标签 | |||
关联查询 | |||
collection实现一对多关联 | |||
association实现一对一关联 | |||
延迟加载 | |||
MyBatis两级缓存机制 | |||
MyBatis源码解析 | https://blog.csdn.net/u013343114/article/details/111245302 | ||
手敲MyBatis | https://blog.csdn.net/u013343114/article/details/111245615 | ||
9 | SpringBoot | SpringBoot简介 | |
SpringBoot创建项目
|
|||
SpringBoot的配置
|
|||
SpringBoot整合MVC
|
|||
SpringBoot整合MyBatis
|
|||
SpringBoot配置拦截器 | |||
SpringBoot的配置原理 | |||
10 | Shiro | RBAC权限管理 | https://blog.csdn.net/u013343114/article/details/111592137 |
Shiro介绍 | |||
Shiro入门 | |||
自定义Realm | |||
密码加密加盐 | |||
SpringBoot+MyBatis+Shiro整合 | |||
RememberMe | |||
11 | Linux | Linux的安装 | https://blog.csdn.net/u013343114/article/details/110430568 |
Linux的常用命令 | https://blog.csdn.net/u013343114/article/details/110431842 | ||
Linux的网络配置 | https://blog.csdn.net/u013343114/article/details/110432336 | ||
JDK和Tomcat的安装 | https://blog.csdn.net/u013343114/article/details/110433299 | ||
MySQL的安装 | https://blog.csdn.net/u013343114/article/details/110434127 | ||
12 | Nginx | Nginx能做什么 | https://blog.csdn.net/u013343114/article/details/112170264 |
正向/反向代理 | |||
Nginx的安装 | |||
Nginx+Vsftp搭建文件服务器 | |||
负载均衡概念 | |||
Nginx负载均衡 | |||
13 | Docker | 为什么要使用Docker | https://blog.csdn.net/u013343114/article/details/112170627
https://blog.csdn.net/u013343114/article/details/112179420 |
容器化 | |||
虚拟机和容器 | |||
Docker的架构 | |||
安装Docker | |||
Docker的基本使用 | |||
Docker安装MySQL | |||
在Docker上部署Springboot项目 | |||
14 | Jenkins | 持续集成/持续交付/持续部署 | https://blog.csdn.net/u013343114/article/details/111841377 |
Jenkins安装 | |||
Jenkins的配置 | https://blog.csdn.net/u013343114/article/details/111868141 | ||
Webhook配置 | |||
Jenkins自动部署SpringBoot项目 | |||
15 | 项目实战:OA项目 | 前后端分离架构SpringBoot+Vue+ElementUI | https://edu.csdn.net/course/detail/31433 |
第五阶段 分布式 |
|||
序号 | 课程名称 | 内容简介 | 博客地址 |
1 | SpringCloud Eureka | 为什么使用微服务 | https://edu.csdn.net/course/detail/31451 |
为什么使用注册中心
|
|||
Eureka注册中心使用
|
|||
Eureka的自我保护机制
|
|||
Eureka的安全配置
|
|||
Eureka的集群配置
|
|||
2 | SpringCloud Ribbon | 负载均衡 | |
服务器端负载均衡和客户端负载均衡
|
|||
Ribbon负载均衡策略
|
|||
RestTemplate的用法
|
|||
3 | SpringCloud Hystrix | 服务可用性 | |
服务雪崩问题
|
|||
Hystrix的使用
|
|||
Hystrix的隔离模式
|
|||
4 | SpringCloud Feign | Feign是什么 | |
Feign怎么用
|
|||
Feign处理各种参数
|
|||
Feign原理
|
|||
Feign优化
|
|||
5 | SpringCloud Zuul | 服务网关的作用 | |
Zuul介绍
|
|||
Zuul的基本使用
|
|||
Zuul的路由规则
|
|||
Zuul的过滤器
|
|||
Zuul限流
|
|||
Zuul超时优化
|
|||
6 | SpringCloud Config | Config的介绍 | |
Config的基本使用
|
|||
动态更新配置
|
|||
7 | Elasticsearch | Elasticsearch介绍 | |
Elasticsearch的安装 | |||
Kibana安装 | |||
安装分词器 | |||
SprngBoot整合Elasticsearch | |||
ElasticsearchRepository操作索引 | |||
查询操作 | |||
8 | RabbitMQ | 消息队列 | |
消息队列的优缺点 | |||
主流的消息队列 | |||
RabbitMQ的安装 | |||
RabbitMQ的几种消息队列模式 | |||
SpringBoot整合RabbitMQ | |||
9 | Redis | Redis简介 | |
Redis安装和使用
|
|||
Redis的数据类型
|
|||
事务
|
|||
SpringBoot整合Redis
|
|||
声明式缓存 | |||
缓存穿透、击穿、雪崩 | |||
淘汰策略 | |||
持久化策略 | |||
10 | 微信支付 | 支付流程 | |
实现微信支付接入
|
|||
微信平台通知后台 | |||
11 | JWT单点登录 | RSA加密算法 | |
JWT | |||
单点登录实现流程 | |||
解决cookie写入失败的问题 | |||
15 | 项目实战:微服务电商项目 | SpringBoot+SpringCloud+RabbitMQ+ES+Redis |