如果让我统计下,粉丝问我做多的问题是什么,这个问题肯定可以排前5,问出这个问题的朋友们遍布各个年龄段。
实话说,这个问题同样也困扰过我,大概就是我刚毕业的第一年。
那一年,刚刚离开校园,来到阿里,那时候就感觉自己好像什么都不会,好像很多东西都要学,不知道哪个是重点,不知道该如何下手。
那段时间我也像个无头苍蝇一样尝试过很多办法。
刚开始疯狂买书,《Java编程思想》、《Effective Java》、《深入理解Java虚拟机》等等。
然后想着自己撸一个项目,于是到github上找了很多开源项目,想着可以自己写一遍。刚开始想写个JUnit、然后想着写个SSH的项目,接着考虑自己写个Dubbo框架。
甚至考虑过去报个班,不瞒大家说,我一个阿里的程序员,刚毕业的时候竟然咨询过达内。
总之吧,做过很多尝试。现在我知道了,这就是焦虑。
首先,如果你有这种心态,那么完全不要慌。这很正常。
而且,我认为这未尝不是一件好事儿!
我当时之所以像个无头苍蝇一样,主要是因为我想让自己变的刚好。所以,我相信,那些问过我类似问题的他们,也一样。
有焦虑,说明自己有上进心,有上进心,是一个人可以变得更好的一个最基础要素。
说实话,这篇文章的标题很像是软文,会不会有人因为怕是软文广告就错过了,我犹豫了很久要不要换一个。
但是,我想了想,如果这一点努力都不愿意付出的话,就算我当着他的面把这篇文章读给他估计也无济于事。
有很多人问我,到底什么是知识体系。
要我说,知识体系这个词根本就没有人能说的清楚它到底是什么。
因为他真的是可大可小。
你可以说加减乘除是知识体系,也可以说数学学科是知识体系,还可以认为整个基础科学领域才是一个知识体系。
所以,没有必要给自己界定一个明确的体系框架。
很多人说,知识太多了,我不知道该学什么。其实,这么问的人,潜意识里是希望自己可以得到一份完整的知识体系大图,可以得到一个完美的知识学习路径。
但是,我不得不泼一盆冷水。就没有所谓的完整的知识体系大图,更没有完美的学习路径。
很多人看多我总结的《Java工程师成神之路》,但是,这并不能算是完整的Java知识体系大图。
以为,这最多算是我的知识体系的一个简单总结,但是,我的这份知识体系必然有局限性,局限性就是我对Java知识的认知和了解程度。
再说完美的知识学习路径是否存在,我觉得这是不可能存在的。
因为技术学习,不像我们在学校的时候学习算数,学算数可以先学加减、再学乘除,然后再学方程等等的。
但是,技术是服务于应用的,学习技术的原动力也肯定是因为我要用,所以我才要学。
不管是工作中要用到,还是面试的时候要用到,出发点都是我要用。
但是,每个人要用的知识怎么可能都一样呢?所以,也不存在完美的学习路径。
没有完整的知识体系,也没有完美的学习路径,怎么办?
适合自己的才是最好的!!!这句话有点像是正确的废话。但是,这是我走过焦虑期之后唯一能传达给你的!
我觉得,学习是一件很简单的事儿,简单到你打开这篇文章的时候就已经在做了,只是你自己没意识到。
说到技术学习,该怎么做?
更简单。就像步步高点读机,哪里不会写哪里。
那怎么知道自己哪里不会呢?
这个更简单了,只要你开始学,那就知道自己哪里不会了。
那么,怎么开始学呢?
有几个方法,简单可实践:
1、随便找一本书,比如《深入理解Java虚拟机》,翻开目录,总能找到一个自己不会的知识点,然后从这个知识点开始看。
2、工作中遇到的一个问题,或者需要用到某个技术,从把他弄清楚开始。
3、通过我总结的《Java工程师成神之路》,翻开这篇文章,找到自己不会的知识点,然后开始看。
我博客中,有很多文章,其实我从写文章的第一天起,一直到现在,都在不断的完善我自己的知识体系。用到的无外乎就是以上这三个方法:
从第一篇文章是我记录了我毕业时候的面试准备和面试题,然后学习工作中用到的webx框架。后来我维护我们事业部的zookeeper集群,然后自己学习了很多zk以及分布式相关的知识。紧接着一次排查线上问题,了解到jdk提供了很多命令,于是开始学。再后来Java 8发布,我学了一些Optional 、Stream等知识。后来买了一本《高性能MYSQL》,于是写了很多和数据库有关的文章。接着是工作中用到了模板方法模式,感觉设计模式很有用,于是开始学。后来看了《Java并发编程实战》,又写了很多和并发有关的知识。接着我就总结了《Java工程师成神之路》,然后就是按照这个又写了很多系列文章…前段时间,阿里巴巴推出《Java开发手册》,我又写了很多篇解读《手册》的文章…
还有很多文章,我都忘了当初为什么写了。但是重要的不是从哪来,也不是去哪里,而是在路上!!!
很多人总是想着想要找到一份完整的知识系统或者完美的学习路径才开始。但是,现在我告诉你了,并没有。
所以,按照我说的,或者不按照我说的,找一个点,先进去,先开始学。
就像我之前总结过一篇文章,通过StringBuffer和StringBuilder开始,你都能一直学到并发编程、学到数据锁,学到分布式。
接着,说一下学习方法。
学习过程中,必然会遇到更多自己不会的知识点,这时候怎么办?
两种办法,1是先不管他,绕过去,回过头再看。2是先停下来把这个关联知识点搞清楚,再继续。
说到底这就是图论中的深入优先搜索和广度优先搜索呀,我一般采用的是深度优先,遇到一个搞清楚一个。
我的博客写过几篇和分布式有关的文章。如果你仔细看。可能会发现我的学习思路。
1.什么是分布式?发现相对于集中式来说的,那什么又是集中式。
2.分布式好像和集群很像。那什么是集群?
3.分布式有啥优点,有啥缺点?
4.好像分布式很难保证数据一致性,那什么是数据一致性。什么是CAP,什么是BASE,CAP和ACID好像挺像?
5.数据一直性问题如何产生?如何解决?
6.什么是2pc,什么是3PC,有了2PC为啥要3PC
7.为啥很少有人用2PC和3PC
8.什么是最终一致性。
9.什么是柔性事务,那什么是又是事务呢?
10.通过事务,又可以学习Java本地事务,全局事务,数据库事务。数据库事务隔离级别怎么回事?脏读,不可重复读这些都是啥?Spring事务咋回事?
11.柔性事务,什么是TCC,什么是消息最终一致性。那又如何实现的?
12.为啥有这么多方案,分布式事务问题还无法解决
13.TCC好像和2PC很像?有啥区别
14.各大公司是如何解决分布式事务的
15.支付宝的XTS到底怎么实现的?
16.有了事务了。那性能怎么保证?
17.缓存咋回事。缓存击穿咋办,热点问题咋解决
18.…………可用性相关?安全性相关?好像负载均衡我还不懂,到底咋回事?负载均衡和Web服务器有关?那tomcat咋实现?jboss和他有啥区别。Nginx呢?卧槽,反向代理是啥?啥是代理?代理模式?啥是设计模式?我以前读过设计模式之禅,但是有些地方之前没懂得,现在好像突然懂了。jboss modules是啥?啥特么又是模块化?osgi?Java9跟模块挂啥关系?Java10呢?
其实,不管是深度优先还是光度优先,总会有把图上的各个点串联成一张图的一天。
这不就是所谓的知识体系么?
借着这个问题,多说几句鸡汤吧。我们大多数人的努力程度,根本还没到和别人拼天赋的程度。
我一直觉得,天赋是决定一个人的下限,而努力才是决定一个人的上限。
最可怕的就是我们并没有尽人事,却埋怨天命。有的时候,从哪开始并不重要,重要的是你要开始啊!!!
我认为,知识这东西,殊途同归。你先看哪本书,后看哪本书,差别没那么大,最终那几本有用的书之前的关系还是会被你发现。那个时候,知识体系就有个大概的框架了。然后查缺补漏呗。
慢慢的,知识体系不知不觉就建立起来了。别想那么远。找一个点,先进去。
相信我,坚持下去,1年后,你会感谢我,2年后,你会感谢你自己!
另外,这篇文章中没有讲关于如何规划时间,如何更好的学习的事情,这个不是最重要的,大家感兴趣的话我后面的文章再分享吧。