Java 学习路线

符号表

可以通过路‌线知识点前的表情字⁢符,根据自己的实际‌情况选择学习:

  • 🌕 所有同学必须学习!!!
  • 🌖 非常急着找工作,才可不学;目标大厂,必须学习!
  • 🌗 急着找工作的话,可不学;目标大厂,建议学习
  • 🌘 时间充足的话,再去学
  • ⭐ 表示推荐资源

前言

首先呢,我‌们要了解 Java⁢ 的应用场景和就业‌方向,看看和自己的学习目的是否一致。

目前,Java‌ 由于其优秀的特性以及火爆⁢的生态,岗位需求量大,是后‌台开发、安卓开发、大数据开发的主流编程语言,因此学习⁡资源也很丰富,值得学习!

阶段 1:编程语言基础

目标

培养兴趣、快速上手,能运行和编写简单的 Java 程序。

学完本阶段后‌,可以试着用 Java⁢ 解决一些数学计算问题‌、编写图书管理系统等桌面端 GUI 程序,甚⁡至是五子棋之类的小游戏。

🌕 Java 编程基础(45 天)

知识

  • Java 特点(看不懂没事,别背!)
  • 环境搭建
  • IDEA 开发工具
  • 新建项目
  • 运行调试
  • 界面配置
  • 插件管理
  • Java 基础语法 – 数据类型
  • 流程控制
  • 数组
  • 面向对象 – 方法
  • 重载
  • 封装
  • 继承
  • 多态
  • 抽象类
  • 接口
  • 枚举
  • 常用类
  • String
  • 日期时间
  • 集合类
  • 泛型
  • 注解
  • 异常处理
  • 多线程
  • IO 流
  • 反射

学习建议

1)坚持:初学一门语言时,一定要持续学习,不能中断!

2)实践:‌想要学好编程,一定要⁢多敲代码!建议先跟着‌书上的例子敲一遍代码,然后试着自主编写代⁡码,并完成课后练习。

3)万事开头难:‌不理解代码也没关系,可以学习 ⁢Debug 后,一行一行地打断‌点执行,查看程序的执行过程。千万不要觉得麻烦,养成习惯后真的⁡能节省很多重复学习的时间。

经典面试题

  1. 为什么重写 equals 还要重写 hashcode?
  2. == 和 equals 比较的区别
  3. 为啥有时会出现 4.0 – 3.6 = 0.40000001 这种现象?
  4. final 关键字的作用
  5. 介绍 Java 的集合类
  6. ArrayList 和 LinkedList 的区别

资源

🌖 Java 8(3 天)

知识

  • Stream API
  • Lambda 表达式
  • 新日期时间 API
  • 接口默认方法

学习建议

Java 8 ‌是如今企业开发中最主流的 ⁢Java 稳定版本,在这个‌版本出现了很多实用的新特性,虽然面试考点不多,但能够⁡提升编程效率,建议学习。

此外,很多‌同学不怎么在简历上写⁢自己会 Java 8‌,因此如果你把 Java 8 的知识点写⁡在简历上,会大大加分的。

经典面试题

  1. Java 8 有哪些新特性?
  2. HashMap 在 jdk 1.7 和 1.8 的区别?

资源

练手项目

尾声

学完了 Ja‌va 基础后,有些同学⁢会感到迷茫了啊,感觉好‌像啥也做不出来,不知道下一步做什么,我这一身⁡的本领该如何施展啊?

不要慌,也‌不要急着去学新技术⁢,接下来我们要多用‌ Java 来写代码了,巩固基础,但⁡是写什么呢?

当然是数据结构和算法!

阶段 2:巩固基础

注意!如果你时‌间不够(比如只有 6 个月⁢左右),只是想快速找到工作‌,那么本章节甚至可以完全跳过,先去学习开发框架做项目⁡,后面再慢慢弥补基础即可。

目标

想学好编程,计算机基础知识要学好。

比如算法,是‌程序员的灵魂。学好算法有⁢助于我们理解程序、开拓思‌路,因此也是很多公司面试时考察的关键,在找工作前⁡,还是要刷个上百道算法题目的。

我们这个阶段‌的目标是:熟练使用 Ja⁢va 语言来编写程序,巩‌固 Java 基础。(那直接用 Java 来写算⁡法题目,一举两得,岂不美哉?)

此外,建议大家利用零碎时间多去了解 计算机基础知识 ,比如操作系统、计算机网络等,对你后面学习开发框架之类的知识都有帮助。

Java 基础(30 天)

学习建议

建议大家去阅‌读 《Java 核心技术⁢卷 1》,这本书堪称经典‌,是帮助你复习巩固 Java 的不二之选,其中⁡图形界面章节可以选择不看。

之后可以刷网上免费的‌ Java 练习题,检验自己的水平,我当⁢时刷了两遍 1000 题(每天 30 题‌,1 个月也就刷完了,二刷会更快!)。虽然都是选择题,但能学到很多 Java 语⁡言的特性、避免写代码时容易犯的错误。

资源

🌖 数据结构与算法

请参考学习路线:https://www.code-nav.cn/course/1789189862986850306/section/1789191067892948993?type=#heading-0

🌘 计算机导论

详情请参考:计算机基础学习路线

知识

  • 计算机发展历史
  • 计算机应用领域
  • 计算机发展方向
  • 计算机基本组成
  • 二进制
  • 编程语言发展

学习建议

