288 lines
10 KiB
Markdown
288 lines
10 KiB
Markdown
# 精尽学习指南
|
||
|
||
> 艿艿:这是第一个版本,后续会继续优化。嘿嘿。
|
||
>
|
||
> 后面,艿艿会把每个学习资料给补充进去。
|
||
|
||
# 1. 概述
|
||
|
||
无论我们是工作多久的工程师,我们总是在某一刻会大呼“学不动了学不动了”。
|
||
|
||
并且,我们是无可避免需要有大量加班,比较好的是 985 ,比较苦逼的是 996 。一旦陷入其中,我们可能就忘却了学习这个事情。
|
||
|
||
另外,我们还会有一个困扰,技术栈这么多,我们应该怎么学习呢?
|
||
|
||
艿艿的想法是:
|
||
|
||
- 点
|
||
- 线
|
||
- 面
|
||
- 立体
|
||
|
||
什么是点?我们平时会在技术社区、公众号、博客上,学习一些技术,但是大家普遍会觉得比较琐碎。
|
||
|
||
什么是线?当我们学习了同一个技术的多个点之后,我们会逐渐形成这个知识线,对这个知识会相对有整体的认识。
|
||
|
||
什么是面?当我们学习了多个技术之后,我们会逐步自己的知识面,脑海里会有一颗若隐若现的知识树。
|
||
|
||
什么是立体?当我们形成自己的知识面之后,我们肯定会惊呼“老子会很多东西,但是好像没有什么擅长的”。有木有?哈哈哈。这个时候,我们需要针对自己感兴趣的技术栈,做深入的理解,慢慢形成某几个技术的深度,这样,我们就开始立体了。当然,一定是几个技术的深入,而不是方块,而是一个锥子,一锥刺骨的那种,杀手锏。
|
||
|
||
当然,本文暂时先对这个泛泛而谈,本文的重心在于如何先形成自己的**“点 -> 线 -> 面”**。我们先来看一个图:[](http://static.iocoder.cn/images/Learn/01.png)
|
||
|
||
- 一切的核心,都是为了实战。
|
||
- 入门,是为了让我们能够实战。
|
||
- 原理,是为了让我们更好的实战。
|
||
- 源码,是为了让我们更具象的理解原理,从而更好的实战。
|
||
- 所以,一切的核心,都是为了实战。
|
||
|
||
也因此,一个技术栈的学习的逐步顺序是:入门 => 实战 => 原理 => 源码。
|
||
|
||
那么,这个和本文又有什么关系呢?我们再来看一张图:
|
||
|
||
[](http://static.iocoder.cn/images/Learn/02.png)路线图
|
||
|
||
- 1、可能胖友会懵逼,卧槽,要学习的有这么多。
|
||
- 2、可能胖友会说,为什么没有 Dubbo、Zookeeper 等等
|
||
- 3、可能胖友会说,怎么没有 AI、大数据呢?
|
||
|
||
这个路线图,我们定位是让业务开发工程师,有一条相对明确的学习路线,最终实现搭建自己的知识体系。
|
||
|
||
# 2. 路线图
|
||
|
||
下面,我们来分块来看看路线图。
|
||
|
||
## 第一步,单体应用
|
||
|
||
第一步,我们先要学习,能够搭建一个最基本的单体应用。如下图所示:[](http://static.iocoder.cn/images/Learn/03.png)单体应用
|
||
|
||
在这个过程中,我建议观看视频。
|
||
|
||
- Java
|
||
|
||
> [《精尽 Java【基础】学习指南》](http://svip.iocoder.cn/Java/Core/tutorials/) 入门即可。
|
||
>
|
||
> 艿艿当前看的马士兵。
|
||
|
||
- Servlet & JSP & JDBC
|
||
|
||
> 这个的视频资源,自己找,艿艿当前看的马士兵。
|
||
|
||
- MySQL
|
||
|
||
> [《精尽 MySQL 学习指南》](http://svip.iocoder.cn/MySQL/tutorials/) 入门即可。
|
||
|
||
- MyBatis
|
||
|
||
> [《精尽 MyBatis 学习指南》](http://svip.iocoder.cn/MyBatis/tutorials/) 入门即可。
|
||
|
||
- Spring MVC
|
||
|
||
> [《精尽 Spring MVC 学习指南》](http://svip.iocoder.cn/Spring-MVC/tutorials/) 入门即可。
|
||
|
||
- Spring Boot
|
||
|
||
> [《精尽 Spring Boot 学习指南》](http://svip.iocoder.cn/Spring-Boot/tutorials/)
|
||
>
|
||
> 看看尚硅谷的《Spring Boot 视频教程》是不错的。
|
||
|
||
- Redis
|
||
|
||
> [《精尽 Redis 学习指南》](http://svip.iocoder.cn/Redis/tutorials/) 入门即可。
|
||
|
||
- MongoDB
|
||
|
||
> [《精尽 MongoDB 学习指南》](http://svip.iocoder.cn/MongoDB/tutorials/) 入门即可。
|
||
|
||
- Spring Security
|
||
|
||
> TODO 待补充
|
||
|
||
- Nginx
|
||
|
||
> [《精尽 Nginx 学习指南》](http://svip.iocoder.cn/Nginx/tutorials/) 入门即可。
|
||
|
||
在这一步中,我们需要对每个技术点只要达到“入门”和“实战”两点。
|
||
|
||
## 第二步,微服务架构
|
||
|
||
第二步,我们要再学习,能够搭建一个微服务架构的应用。如下图所示:[](http://static.iocoder.cn/images/Learn/04.png)微服务架构
|
||
|
||
在这个过程中,我建议以观看视频为主,同时能够认真看完 Spring Cloud 相关的书籍。
|
||
|
||
> 为什么要推荐开始看书?因为,到了这个阶段,我们要开始从被动的从视频学习,慢慢变成主动的观看书籍。
|
||
>
|
||
> [《精尽 Spring Cloud 学习指南》](http://svip.iocoder.cn/Spring-Cloud/tutorials)
|
||
>
|
||
> - 推荐的书籍是,翟永超的 [《Spring Cloud微服务实战》](https://union-click.jd.com/jdc?d=505Twi)
|
||
|
||
- Eureka
|
||
- Hystrix
|
||
- Zuul
|
||
- Spring Cloud Config
|
||
- RabbitMQ
|
||
- Zipkin
|
||
|
||
那么,可能对微服务技术选型有一定的了解会问,为什么不是学习 Dubbo 呢?注意噢,我们是为了搭建知识体系,从这方面上来说,艿艿觉得 Spring Cloud 更适合达成这个目标,周边的书籍、资料更加完善。
|
||
|
||
当然,等未来回过头,艿艿还是建议大家去学习下 Dubbo 。
|
||
|
||
在这一步中,我们需要对每个技术点只要达到“入门”和“实战”和“原理”三点。
|
||
|
||
还有啊,其实每个类型的组件,还有其他的选择,胖友后续也要去学习下:
|
||
|
||
- Eureka *VS* Zookeeper
|
||
|
||
> TODO 待补充
|
||
|
||
- Hystrix *VS* Sentinel
|
||
|
||
> TODO 待补充
|
||
|
||
- Zuul *VS* Spring Cloud Gateway
|
||
|
||
> TODO 待补充
|
||
|
||
- Spring Cloud Config *VS* Apollo
|
||
|
||
> TODO 待补充
|
||
|
||
- RabbitMQ *VS* RocketMQ VS Kafka
|
||
|
||
> - [《精尽 RocketMQ 学习指南》](http://svip.iocoder.cn/RocketMQ/tutorials/)
|
||
> - [《精尽 Kafka 学习指南》](http://svip.iocoder.cn/Kafka/tutorials/)
|
||
> - [《精尽 RabbitMQ 学习指南》](http://svip.iocoder.cn/RabbitMQ/tutorials/)
|
||
|
||
- Zipkin *VS* SkyWalking
|
||
|
||
> TODO 待补充
|
||
|
||
不要慌,知识这个东西,总是一通百通的。
|
||
|
||
还有噢,到了这个阶段的学习,我们要关注每个组件怎么实现高性能,怎么实现高可用。
|
||
|
||
## 第三步,其它中间件
|
||
|
||
第三步,我们还要学习,微服务架构需要的其他中间件。如下图所示:[](http://static.iocoder.cn/images/Learn/05.png)其它中间件
|
||
|
||
在这个过程中,我建议以看书、看博客为主,以视频为辅助。
|
||
|
||
> 为什么不再以视频为主呢?我们要能够更加更加更加主动的学习能力。
|
||
|
||
- Quartz 或者 Elastic-Job 或者 XXL-Job
|
||
|
||
> TODO 待补充
|
||
|
||
- Elasticsearch
|
||
|
||
> TODO 待补充
|
||
|
||
- Sharding Sphere
|
||
|
||
> TODO 待补充
|
||
|
||
- TCC Transaction
|
||
|
||
> TODO 待补充
|
||
|
||
- ELK
|
||
|
||
> TODO 待补充
|
||
|
||
在这一步中,我们需要对每个技术点只要达到“入门”和“实战”和“原理”三点。
|
||
|
||
也就是说,在这一步中,我们已经不能简单的只会实战,要对原理有一定的认知。
|
||
|
||
## 关于工具
|
||
|
||
[](http://static.iocoder.cn/images/Learn/06.png)工具
|
||
|
||
Maven、Git、Jenkins ,学会常用的即可。
|
||
|
||
## 关于运维
|
||
|
||
[](http://static.iocoder.cn/images/Learn/07.png)运维
|
||
|
||
Linux 学会常用的命令即可。
|
||
|
||
Docker 和 Kuberante ,选择性,非必须。
|
||
|
||
## 关于基础
|
||
|
||
[](http://static.iocoder.cn/images/Learn/08.png)基础
|
||
|
||
关于如下的基础:
|
||
|
||
- Java 并发
|
||
|
||
> [《精尽 Java【并发】学习指南》](http://svip.iocoder.cn/Java/Concurrent/tutorials/)
|
||
|
||
- NIO & Netty
|
||
|
||
> [《精尽 Netty 学习指南》](http://svip.iocoder.cn/Netty/tutorials/)
|
||
|
||
- 设计模式
|
||
|
||
> [《精尽设计学习指南》](http://svip.iocoder.cn/Design-Pattern/tutorials/)
|
||
|
||
- JVM
|
||
|
||
> [《精尽 Java【虚拟机】学习指南》](http://svip.iocoder.cn/Java/VirtualMachine/tutorials/)
|
||
|
||
- 算法
|
||
|
||
> TODO 待补充
|
||
|
||
实际上,😈 我们更多使用到的是面试的时候,哈哈哈哈。
|
||
|
||
当然,我们希望成为一个有趣的程序员,35 岁不被淘汰,这些基本功肯定要去补的。
|
||
|
||
不过呢,艿艿个人的建议是,基础放在【第一步】【第二步】【第三步】学习完之后,在回过头来干。
|
||
|
||
## 补充说明
|
||
|
||
**在我们搭建知识体系,请对着每个知识点,认真看每个技术对应的[《精尽 XXX 学习指南》](http://svip.iocoder.cn/tags/学习指南/)里面推荐的书,踏踏实实在把每个技术栈体系化学习下。**
|
||
|
||
**在我们搭建知识体系,请对着每个知识点,认真看每个技术对应的[《精尽 XXX 学习指南》](http://svip.iocoder.cn/tags/学习指南/)里面推荐的书,踏踏实实在把每个技术栈体系化学习下。**
|
||
|
||
**在我们搭建知识体系,请对着每个知识点,认真看每个技术对应的[《精尽 XXX 学习指南》](http://svip.iocoder.cn/tags/学习指南/)里面推荐的书,踏踏实实在把每个技术栈体系化学习下。**
|
||
|
||
另外,为了验证学习的结果,以及将来有复习的可能性,请做好笔记,可以下载一个【印象笔记】应用,记录、狠狠的记录。
|
||
|
||
再另外,也可以看看每个技术栈对应的[《精尽 XXX 面试题》](http://svip.iocoder.cn/tags/面试题/),验证验证自己学习的咋样~
|
||
|
||
# 什么时候看源码?
|
||
|
||
艿艿一开始看源码,单纯觉得好玩。后来一想,对于一个有追求的工程师,每年看掉几套源码,那么工作 5 年之后,基本主流的源码,都已经看过了。虽然这个过程会比较痛苦,但是前几年确实是我们时间最多的时候。我们不需要考虑家人、孩子。
|
||
|
||
关于选择看什么源码的顺序,我建议从应用层到基础层。我举个例子:
|
||
|
||
- 先看 Spring MVC 源码,在看 Spring 源码。
|
||
- 先看 Dubbo 源码,在看 Netty 源码。
|
||
|
||
然后呢,如果胖友真的不知道看什么源码,我建议可以星球给艿艿留言。
|
||
|
||
如下,是艿艿自己经历的,看源码的顺序,可能不一定能成为参考:
|
||
|
||
- Spring Security
|
||
- Spring MVC
|
||
- Shiro
|
||
- RocketMQ
|
||
- MyCAT
|
||
- Sharding JDBC
|
||
- TCC Transaction
|
||
- Eureka
|
||
- Hystrix
|
||
- Spring Cloud Gateway
|
||
- SkyWalking
|
||
- Dubbo
|
||
- Netty
|
||
- Spring
|
||
- MyBatis
|
||
|
||
# 彩蛋
|
||
|
||
写的有点杂乱,但是想想,先出一个版本。省得自己的想法丢失。
|
||
|
||
万一的万一,对胖友有一些些帮助呢?
|
||
|
||
希望,我们至少能成为有趣的工程师,再然后,贪心一点,成为厉害的工程师。 |