如何学好 java 这门技术

作为一个已经从事 java 开发4年多的我,曾经其实也很迷茫,在没有参与java极客技术团队的时候,我的技术积累的比较散,但是自从参加了java极客技术这么一个优秀的团队之后,我开始意识到,自己需要系统的学习java技术了!

对于初次接触 java 技术的朋友,想必一定很迷茫,想知道如何掌握好java技术,如何运用好java技术进行项目开发?

在此,我想以第一人称来谈谈我学习java的思路,谈不上大神,不一定很全,只希望能帮到那些处于迷茫阶段的朋友,希望祝你们一臂之力!

技术学习路线

1、java核心技术

首先,任何一门技术语言,肯定有自己的语言特性,比如java,我把它分为这几个大部分:

  • 基础知识:主要是包含程序流程控制、语法特性、注解、异常处理等内容。
  • 容器知识:主要是位于java.util包下的集合类,集合类封装了很多典型的数据结构和算法,例如动态数组、双向链表、队列、栈、Set、Map 等。
  • IO知识:主要是面向流处理,例如 BIO、NIO、AIO等。
  • 多线程知识:主要是介绍多线程的知识,以及利用多线程技术实现高效并发。
  • JVM知识:这个部分的知识,估计很多初学者没有实质的接触到,但是任何高端的面试,JVM面试一定是少不了,核心知识点主要是GC调优;

java 核心知识图分类,如下:

可能有的朋友,会想到SWT部分,SWT是一套 GUI 编程框架,可以使用它来开发一套可视化界面,对于后端开发,基本很少用到。现在主流的可视化界面基本用 HTML 来开发,通过 web 浏览器访问!

相关学习书籍如下:

  • java核心技术卷I、II;
  • Effective Java中文版(第2版);
  • Java并发编程实战;
  • 深入理解Java虚拟机;
  • Java编程思想

2、设计模式

设计模式,主要是为了实现软件高效编程而总结出来的一套理论方法,在编码中无处不在,而且在任何一门开发语言中都适用。

如果将 java 核心技术比作为外功,那设计模式就是内功,要想深入的掌握这门技术,毫无疑问,必须内外兼修

设计模式,从模式上可以分四大类:创建型模式、结构型模式、行为型模式 ,合计各个类别总共有 23 种设计模式!

其中,还有一种 J2EE 设计模式,也就是我们 web 开发中经常使用的一种模式,这种设计模式特别关注表示层,由 Sun Java Center 鉴定的。

相关学习书籍如下:

  • 大话设计模式

3、开源框架学习

如果已经掌握了 java核心技术、设计模式,此时,已经具备可以开发一套属于自己的组件或者框架的能力!

但是随之问题也来了,我们为什么要学习这些开源框架呢?

原因很简单,就好比一个班级,有的同学很优秀,每次考试总是得第一,其他的同学想学习模仿,然后每次开总结会的时候,老师就让那些优秀学生介绍一些自己的学习经验,希望班上其他同学呢,能从中能学到一些东西。

开源框架的出现,对整个IT行业来说,绝对是福利!同样也解决了很多企业技术管理的难题,比如招不到人的问题、上手难的问题、开发周期长、没能力开发复杂的技术框架等等,现在很多大公司都有自己的框架,例如阿里的dubbo,解决了很多小公司开发不了分布式调度服务框架,比如我之前接触过的一家公司,对于一个简单的业务,基本上不用java技术,前、后端分离开发,后端全程模块拖拽,直接在里面写sql,即可实现数据报文的输入/输出!

当然,底层还是使用java来实现的,只是出现问题了,需要自己能排查!

上面只是简要的介绍了主流的开源框架,实际上在java的第三方框架生态里,已经有几万个,例如:Netty 框架,一个成熟的高性能网络编程框架,主要是面向 NIO 开发,因为 jdk 中的 nio 存在不好用的问题,所以很多开发者弃而选择第三方框架来开发。

还有我们常用的 apache的 common 包,这些第三方框架包,无疑都帮java弥补了自身的不足。

相关学习书籍如下:

  • Spring源码深度解析;
  • Netty实战;
  • 重构-改善既有代码的设计;

4、中间件学习

当你掌握了一些主流的开发框架之后,此时的你,基本可以独立负责一个小项目整个后端的开发了,但是如果面对一个请求量很大、对响应要求很高的系统,传统的解决办法基本解决不了你所面临的问题!

这个时候,你可能需要了解中间件了,例如分布式缓存:redis、memcached,分布式消息队列:activemq 、rabbitmq、rocketmq、kafka,分布式搜索引擎:elasticsearch,分布式任务调度:quartz 等等。

这些中间件的出现,主要是为了解决在集群环境下,单体应用系统解决不了的问题。

