欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

我如何找寻学习方向

程序员文章站 2022-07-09 18:21:58
我如何找寻学习方向?13年毕业,其实我也和很多人一样,也不是一毕业就开始努力努力地学习的,也有过下班了就玩游戏,上班完成任务就好的日子。真正开始学习大约14年末15年初的时候,那个时候,还没有像现在这么多的面试经验,这种时候我怎么确定自己的学习方向呢?那个时候我的做法就是刷招聘网站。其实只要刷刷招聘网站,看看任职要求,除开那些主观的学习能力、思考能力这些的,一定是可以找到共通点的。......

我如何找寻学习方向?

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

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

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

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

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

 

建议的学习路线

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

Java语言层面来说:

(1)首先的是Java基本语法、基本用法,在我的博客里面有推荐《Java基础教程.pdf》,就是为了打基本功的,我有反复提过,这个教程我前前后后至少看了三遍,所有例子都自己敲过并理解过一遍。这些包括if...else...、for、while、接口、抽象类、继承、封装、多态、equals、clone、hashcode等等等等

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

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

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

(5)之后我认为就可以进入多线程的学习了,多线程真的是需要扎实的理论基础,建议从最基本的为什么要使用多线程学起,逐步深入,至于知识点我就不列了,因为实在太多,可以看我Java多线程系列的文章或者《40个Java多线程问题总结》

(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());

}

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

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

 

本文地址:https://blog.csdn.net/gdsgdh308227363/article/details/85985263