聊聊如何学习JAVA这门语言?

521 阅读9分钟

对于初次接触 Java 的朋友,想必一定很迷茫,想知道 Java 具体能干啥,如何掌握好 Java 这么技术,如何运用好 Java 技术进行项目开发等疑惑!在此,我想以第一人称来聊聊自己学习 Java 的路线,只希望能帮到那些处于迷茫阶段的朋友,助一臂之力!

学习路线

任何一种想推向市场的技术语言,除了要拥有一套自己的语言特性以外,还需要有第三方市场,不然单靠自己的核心工具库,很难适应实际开发中业务的多样性,Java 作为最热门的语言,同样也如此!

单靠 JDK 提供的工具库,很难完成 web 应用程序的开发,但是经过多年的发展,Java 通过其他技术栈的融合,已经完成自己的生态!

在这里,我将 web 应用涉及到的技术栈知识学习分为以下几个部分:

  • Java 核心技术篇
  • 设计模式篇
  • Java 开源框架篇
  • 数据库篇
  • 前端技术篇
  • 中间件篇
  • 服务器篇

1、核心技术篇

这个部分,主要是熟悉语言的基本特性,各个核心组件,以及编码规范,可以说是整个 web 应用中最核心的一个技术栈,内容如下:

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

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

img

其中,Java 的集合类主要集中在java.util包,里面涵盖了很多数据结构和算法实现,例如:ArrayList、HashMap、HashSet、HashTable等类,在开发的时候,基本少不了。

关于IO方面的知识,在我们处理文件以及网络上收发数据时,会频繁的接触!

对于多线程,初学的时候可能很少用到,但是在高并发的场景,合理的多线程编程能极大的改善接口请求响应速度,提高系统资源的利用率!

至于JVM方面的知识,可以说是 Java 最核心的部分,掌握好GC调优,是从熟悉 Java 走向精通 Java 的一个标志,如果你面试的是高级开发,GC调优一定逃不了!

可能有的朋友,会想到SWT部分,SWT是一套 GUI 编程框架,可以使用它来开发一套可视化界面,对于后端开发,基本很少用到,现在主流的可视化界面基本被 HTML 替代掉了!

相关学习书籍,推荐如下:

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

2、设计模式篇

设计模式,是一套高效编程理论,在任何一门开发语言中都适用。

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

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

图片截图于菜鸟教程

3、开源框架篇

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

但是,为啥要学习开源框架呢?

开源框架的出现,对整个IT行业来说,真的绝对是一种福利!比如新手上手难、项目开发周期长、编码风格不统一等问题,SpringSpringMVCMybtaisHibernate等框架的出现,极大的改善了web应用程序后端开发的难度,缩短了开发周期,对于后端开发者而言,真的是一种解放!

有的大公司,还有专门团队负责开发框架,例如阿里的 dubbo,就是阿里中间件团队开发的分布式调用服务框架,并且已经开源,对于要采用分布式部署的小企业,绝对是福音!

img

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

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

4、数据库篇

从业务的角度出发,纯 Java 开发的应用程序,如果不与数据库连接起来,这个应用程序很难发挥它的作用,甚至吸引不了用户!

任何一门技术语言,其实都可以看成一种中间件,包括 Java 也是,对于一个用户来说,想要的就是数据,即:用户 -> 数据。而数据一般存放于数据库,对于数据库这块,其重要性可见一斑!

因为数据的存储需求,还诞生了很多巨头公司,例如:oracle、MongoDB。

在大公司,还有专门的大数据团队来负责数据的筛选、统计、分析,以助力销售部门做计划!

img

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

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

关系型数据库,是一种使用非常广泛的数据库,大部分业务都使用关系型数据库来存储数据,例如我们用户表、订单表、产品表等。

随之业务的快速发展,出现了很多难以克服的问题,非关系型数据库的出现就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

关于数据库方面,对于初学者而言,重在掌握数据结构、表、sql语句、索引、视图、存储过程、分库分表等常用功能,如果想更深入的发展,还需要掌握存储引擎、慢sql优化、数据连接监控、备份与恢复、数据统计分析等高级功能!

在这里就不详细的介绍各个数据库的使用了,会在后期的文章中详细介绍数据库的知识!

相关学习书籍,推荐如下:

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

5、前端技术篇

真正在实际开发过程中,对于后端开发者而言,不可能只做 Java 的开发,有一些公司连前端开发都没有,前端任务全部都由后端人员来兼顾开发完成,当然作为后端人员,我们不可能啥都会,例如最新的 vue、react、angluar等前端框架,都是需要花精力去学习的,如果你有足够的精力,没问题。

在这里推荐想学习前端技术的后端人员,重在掌握 Html、JavaScript技术,因为这两个技术是整个前端开发的基础,学完之后再学其他框架会更加游刃有余!

6、中间件篇

当我们初步掌握了 Java 相关核心技术、数据库知识、前端技术等知识之后,

但是如果面对一个请求量很大、对响应要求很高的系统,传统的解决办法基本解决不了你所面临的问题!

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

img

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

例如,redis的出现,解决了在集群环境下,单体应用系统缓存不同步的问题,rabbitmq实现单体应用中生产与消费者的解耦,elasticsearch解决在集群环境下搜索各种信息的服务等等。

因为技术更新迭代太快!看书可能不太跟得上,关于这块内容的学习,可以自行在网上查询相关博客网站写的系列文章,或者直接查询官网的文档。对学习会非常有帮助!

7、服务器篇

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

img

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

打铁还需自身硬!很多小公司,没有所谓的运维人员,基本都是开发者自己去部署项目,包括集群环境的搭建和维护!

所以,如果在一家小公司里,那么学会服务器的部署、线上错误排查和解决,会对你非常有帮助!

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

小结

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

作为一名IT从业人员,需要了解的知识还有很多,技术永远在不断的更新,学习的脚本不能停下来!