# 第02章:Java学习路线指南
大家好,我是冰河~~
这段时间陆陆续续的将Java后端开发工程师的学习路线整理完了,今天抽个时间做一下汇总,冰河的这份Java学习路线基本上包含了必学且工作中必用的技术栈,并以大学四年作为贯穿的主线路进行分阶段学习。
当然,这套学习路线包括但不限于大学生,只要愿意按照这个路线肝下去,进大厂拿高薪是100%没有问题的。毕竟,对比了网络上十几篇的Java推荐学习路线,弥补了很多缺失的重要知识点。
最近,和很多业内的朋友聊天,在网上也看了不少博客,有这样一个辩题:“当下Java学习的人很多,市场已经饱和,很难在找到好工作,并且随着技术的不断更新,大量的程序语言被应用于各行各业,学习Java的时间成本太高。”
冰河虽然也使用其他的诸如Go、C++、python、javascript等语言,但相比较之下,个人还是更喜欢Java,Java需要学习的内容确实比较多,但作为一个代码逻辑性强,生态强大的编程语言,它能够提供强大的技术框架,是实现企业级web项目最好的技术语言,随着学习Java的人越来越多,对于从业者的专业性要求也更高了,所以扎实的技术功底就显得尤为重要,这也无形中鞭策着我们不断去深入学习!
高薪程序员必学的Java路线
# 阶段一:Java基础篇
# 第一章:JavaSE
1.1 基础语法
每一门技术语言都是在处理数据,整个互联网也都是数据的支撑,对于同样的数据,每一门语言都有其特有的定义方式,整数是什么类型、中英文是什么类型、小数又是什么类型、是与否又是什么类型,这就是Java的数据类型的定义,同时,在基本语法中我们还要学习Java中的运算、逻辑处理等。
1.2 面向对象
Java是一门面向对象的语言,面向对象如何理解?类又是什么?它的三大特性又是什么?这章节学完你就有答案了。
1.3 容器
容器,见名知意!用来存储数据的器皿,不同类型的容器存储不同类型的数据,如同碗里装饭,杯里盛水一样的道理。
1.4 异常
若所有的程序都成功运行,那么异常就毫无作用,但这是不可能的,所以异常就是用来定义程序非正常运行下的状态表现,可以说异常是对程序的一种保护,对用户的友好交互,对程序员查找问题的绳索!
1.5 泛型
这个词有点专业了,初学者可能听到“泛型”会很懵逼,其实也很好理解,Java1.5被引入后泛型就被广泛延用至今,所谓泛型就是参数化类型,在创建一个对象时不指定它具体的类型,当别人使用它时,再去定义它具体属于什么类型,就像一个铁块,它被生产出来之后就是一个铁块,铁匠把它打造成刀它就是刀,打造成斧头它就是斧头。
1.6 注解
注解也是Java1.5被引入的,说白了就是给你的对象打一个标签,让它拥有特定的作用和特点,它的诞生节省了程序员不少的工作。
1.7 枚举
枚举,也是见名知意的一个知识点,将一些属性进行分类归档,作为一个枚举,供所有需要用到这些属性的对象使用。
1.8 I/O
I/O是Input和Out的缩写,进出之类,同样针对的是数据,往一个系统里写数据,导出为一个word或txt这就是I/O来干的活。
# 第二章:Java并发多线程
2.1 多线程
何为线程?线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。通俗点说如果你打开微信看作打开一个进程的话,在微信里聊天、语音、刷朋友圈就是每一个进程,每个进程独立但又全归属与微信这个进程。所谓的多线程,就是多个线程之前来回的切换,运行,以满足业务的需要。
2.2 锁
不同的线程之前的切换,必定会涉及到资源占用的冲突问题,这就是锁的含义,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态。
2.3 线程安全
多个线程之间的切换,也必定会带来数据的不安全性,这时候锁的作用就得以发挥了,合理的运用好锁,可以让线程变安全,如同你家门上有把锁,可以有效安全的保证财务安全。
2.4 JUC工具类
同样时Java1.5诞生的东西,全称java.util.concurrent,是一个工具包,里面提供者很多处理并发问题的类,或者说工具,合理的使用可以事半功倍!
# 第三章:Java虚拟机
3.1 类加载机制
类加载的步骤为,加载 -> 验证 -> 准备 -> 解析 -> 初始化,又是一个五步走战略,将你写的Java类或者说对象也行,编译成JVM可以识别的东西后,通过JVM的类加载机器,加载到内存中,进而在解析运行在计算机上。
3.2 字节码
编译成什么东西呢,这个东西就是字节码,字节码文件,JVM再将其解释成计算机可以识别的机器码。
3.3 运行时数据区域
在JVM运行时所划分出来的区域,用以存储运行时所需要的各种数据
3.4 垃圾收集
在一个系统长时间运行时,必定会带来很多废弃的对象,我们称之为垃圾,那么良好的垃圾收集有利于系统的稳定运行。
3.5 内存的分配与回收
在JVM运行需要使用到内存,合理的分配内存以及回收内存,是性能调优的重要点
3.6 性能监控和调优
JVM的性能调优是一个优秀的Java工程师的必备技能
# 阶段二:Java扩展篇
# 第四章:操作系统
4.1 操作系统基础知识
那么什么是操作系统?章一的开始已经提到了,操作系统的功能有哪些?常见的操作系统有哪些?各自优缺点,什么是用户态?什么又是内核态?这些问题都是在这个小节中大家需要搞清楚的。
4.2 进程和线程
在大一路线中Java多线程部分也提到了线程与进程的概念,这里就不重复了,搞清楚线程与进程的区别,各自作用即可,不过在这里要注意的是进程的生命周期,进程间的通信方式(这个面试八股文中挺喜欢被问到)?还有一个就是进程间的调度算法,操作系统层面我们更关注于进程,Java层面我们更关注于线程。
4.3 并发/锁
在操作系统中同样存在着并发问题,有并发自然就有安全问题,有安全问题,自然就有“锁”这个概念,如果在大一已经熟练的掌握了Java多线程部分知识的同学,对于这部分内容的掌握,可谓是轻车熟路咯。
4.4 内存管理
所谓内存管理,就是合理的分配系统中多个进程在运行时的空间资源,其主要包含下图中这些内容,内存的分配与回收、虚地址与物理地址之间的转换、通过虚拟内存基础,从逻辑上实现内存的扩充,通过内存分配策略和回收算法来提高内存使用率,内存安全主要是保证进程间在使用内存时的互不干扰!
4.5 文件系统
文件系统,顾名思义就是对于操作系统内文件管理的这么一个模块,包括文件的增删改查、访问权限控制、目录管理、文件数据的存储。
# 第五章:Linux
5.1 Linux内核
Linux本质上其实指的是Linux内核,而内核的作用是:内存管理、硬件设备管理、文件系统管理,应用程序管理,这并非是我们在工作中使用的Linux,我们在工作中所用到的均为发行版,由一些组织或厂商通过将Linux内核与其他软件包装起来,并提供系统的安装配置、设定与管理工具,从而进行发布供我们使用。
常见的Linux发行版主要为下面两大类:
- RedHat(小红帽)公司维护的商业发行版本RHEL
- 基于RHEL开发的社区发行版CentOS、基于Debian的Ubuntu
5.2 Linux文件系统
Linux的文件系统,总体上的作用和章一的文件系统相似,不再展开,不过对于Linux的文件系统,大家要记住一句颇有哲学意义的名言:“一切皆文件”,这句话源于unix。
5.3 Linux常用命令
学习Linux最头大的其实就是记住这繁多的各种操作命令,与windos这些桌面系统不同的是,我们在工作中所使用的Linux都要通过命令来进行各种操作,后面对于这些常用的命令,冰河会单独整理出一篇文章分享给大家,这里只做路线介绍,以及各个章节知识点的简介。
5.4 Linux环境变量
安装过技术软件的小伙伴们,对于环境变量这个词应该不陌生,而在Linux中同样需要环境变量,用来定义系统运行环境的一些参数。
# 第六章:Shell编程
shell是当下最流行的Linux环境下的运维自动化语言,另外一个是python,能够熟练的使用shell可以提高我们在工作中的效率,因为,学习并掌握shell语言,会让大家在找工作时更有底气。
6.1 shell变量
6.2 shell基本运算符
6.3 shell流程控制
6.4 shell函数
shell技术冰河准备在后面找个时间,单独给大家分享一下它的语法逻辑,以及常见的通过shell脚本来实现的执行脚本,请持续关注哈。这部分内容,都会在冰河技术知识星球给大家进行更新。
# 第七章:计算机网络/网络编程
7.1 OSI七层模型
一张图说清楚OSI七层模型,每一层都有其相应的作用。
7.2 TCP/IP五层模型
同样一张图来搞定TCP/IP五层模型,也有人说是四层模型,这个看自己,无所谓,主要是要理解这个流程。
7.3 网络设备
网络设备中我们主要需要知道的是交换机和路由器,这个我想大家都很熟悉了,自己可以网上看看他们详细的作用和功能哈
7.4 HTTP与HTTPS
我们在浏览器中输入网址时常常可以看到前缀带有http或者https,http是一种超文本传输协议,属于应用层传输协议,基于tcp/ip协议进行数据传输,简单来说,它的作用就是限定客户端与服务端数据传输的一种规则。目前版本已经到达http3.0
而https是在http的基础之上进行了升级,加上了一层SSL证书的校验,可以进行加密传输、身份认证,安全性更高。
7.5 IP与ARP
IP(Internet Protocol,网际协议) 是 TCP/IP 协议中最重要的协议之一,属于网络层的协议,主要作用是定义数据包的格式、对数据包进行路由和寻址,以便它们可以跨网络传播并到达正确的目的地。
在理解ARP(地址解析协议)之前,大家需要去搞清楚什么是Mac地址哈,搞清楚Mac地址之后,就很容易理解ARP的作用了,主要是用来解决IP地址转像Mac地址的,这里我们可以把IP地址看成家庭住址,而Mac地址为身份证号,通过家庭住址跳转到身份证号,才能准确的定位到最终目标。
7.6 TCP与UDP
这部分内容很多,并且非常重要!可以说面试中被问到的概率至少80%,所以大家一定要认真学,搞明白TCP与UDP的区别,以及他们的作用,使用场景。
TCP的三次握手与四次挥手
三次握手
四次挥手
7.7 DNS域名系统
这部分我们可以这样理解,所谓的DNS域名系统,主要用来解决域名和IP地址之间的映射问题,比如我们在浏览器上输入一个www.baidu.com,这是百度公司的官方域名,但实际上我们要请求的是他们的服务器内容,这时候就需要DNS出来工作啦。
7.8 加密算法
数据在网络传输的过程中,最重要的就是安全性,为了万无一失,便出现了加密算法,目前主流的算法分为对称加密和非对称加密两种,每种算法都有很多实现,大家可以选一些常见的学习。
7.9 网络攻击
在网络的世界里,很多不法分子都会利用技术,找到我们网站的漏洞,从而进行网络攻击,获取不法利益,常见的网络攻击有:CSRF、XSS、DOS,甚至于SQL注入也是。
# 第八章:数据结构和算法
手撕编程题是很多大厂的必考项目,数据结构与算法,考察的是应聘者对于程序逻辑的理解,同时也考验着大家处理问题的能力与变通情况,因此,请大家狂刷算法题时,一定要学会举一反三,学会思考和总结,如下是冰河整理的学习路线。
# 第九章:数据存储
9.1 数据库基础
什么是数据库三范式?事务的四大特性?事务的隔离级别都有哪些?
9.2 MySQL
MySQL的学习主要包含如下这些部分
9.3 Redis
作为经典的非关系型数据库,redis可以说在日后的工作中,百分百会用到,所以必须要学!
9.4 Hadoop大数据生态
作为大数据领域必不可少的Hadoop生态,是每个学习大数据技术的程序员都要学习和了解的,而冰河在大数据领域也出版过相应的图书,可以进一步带你深挖大数据技术。
# 阶段三:Java提升篇
# 第十章:JavaWeb
10.1 servlet
虽然servlet已经过时了,很是作为JavaWeb容器的基石,SpringMVC的底层,快速的学一下也是可以的,学习之前先搞清楚两个名词,客户端/用户端,服务器端/程序端
客户端:发出请求的地方,一般是浏览器的网页端
服务器端:接收并处理请求的地方,多为后台程序
而servlet要干的活就是接受由客户端发来的请求,调用其他Java程序处理请求,并将处理结果返回给客户端。
10.2 JSP
JSP(Java server pages):Java服务器界面,一种动态的网页开发结束,可以将Java代码嵌入到html中,并由JSP引擎编译执行生成页面,再返回给客户端,一度十分强大,但随着现在前后端分离开发的盛行,它的热度也在持续走低。
10.3 Tomcat
Tomcat是一个servlet容器,也是一个web服务器,我们编写的JavaWeb程序要想运行起来,必须部署到Servlet容器上,而Tomcat就是其中之前,其他的有jetty,Jboss等。
10.4 JDBC
在之前的大一与大二学习路线中,冰河都提到过“万物皆为数据”,所有的后端语言做的事情就是处理数据,那么如何通过应用程序处理数据?这就不得不提JDBC,作为一个较为底层的JavaAPI,它主要的作用就是执行Sql语句,链接数据库与Java应用程序。
10.5 Spring全家桶
目前最主流,也是学习Java最核心的技术栈来了,那就是Spring的全家桶,包括Spring、SpringBoot、SpringData、SpringCloud、SpringSecurity。不过现在大部分的技术人员已经用mybatis替代了springdata去操作数据。
10.6 Mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录 。
10.7 MyBatis-Plus
看名字就知道是Mybatis的增强版,在Mybatis的框架基础之上进行的开发,同时增加了很多便捷功能,诸如代码生成器、条件构造器、分页插件等。
10.8 MQ
对于很多高并发的项目,MQ是必不可少的,MQ是MessageQueue的缩写,中文称之“消息队列”,是一种先进先出的数据结构,常见的消息中间件有ActiveMQ、RabbitMQ、RocketMQ,Kafka等。
10.9 XML
xml是一种可扩展标记性语言,主要用于保存数据、项目的配置文件等,结合Mybatis进行sql的处理,功能挺强大。
10.10 Swagger
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务,可以代替postman等调试工具,进行后端接口的测试。
10.11 Driud
Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池!
# 第十一章:前端
11.1 HTML基础
11.2 CSS基础
11.3 JavaScript
11.4 jQuery
11.5 easyUI
11.6 主流前端框架
- Vue是一套用于构建用户界面的渐进式框架,采用自底向上增量开发的设计,核心库只关注视图层,不仅易上手,还方便与第三方库或项目整合。
- React是用于构建用户界面的JavaScript库,主要用于构建UI。你可以在React里传递多种类型的参数,如声明代码,帮助你渲染出UI、也可以是静态的HTML DOM元素、也可以传递动态变量,甚至是可交互的应用组件。
- Angular拥有很好的应用程序,是一个以JavaSpript编写的库,模板功能也异常强大,本身就带有丰富的Angular指令。一方面可以通过指令扩宽HTML,一方面可以通过表达式绑定数据到HTML。
# 第十二章:基础项目
点击 -> 简易商城脚手架项目(又名SpringCloud Alibaba实战项目) (opens new window)
# 第十三章:技术升级
这部分内容,属于技术的增强内容,也是一个初中级程序员,迈向高级程序员的蜕变之路,在这份学习路线里只列举清单,具体的学习内容,冰河已经在 冰河技术 知识星球整理好了,并且很多以实战项目的形式分享给大家!
13.1 设计模式
13.2 JDK源码解读
13.3 Java新特性
13.4 Java定时任务
13.5 Web实时消息推送
13.6 Maven
13.7 Git
# 阶段四:Java工作篇
# 第十四章:分布式或高并发实战项目
14.1 分布式高并发项目
- 点击 -> 手写高性能网关 (opens new window)
- 点击 -> 分布式Seckill秒杀系统 (opens new window)
- 点击 -> 分布式IM即时通讯系统 (opens new window)
- 点击 -> 手写高性能RPC框架 (opens new window)
- 点击 -> 实战高并发设计模式 (opens new window)
- 其他项目点击 -> 文末阅读原文
14.2 Git上开源项目
这部分,是给那些学有余力的同学提供的,在github上有很多的开源好项目,或者大家自己也可以将自己的代码放上去,进行开源共享,如果效果不错的话,完全就成了你拿高薪的一个资本!
# 第十五章:手撕算法
15.1 LeetCode100题
算法是考验一个程序员逻辑思维的良好渠道,也是互联网企业最喜欢考的内容,而LeetCode是一个非常非常好的算法练习平台,冰河自己也整理了一部分自己之前刷的题目,感兴趣的可以私聊哈
# 第十六章:Java面试大全
大一至大四的全部路线学完之后,还需要通过一系列的面试题,进行学习巩固,网上有很多的博主进行了汇总整理,但看了几个之后,觉得不够全量,总是有漏掉的内容,所以后面冰河准备自己肝一个相对全一点的面试大全出来!
# 第十七章:面经
所谓面经,就是过往的面试者,在面试过程中被问到的问题,这个挺有用的,多刷一刷面经,可以把握不同公司对于技术的方向点,再针对性准备时有帮助,这里推荐“牛客网”、“GitHub”等网站刷面经。
# 第十八章:简历
最后一步就是制作简历,投递简历了,制作简历的要义是:以实为主,美化措辞,扬长避短
以下是整理的一些比较靠谱的简历模板网站
- 木及简历(推荐,部分免费):https://www.mujicv.com (opens new window)
- 简单简历(推荐,部分免费):https://easycv.cn (opens new window)
- 极简简历(免费):https://www.polebrief.com (opens new window)
- Markdown 简历排版工具(开源免费):https://www.polebrief.com (opens new window)
- typora+markdown+css 自定义简历模板:https://github.com/Snailclimb/typora-markdown-resume (opens new window)
- 超级简历(部分收费):https://www.wondercv.com (opens new window)
# 写在结尾
在冰河的知识星球除了目前正在热更的高性能网关外,还有其他6个项目,像分布式IM即时通讯系统、Sekill分布式秒杀系统、手写RPC、简易商城系统等等,这些项目的需求、方案、架构、落地等均来自互联网真实业务场景,让你真正学到互联网大厂的业务与技术落地方案,并将其有效转化为自己的知识储备。
值得一提的是:冰河自研的Polaris高性能网关比某些开源网关项目性能更高,你还在等啥?不少小伙伴经过星球硬核技术和项目的历练,早已成功跳槽加薪,实现薪资翻倍,而你,还在原地踏步,抱怨大环境不好。2024年抛弃焦虑和抱怨,我们一起塌下心来沉淀硬核技术和项目,让自己的薪资更上一层楼。
目前,领取5折优惠券,就可以跟冰河一起学习《简易商城脚手架项目》、《手撸RPC专栏》和《Spring6核心技术与源码解析》、《实战高并发设计模式》、《分布式IM即时通讯系统》和《高性能Polaris网关》,从零开始介绍原理、设计架构、手撸代码。
花很少的钱就能学这么多硬核技术、中间件项目和大厂秒杀系统与分布式IM即时通讯系统,比其他培训机构不知便宜多少倍,硬核多少倍,如果是我,我会买他个十年!
加入要趁早,后续还会随着项目和加入的人数涨价,而且只会涨,不会降,先加入的小伙伴就是赚到。
另外,还有一个限时福利,邀请一个小伙伴加入,冰河就会给一笔 分享有奖 ,有些小伙伴都邀请了50+人,早就回本了!
# 其他方式加入星球
- 链接 :打开链接 http://m6z.cn/6aeFbs (opens new window) 加入星球。
- 回复 :在公众号 冰河技术 回复 星球 领取优惠券加入星球。
特别提醒: 苹果用户进圈或续费,请加微信 hacker_binghe 扫二维码,或者去公众号 冰河技术 回复 星球 扫二维码加入星球。
好了,今天就到这儿吧,我是冰河,我们下期见~~