必看!Java 学习路线

每天推送干货

对于初次接触 Java 的朋友,想必一定很迷茫,想知道 Java 具体能干啥,如何掌握好 Java 这么技术,如何运用好 Java 技术进行项目开发,以及对未来的定位等疑惑!

曾经的我,也一度迷茫,虽然学的很多,但是技术积累的比较散,在面试的时候,一碰到面试官提一些自己没听说过的问题,瞬间就傻逼了,而且时常不够自信,但是自从认识了一些大牛之后,我才发现自己欠缺的是系统性的知识,以及对自己未来的定位。从那时候起,渐渐的开始思考 Java 为什么至今依然这么火,怎么学好 Java 这门技术,以及自己未来的方向。

从1995年 Sun 发布 Java 以来,一直到现在,Java 似乎从未离开过软件工程师的视线,并且每年涌入 Java 生态的开发者还在不停的增加。

据不完全统计,全球有25亿电子器件运行着 Java,450多万 Java 开发者活跃在 web 应用以及安卓市场上,有7.08亿部手机、10亿个智能卡和7亿部 PC 机上运行着 Java 应用程序,越来越多的企业因为使用了 Java 而提高了生产效率,我想这大概就是为什么 Java 是世界第一的开发语言的原因吧~~

必看!Java 学习路线_第1张图片

在此,我想以第一人称来聊聊自己学习 Java 的路线,谈不上牛人,不一定很全,只希望能帮到那些处于迷茫阶段的朋友,助一臂之力!

技术学习路线

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

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

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

  • Java 核心技术篇

  • 设计模式篇

  • Java 开源框架篇

  • 数据库篇

  • 前端技术篇

  • 中间件篇

  • 服务器篇

1、Java核心技术篇

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

  • 基础知识:主要包含程序流程控制、语法特性、注解、异常处理等基础内容。

  • 容器知识:主要包含对象的存取,例如:ArrayList、LinkedList、HashMap、LinkedHashMap、HashTable、HashSet等类,也称为集合类,主要位于java.util包下,编程时会经常用到。

  • IO知识:主要包含文件或者网络的输入/输出操作,涵盖了 File、BIO、NIO、AIO等内容,在处理网络或者文件流时会用到。

  • 多线程知识:主要包含线程的基本概念、使用、以及并发编程等内容,多线程可以说是 Java 高性能的核心基石,掌握好多线程和并发编程知识,你能轻松吊打面试官。

  • JVM知识:这个部分的知识,估计很多初学者没有实质的接触到,但是任何高端的面试,JVM面试一定是少不了,核心知识点主要是GC调优。

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

必看!Java 学习路线_第2张图片

其中,位于在java.util包下的集合类,涵盖了很多的数据结构和算法实现,例如动态数组、双向链表、队列、栈、Set、Map等,不仅功能强大,而且还提供了很多算法实践案例,面试必问内容。

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

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

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

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

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

  • java核心技术卷I、II;

  • Effective Java中文版(第2版);

  • Java并发编程实战;

  • 深入理解Java虚拟机;

  • Java编程思想

2、设计模式篇

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

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

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

必看!Java 学习路线_第3张图片 截图于菜鸟教程

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

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

  • 大话设计模式

3、Java 开源框架篇

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

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

有时候,我们所写的代码,不一定就是最优的,例如一个用 JavaScript 开发的俄罗斯方块,有的小伙伴可能花了1000多行写出来,但是有的大神100行不到就写出来了,而且性能好,没办法,真的你得承认这就是差别。

当然小编是学渣,写不出来这么高端的代码,但是没有关系,大神写出来的代码,我们可以虚心学习,以求赐教!

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

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

必看!Java 学习路线_第4张图片

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

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

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

  • Spring源码深度解析;

  • Netty实战;

  • 重构-改善既有代码的设计;

  • 领域驱动设计

4、数据库篇

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

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

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

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

必看!Java 学习路线_第5张图片

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

  • 关系型数据库:主要就是我们做业务时经常会接触到的一种数据库,在设计时主要需要遵循三范式要求,以设计符合实际需要的表结构关系。

  • 非关系型数据库:主要是面向那些不能用结构化关系表达的数据,通过k-v来实现存储。

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

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

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

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

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

  • SQL基础教程(入门级);

  • 高性能MySQL(进阶级);

5、前端技术篇

真正在实际开发过程中,对于后端开发者而言,不可能只做 Java 的开发,例如 pdf 自定义报表打印,这个需求就需要用到 Html 知识,有一些公司连前端开发都没有,前端任务全部都由后端人员来兼顾开发完成,当然作为后端人员,我们不可能啥都会,例如最新的 vue、react、angluar等前端框架,都是需要花精力去学习的,如果你有足够的精力,可以尝试去学习一下。

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

相关学习网站,推荐如下:

  • w3school(网站)

6、中间件篇

当我们初步掌握了 Java 相关核心技术、数据库知识、前端技术等知识之后,此时的你,基本可以独立开发一个小项目了,是不是很兴奋~~

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

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

必看!Java 学习路线_第6张图片

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

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

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

7、服务器篇

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

必看!Java 学习路线_第7张图片

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

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

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

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

关于这块内容的学习,我不建议看书,因为更新太快,而且出现很多问题,书上也给不了答案,大部分出现的问题,在网上都可以直接搜索得到。

使用github助力

对于企业来说,之所以招聘 Java 技术人员,主要是因为 Java 能极大的提升公司的生产效率和运营效率,比如阿里巴巴、京东、美团等企业,很多核心的业务都是用 Java 开发的。

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

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

当然,给出的薪资待遇一点都不低,大家加油哦!

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

说到 github ,相信很多人不会陌生,一个属于程序员的乐园,在里面有非常非常多有名的项目,代码全部托管在里面,比如:spring、springboot、springcloud、dubbo、shiro、boostrap等等。

我会定期在 github 上搜索stars大于10000的项目,筛选 Java 项目,找到比较感兴趣的 Java 项目,然后每个都点进去看一下。

必看!Java 学习路线_第8张图片

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

github 真的是一个非常好的学习技术的地方,例如电商项目、OA项目、新闻视频项目等等,都有现成的代码,如果你所在项目碰到了技术瓶颈,可以参考类似的项目是怎么实现的,说不定就能帮到你!

写到最后

对于目前的互联网行业,学习 Java 技术的朋友,比较主流的职业路线就是向架构师发展或者项目经理方向发展,再就是技术总监,最后就是自己创业做老板,当然也有的朋友转向大数据,还有的朋友转向人工智能开发。

虽然路线有不同,但基本都在整个IT圈子里。就目前来看,Java 未来的市场空间依然很大,包括现在炒的很火的人工智能,服务端的开发还是采用 Java 来作为平台的首选开发语言,因此对于刚刚入行的小伙伴,对未来也不必过于担心,干就是了!

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

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

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

< END >

1. 全栈架构之打包推荐【建议收藏,常读】

2. 一个空格引发的“惨案“

3. 分布式系统中Session共享的常用方案

4. Java语言“坑爹”排行榜TOP 10

5. 我是一个Java类(附带精彩吐槽)

6. mysql索引失效,差点我的工作凉了

7. 既生synchronized,何生volatile?

8. 微服务一直火,为什么服务化要搞懂?

9. MySQL的COUNT语句,不简单!

10. 漫画:HashSet和TreeSet实现与原理

扫码二维码关注我

·end·

—如果本文有帮助,请分享到朋友圈吧—

我们一起愉快的玩耍!

你点的每个赞,我都认真当成了喜欢

你可能感兴趣的:(必看!Java 学习路线)