大学计算机专业的‌同学一般刚开学就会上这门课,虽⁢说学习它并不会直接提高你的编程‌技能,但能够让你更了解计算机和编程,从而在一定程度上帮助你培⁡养学习兴趣、确定学习方向。

自学的话,‌不用刻意去学习计算⁢机导论,而是可以通‌过看视频、阅读课外读物的方式慢慢地了⁡解计算机的故事。

资源

🌖 操作系统

详情请参考学习路线:操作系统学习路线

知识

  • 操作系统的组成
  • 进程、线程
  • 进程 / 线程间通讯方式
  • 进程调度算法
  • 进程 / 线程同步方式
  • 进程 / 线程状态
  • 死锁
  • 内存管理
  • 局部性原理

学习建议

说实话,操‌作系统这一块知识挺枯燥⁢的。你说说我现‌在项目都不会做,你又让我看这些理论,⁡是不是想让我头秃?

我的建议是,可以‌先利用课余时间看一些网课或者有趣⁢的课外书,对一些操作系统的概念先‌有个大致的印象,比如进程、线程、死锁,等后面有时间了再系统学习、⁡等到找工作了再去背相关八股文。

还在校园就跟着学‌校的进度学习就成,自学的话可以⁢看下《清华操作系统原理》视频,‌有实力的小伙伴,能看懂大黑书就更好了,但如果看不懂也别担心,⁡这并不影响你后续知识的学习。

经典面试题

  1. 什么是死锁?死锁产生的条件?
  2. 线程有哪几种状态?
  3. 有哪些进程调度算法?
  4. 什么是缓冲区溢出?

资源

  • 视频
  • 《清华操作系统原理》:https://www.bilibili.com/video/BV1uW411f72n
  • 书籍
  • 《编码》
  • 《30天自制操作系统》
  • 《现代操作系统》(难度较大,不推荐新手看)
  • 《深入理解计算机系统》(难度较大,不推荐新手看)
  • 《 自己动手写操作系统》(国产好书,网上可以下载)
  • 大学课件
  • 浙大操作系统:https://github.com/QSCTech/zju-icicles

🌖 计算机网络

详情请参考学习路线:计算机网络学习路线

知识

  • 网络分层模型
  • 网络传输过程
  • IP、端口
  • HTTP / HTTPS 协议
  • UDP / TCP 协议
  • ARP 地址解析协议
  • 网络安全
  • DNS 域名解析

学习建议

很多学习 Java 开发的同学最后都是从事 后端开发 的工作,而计算机网络知识是后端开发的重点。

和操作系统一样,自学‌网络可能会很枯燥,建议先看有趣的课外书,⁢比如《图解 HTTP》;或者有趣的视频,‌比如《计算机网络微课堂》。后面要找工作面试前,再重点去背一些八股文就好了。还在学⁡校的同学好好上课一般就没问题。

学习基础能‌帮助自己今后发展更⁢稳定,且更容易接受‌新知识,所以请不要相信基础无用论。

经典面试题

  1. 计算机网络各层有哪些协议?
  2. TCP 和 UDP 协议的区别?
  3. TCP 为什么需要三次握手和四次挥手?
  4. HTTP 和 HTTPS 协议的区别?

资源

尾声

巩固基础要花‌至少 1 个月的时间,当⁢你读完《Java 核心技‌术卷1》并且不用查询文档也能熟练地用 Java ⁡做题时,就可以接着往下了。

阶段 3:企业开发基础

目标

面向薪资编程,学习实际后台开发工作要用的基础技术和框架,并能 独立 做出一个具有完整功能的 Java Web 项目。

学完这个阶‌段后,你应该已经能⁢独立开发出大多数常‌见的后台系统了,比如各种管理系统、商⁡城系统等。

🌕 MySQL 数据库(7 天)

详情请参考学习路线:数据库学习路线

企业中大部分‌业务数据都是用关系型数据⁢库存储的,因此数据库是后‌台开发同学的必备技能,其中 MySQL 数据库是⁡目前的主流,也是面试时的重点。

知识

  • 基本概念
  • MySQL 搭建
  • SQL 语句编写
  • 约束
  • 索引
  • 事务
  • 锁机制
  • 设计数据库表
  • 性能优化

学习建议

其中, SQL 语句编写设计数据库表 这两个能力一定要有!

比如让你做‌一个学生管理系统,⁢你要能想到需要哪些‌表,比如学生表、班级表;每个表需要哪⁡些字段、字段类型。

这就要求大‌家多写 SQL、多⁢根据实际的业务场景‌去练习设计能力。

经典面试题

  1. MySQL 索引的最左原则
  2. InnoDB 和 MyIsam 引擎的区别?
  3. 有哪些优化数据库性能的方法?
  4. 如何定位慢查询?
  5. MySQL 支持行锁还是表锁?分别有哪些优缺点?

资源

🌕 开发框架(60 天)

Java 之所‌以能成为主流的企业开发语言⁢,很大一部分原因是它完善的‌框架生态,用好框架,不仅能够大大提升开发效率,还能提⁡高项目的稳定性、减少维护成本。

开发框架是‌后台开发工作中不可⁢或缺的,也是面试考‌察的重点,一定要好好学!

不知道 J‌ava 能做什么的⁢朋友们,学完开发框‌架,就会有答案啦。

下面给大家‌推荐的都是企业中应⁢用最多的主流开发框‌架,知识点比较零碎,就放在一起讲了。

知识

