Java,我是这样学的。

说起以前那都是青春,吹不完的牛P,追不完的女神,现在留下的只有稀疏的发量,和那做不完的项目。打个哈哈 进入正题!

13那年毕业,其实我也和很多人一样,也不是一毕业就开始努力努力地学习的,也有过下班了就玩游戏,上班完成任务就好的日子。

真正开始学习大约14年末15年初的时候,那个时候,还没有像现在这么多的面试经验,这种时候我怎么确定自己的学习方向呢?那个时候我的做法就是刷招聘网站

其实只要刷刷招聘网站,看看任职要求,除开那些主观的学习能力、思考能力这些的,一定是可以找到共通点的。

记得那个时候我用的还不是拉钩、BOSS,用的51job,就几天晚上,刷了上百家公司的任职要求,逐一记录下来,由浅入深总结成一条一条的东西,就成了我之后需要学习的方向。

终究,我觉得任何事情,当外在无法提供帮助的时候,自己一定是能想到办法的。

建议的学习路线

每个人都有自己的学习路线,我根据自己的学习经历给一下学习路线,作为给大家的借鉴,核心总结起来九个字:基本功、基本功、基本功。

就Java语言层面来说:

(1)首先的是Java基本语法、基本用法,这是为了打基本功的,前前后后至少看了三遍,所有例子都自己敲过并理解过一遍。这些包括if…else…、for、while、接口、抽象类、继承、封装、多态、equals、clone、hashcode等等等等

(2)基本的东西扎实之后,可以学习一下jdbc、序列化、文件IO、Socket IO这些稍微进阶的东西,不难,循序渐进刚刚好

(3)接着我认为可以去学习一下设计模式相关的东西,从简单的学起,像工厂模式、单例模式、克隆模式这些,慢慢地在后面过渡到代理模式、装饰器模式、责任链模式这些比较复杂的

(4)集合框架应该是下一步的重点了,无论是面试也好还是工作也好,都是会常用到的,包括但不仅限于ArrayList、LinkedList、HashSet、Queue、HashMap、Hashtable、ConcurrentHashMap,什么时候用哪种数据结构,每种数据结构其优缺点

(5)之后我认为就可以进入多线程的学习了,多线程真的是需要扎实的理论基础,建议从最基本的为什么要使用多线程学起,逐步深入,至于知识点我就不列了,因为实在太多。

(6)在对上面的都比较熟悉之后,我建议是可以开始源码的学习了,源码的学习可以从简单的开始,比如String里面方法的源码,慢慢过渡到ArrayList、LinkedList、HashMap源码,慢慢过渡到MyBatis、Spring这些框架的源码,读源码是一个比较枯燥的过程,需要耐心以及多思考,理解源码的意图

(7)最后可能就是JVM了,JVM这个吧,我就建议如果下定决心去学,那就好好学认真学,不然的话就算了,这块水比较深,像《深入理解JVM虚拟机》这本书的pdf和实体书,反反复复前后看了不下5遍才对JVM有了一定的认识,如果让我现在罗列一些必须要掌握的点,大致上有JVM内存局、垃圾判定方法、垃圾收集算法、垃圾收集器、JVM参数、类加载机制、双亲委派模型、Java内存模型等

框架层面:

(1)Spring一定是绕不开的,建议把Spring的用法摸熟且搞懂使用Spring到底有什么好处

(2)现在企业基本用Hibernate的很少,MyBatis的使用占据了绝大部分,可以去好好看一下

(3)Spring MVC的用法和一些基本概念

(4)最后把Spring结合MyBatis、Spring MVC、结合Transaction写个Demo跑一下,这样整个SSM层面基本至少从用法来讲,都不会有大问题,基本满足工作需要

(5)除开SSM框架,我认为最重要的框架应当是Netty,现在大量的Java组件组件使用了Netty,像dubbo、Jetty、Tomcat这些,包括以后我们需要编写高性能网络通讯框架的时候,必然Netty也是首选,因此Netty是一定要学的,包括Netty底层原理、Netty基本用法、线程模型、粘包拆包及解决方案这些

非Java层面,不好说学习路线,我提一下需要学习的一些东西吧,:

(1)Java大多数都是用来做网络这块,因此我们对网络也是要有一定了解的,包括TCP、HTTP、长短链接、WebSocket、epoll模型等

(2)MySQL,从MySQL基本语法到存储引擎、数据结构、索引、锁,当然最重要的,我们一定要学会定位慢SQL

(3)缓存,无比重要,EhCache、Redis、MemCache都是常用的缓存,现在基本用的最多的就是Redis了吧,对于缓存我们至少需要知道缓存的使用场景以及缓存的基本用法

(4)消息中间件,消息中间件有什么用,消息中间件的使用场景,有哪些常用的消息中间件,点对点模式和发布订阅模式的区别,你目前项目中使用的消息中间件的简单原理

(5)容器,像Tomcat、Jetty、JBOSS,大多数公司可能用的Tomcat,就比如Tomcat,它的一些基本配置,更深入的可能就是Tomcat整个模型是怎么样的

(6)分布式概念,为什么需要分布式,CAP理论、常用负载均衡算法(尤其以一致性Hash算法最重要,原理、作用)、分布式锁、分布式一致性、服务降级、熔断等,这方面的知识点需要学习的非常多

(7)Linux服务器的相关知识,注意我的用词是相关知识,所以就不仅限于命令的使用了,比如用户概念、文件概念、权限概念等,总归有一天,当我们成长了,会开发+运维一肩挑,这时候很多命令之外的知识点就派上用场了

回到工作中去

这个是很重要的一点,光说不练假把式、光练不说傻把式,同样的,光学不用,只是理论知识,我认为:从工作中来,到工作中去。

就像内存溢出吧,不是我们写个

List<Object> objectList = new ArrayList<Object>();
while(true) {
    objectList.add(new Object());
}

我们就理解了内存溢出的,实际工作中线上碰到的内存溢出问题一定比学习中的复杂多了,当出现这种问题的时候,一定要积极主动地去面对。

工作中遇到的问题,无论是深的、浅的、简单的还是困难的,都是最好的成长的机会,即使有些问题不是你解决的或者是你当前水平无法解决的,在解决之后去弄懂它,对自己也是一种成长的过程。

点关注,不迷路;持续更新Java相关技术及资讯!!!
关注、评论每天分享java 知识,赠送Spring源码分析、Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式资料

猜你喜欢

转载自blog.csdn.net/XingXing_Java/article/details/90578219