工作了挺久,发现有个挺有意思的现象,从程序员、高级程序员,到现在挂着架构师、专家之类的头衔,伴随着技术和能力的提高,想不明白的事情反而越来越多了。这些疑问有些来自于跟小伙伴交流,有些是我的自问自答,有些到现在也想不清楚,这篇文章就来写一写这些问题。
如何更高效的学习?
很多新人程序员一开始在学习上找不到方向,但我想在渡过了一段时间的新手期之后这类问题大多都会变得不再那么明显,工作的方向也会逐渐变得清晰起来。
但是没过多久,能了解到的资料就开始超过每天学习的能力,像是买了没看的书、收藏没读的贴、mark了之后再也没有关注过的文章越积越多,更别提每天面对各种技术分享或者微博里的新鲜玩意了。
大多数人每天能留给自己学习的时间有限,这个阶段如何提升学习效率就成了要解决的重点。
说说自己提升学习效率的心得,其实非常简单:体系化的学习。
我曾经很喜欢看一些博客或者是一些“看起来”比较通俗易懂的文章,每天在微博微信里刷到什么技术文章就mark下来,基本上几分钟就能读完。可一段时间下来,虽然读了不少东西,但是还是有种在原地打转的状态,并没有感受到有什么实际的提高。
最后实在忍不住,抱着厚书硬啃了一遍,突然有种豁然开朗的感觉:读书时自己学到的是一张完整的知识网络,每个知识点和其它内容相互联系和区别。这种全方位的理解比起一篇篇独立的文章,不知要高到哪里去了。
而读了一段时间书之后,渐渐原本不在一个体系之内的知识也会慢慢联系起来,比如说后端服务的开发,简单梳理一下,就成了这样:
![image.png](https://static.studygolang.com/181128/13c66de110226d2e6649dda2fd860e82.png)
在重复了几次痛苦的学习-梳理过程后,再去看一些独立的文章或者资料往往会事半功倍,因为能在体系内找到相对应的知识,甚至有时候一本书里一页只需要看一句话,点破那层窗户纸,就可以掌握新的知识。
架构开发技术之路的学习经验
一、阅读源码
阅读、分析源码是程序员最基本的码代码能力也是码农的根本所在,学习经典源码中所用到的经典设计思想及常用设计模式,能够帮你了解大牛是如何写代码的,从而吸收大牛的代码功力。在阿里面试中,MyBatis,Spring等框架的底层原理是经常会被问到的
![image.png](https://static.studygolang.com/181128/1f7f33dfba4ea988273c47039ee3b00a.png)
二、分布式架构
阿里巴巴有很多大团队,这种大团队里有很多小团队,到小团队之后,做的业务都不相同,如果想立足成为一线互联网公司中的万能选手,最主流的分布式架构中有很多知识都是必须要去了解与学习的。并且在阿里面试过程中,面试官会问到实际应用场景的问题:比如微服务化、用户量、并发量、业务复杂度以及可扩展程度等,这里不多赘述。本屌提供一个分布式架构的学习思路也是自己目前还在学习中的体系:
![image.png](https://static.studygolang.com/181128/907589e8c391c0d25a7208c67c9d9798.png)
三、微服务架构
微服务是现在互联网架构技术中最火热的话题之一,也是本屌目前正在学习研究的方向。在阿里面试过程中,面试官很少会问到关于微服务相关的问题。但作为一名开发者,一名有技术梦想的程序员微服务架构是现在必须要去了解的主流技术,小编给自己制定了一个微服务技术的学习计划:
![image.png](https://static.studygolang.com/181128/1f55ea3f174b0c6cf7f92d0b2c16cf94.png)
四、并发编程
并发编程几乎是所有互联网公司面试必问问题,并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。目前网上没有系统的全面的并发编程学习大纲,我搜集了很多资料总结出来一个最全面的学习大纲:
![image.png](https://static.studygolang.com/181128/01a1552011b66b916cf1a601fbe38d48.png)
五、性能优化
性能一直是让程序员比较头疼的问题。当系统架构变得复杂而庞大之后,性能方面就会下降,特别是阿里巴巴这样的一线互联网公司最为注重,因此想进入阿里,性能优化一定是要去深入学习与理解的一环,本屌在性能优化这一块虽然不能算专家,也可以自信的说是精通了(注意:自己的简历上一定不要写精通xxxx,要不然面试官会怼死你。好在本屌这一块还算自信)
![image.png](https://static.studygolang.com/181025/5c76decd130cda60b85cc3034e2ef350.png)
6.设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。
![image.png](https://static.studygolang.com/181111/5fc40889285815b199f5d7359a21d26e.png)
一名开发人员必须有适合自己的兵器,也就是工欲善其事必先利其器,不管是小白,还是资深开发,都需要先选择好的工具。下列是我自己常用的开发工具:
Maven的,项目管理
詹金斯,持续集成
声纳,代码质量管理
Git的,版本管理
分享我们几位架构师精讲的一些架构视频资料
![image.png](https://static.studygolang.com/181128/d1029eb406e4769327f10087bb85a6e3.png)
![image.png](https://static.studygolang.com/181128/03639d576e297a93cf3f2230e92d6a21.png)
免费资料大放送
工作一到五年的java 开发工程师朋友可以加入我们Java架构交流群:760940986
领取获取往期Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
有疑问加站长微信联系(非本文作者)