🌕 Java Web
  • 描述:Java 网页应用开发基础
  • 一丢丢前端基础
  • XML
  • JSON
  • Servlet
  • Filter
  • Listener
  • JSP
  • JSTL
  • Cookie
  • Session
🌕 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 当成工具用就⁢好,面试基本不问,跟着框架教‌程去用就行了,急着找工作的话,先不用花太多时间去深入学。⁡大厂面试问这个的也不多。

经典面试题

  1. Spring 的 IOC 和 AOP 是什么,有哪些优点?
  2. Spring 框架用到了哪些设计模式?
  3. 介绍 Spring Bean 的生命周期
  4. MyBatis 如何实现延迟加载?
  5. 介绍 MyBatis 的多级缓存机制

资源

已下资源分‌为两大类,希望快速⁢做出项目、快速就业‌的同学请看【速成视频】。

学习完框架后,即可跟着鱼皮的原创项目教程系列边学边做项目。用项目驱动学习,更快地掌握后端必学技术,并直接写在简历上:项目实战 – 鱼皮原创项目教程系列

🌘 开发规范(3 天)

开发不规范,同事两行泪。

开发规范是‌团队开发中必须遵守⁢的,有利于提高项目‌的开发效率、降低维护成本。

知识

  • 代码规范
  • 代码风格
  • 命名
  • 其他规则
  • 代码校验(CheckStyle)
  • 提交规范

学习建议

有时间的话,‌简单过一遍大厂团队的代⁢码规范手册就好了,以后‌做项目的时候能想起来的话就去使用,或者从书中⁡、网上查规范文档,再去遵守。

项目做得多了,自‌然会养成好的习惯,不用刻意去记⁢(毕竟每个团队规范也不完全相同‌,背了也没用)。也可以直接利用开发工具自带的一些代码检查插件⁡,帮忙养成好的编码习惯。

资源

🌕 Git(3 天)

详情请参考学习路线:Git & GitHub 学习路线

此前大家可能听说过 GitHub,一流的代码开源托管平台。

Git 和它‌可不一样,是一个版本控⁢制工具,可以更好地管理‌和共享项目代码,比如把自己的代码传到 Git⁡Hub 上、或者从远程下载。

无论自己做‌项目、还是团队开发⁢,Git 都是现在‌不可或缺的神器。

知识

  • 区分 Git 和 GitHub
  • 工作区
  • 分支
  • 代码提交、推送、拉取、回退、重置
  • 分支操作
  • 代码合并、解决冲突
  • 标签
  • cherry-pick
  • Git Flow
  • 相关技术:SVN(比较老)

学习建议

每个命令跟着敲一遍,有个大致的印象,会用即可。

建议平时大‌家可以多把自己的代⁢码使用 Git 命‌令上传到 GitHub 上,用的多了自然⁡就熟悉了。

经典面试题

  1. 如何解决提交冲突?
  2. 提交不小心出现误操作,如何撤销?
  3. 什么是 Git Flow,它有什么好处?

资源

🌖 Linux(10 天)

详情请参考学习路线:Linux 学习路线

企业中的很‌多前后台项目都是部⁢署在 Linux ‌服务器上的,因此很有必要熟悉 Lin⁡ux 的操作和脚本的编写。

后面学微服‌务、学架构都是在多⁢台服务器操作,如果‌你不熟悉 Linux,会有点吃力。

知识

  • Linux 系统安装
  • 环境变量
  • 文件管理
  • 用户管理
  • 内存管理
  • 磁盘管理
  • 进程管理
  • 网络管理
  • 软件包管理
  • 服务管理
  • 日志管理
  • Linux 内核
  • 常用命令
  • 常用环境搭建
  • Shell 脚本编程
  • VIM 的使用

学习建议

多动手实践‌,建议自己购买一台⁢云服务器,并且在本‌地搭建 Linux 虚拟机环境。

一定要自己从‌ 0 开始手敲命令安装软⁢件、部署服务,熟悉整个项‌目的上线流程。

每个命令至‌少要跟着敲一遍,了⁢解它们的作用,并通‌过自然地练习,熟悉常用的 Linu⁡x 命令。

记不住没关系,用文档查就行了。

先会用,再理解‌。一般面试问的 Lin⁢ux 题目也不会很难,面‌试前去背一下八股文就没什么问题,感兴趣的话可以去⁡看看 Linux 内核设计。

经典面试题

  1. 如何查看某个进程的运行状态?
  2. 如何在 Linux 上查看 2 G 的大文件?
  3. Linux 软链接和硬链接的区别

资源

🌘 前端基础(14 天)

详情请参考鱼皮原创的前端学习路线:https://mp.weixin.qq.com/s/HbzLEt6NOP9Is9F3GOnbUQ

虽然 Java 程序员‌面试时基本不会出现前端相关问题,但是在企业中⁢,往往需要前后端程序员配合完成工作。会一些前‌端,不仅可以提高你们的协作效率,还能提高自己对整个项目的了解和掌控力,甚至能独立开发出一⁡个完整项目!这点也是能给面试加分的。

知识

  • HTML
  • CSS
  • JavaScript
  • Ajax
  • Vue

学习建议

不需要学习太多的前端技术,熟悉下基础的前端三件套,了解前端是如何向后端发送请求来做数据交互的一般就够了。有时间的话可以学下 Vue ,是比较容易上手的主流前端开发框架,Vue + SpringBoot 还是很香的。

练手项目

