# 精尽学习指南 > 艿艿:这是第一个版本,后续会继续优化。嘿嘿。 > > 后面,艿艿会把每个学习资料给补充进去。 # 1. 概述 无论我们是工作多久的工程师,我们总是在某一刻会大呼“学不动了学不动了”。 并且,我们是无可避免需要有大量加班,比较好的是 985 ,比较苦逼的是 996 。一旦陷入其中,我们可能就忘却了学习这个事情。 另外,我们还会有一个困扰,技术栈这么多,我们应该怎么学习呢? 艿艿的想法是: - 点 - 线 - 面 - 立体 什么是点?我们平时会在技术社区、公众号、博客上,学习一些技术,但是大家普遍会觉得比较琐碎。 什么是线?当我们学习了同一个技术的多个点之后,我们会逐渐形成这个知识线,对这个知识会相对有整体的认识。 什么是面?当我们学习了多个技术之后,我们会逐步自己的知识面,脑海里会有一颗若隐若现的知识树。 什么是立体?当我们形成自己的知识面之后,我们肯定会惊呼“老子会很多东西,但是好像没有什么擅长的”。有木有?哈哈哈。这个时候,我们需要针对自己感兴趣的技术栈,做深入的理解,慢慢形成某几个技术的深度,这样,我们就开始立体了。当然,一定是几个技术的深入,而不是方块,而是一个锥子,一锥刺骨的那种,杀手锏。 当然,本文暂时先对这个泛泛而谈,本文的重心在于如何先形成自己的**“点 -> 线 -> 面”**。我们先来看一个图:[![img](01-学习指南.assets/01.png)](http://static.iocoder.cn/images/Learn/01.png) - 一切的核心,都是为了实战。 - 入门,是为了让我们能够实战。 - 原理,是为了让我们更好的实战。 - 源码,是为了让我们更具象的理解原理,从而更好的实战。 - 所以,一切的核心,都是为了实战。 也因此,一个技术栈的学习的逐步顺序是:入门 => 实战 => 原理 => 源码。 那么,这个和本文又有什么关系呢?我们再来看一张图: [![路线图](01-学习指南.assets/02.png)](http://static.iocoder.cn/images/Learn/02.png)路线图 - 1、可能胖友会懵逼,卧槽,要学习的有这么多。 - 2、可能胖友会说,为什么没有 Dubbo、Zookeeper 等等 - 3、可能胖友会说,怎么没有 AI、大数据呢? 这个路线图,我们定位是让业务开发工程师,有一条相对明确的学习路线,最终实现搭建自己的知识体系。 # 2. 路线图 下面,我们来分块来看看路线图。 ## 第一步,单体应用 第一步,我们先要学习,能够搭建一个最基本的单体应用。如下图所示:[![单体应用](01-学习指南.assets/03.png)](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/) 入门即可。 在这一步中,我们需要对每个技术点只要达到“入门”和“实战”两点。 ## 第二步,微服务架构 第二步,我们要再学习,能够搭建一个微服务架构的应用。如下图所示:[![微服务架构](01-学习指南.assets/04.png)](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 待补充 不要慌,知识这个东西,总是一通百通的。 还有噢,到了这个阶段的学习,我们要关注每个组件怎么实现高性能,怎么实现高可用。 ## 第三步,其它中间件 第三步,我们还要学习,微服务架构需要的其他中间件。如下图所示:[![其它中间件](01-学习指南.assets/05.png)](http://static.iocoder.cn/images/Learn/05.png)其它中间件 在这个过程中,我建议以看书、看博客为主,以视频为辅助。 > 为什么不再以视频为主呢?我们要能够更加更加更加主动的学习能力。 - Quartz 或者 Elastic-Job 或者 XXL-Job > TODO 待补充 - Elasticsearch > TODO 待补充 - Sharding Sphere > TODO 待补充 - TCC Transaction > TODO 待补充 - ELK > TODO 待补充 在这一步中,我们需要对每个技术点只要达到“入门”和“实战”和“原理”三点。 也就是说,在这一步中,我们已经不能简单的只会实战,要对原理有一定的认知。 ## 关于工具 [![工具](01-学习指南.assets/06.png)](http://static.iocoder.cn/images/Learn/06.png)工具 Maven、Git、Jenkins ,学会常用的即可。 ## 关于运维 [![运维](01-学习指南.assets/07.png)](http://static.iocoder.cn/images/Learn/07.png)运维 Linux 学会常用的命令即可。 Docker 和 Kuberante ,选择性,非必须。 ## 关于基础 [![基础](01-学习指南.assets/08.png)](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 # 彩蛋 写的有点杂乱,但是想想,先出一个版本。省得自己的想法丢失。 万一的万一,对胖友有一些些帮助呢? 希望,我们至少能成为有趣的工程师,再然后,贪心一点,成为厉害的工程师。