给想用心走好java这条路的程序员一些建议

自学 java 没那么难

一:个人经历

我的大学:第一年泡在图书馆看杂七杂八的书,跟学习毫无关系。第二年疯狂打 LOL,从白银打到黄铜(黄铜守门员)。第三年上半年,被某人点醒,学习了整套 C# 知识体系,某马。下半年又决定转行,又开始了为期半年的自学 java 路程。所以我的经历可能适用一些正在学校的学生或者准备转行做 java 的。

二:建议

  • 如果你还没毕业或者想转行做java
  1. java 基础,不得不提,重中之重!你需要把每个知识点都记录下来,通过实战去强化,可以借助外来的视频资料,但是记住视频为辅(一般都不是很深入),看完对应的都必须要看一本书:"java 编程思想或者 java 核心技术",建议都看,十分经典,可以在你的笔记基础之上再次提升文章质量。
  2. 对于有了 java 基础的小伙伴来说,那么不得不提的就是算法与数据结构以及设计模式这两大块内容,重中之重!依然先入门,你需要了解常用的数据结构,知道他们的使用场景以及性能分析,需要具备一定的算法能力,常用的排序算法等等之类,可以去 leetcode 网站去找一些算法题目去练练,java 语言也可以在这个阶段再一次提高,你要注意你写的代码的逻辑性和美观性以及性能。设计模式不得不提,随处可见,23 种设计模式都必须了解并知道之间的区别以及常用的场景,比如抽象工厂与建造者模式的区别,常用的单例模式,门面模式,适配器模式等等,spring 源码能看到很多运用。headfirst 设计模式(适合入门)和算法 4(需要你耐着性子去看)。
  3. 接下来看你什么方向了,如果是 web 端,那你可以尝试去学 web 开发相关的一些内容了,主要包括了 Html/css/js,J2EE ,mysql 相关的一些知识,对于如果以后专门要做 java 后端的小伙伴,前端相关知识可以稍微的花一些时间,因为不需要很久,可以入门。J2EE 相关的你都必须掌握,servlet 的运行原理等等很关键,mysql 同样是你必须要非常深入的去学的内容,你必须要能熟练的写出 SQL 语句。你不仅仅要会写 SQL,更要配合业务写出可重用,性能高的 sql 语句,建议深入的看一下高性能 mysql,你不能仅仅停留在简单的增删改查,如果连数据库的设计都不会,性能优化都不了解,那么真的需要再逼一下自己,让自己懂的更多。
  4. 之后你必须靠着自己做出一个简单的网站并且搜寻一些项目资料,跟着练手,至少要有两个练习经验,巩固所学的知识点,在这个过程中你能学到很多,会碰到各种各样的 bug, 请记录下来,对你有用。
  5. 做完了这些项目,你可以继续去学习一些常用的 web 框架,比如 spring,springboot ,springmvc,mybatis, 什么 hibernate 还有 structs2 就不要再碰了,你必须熟练掌握这些框架的基本用法,要能明白常用的一些配置,有兴趣的可以进入里面看看源码,记着:研究源码是你做这份工作不能停下来的事。spring 重中之重,不断的探索,不断的去研究源码。顺便再学一下 maven 如何管理项目,还有 git 的一些 pull,push ,merge,rebase 等简单用法,公司很常用,不要仅仅停留在 svn,很多公司都是用 git 的。
  • 准备找工作
  1. 海投简历,不要不好意思,刷足面试题,最好自己要有个比较懂的技术点。
  2. 如果碰到让你培训再工作,培训期间再打生活费这种,尽量别去,我有几个朋友吃过大亏,后来都放弃了这份工作。
  3. 面试要自信些,展现自己的特长。其实公司很多,没了这家还有下家。
  • 工作了的小伙伴
  1. 应该尝试了不少 crud 的滋味了吧,也接触到了复杂业务的情景了吧,加班成了平常事了吧,是不是开始又觉得漫无目的了。可能在开发中你会接触到新的知识,比如,springboot ,springcloud ,dubbo,zookeeper,linux,rabbitmq,redis,mongdb,kafka,elasticsearch 等等,你需要学会去用好这些工具。
  2. 对于已经工作了 1-3 年的小伙伴,可能你不再需要写简单的 crud 了,但是你能否自己搭建框架,能否写出可复用的模块代码,是否能写出优雅的代码,如果不能,还得继续学,必须重新拾起设计模式,要能对业务封装,对工具类封装,要能重构代码,要把设计模式运用到项目中去,你需要去看《重构 改善既有代码的设计》、《effective java》,久而久之,你可以写出比较出色又优雅的代码。但这还不够,你必须要对 java 虚拟机有深入的理解,要能解决项目中遇到的内存溢出异常等等,这部分内容比较枯燥,但是你必须要啃下去,还要会模拟场景去制造异常,因为很多异常你真的不知道从何下手,只能从日志里去看堆栈的打印信息,去看虚拟机的日志信息,去分析,你才能解决问题。所以必须学好,必须死磕这方面的内容。与此同时你还需要研究 jdk 的源码,就跟着你一开始学 java 基础的来,从集合开始,去深入的看源码,这时候你会发现 java 基础和数据结构和设计模式有多重要。还需要去学习并发相关的知识,要对 Java 并发包 java.concurrent 有深刻的认识,这些内容需要你摒弃浮躁的心,慢慢看,不能急,急你也看不出什么效果。如果已经接触过很多分布式相关的技术了,分布式缓存,分布式消息队列,分布式计算,负载均衡,大数据等等,你可能都已经用过了,所以现在的你既有了基础知识的架构支撑,也还没到退休年龄,建议你深入的去研究一门技术,是很深入,不要既搞分布式计算,又搞分布式缓存,又研究大数据等等,说自己懂的那么多,真正懂得基本都能拿下你。所以你必须开始确定自己的研究方向,专门的去研究某个内容,让这一块成为你的优势和强项,这也是为了避免大龄被淘汰的法门。你应该朝着某个领域的专家去努力。有了自己深入研究的方向,你应该去帮助更多的人,去发表更多的优质文章,也可以去打造属于自己的开源项目,做出对别人,对自己有价值的东西。所以这个阶段的你应该提高自己的影响力,帮助更多的人,更多想学习的人

三:总结

这是我一路走来的资料,其实要学的,要精通的很多,看自己能不能沉住气,脚踏实地。如果有人需要下方资料,关注微信公众号:java 架构师小密圈, 领取 2T 学习资源。