推荐跟着鱼皮的原创项目教程系列边学边做项目,每个项目都是前端 + 后端的全栈项目。用项目驱动学习,更快掌握前端基础和后端必学技术,并直接写在简历上:项目实战 – 鱼皮原创项目教程系列

尾声

学完这个阶段的知识‌后,一定要再串起来回忆一遍,必须自己⁢独立开发一个 Java Web 项目‌(量级可以不大,但你学过的技术尽可能地用上),能发布到 Linux 服务⁡器上让其他小伙伴访问就更好了~

如果你只是对 ‌Java 感兴趣、或者只是想⁢试着自己开发后台,并不是想靠‌ Java 找工作的话,学到这里就可以了。可以把更多时间⁡投入到你主方向的学习中。

但如果你是‌想找 Java 方向⁢的工作,尤其是想进大‌厂的话,一定要继续努力,用心学习下个阶段⁡的企业开发进阶知识。

阶段 4:企业开发进阶

目标

学习更多企业级开发技术和编程思想,能够结合多种技术,独立开发出架构合理的完整系统, 解决实际问题

要了解为什‌么需要这个技术?什⁢么时候用这个技术?‌某个需求该用哪些技术?

当然,这个‌阶段的内容有些过于⁢丰富,不是所有的东‌西都要学,大家可以根据自己的实际情况⁡(时间),有选择地学习。

🌘 软件工程

详情请参考学习路线:软件工程学习路线

软件开发和管理的一些概念、原则、技术、方法、工具和经验。

知识

  • 软件的本质
  • 软件特性
  • 软件过程
  • 软件开发原则
  • 开闭原则
  • 里氏替换原则
  • 依赖倒置原则
  • 单一职责原则
  • 接口隔离原则
  • 迪米特法则
  • 软件过程模型
  • 敏捷开发
  • 软件开发模型
  • 需求建模
  • 软件设计
  • UML
  • 体系结构设计
  • 设计模式
  • 软件质量管理
  • 评审
  • 软件质量保证
  • 软件测试
  • 单元测试
  • 集成测试
  • 系统测试
  • 压力测试
  • 部署测试
  • 软件配置管理
  • 软件项目管理
  • 软件项目估算
  • 项目进度安排
  • 风险管理
  • 软件过程改进
  • 成熟度模型

学习建议

大学软件专业的必‌修课,偏理论,能学到很多企业软件⁢开发的方法,也是对软件开发同学综‌合能力的提升,有时间的话可以了解下。但对想要快速找工作的同学来说⁡,忽略即可,面试基本不会问。

资源

🌖 设计模式(21 天)

详情请参考学习路线:设计模式学习路线

设计模式是软件开发中解决一类问题的通用方法。

使用设计模‌式能让你写出更优雅⁢、可维护的代码,也‌正因如此,很多框架源码都用到了设计模⁡式,你不学很难看懂。

此外,鱼皮‌改了几百份简历,基⁢本上没有同学把设计‌模式写在项目经历中。因此学好设计模式⁡并写在简历上是很加分的!

知识

  • 创建型模式:对象实例化的模式,创建型模式用于解耦对象的实例化过程
  • 单例模式
  • 工厂方法模式
  • 抽象工厂
  • 建造者模式
  • 原型模式
  • 结构型模式:把类或对象结合在一起形成一个更大的结构
  • 适配器模式
  • 组合模式
  • 装饰器模式
  • 代理模式
  • 享元模式
  • 外观模式
  • 桥接模式
  • 行为型模式:类和对象如何交互,及划分责任和算法
  • 迭代器模式
  • 模板方法模式
  • 策略模式
  • 命令模式
  • 状态模式
  • 责任链模式
  • 备忘录模式
  • 观察者模式
  • 访问者模式
  • 中介者模式
  • 解释器模式

学习建议

先理解概念‌,了解每个设计模式⁢的特点和应用场景,‌再多加练习,运用到实际项目。

经典面试题

  1. 单例模式有哪些实现方式?有哪些优缺点?请手写其中一种
  2. 你用过哪些设计模式,为什么用它?

资源

🌕 Redis(14 天)

详情请参考学习路线:Redis 学习路线

缓存是高并发系‌统不可或缺的技术,可以提高⁢系统的性能和并发,而 Re‌dis 是实现缓存的最主流技术,因此它是后台开发必学⁡的知识点,也是面试重点。

知识

  • Redis 基础
  • 什么是缓存?
  • 本地缓存
  • Caffeine 库
  • 多级缓存
  • Redis 分布式缓存
  • 数据类型
  • 常用操作
  • Java 操作 Redis
    • Spring Boot Redis Template
    • Redisson
  • 主从模型搭建
  • 哨兵集群搭建
  • 日志持久化
  • 缓存(Redis)应用场景
  • 数据共享
  • 单点登录
  • 计数器
  • 限流
  • 点赞
  • 实时排行榜
  • 分布式锁
  • 缓存常见问题
  • 缓存雪崩
  • 缓存击穿
  • 缓存穿透
  • 缓存更新一致性
  • 相关技术:Memcached、Ehcache

学习建议

学会如何简‌单地使用缓存并不难⁢,和数据库类似,无‌非就是调用 API 对数据进行增删改⁡查。

因此,建议先‌能够独立使用它,了解缓⁢存的应用场景;再学习如‌何在 Java 中操作缓存中间件,并尝试和项⁡目相结合,提高系统的性能。

