写给那些想要自学成才的java程序员
一:我的大学
第一年泡在图书馆看杂七杂八的书,跟学习毫无关系。第二年疯狂打LOL,从白银打到黄铜(黄铜守门员)。第三年上半年,被某人点醒,学习了整套C#知识体系,某马。下半年又决定转行,又开始了为期半年的自学java路程。所以我的经历可能适用一些正在学校的孩子或者准备转行做java的。
二:如果你还是在校生,或者准备转行做java,你必须要学会下面的
2.1:java基础,不得不提,重中之重!你需要把每个知识点都记录下来,通过实战去强化,可以借助外来的视频资料,但是记住视频为辅(一般都不是很深入),看完对应的都必须要看一本书:"java编程思想或者java核心技术",建议都看,十分经典,可以在你的笔记基础之上再次提升文章等级。
2.2 :对于有了java基础的小伙伴来说,那么不得不提的就是算法与数据结构以及设计模式这两大块内容,重中之重!依然是结合视频,你需要了解常用的数据结构,知道他们的使用场景以及性能分析,需要具备一定的算法能力,常用的排序算法等等之类,可以去leetcode网站去找一些算法题目去练练,java语言也可以在这个阶段再一次提高,你要注意你写的代码的逻辑性和美观性以及性能。设计模式不得不提,随处可见,23种设计模式都必须了解并知道之间的区别以及常用的场景,比如抽象工厂与建造者模式的区别,常用的单例模式,门面模式,等等。headfirst设计模式和算法4不错,可以在有了基础后再去看看。
2.3 :java、算法与数据结构、设计模式都必须学好,必须。会为你以后解决业务场景,看源码等等起到很关键的作用。
2.4 :学习了这些之后你可以尝试去学web开发相关的一些内容了,主要包括了Html/css/js,J2EE ,mysql相关的一些知识,对于如果以后专门要做java后端的小伙伴,前端相关知识可以稍微的花一些时间,因为不需要很久,可以入门。J2EE相关的你都必须掌握,servlet的运行原理等等很关键,mysql同样是你必须要非常深入的去学的内容,你必须要能熟练的写出SQL语句,业务的关键就在于此。你不仅仅要会写SQL,更要配合业务写出可重用,性能高的sql,建议深入的看一下高性能mysql,你不能仅仅停留在简单的增删改查,如果连数据库的设计都不会,性能优化都不了解,那么真的需要再逼一下自己,让自己懂的更多。
2.5:到了这个地步,你应该可以试着开发一个完整的网站出来了,你可以在搜寻项目资料,自己去练,至少要有两个完整的,不管是跟着做还是自己做的,你能在这里面遇到很多bug,也能解决很多bug.这是你必须要迈过的门槛。
2.6:现在你已经能靠着自己做出一个很一般的网站了,但是工作上用的远远不止这些,你可能还不能找到比较好的工作,当然若是你前面我说的那几个都非常优秀,尤其是算法和数据结构,那另当别论。如果前面掌握的很一般,那么你还需要学习一些常用的web框架,比如spring,springboot ,springmvc,mybatis,什么hibernate还有structs2就不要再碰了,你必须熟练掌握这些框架的基本用法,要能明白常用的一些配置,有兴趣的可以进入里面看看源码,记着:研究源码是你做这份工作不能停下来的事。spring重中之重,不断的探索,不断的去研究源码。顺便再学一下maven如何管理项目,还有git的一些pull,push ,merge,rebase等用法,公司很常用,不要仅仅停留在svn,很多公司都是用git的。
2.7:当你学会了上述那些知识,有了自己的知识框架,也可以去找点工作干干了,还没毕业就赶紧找实习,攒工作经验,毕了业的就要继续下面的学习内容,不能停下来。
三:工作一年经验内的小伙伴
应该尝试了不少crud的滋味了吧,也接触到了复杂业务的情景了吧,加班成了平常事了吧,是不是开始又觉得漫无目的了。可能在开发中你会接触到新的知识,比如,springboot ,springcloud ,dubbo,zookeeper,linux,rabbitmq,redis,mongdb,kafka,elasticsearch等等,你需要学会去用好这些工具。
四:工作1-3年的小伙伴
可能你不再需要写简单的crud了,但是你能否自己搭建框架,能否写出可复用的模块代码,是否能写出优雅的代码,如果不能,还得继续学,必须重新拾起设计模式,要能对业务封装,对工具类封装,要能重构代码,要把设计模式运用到项目中去,你需要去看《重构 改善既有代码的设计》、《effective java》,久而久之,你可以写出比较出色又优雅的代码。但这还不够,你必须要对java虚拟机有深入的理解,要能解决项目中遇到的内存溢出异常等等,这部分内容比较枯燥,但是你必须要啃下去,还要会模拟场景去制造异常,因为很多异常你真的不知道从何下手,只能从日志里去看堆栈的打印信息,去看虚拟机的日志信息,去分析,你才能解决问题。所以必须学好,必须死磕这方面的内容。与此同时你还需要研究jdk的源码,就跟着你一开始学java基础的来,从集合开始,去深入的看源码,这时候你会发现java基础和数据结构和设计模式有多重要。还需要去学习并发相关的知识,要对Java并发包java.concurrent有深刻的认识,这些内容需要你摒弃浮躁的心,慢慢看,不能急,急你也看不出什么效果。
五:3年及以上
可能在这个阶段的小伙伴提升已经很难了,你可能已经接触过很多分布式相关的技术了,分布式缓存,分布式消息队列,分布式计算,负载均衡,大数据等等,你可能都已经用过了,所以现在的你既有了基础知识的架构支撑,也还没到退休年龄(哈哈),建议你深入的去研究一门技术,是很深入,不要既搞分布式计算,又搞分布式缓存,又研究大数据等等,说自己懂的那么多,花里胡哨的,真正懂得基本都能拿下你。所以你必须开始确定自己的研究方向,专门的去研究某个内容,让这一块成为你的优势和强项,这也是为了避免大龄被淘汰的法门。你应该朝着某个领域的专家去努力。
六:提高自己的影响力
有了自己深入研究的方向,你应该去帮助更多的人,去发表更多的优质文章,也可以去打造属于自己的开源项目,做出对别人,对自己有价值的东西。所以这个阶段的你应该提高自己的影响力,帮助更多的人,更多想学习的人。因为你老了。
七:最后希望你们能入了门,成为自己想成为的人,如果有想要架构资料的欢迎工作一到五年的Java工程师朋友们加入Java架构开发:760940986
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!