例如,redis的出现,就是为了解决在集群环境下,单体应用系统缓存不同步的问题,rabbitmq实现单体应用中各个模块的解耦,elasticsearch解决在集群环境下搜索各种信息的服务。

因为技术更新迭代太快!关于这块内容的学习,可以在网上查询相关博客网站写的系列文章!对学习会非常有帮助!

5、数据库学习

从业务的角度看,任何一门技术语言,其实都可以看成一种中间件,包括 java 也是,对于一个用户来说,想要的就是数据,即:用户 -> 数据。而数据一般存放于数据库,对于数据库这块,其重要性可见一斑!在大公司,还有专门的大数据团队来负责数据的筛选、统计、分析!

数据库按照使用用途,分为关系型数据库、非关系型数据库。

  • 关系型数据库:主要就是我们做业务时经常会接触到的一种数据库,在设计时主要需要遵循三范式要求。
  • 非关系型数据库:主要是面向那些不能用结构化关系表达的数据,通过k-v来实现存储。

关于数据库方面需要掌握的知识就比较多了,除了掌握数据结构、sql语句、视图、存储过程、分库分表以外,还需要了解例如索引创建、存储引擎、慢sql优化、数据连接监控、备份与恢复等功能,在这里就不详细的介绍各个数据库的使用了,会在后期的文章中详细介绍数据库的知识!

相关学习书籍如下:

  • SQL基础教程(入门级);
  • 高性能MySQL(进阶级);

6、服务器学习

对于服务器的学习,核心主要是学会如何进行软件安装部署、使用和如何进行线上排查错误,学习完服务器的部署,就可以通过web浏览器来访问项目了。

服务器的安装部署,可以说是非常重要的一环,例如,你想使用分布式消息队列rabbitmq,这个软件的安装过程就有点小复杂,如果自己都无法安装部署在服务器上,谈何使用!

打铁还需自身硬!很多小公司,没有所谓的运维人员,基本都是开发者自己去部署项目,包括集群环境的搭建!所以,如果在一家小公司里,那么学会服务器的部署和线上排查,会对你非常有帮助!

学习完服务器部署之后,整个技术链基本已经成型了!

关于这块内容的学习,可以直接在网上查询,有很多博客网站的博主有专门的板块写这一系列的操作内容。

使用github助力

对于企业来说,之所以招聘java技术人员,主要是因为它能做的事情非常多,比如现在阿里巴巴、京东、美团等企业,很多核心的业务都是用java实现的。

尤其是阿里巴巴,还开源了很多的java框架,在业界比较出名的有 dubbo、rocketmq、fastjson等等。

当然,这些大公司招聘要求也都非常高,尤其是对技术基础的掌握,还有业务的实现。

在上面我们介绍了技术学习路线,其中还有一个很重要的环节,就是用技术来做项目,可能有些朋友很迷茫,不知道如何完整的去做一个项目?

对于 github ,相信很多人不会陌生,一个属于程序员的世界,在里面有非常多有名的项目,代码全部托管在里面,比如:spring、springboot、springcloud、dubbo、shiro、boostrap 等等,我一般会在 github 上筛选 java 项目,然后搜索stars:>10000的排名,找到比较感兴趣的java项目,然后一个一个的看。

对于比较感兴趣的项目,就把代码给clone下来,然后详细的看和理解,当然也不仅仅只是看,对于写的很好的代码,我会自己照着写一遍,我建议初学者找一个感兴趣的项目,然后把代码抄一遍,边抄边理解,这样能锻炼自己做项目的思路,对提升自己做项目的经验非常有帮助!

写到最后

对于目前的互联网行业,学习java技术的朋友,比较主流的职业路线就是向架构师发展,再就是技术总监,当然也有的朋友转向大数据,大数据一般会用 python 脚本来进行开发,不过当你精通了一门技术语言之后,由于大部分开发语言语法特性差不多,再学习其他的语言,相对来说会比较轻松!

上面介绍的技术路线,只是一个大致的流程,作为一名IT从业人员,需要了解的知识还有很多,例如:计算机网络知识、数据加解密、浏览器从发起一个请求到后端服务器所经过的链路、cpu是实现多线程操作的原理等等,每个技术点后面都有故事,技术永远在不断的更新,学习的脚本不能停下来!

小编我谈不上什么大神,不懂的东西还有很多,很多知识还需要深入的学习,可能有些地方写的不够好,望网友们多批评、多指出!

最后,我给自己的要求就是:多看书、多看网上别人写的好的文章、多做项目、多总结、多分享!

谢谢各位阅读本文,希望能帮助那些处于迷茫阶段的朋友!祝你们一臂之力!

Java Geek Tech wechat
欢迎订阅 Java 极客技术,这里分享关于 Java 的一切。