跟着视频教‌程实操一遍即可,可⁢以等到面试前再去深‌入了解原理和高级特性。

经典面试题

  1. Redis 为什么快?
  2. Redis 有哪些常用的数据结构?
  3. Redis RDB 和 AOF 持久化的区别,如何选择?
  4. 如何解决缓存击穿、缓存穿透、雪崩问题?
  5. 如何用 Redis 实现点赞功能,怎么设计 Key / Value?

资源

🌖 消息队列(14 天)

消息队列是用于‌传输和保存消息的容器,也是⁢大型分布式系统中常用的技术‌,主要解决应用耦合、异步消息、流量削锋等问题。后台开⁡发必学,也是面试重点。

知识

  • 消息队列的作用
  • RabbitMQ 消息队列
  • 生产消费模型
  • 交换机模型
  • 死信队列
  • 延迟队列
  • 消息持久化
  • Java 操作
  • 集群搭建
  • 相关技术:Kafka、ActiveMQ、TubeMQ、RocketMQ

学习建议

和缓存一样‌,学会如何使用消息⁢队列并不难,无非就‌是调用 API 去生产、转发和消费消⁡息。

因此,建议先能‌够独立使用它,了解消息队列⁢的应用场景;再学习如何在 ‌Java 中操作消息队列中间件,并尝试和项目相结合,⁡感受消息队列带来的好处。

这里我建议初学‌者先学习 RabbitMQ⁢,比 Kafka 要好理解‌一些。跟着视频教程实操一遍即可,可以等到面试前再去深⁡入了解原理和高级特性。

经典面试题

  1. 使用消息队列有哪些优缺点?
  2. 如何保证消息消费的幂等性?
  3. 消息队列有哪些路由模型?
  4. 你是否用过消息队列,解决过什么问题?

资源

🌖 Nginx(14 天)

Nginx 学习路线

Nginx 是主流‌的、开源的、高性能的 HTTP 和⁢反向代理 web 服务器,可以用于‌挂载网站、请求转发、负载均衡、网关路由等。前后端开发同学都需要学习,⁡在后端开发的面试中有时会考到。

知识

  • Nginx 作用
  • 正向代理
  • 反向代理(负载均衡)
  • 常用命令
  • 配置
  • 动静分离(网站部署)
  • 集群搭建
  • 相关技术:HAProxy、Apache

学习建议

Nginx‌ 的基本使用非常简单⁢,甚至不需要看任何的‌视频,跟着一篇文章就能够用它来提供网站访⁡问能力、实现反向代理。

但是在企业中,Ngin‌x 的使用往往没那么简单,作为负载均衡、请求⁢转发的重要组件,往往需要针对实际场景去写一些‌特定的配置。因此建议有时间的话,实践下 Nginx 的配置方法,了解 Nginx 基本的⁡设计思想,对今后自己设计系统时也有帮助。

经典面试题

  1. Nginx 有哪些作用?
  2. Nginx 为什么支持高并发?
  3. Nginx 有哪些负载均衡策略?
  4. 什么是 Nginx 惊群问题,如何解决它?

资源

🌗 Netty 网络编程(21 天)

开源的 J‌ava 网络编程框⁢架,用于开发高性能‌(事件驱动、异步非阻塞)、高可靠的网⁡络服务器和客户端程序。

很多网络框架和‌服务器程序都用到了 Nett⁢y 作为底层,学好 Nett‌y 不仅可以让我们自己实现高性能服务器,也能更好地理解其⁡他的框架应用、阅读源码。

