大纲
写在开头
首先呢,我们要了解 Java 的应用场景和就业方向,看看和自己的学习目的是否一致。
目前,Java 由于其优秀的特性以及火爆的生态,岗位需求量大,是后台开发、安卓开发、大数据开发的主流编程语言,因此学习资源也很丰富,值得学习!
阶段 0:前期准备
-
准备好一款在线、随时随地写代码的工具,不用在本地去安装和配置,是初学者的好帮手。推荐使用我们自研的代码小抄:https://codecopy.cn/
-
准备一款记笔记的软件,学编程的过程中老师的思路、自己遇到的问题、解决问题的方法、心得感悟、遇到的好资料,都要记下来哦,好记性不如烂笔头,可以帮助你事半功倍。
-
想学好编程,别背代码,要多写,把这句话刻到脑子里。
-
选视频和找资料的小技巧:多看评论区、多看隔壁评论区、不要看过期的视频。
阶段 1:Java 入门
目标
培养兴趣、快速上手,能运行和编写简单的 Java 程序。
学完本阶段后,可以试着用 Java 解决一些数学计算问题、编写图书管理系统等桌面端 GUI 程序,甚至是五子棋之类的小游戏。
Java 编程基础
知识
-
Java 特点(看不懂没事,别背!)
-
环境搭建
-
IDEA 开发工具
-
Java 基础语法
-
数据类型
-
流程控制
-
-
数组
-
面向对象
-
抽象类
-
接口
-
枚举
-
常用内置类
-
集合类
-
泛型
-
注解
-
异常处理
-
多线程
-
IO 流
-
反射
学习建议
初学一门语言时,一定要持续学习,不能中断!
想要学好编程,一定要多敲代码!建议先跟着书上的例子敲一遍代码,然后试着自主编写代码,并完成课后练习。
不理解代码也没关系,可以学习 Debug 后,一行一行地打断点执行,查看程序的执行过程。千万不要觉得麻烦,养成习惯后真的能节省很多重复学习的时间。
在自学 Java 基础的过程中,可能会感觉很难,这是完全正常的,先易后难嘛。这个阶段除了学基础之外,也要试着多了解一些自学编程的方法和套路,建议有机会多和别人交流、或者能找个大佬给你指明一些方向,可以节约很多的时间。
Java 8
知识
-
Stream API
-
Lambda 表达式
-
新日期时间 API
-
接口默认方法
学习建议
Java 8 是如今企业开发中最主流的 Java 稳定版本,在这个版本出现了很多实用的新特性,虽然面试考点不多,但能够提升编程效率,建议学习。
尾声
学完了 Java 基础后,有些同学会感到迷茫了啊,感觉好像啥也做不出来,不知道下一步做什么,我这一身的本领该如何施展啊?
不要慌,也不要急着去学新技术,接下来我们要多用 Java 来写代码了,巩固基础,但是写什么呢?
当然是数据结构和算法!
阶段 2:巩固基础
目标
想学好编程,计算机基础知识要学好。
比如算法,是程序员的灵魂。学好算法有助于我们理解程序、开拓思路,因此也是很多公司面试时考察的关键,在找工作前,还是要刷个上百道算法题目的。
我们这个阶段的目标是:熟练使用 Java 语言来编写程序,巩固 Java 基础。(那直接用 Java 来写算法题目,一举两得,岂不美哉?)
此外,建议大家利用零碎时间多去了解 计算机基础知识 ,比如操作系统、计算机网络等,对你后面学习开发框架之类的知识都有帮助。
Java 基础
学习建议
建议大家去阅读 《Java 核心技术卷 1》,这本书堪称经典,是帮助你复习巩固 Java 的不二之选,其中 “图形界面” 章节完全不需要看。
如果你时间不够,只是想快速找到工作,那么本章节甚至可以完全跳过,后面慢慢弥补即可。
🌖 数据结构与算法
学习建议
推荐阅读鱼皮的算法学习路线:https://codefather.cn
学算法一定要多思考、多练习!!!
在复习 Java、巩固基础的过程中,每天可以坚持用 Java 做 2 - 3 道算法题目。
不用担心看不懂,直接进入 LeetCode 学习板块 LeetBook,提供了免费的教程,文字、图解、动画讲算法、在线练习应有尽有,从 0 开始,跟着学习基础知识、跟着教程刷一些同类题目,培养算法思路。
之后再由简单到复杂、由通过率高到低,自主刷题,多看题解,举一反三。一定要把自己做过的每道题目代码都自行保存好,定期复习。时间足够的话,也可以试着自己写写题解,在网上分享一下自己的刷题思路,找到自己坚持的动力。
有条件的朋友也可以试着参与竞赛,没什么门槛,可以帮助你集中精神,而且周赛的题目还是挺友好的~
计算机导论(可不学)
知识
-
计算机发展历史
-
计算机应用领域
-
计算机发展方向
-
计算机基本组成
-
二进制
-
编程语言发展
学习建议
大学计算机专业的同学一般刚开学就会上这门课,虽说学习它并不会直接提高你的编程技能,但能够让你更了解计算机和编程,从而在一定程度上帮助你培养学习兴趣、确定学习方向。
自学的话,不用刻意去学习计算机导论,而是可以通过看视频、阅读课外读物的方式慢慢地了解计算机的故事。
操作系统
知识
-
操作系统的组成
-
进程、线程
-
进程 / 线程间通讯方式
-
进程调度算法
-
进程 / 线程同步方式
-
进程 / 线程状态
-
死锁
-
内存管理
-
局部性原理
学习建议
说实话,操作系统这一块知识挺枯燥的。你说说我现在项目都不会做,你又让我看这些理论,是不是想让我头秃?
我的建议是,可以先利用课余时间看一些网课或者有趣的课外书,对一些操作系统的概念先有个大致的印象,比如进程、线程、死锁,等后面有时间了再系统学习、等到找工作了再去背相关八股文。
还在校园就跟着学校的进度学习就成,自学的话可以看下《清华操作系统原理》视频,有实力的小伙伴,能看懂大黑书就更好了,但如果看不懂也别担心,这并不影响你后续知识的学习。
计算机网络
知识
-
网络分层模型
-
网络传输过程
-
IP、端口
-
HTTP / HTTPS 协议
-
UDP / TCP 协议
-
ARP 地址解析协议
-
网络安全
-
DNS 域名解析
学习建议
很多学习 Java 开发的同学最后都是从事 后端开发 的工作,而计算机网络知识是后端开发的重点。
和操作系统一样,自学网络可能会很枯燥,建议先看有趣的课外书,比如《图解 HTTP》;或者有趣的视频,比如《计算机网络微课堂》。后面要找工作面试前,再重点去背一些八股文就好了。还在学校的同学好好上课一般就没问题。
学习基础能帮助自己今后发展更稳定,且更容易接受新知识,所以请不要相信基础无用论。
尾声
巩固基础要花至少 1 个月的时间,当你读完《Java 核心技术卷1》并且不用查询文档也能熟练地用 Java 做题时,就可以接着往下了。
阶段 3:Java 企业开发基础
目标
面向薪资编程,学习实际后台开发工作要用的基础技术和框架,并能 独立 做出一个具有完整功能的 Java Web 项目。
学完这个阶段后,你应该已经能独立开发出大多数常见的后台系统了,比如各种管理系统、商城系统等。
MySQL 数据库
企业中大部分业务数据都是用关系型数据库存储的,因此数据库是后台开发同学的必备技能,其中 MySQL 数据库是目前的主流,也是面试时的重点。
知识
-
基本概念
-
MySQL 搭建
-
SQL 语句编写
-
约束
-
索引
-
事务
-
锁机制
-
设计数据库表
-
性能优化
学习建议
其中,SQL 语句编写 和 设计数据库表 这两个能力一定要有!
比如让你做一个学生管理系统,你要能想到需要哪些表,比如学生表、班级表;每个表需要哪些字段、字段类型。
这就要求大家多写 SQL、多根据实际的业务场景去练习设计能力。
推荐使用鱼皮本人开发的 SQL 闯关式自学网站入门 SQL:http://sqlmother.yupi.icu/
开发框架
Java 之所以能成为主流的企业开发语言,很大一部分原因是它完善的框架生态,用好框架,不仅能够大大提升开发效率,还能提高项目的稳定性、减少维护成本。
开发框架是后台开发工作中不可或缺的,也是面试考察的重点,一定要好好学!
不知道 Java 能做什么的朋友们,学完开发框架,就会有答案啦。
下面给大家推荐的都是企业中应用最多的主流开发框架,知识点比较零碎,就放在一起讲了。
知识
Java Web
-
描述:Java 网页应用开发基础
Spring 5
-
描述:Java 轻量级应用框架
-
IOC
-
AOP
-
事务
SpringMVC
-
描述:Java 轻量级 web 开发框架
-
什么是 MVC?
-
请求与响应
-
Restful API
-
拦截器
-
配置
-
执行过程
MyBatis
-
描述:数据访问框架,操作数据库进行增删改查等操作
-
增删改查
-
全局配置
-
动态 SQL
-
缓存
-
和其他框架的整合
-
逆向工程
MyBatis Plus
-
描述:Mybatis 的增强工具,能够简化开发、提高效率
-
引入
-
通用 CRUD
-
条件构造器
-
代码生成器
-
插件扩展
-
自定义全局操作
SpringBoot 2
-
描述:简化 Spring 应用的初始搭建以及开发过程,提高效率
-
常用注解
-
资源整合
-
高级特性
-
本地热部署
Spring Security
-
描述:Spring 的安全管理框架
-
用户认证
-
权限管理
-
相关技术:Shiro
Maven / Gradle
-
描述:项目管理工具
-
构建
-
依赖管理
-
插件
-
配置
-
子父工程
-
多模块打包构建
-
Nexus 私服搭建
学习建议
由于技术较多,且框架之间存在一定的联系,因此建议大家看同一系列的视频教程(尚硅谷、狂神说等等都可以),以保证学习内容的连续以及体验上的一致。
学这些技术的时候,千万不能懒 !一定要多记笔记,并且跟着老师写代码。原理部分不要太过纠结,先以能跟着敲出代码、写出可运行的项目为主,有些东西做出来也能帮助你更好地理解理论。
学习顺序挺重要的,建议按我推荐的顺序学,不要一上手就学 Spring Boot。只有先学习下自己整合框架的方法,才能帮你理解 SpringBoot 解决的问题,感受到它的方便和高效。
Maven / Gradle 当成工具用就好,面试基本不问,跟着框架教程去用就行了,急着找工作的话,先不用花太多时间去深入学。大厂面试问这个的也不多。
开发规范
开发不规范,同事两行泪。
开发规范是团队开发中必须遵守的,有利于提高项目的开发效率、降低维护成本。
知识
-
代码规范
-
代码风格
-
命名
-
其他规则
-
-
代码校验(CheckStyle)
-
提交规范
学习建议
有时间的话,简单过一遍大厂团队的代码规范手册就好了,以后做项目的时候能想起来的话就去使用,或者从书中、网上查规范文档,再去遵守。
项目做得多了,自然会养成好的习惯,不用刻意去记(毕竟每个团队规范也不完全相同,背了也没用)。也可以直接利用开发工具自带的一些代码检查插件,帮忙养成好的编码习惯。
资源
-
书籍 ⭐ 阿里巴巴 Java 开发手册:https://developer.aliyun.com/graph/java(搜索《Java开发手册》)
Git
此前大家可能听说过 GitHub,一流的代码开源托管平台。
Git 和它可不一样,是一个版本控制工具,可以更好地管理和共享项目代码,比如把自己的代码传到 GitHub 上、或者从远程下载。
无论自己做项目、还是团队开发,Git 都是现在不可或缺的神器。
知识
-
区分 Git 和 GitHub
-
工作区
-
分支
-
代码提交、推送、拉取、回退、重置
-
分支操作
-
代码合并、解决冲突
-
标签
-
cherry-pick
-
Git Flow
-
相关技术:SVN(比较老)
学习建议
每个命令跟着敲一遍,有个大致的印象,会用即可。
建议平时大家可以多把自己的代码使用 Git 命令上传到 GitHub 上,用的多了自然就熟悉了。
Linux
企业中的很多前后台项目都是部署在 Linux 服务器上的,因此很有必要熟悉 Linux 的操作和脚本的编写。
后面学微服务、学架构都是在多台服务器操作,如果你不熟悉 Linux,会有点吃力。
知识
-
Linux 系统安装
-
环境变量
-
文件管理
-
用户管理
-
内存管理
-
磁盘管理
-
进程管理
-
网络管理
-
软件包管理
-
服务管理
-
日志管理
-
Linux 内核
-
常用命令
-
常用环境搭建
-
Shell 脚本编程
-
VIM 的使用
学习建议
多动手实践,建议自己购买一台云服务器,并且在本地搭建 Linux 虚拟机环境。
一定要自己从 0 开始手敲命令安装软件、部署服务,熟悉整个项目的上线流程。
每个命令至少要跟着敲一遍,了解它们的作用,并通过自然地练习,熟悉常用的 Linux 命令。
记不住没关系,用文档查就行了。
先会用,再理解。一般面试问的 Linux 题目也不会很难,面试前去背一下八股文就没什么问题,感兴趣的话可以去看看 Linux 内核设计。
前端基础
虽然 Java 程序员面试时基本不会出现前端相关问题,但是在企业中,往往需要前后端程序员配合完成工作。会一些前端,不仅可以提高你们的协作效率,还能提高自己对整个项目的了解和掌控力,甚至能独立开发出一个完整项目!这点也是能给面试加分的。
知识
-
HTML
-
CSS
-
JavaScript
-
Ajax
-
-
Vue
学习建议
不需要学习太多的前端技术,熟悉下基础的前端三件套,了解前端是如何向后端发送请求来做数据交互的一般就够了。有时间的话可以学下 Vue ,是比较容易上手的主流前端开发框架,Vue + SpringBoot 还是很香的。
练手项目
首推鱼皮自己的保姆级实战项目系列:鱼皮原创实战项目,保姆级教程!
尾声
学完这个阶段的知识后,一定要再串起来回忆一遍,必须自己独立开发一个 Java Web 项目(量级可以不大,但你学过的技术尽可能地用上),能发布到 Linux 服务器上让其他小伙伴访问就更好了~
如果你只是对 Java 感兴趣、或者只是想试着自己开发后台,并不是想靠 Java 找工作的话,学到这里就可以了。可以把更多时间投入到你主方向的学习中。
但如果你是想找 Java 方向的工作,尤其是想进大厂的话,一定要继续努力,用心学习下个阶段的企业开发进阶知识。
阶段 4:Java 企业开发进阶
目标
学习更多企业级开发技术和编程思想,能够结合多种技术,独立开发出架构合理的完整系统,解决实际问题 。
要了解为什么需要这个技术?什么时候用这个技术?某个需求该用哪些技术?
当然,这个阶段的内容有些过于丰富,不是所有的东西都要学,大家可以根据自己的实际情况(时间),有选择地学习。
软件工程
急着找工作的同学可以先不学。
软件开发和管理的一些概念、原则、技术、方法、工具和经验。
知识
-
软件的本质
-
软件特性
-
软件过程
-
软件开发原则
-
软件过程模型
-
敏捷开发
-
软件开发模型
-
需求建模
-
软件设计
-
UML
-
体系结构设计
-
设计模式
-
软件质量管理
-
评审
-
软件质量保证
-
软件测试
-
软件配置管理
-
软件项目管理
-
软件项目估算
-
项目进度安排
-
风险管理
-
软件过程改进
-
成熟度模型
-
学习建议
大学软件专业的必修课,偏理论,能学到很多企业软件开发的方法,也是对软件开发同学综合能力的提升,有时间的话可以了解下。但对想要快速找工作的同学来说,忽略即可,面试基本不会问。
设计模式
设计模式是软件开发中解决一类问题的通用方法。
使用设计模式能让你写出更优雅、可维护的代码,也正因如此,很多框架源码都用到了设计模式,你不学很难看懂。
知识
-
创建型模式:对象实例化的模式,创建型模式用于解耦对象的实例化过程
-
单例模式
-
工厂方法模式
-
抽象工厂
-
建造者模式
-
原型模式
-
-
结构型模式:把类或对象结合在一起形成一个更大的结构
-
适配器模式
-
组合模式
-
装饰器模式
-
代理模式
-
享元模式
-
外观模式
-
桥接模式
-
-
行为型模式:类和对象如何交互,及划分责任和算法
-
迭代器模式
-
模板方法模式
-
策略模式
-
命令模式
-
状态模式
-
责任链模式
-
备忘录模式
-
观察者模式
-
访问者模式
-
中介者模式
-
解释器模式
-
学习建议
先理解概念,了解每个设计模式的特点和应用场景,再多加练习,运用到实际项目。
资源
-
书籍 ⭐《图解设计模式》(强烈推荐这本书,正是用 Java 语言实现,图多、有示例代码、有习题和答案,很不错)
缓存
缓存是高并发系统不可或缺的技术,可以提高系统的性能和并发,因此是后台开发必学的知识点,也是面试重点。
知识
-
什么是缓存?
-
本地缓存
-
Caffeine 库
-
-
多级缓存
-
Redis 分布式缓存
-
Spring Boot Redis Template
-
Redisson
-
数据类型
-
常用操作
-
Java 操作 Redis
-
主从模型搭建
-
哨兵集群搭建
-
日志持久化
-
-
缓存(Redis)应用场景
-
数据共享
-
单点登录
-
计数器
-
限流
-
点赞
-
实时排行榜
-
分布式锁
-
-
缓存常见问题
-
缓存雪崩
-
缓存击穿
-
缓存穿透
-
缓存更新一致性
-
-
相关技术:Memcached、Ehcache
学习建议
学会如何简单地使用缓存并不难,和数据库类似,无非就是调用 API 对数据进行增删改查。
因此,建议先能够独立使用它,了解缓存的应用场景;再学习如何在 Java 中操作缓存中间件,并尝试和项目相结合,提高系统的性能。
跟着视频教程实操一遍即可,可以等到面试前再去深入了解原理和高级特性。
消息队列
消息队列是用于传输和保存消息的容器,也是大型分布式系统中常用的技术,主要解决应用耦合、异步消息、流量削锋等问题。后台开发必学,也是面试重点。
知识
-
消息队列的作用
-
RabbitMQ 消息队列
-
生产消费模型
-
交换机模型
-
死信队列
-
延迟队列
-
消息持久化
-
Java 操作
-
集群搭建
-
-
相关技术:Kafka、ActiveMQ、TubeMQ、RocketMQ
学习建议
和缓存一样,学会如何使用消息队列并不难,无非就是调用 API 去生产、转发和消费消息。
因此,建议先能够独立使用它,了解消息队列的应用场景;再学习如何在 Java 中操作消息队列中间件,并尝试和项目相结合,感受消息队列带来的好处。
这里我建议初学者先学习 RabbitMQ,比 Kafka 要好理解一些。跟着视频教程实操一遍即可,可以等到面试前再去深入了解原理和高级特性。
Nginx
Nginx 是主流的、开源的、高性能的 HTTP 和反向代理 web 服务器,可以用于挂载网站、请求转发、负载均衡、网关路由等。前后端开发同学都需要学习,在后端开发的面试中有时会考到。
知识
-
Nginx 作用
-
正向代理
-
反向代理(负载均衡)
-
常用命令
-
配置
-
动静分离(网站部署)
-
集群搭建
-
相关技术:HAProxy、Apache
学习建议
Nginx 的基本使用非常简单,甚至不需要看任何的视频,跟着一篇文章就能够用它来提供网站访问能力、实现反向代理。
但是在企业中,Nginx 的使用往往没那么简单,作为负载均衡、请求转发的重要组件,往往需要针对实际场景去写一些特定的配置。因此建议有时间的话,实践下 Nginx 的配置方法,了解 Nginx 基本的设计思想,对今后自己设计系统时也有帮助。
Netty 网络编程
开源的 Java 网络编程框架,用于开发高性能(事件驱动、异步非阻塞)、高可靠的网络服务器和客户端程序。
很多网络框架和服务器程序都用到了 Netty 作为底层,学好 Netty 不仅可以让我们自己实现高性能服务器,也能更好地理解其他的框架应用、阅读源码。
知识
-
IO 模型(BIO / NIO)
-
Channel
-
Buffer
-
Seletor
-
Netty 模型
-
WebSocket 编程(动手做个聊天室)
-
相关技术:Vertx(比 Netty 简单多了,实在看不懂 Netty 也可以学习下这个)
学习建议
不同于之前学的 SSM 框架,Netty 还是需要一定学习成本的,一方面是国内资源太缺乏,另一方面很多重要的概念(比如 NIO)还是要多动手写代码调试才能理解。
还是建议先从视频入门,并且不建议在 Netty 上花太多时间,面试的时候一般也就考察一些 Netty 背后的思想(比如 NIO)而非框架本身的语法细节。
微服务
随着互联网的发展,项目越来越复杂,单机且庞大的巨石项目已无法满足开发、运维、并发、可靠性等需求。
因此,后台架构不断演进,可以将庞大的项目拆分成一个个职责明确、功能独立的细小模块,模块可以部署在多台服务器上,相互配合协作,提供完整的系统能力。
换言之,想做大型项目,这块儿一定要好好学!
知识
Dubbo
-
架构演进
-
RPC
-
Zookeeper
-
服务提供者
-
服务消费者
-
项目搭建
-
相关技术:DubboX(对 Dubbo 的扩展)
微服务
-
微服务概念
-
Spring Cloud 框架
-
子父工程
-
服务注册与发现
-
注册中心 Eureka、Zookeeper、Consul
-
Ribbon 负载均衡
-
Feign 服务调用
-
Hystrix 服务限流、降级、熔断
-
Resilience4j 服务容错
-
Gateway(Zuul)微服务网关
-
Config 分布式配置中心
-
分布式服务总线
-
Sleuth + Zipkin 分布式链路追踪
-
-
Spring Cloud Alibaba
-
Nacos 注册、配置中心
-
OpenFeign 服务调用
-
Sentinel 流控
-
Seata 分布式事务
-
接口管理
-
Swagger 接口文档
-
Postman 接口测试
-
相关技术:YApi、ShowDoc
学习建议
时间不急的话,建议先从 Dubbo 学起,对分布式、RPC、微服务有些基本的了解,再去食用 Spring Cloud 全家桶会更香。学完 Spring Cloud 全家桶后,再去学 Spring Cloud Alibaba 就很简单了。
这部分内容的学习,原理 + 实践都很重要,也不要被各种高大上的词汇唬住了,都是上层(应用层)的东西,基本没有什么算法,跟着视频教程学,其实还是很好理解的。
分布式相关知识非常多,但这里不用刻意去背,先通过视频教程实战使用一些微服务框架,也能对其中的概念有基本的了解。
大厂面试的时候很少问 Spring Cloud 框架的细节,更多的是微服务以及各组件的一些思想,比如网关的好处、消息总线的好处等。
容器
将应用和环境进行封装,相互隔离、独立部署、便于移植,提高安全性、提高开发和维护效率。
便于实现微服务、持续集成和交付。
知识
-
Docker
-
容器概念
-
镜像
-
部署服务
-
Dockerfile
-
Docker Compose
-
Docker Machine
-
Docker Swarm
-
多阶段构建
-
-
K8S(Kubernetes)
-
相关技术:Apache Mesos、Mesosphere
学习建议
业务上云是趋势,但是对于开发同学来说,会用 Docker / K8S 部署项目和服务就行。实际工作中,企业一般都有现成的平台直接用,面试考察的也不多,不用花太多时间。
CI / CD
持续集成 / 持续交付,贯穿整个研发到项目上线的过程,提高效率。
大公司一般都有自己的 CI / CD 平台。
知识
-
什么是 CI / CD
-
CI / CD 有什么好处
-
使用任一 CI / CD 平台
-
相关技术:Jenkins、GitLab、微信云托管
学习建议
了解它是什么,并且实战使用任一 CI / CD 平台,感受它和传统开发运维到底有什么不同,就足够了。其实很简单,不要花太多时间。
真正要自己去搭建的时候,跟着官方文档来就行。
尾声
看到这里,相信你已经感叹:编程语言一辈子学不完了!
但是,不用担心,通过对这么多知识点的学习,相信你已经有了一定的积累,也不知不觉地锻炼了自主学习能力、资源检索能力、代码阅读能力、问题解决能力,之后的学习会越来越轻松。
接下来,可以试着用你学到的技术来解决实际的问题,自主从 0 开始做一些项目,保持编程手感。
阶段 5:项目实战
目标
综合所学技术从 0 到 1 开发和上线一个全面、有特色的、可以写进简历的个人项目。
学习建议
其实在之前的框架学习视频中应该就做过几个项目了,但相对不够完整和体系化。
有想法的同学可以做任何自己想做的项目,推荐参加一些作品类竞赛,练手、拿奖、收获项目经历一举三得。
暂时没想法的朋友,建议先跟着专门带做项目的视频教程做 1 - 2 套 Java 完整项目,一定要从 0 到 1 自己手写!
有能力的朋友也可以试着用 GitHub 上的源码来学习啦~
做一个完整的项目的确很不容易,建议大家根据自己的 时间、兴趣 选择 较新的、有配套源码的 教程,保持耐心。
鱼皮就是针对后端必须的技术,设计实现了这些项目,带大家快速掌握。
阶段 6:Java 高级
目标
不满足于能做,而是通过更 深入 和 广泛 的学习,实现高质量的代码和更优秀的架构,培养解决问题的能力。
已经到了这个阶段,建议除了看完成的教程外,平时多自主搜索信息去学习,积少成多。比如遇到了一个不了解的名词,可以去网上搜一下,感兴趣的话再进行下一步的学习。
并发编程
对 Java 后端开发程序员来说,懂得如何利用有限的系统资源来提高系统的性能是很重要的,也是大厂面试考察的重点,因此并发编程(尤其是 Java 并发包的使用)这块的知识很重要。
把它放到高级,是因为在学并发编程前,需要有一定的编程经验、了解一定的操作系统知识。
知识
-
线程和进程
-
线程状态
-
并行和并发
-
同步和异步
-
Synchronized
-
Volatile 关键字
-
Lock 锁
-
死锁
-
可重入锁
-
线程安全
-
线程池
-
JUC 的使用
-
AQS
-
Fork Join
-
CAS
学习建议
并发编程入门不难,依然是 先学会使用 基础的 Java 并发包, 再通过大量地实践和测试,了解一些原理,才能真正掌握何时使用、如何更合理地使用并发编程。而不是张口闭口多线程,上天入地高并发。
JVM
想要深入理解 Java,探秘 Java 跨平台的奥秘,一定要了解 Java 底层的虚拟机技术。
了解虚拟机、掌握虚拟机性能调优方法,有助于你写出更高性能、资源占用更小的优质程序。
在学习 JVM 的过程中,也能学到很多精妙的设计,开拓思路。
知识
-
JVM 内存结构
-
JVM 生命周期
-
主流虚拟机
-
Java 代码执行流程
-
类加载
-
类加载器
-
类加载过程
-
双亲委派机制
-
-
垃圾回收
-
垃圾回收器
-
垃圾回收策略
-
垃圾回收算法
-
StopTheWorld
-
-
字节码
-
内存分配和回收
-
JVM 性能调优
-
性能分析方法
-
常用工具
-
参数设置
-
-
Java 探针
-
线上故障分析
学习建议
JVM 的知识略显枯燥,建议先看视频,有实操的地方一定要实操!自己多去分析。
第一遍不理解没有关系,可以再看书来巩固,想要真正学好,《深入理解 Java 虚拟机(第三版)》一定要读。
架构设计
分布式
-
分布式理论
-
CAP
-
BASE
-
-
分布式缓存
-
Redis
-
Memcached
-
Etcd
-
-
一致性算法
-
分布式事务
-
分布式 id 生成
-
分布式任务调度
-
分布式服务调用
-
分布式存储
-
分布式数据库
-
分布式文件系统
-
分布式协调工具
-
分布式监控
-
分布式消息队列
-
RabbitMQ
-
Kafka
-
Apache Pulsar
-
-
分布式日志收集 Elastic Stack
-
分布式搜索引擎 Elasticsearch
-
分布式链路追踪 Apache SkyWalking
-
分布式配置中心
-
Apollo
-
Nacos
-
高可用
-
限流
-
降级熔断
-
冷备
-
双机热备
-
同城双活
-
异地双活
-
异地多活
-
容灾备份
高并发
-
数据库
-
MyCat 中间件
-
Apache ShardingSphere 中间件
-
分库分表
-
读写分离
-
-
缓存
-
缓存雪崩
-
缓存击穿
-
缓存穿透
-
-
负载均衡
-
负载均衡算法
-
软硬件负载均衡(2、3、4、7 层)
-
服务网格
服务网格用来描述组成应用程序的微服务网络以及它们之间的交互。服务网格的规模和复杂性不断的增长,它将会变得越来越难以理解和管理,常见的需求包括服务发现、负载均衡、故障恢复、度量和监控等。
知识
-
Istio
-
Envoy(开源的边缘和服务代理)
DDD 领域驱动设计
将数据、业务流程抽象成容易理解的领域模型,通过用代码实现领域模型,来组成完整的业务系统。
知识
-
DDD 的优势
-
DDD 的适用场景
-
DDD 核心概念
-
DDD 实践
其他
-
Sidecar
-
Serverless
-
云原生
学习建议
架构设计的学习没有顶点,多看文章,思考每种设计的优缺点和适用场景,有机会的话在企业中实践即可。
还在学校、或者初入这行的同学切记,千万不要一味地去背诵架构设计的八股文。你可以背,但是这一块的知识只有结合具体的项目才有意义,所以要多做项目去实践设计的合理性,而不是什么设计都咔咔往系统里去怼。比如面试问到分布式事务,能结合自己项目中用分布式事务解决问题的经验去回答最好。
其他技术
-
热数据探测技术:京东 HotKey
-
数据库流水订阅:阿里 Canal
-
监控告警
-
应用安全
-
故障演练
-
流量回放
阶段 7:Java 求职
目标
找到好工作!
建议
-
尽早做规划,可以通过大厂招聘官网的岗位描述来了解岗位的要求
-
编写一份优秀的简历
-
多读面经,坚持刷算法
-
多参与面试,持续复盘总结
阶段 8:持续学习
目标
持续追求技术的深度和广度,培养自己的 核心竞争力 和 不可替代性 ,学无止境!
学习建议
到了这个阶段,一定要自主学习,自主搜索教程、多看书、多阅读技术博客、多实践。
可选的学习方向有:框架源码、计算机原理、各种中间件、分布式技术、系统架构设计、行业问题的解决方案、前沿技术(比如云原生、服务网格、GraalVM、ZGC)和其他技术(比如大数据)等等。