知识

  • IO 模型(BIO / NIO)
  • Channel
  • Buffer
  • Seletor
  • Netty 模型
  • WebSocket 编程(动手做个聊天室)
  • 相关技术:Vertx(中文文档:http://vertxchina.github.io/vertx-translation-chinese/ ,比 Netty 简单多了,实在看不懂 Netty 也可以学习下这个)

学习建议

不同于之前学的 ‌SSM 框架,Netty 还是⁢需要一定学习成本的,一方面是国‌内资源太缺乏,另一方面很多重要的概念(比如 NIO)还是要多⁡动手写代码调试才能理解。

还是建议先从视‌频入门,并且不建议在 Net⁢ty 上花太多时间,面试的时‌候一般也就考察一些 Netty 背后的思想(比如 NIO⁡)而非框架本身的语法细节。

经典面试题

  1. Netty 有哪些优点?
  2. 什么是 NIO?
  3. 介绍 Netty 的零拷贝机制

资源

🌖 微服务(60 天)

随着互联网‌的发展,项目越来越⁢复杂,单机且庞大的‌巨石项目已无法满足开发、运维、并发、可靠⁡性等需求。

因此,后台架构‌不断演进,可以将庞大的项目⁢拆分成一个个职责明确、功能‌独立的细小模块,模块可以部署在多台服务器上,相互配合⁡协作,提供完整的系统能力。

换言之,想做大型项目,这块儿一定要好好学!

知识

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 Cl‌oud 全家桶会更香。学完 Spring Cloud 全家桶后,再去学 Spring C⁡loud Alibaba 就很简单了。

这部分内容的学‌习,原理 + 实践都很重要,⁢也不要被各种高大上的词汇唬住‌了,都是上层(应用层)的东西,基本没有什么算法,跟着视频⁡教程学,其实还是很好理解的。

分布式相关‌知识非常多,但这里不⁢用刻意去背,先通过视‌频教程实战使用一些微服务框架,也能对其中⁡的概念有基本的了解。

大厂面试的时‌候很少问 Spring ⁢Cloud 框架的细节,‌更多的是微服务以及各组件的一些思想,比如网关的好⁡处、消息总线的好处等。

经典面试题

  1. 什么是微服务,有哪些优缺点?
  2. 什么是注册中心,能解决什么问题?

资源

🌖 容器(7 天)

将应用和环‌境进行封装,相互隔⁢离、独立部署、便于‌移植,提高安全性、提高开发和维护效率⁡。

便于实现微服务、持续集成和交付。

知识

  • 🌖 Docker
  • 容器概念
  • 镜像
  • 部署服务
  • Dockerfile
  • Docker Compose
  • Docker Machine
  • Docker Swarm
  • 多阶段构建
  • 🌘 K8S(Kubernetes)
  • K8S 架构
  • 工作负载
    • 资源类型
    • Pod
    • Pod 生命周期
    • Pod 安全策略
  • K8S 组件
  • K8S 对象
  • 部署应用
  • 服务
    • Ingress
  • Kubectl 命令行
  • 集群管理
  • 相关技术:Apache Mesos、Mesosphere

学习建议

业务上云是趋势,‌但是对于开发同学来说,会用 D⁢ocker / K8S 部署项‌目和服务就行。实际工作中,企业一般都有现成的平台直接用,面试⁡考察的也不多,不用花太多时间。

经典面试题

  1. 什么是容器?
  2. 使用 Docker 有哪些好处?
  3. 如何快速启动多个 Docker 节点?

资源

🌗 CI / CD(3 天)

持续集成 ‌/ 持续交付,贯穿⁢整个研发到项目上线‌的过程,提高效率。

大公司一般都有自己的 CI / CD 平台。

知识

  • 什么是 CI / CD
  • CI / CD 有什么好处
  • 使用任一 CI / CD 平台
  • 相关技术:Jenkins、GitLab、微信云托管

学习建议

了解它是什么‌,并且实战使用任一 C⁢I / CD 平台,感‌受它和传统开发运维到底有什么不同,就足够了。⁡其实很简单,不要花太多时间。

真正要自己去搭建的时候,跟着官方文档来就行。

资源

练手项目

学习完框架后,即可跟着鱼皮的原创项目教程系列边学边做项目。用项目驱动学习,更快地掌握后端必学技术,并直接写在简历上:项目实战 – 鱼皮原创项目教程系列

尾声

看到这里,相信你已经感叹:编程语言一辈子学不完了!

但是,不用担心,‌通过对这么多知识点的学习,相信⁢你已经有了一定的积累,也不知不‌觉地锻炼了自主学习能力、资源检索能力、代码阅读能力、问题解决⁡能力,之后的学习会越来越轻松。

接下来,可‌以试着用你学到的技⁢术来解决实际的问题‌,自主从 0 开始做一些项目,保持⁡编程手感。

阶段 5:项目实战

目标

综合所学技术从‌ 0 到 1 开发和上线一⁢个全面、有特色的、可以写进‌简历的个人项目。

学习建议

其实在之前‌的框架学习视频中应⁢该就做过几个项目了‌,但相对不够完整和体系化。

有想法的同‌学可以做任何自己想⁢做的项目,推荐参加‌一些作品类竞赛,练手、拿奖、收获项目经历⁡一举三得。

暂时没想法的‌朋友,建议先跟着专门带⁢做项目的视频教程做 1‌ – 2 套 Java 完整项目,一定要从 ⁡0 到 1 自己手写!

有能力的朋友也可以试着用 GitHub 上的源码来学习啦~

做一个完整的项目的确很不容易,建议大家根据自己的 时间、兴趣 选择 较新的有配套源码的 教程,保持耐心。

如何选择编程学习资源,可以看下我的原创文章:https://mp.weixin.qq.com/s/mlMql9RJCd7THt6rpGb8UA

下面推荐一‌些优质的、较新的项⁢目实战视频教程 +‌ 50 套项目源码。

视频教程

编程导航知识星球 内部分享:

  1. ⭐️ 鱼皮全程直播带做的保姆级全栈项目,带现成的简历写法和面试题:项目实战 – 鱼皮原创项目教程系列
  2. 项目训练营(寻爱网项目):学习从立项到上线的完整做项目流程 + 优化思路
  3. 从 0 到 1 开发用户中心:保姆级前后端完整项目教程,适合刚学完框架的新手
  4. 伙伴匹配系统:移动端网站,设计分布式和并发编程知识,适合已经做过一个小项目的同学练习
  5. Web 终端项目经验分享:前后端技术选型 + 系统设计 + 源码解读 + 简历亮点全面分享
  6. 面试刷题网站项目经验分享:从 0 到 1 分享数万用户网站的创作过程和经验分享
  7. 瑞吉外卖 – 外卖点餐系统:Java Spring Boot 入门级项目,适合刚学完框架的同学
  8. 尚医通 – 在线预约挂号平台:业务功能完整的 Java Spring Cloud 微服务项目,适合刚学完微服务的同学
  9. 硅谷课堂 – 在线学习平台:业务功能完整的 Java Spring Cloud 微服务项目,适合想学习第三方服务对接的同学
  10. 黑马点评 – 类似大众点评的移动 APP:专门为学习 Redis 定制的单体项目,适合刚学完 Spring Boot、想系统学习 Redis 的同学

公开:

常用类库

工具
测试
其他

IDEA 插件

综合实用性‌、易用性、流行度、⁢维护频率,精选了以‌下插件,简单分类为天地二品。

精选地品插件

简单好用、增强功能

精选天品插件

提高开发效率和代码质量

美化类

代码生成类

功能提效类

源码阅读
代码规范
格式处理
代码统计
代码检索
其他

扩展增强类

常用软件

开发相关
效率

项目源码(50 套)

鱼皮原创项目

电商秒杀

博客论坛

  • Mblog:开源 Java 博客系统
  • halo:一个优秀的开源博客发布应用
  • forum-java:一款用 Java(spring boot) 实现的现代化社区(论坛/问答/BBS/社交网络/博客)系统平台
  • vhr:微人事是一个前后端分离的人力资源管理系统,项目采用 SpringBoot+Vue 开发。
  • favorites-web:云收藏 Spring Boot 2.X 开源项目。云收藏是一个使用 Spring Boot 构建的开源网站,可以让用户在线随时随地收藏的一个网站,在网站上分类整理收藏的网站或者文章。
  • community:码问,开源论坛、问答系统,现有功能提问、回复、通知、最新、最热、消除零回复功能。技术栈 Spring、Spring Boot、MyBatis、MySQL/H2、Bootstrap
  • NiterForum:尼特社区-NiterForum-一个论坛/社区程序。后端Springboot/MyBatis/Maven/MySQL,前端Thymeleaf/Layui。可供初学者,学习、交流使用。
  • VBlog:V部落,Vue+SpringBoot实现的多用户博客管理平台!
  • NiceFish:SpringBoot/SpringCloud 前后端分离项目
  • My-Blog: My Blog 是由 SpringBoot + Mybatis + Thymeleaf 等技术实现的 Java 博客系统,页面美观、功能齐全、部署简单及完善的代码,一定会给使用者无与伦比的体验。
  • My-Blog-layui:layui 版本的 My-Blog : A simple & beautiful blogging system implemented with spring-boot & layui & thymeleaf & mybatis My Blog 是由 SpringBoot + Layui + Mybatis + Thymeleaf 等技术实现的 Java 博客系统,页面美观、功能齐全、部署简单及完善的代码,一定会给使用者无与伦比的体验
  • symphony:Java 实现的现代化社区

管理系统

  • Spring-Cloud-Admin:Cloud-Admin 是国内首个基于 Spring Cloud 微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关 API 管理等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。核心技术采用 Spring Boot2 以及 Spring Cloud Gateway 相关核心组件,前端采用 vue-element-admin 组件。
  • bootshiro:基于 springboot+shiro+jwt 的资源无状态认证权限管理系统后端
  • 悟空CRM:基于jfinal+vue+ElementUI的前后端分离CRM系统
  • EL-ADMIN:基于 SpringBoot 的后台管理系统
  • pig:基于 Spring Boot 2.2、 Spring Cloud Hoxton & Alibaba、 OAuth2 的 RBAC 权限管理系统。
  • FEBS-Shiro:Spring Boot 2.1.3,Shiro1.4.0 & Layui 2.5.4 权限管理系统。
  • Spring Boot-Shiro-Vue:基于Spring Boot-Shiro-Vue 的权限管理
  • studentmanager:基于springboot+mybatis学生管理系统
  • jshERP:华夏ERP基于SpringBoot框架和SaaS模式,立志为中小企业提供开源好用的ERP软件,目前专注进销存+财务功能。主要模块有零售管理、采购管理、销售管理、仓库管理、财务管理、报表查询、系统管理等。支持预付款、收入支出、仓库调拨、组装拆卸、订单等特色功能。拥有库存状况、出入库统计等报表。同时对角色和权限进行了细致全面控制,精确到每个按钮和菜单。
  • HotelSystem:酒店管理系统 Java,tomcat,mysql,servlet,jsp实现,没有使用任何框架

开发平台

  • open-capacity-platform:微服务能力开发平台
  • jeecg-boot:JeecgBoot是一款基于BPM的低代码平台!前后端分离架构 SpringBoot 2.x,SpringCloud,Ant Design&Vue,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发!

其他

阶段 6:Java 高级

目标

不满足于能做,而是通过更 深入广泛 的学习,实现高质量的代码和更优秀的架构,培养解决问题的能力。

已经到了这个阶‌段,建议除了看完成的教程外,⁢平时多自主搜索信息去学习,积少‌成多。比如遇到了一个不了解的名词,可以去网上搜一下,感⁡兴趣的话再进行下一步的学习。

🌖 并发编程(21 天)

对 Java 后‌端开发程序员来说,懂得如何利用有⁢限的系统资源来提高系统的性能是很‌重要的,也是大厂面试考察的重点,因此并发编程(尤其是 Java ⁡并发包的使用)这块的知识很重要。

把它放到高‌级,是因为在学并发⁢编程前,需要有一定‌的编程经验、了解一定的操作系统知识。

知识

  • 线程和进程
  • 线程状态
  • 并行和并发
  • 同步和异步
  • Synchronized
  • Volatile 关键字
  • Lock 锁
  • 死锁
  • 可重入锁
  • 线程安全
  • 线程池
  • JUC 的使用
  • AQS
  • Fork Join
  • CAS

学习建议

并发编程入门不难,依然是 先学会使用 基础的 Java 并发包, 再通过大量地实践和测试,了解一些原理,才能真正掌握何时使用、如何更合理地使用并发编程。而不是张口闭口多线程,上天入地高并发。

经典面试题

  1. volatile 关键字的作用
  2. 使用线程池有哪些好处?
  3. 线程池参数如何设置?
  4. 什么是线程安全问题,如何解决?
  5. 介绍 synchronized 的锁升级机制
  6. CopyOnWriteArrayList 适用于哪种场景?

资源

🌖 JVM(30 天)

想要深入理‌解 Java,探秘⁢ Java 跨平台‌的奥秘,一定要了解 Java 底层的虚⁡拟机技术。

了解虚拟机‌、掌握虚拟机性能调⁢优方法,有助于你写‌出更高性能、资源占用更小的优质程序。

在学习 J‌VM 的过程中,也⁢能学到很多精妙的设‌计,开拓思路。

知识

  • JVM 内存结构
  • JVM 生命周期
  • 主流虚拟机
  • Java 代码执行流程
  • 类加载
  • 类加载器
  • 类加载过程
  • 双亲委派机制
  • 垃圾回收
  • 垃圾回收器
  • 垃圾回收策略
  • 垃圾回收算法
  • StopTheWorld
  • 字节码
  • 内存分配和回收
  • JVM 性能调优
  • 性能分析方法
  • 常用工具
  • 参数设置
  • Java 探针
  • 线上故障分析

学习建议

JVM 的知识‌略显枯燥,建议先看视频,有⁢实操的地方一定要实操!自己多去‌分析。                     ⁡           

第一遍不理‌解没有关系,可以再⁢看书来巩固,想要真‌正学好,《深入理解 Java 虚拟机⁡(第三版)》一定要读。

如果只是为了通过面试可以直接看更精简的视频,比如狂神的。

经典面试题

  1. 介绍 JVM 的内存模型?
  2. JVM 内存为什么要分代?
  3. 介绍一次完整的 GC 流程
  4. 介绍双亲委派模型,为什么需要它?

资源

🌖 Java 高级知识

通过阅读文章了解即可

知识

架构设计

🌖 分布式

  • 分布式理论
  • CAP
  • BASE
  • 分布式缓存
  • Redis
  • Memcached
  • Etcd
  • 一致性算法
  • Raft
  • Paxos
  • 一致性哈希
  • 分布式事务
  • 解决方案
    • 2PC
    • 3PC
    • TCC
    • 本地消息表
    • MQ 事务消息
    • 最大努力通知
  • LCN 分布式事务框架:https://github.com/codingapi/tx-lcn
  • 分布式 id 生成
  • Leaf 分布式 id 生成服务:https://github.com/Meituan-Dianping/Leaf
  • 分布式任务调度
  • XXL-JOB 调度平台:https://www.xuxueli.com/xxl-job/
  • elastic-job:https://gitee.com/elasticjob/elastic-job
  • 分布式服务调用
  • trpc
  • 分布式存储
  • HDFS
  • Ceph
  • 分布式数据库
  • TiDB
  • OceanBase
  • 分布式文件系统
  • HDFS
  • 分布式协调
  • Zookeeper
  • 分布式监控
  • Prometheus
  • Zabbix
  • 分布式消息队列
  • RabbitMQ
  • Kafka
  • Apache Pulsar
  • 分布式日志收集
  • Elastic Stack
  • Loki
  • 分布式搜索引擎
  • 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 求职

目标

找到好工作

建议

  1. 尽早做规划,可以通过大厂招聘官网的岗位描述来了解岗位的要求
  2. 雕琢一份优秀的简历,推荐阅读:https://mp.weixin.qq.com/s/wfabzdpOPdq89faFFpZ4NA
  3. 多读面经,坚持刷算法
  4. 多参与面试,持续复盘总结

资源

校招岗位

社招岗位

实习

鱼皮经历

知识总结

面经

编程导航面经汇总:https://yuyuanweb.feishu.cn/wiki/PLHrwcEPCiJcxXk7Ki4csRoJn2f

面试题解

编程导航精选面试题汇总:https://yuyuanweb.feishu.cn/wiki/CmFywXs0Oi0MS9kU3yocJugFn2e

视频

阶段 8:持续学习

目标

持续追求技术的深度和广度,培养自己的 核心竞争力不可替代性 ,学无止境!

学习建议

自主学习,自主搜索教程,多看书,多阅读技术博客,多实践。

学习方向

框架源码

  • Spring
  • SpringBoot
  • SpringMVC
  • MyBatis
  • Netty
  • Dubbo
  • SpringCloud

计算机原理

数据库 / 中间件 / 分布式

  • 数据库
  • MySQL
  • PostgreSQL
  • 缓存
  • Redis
  • 队列
  • Apache Kafka
  • Apache Pulsar
  • 搜索引擎
  • Elastic Stack
    • Elasticsearch
    • logstash
    • kibana
    • beats
  • 容器
  • Docker
  • K8S

解决方案

  • 广告系统
  • 电商系统
  • 搜索系统
  • 支付转账
  • 游戏后台
  • 即时通讯
  • 社交系统
  • CMS 系统
  • ERP 系统
  • OA 系统
  • 代码生成
  • 权限管理
  • 秒杀活动

架构设计

同阶段 6 架构设计部分

大数据

  • 5V 特点
  • Hadoop
  • HDFS
  • MapReduce
  • Spark
  • Flink
  • Storm
  • Hive
  • HBase
  • Druid
  • Kylin
  • Pig
  • Mahout

前沿技术

自学 Java 专题资源

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