Java 学习路线

by 开源鸿蒙社Java项目组

前言

首先呢,我们要了解 Java 的应用场景和就业方向,看看和自己的学习目的是否一致。

目前,Java 由于其优秀的特性以及火爆的生态,岗位需求量大,是后台开发、安卓开发、大数据开发的主流编程语言,因此学习资源也很丰富,值得学习!

然后呢,咱们社团是有Java项目组的,如果你的目标是想要加入进来,那得提醒你一下,学习完第三个阶段的开发框架才仅仅达到进入java项目组的门槛,而且后续还有更多学习内容和考验等待着你。

所以请认真学习,巩固基础,早日达成你的目标!

PS:有小星星的:star:都是非常推荐的学习资源哦

阶段 1:编程语言基础

目标

培养兴趣、快速上手,能运行和编写简单的 Java 程序。

学完本阶段后,可以试着用 Java 解决一些数学计算问题、编写图书管理系统等桌面端 GUI 程序,甚至是五子棋之类的小游戏。

Java 编程基础(45 天)

需掌握的知识

  • Java 特点(看不懂没事,别背!了解就行)
  • 环境搭建
  • IDEA 开发工具
    • 新建项目
    • 运行调试
    • 界面配置
    • 插件管理
  • Java 基础语法
    • 数据类型
    • 流程控制
  • 数组
  • 面向对象
    • 方法
    • 重载
    • 封装
    • 继承
    • 多态
  • 抽象类
  • 接口
  • 枚举
  • 常用类
    • String
    • 日期时间
  • 集合类
  • 泛型
  • 注解
  • 异常处理
  • 多线程
  • IO 流
  • 反射

学习建议

1)坚持:初学一门语言时,一定要持续学习,不能中断!

2)实践:想要学好编程,一定要多敲代码!建议先跟着书上的例子敲一遍代码,然后试着自主编写代码,并完成课后练习。

3)万事开头难:不理解代码也没关系,可以学习 Debug 后,一行一行地打断点执行,查看程序的执行过程。千万不要觉得麻烦,养成习惯后真的能节省很多重复学习的时间。

思考问题

  1. 为什么重写 equals 还要重写 hashcode?
  2. == 和 equals 比较的区别
  3. 为啥有时会出现 4.0 - 3.6 = 0.40000001 这种现象?
  4. final 关键字的作用
  5. 介绍 Java 的集合类
  6. ArrayList 和 LinkedList 的区别

资源

Java 8(3 天)

需掌握的知识

  • Stream API
  • Lambda 表达式
  • 新日期时间 API
  • 接口默认方法

学习建议

Java 8 是如今企业开发中最主流的 Java 稳定版本,在这个版本出现了很多实用的新特性,虽然面试考点不多,但能够提升编程效率,建议学习。

此外,很多同学不怎么在简历上写自己会 Java 8,因此如果你把 Java 8 的知识点写在简历上,会大大加分的。

思考问题

  1. Java 8 有哪些新特性?
  2. HashMap 在 jdk 1.7 和 1.8 的区别?

资源

练手项目

尾声

学完了 Java 基础后,有些同学会感到迷茫了啊,感觉好像啥也做不出来,不知道下一步做什么,我这一身的本领该如何施展啊?

不要慌,也不要急着去学新技术,接下来我们要多用 Java 来写代码了,巩固基础,但是写什么呢?

当然是数据结构和算法!

阶段 2:巩固基础

目标

想学好编程,计算机基础知识要学好。

比如算法,是程序员的灵魂。学好算法有助于我们理解程序、开拓思路,因此也是很多公司面试时考察的关键,在找工作前,还是要刷个上百道算法题目的。

我们这个阶段的目标是:熟练使用 Java 语言来编写程序,巩固 Java 基础。(那直接用 Java 来写算法题目,一举两得,岂不美哉?)

此外,建议大家利用零碎时间多去了解 计算机基础知识 ,比如操作系统、计算机网络等,对你后面学习开发框架之类的知识都有帮助。

Java 基础(30 天)

学习建议

建议大家去阅读 《Java 核心技术卷 1》,这本书堪称经典,是帮助你复习巩固  Java 的不二之选,其中图形界面章节可以选择不看。

之后可以刷网上免费的 Java 练习题,检验自己的水平。虽然都是选择题,但能学到很多 Java 语言的特性、避免写代码时容易犯的错误。

资源

注意注意

如果想快速上手项目,则可以先不急着学下面的数据结构与算法计算机导论操作系统以及计算机网络这四个模块,可以直接进入阶段3。但是如果有考研意向、想打好基础的话需要就得多研究一下上述四个模块哦!

数据结构与算法

详细的学习路线会在后期完善补充,敬请期待。

计算机导论

详细的学习路线会在后期完善补充,敬请期待。

下面的是简单的学习路线

需掌握的知识

  • 计算机发展历史
  • 计算机应用领域
  • 计算机发展方向
  • 计算机基本组成
  • 二进制
  • 编程语言发展

学习建议

咱们学校并没有像其他学校一样一开始就开设这门课程。虽说学习它并不会直接提高你的编程技能,但能够让你更了解计算机和编程,从而在一定程度上帮助你培养学习兴趣、确定学习方向,所以我们学习它还是很有必要的。

自学的话,不用刻意去学习计算机导论,而是可以通过看视频、阅读课外读物的方式慢慢地了解计算机的故事。

资源

操作系统

详细的学习路线会在后期会完善补充上来,敬请期待。

下面的是简单的学习路线

需掌握的知识

  • 操作系统的组成
  • 进程、线程
  • 进程 / 线程间通讯方式
  • 进程调度算法
  • 进程 / 线程同步方式
  • 进程 / 线程状态
  • 死锁
  • 内存管理
  • 局部性原理

学习建议

说实话,操作系统这一块知识挺枯燥的。你说说我现在项目都不会做,你又让我看这些理论,是不是想让我头秃?

我的建议是,可以先利用课余时间看一些网课或者有趣的课外书,对一些操作系统的概念先有个大致的印象,比如进程、线程、死锁,等后面有时间了再系统学习、等到找工作了再去背相关八股文。

咱们还在学校的,就跟着学校的进度学习就行,自学的话可以看下《清华操作系统原理》视频,有实力的小伙伴,能看懂大黑书就更好了,但如果看不懂也别担心,这并不影响你后续知识的学习。

思考问题

  1. 什么是死锁?死锁产生的条件?
  2. 线程有哪几种状态?
  3. 有哪些进程调度算法?
  4. 什么是缓冲区溢出?

资源

  • 视频
  • 书籍
    • 《编码》
    • 《30天自制操作系统》
    • 《现代操作系统》(难度较大,不推荐新手看)
    • 《深入理解计算机系统》(难度较大,不推荐新手看)
    • 《 自己动手写操作系统》(国产好书,网上可以下载)
  • 大学课件

计算机网络

需掌握的知识

  • 网络分层模型
  • 网络传输过程
  • IP、端口
  • HTTP / HTTPS 协议
  • UDP / TCP 协议
  • ARP 地址解析协议
  • 网络安全
  • DNS 域名解析

学习建议

很多学习 Java 开发的同学最后都是从事 后端开发 的工作,而计算机网络知识是后端开发的重点。

和操作系统一样,自学网络可能会很枯燥,建议先看有趣的课外书,比如《图解 HTTP》;或者有趣的视频,比如《计算机网络微课堂》。后面要找工作面试前,再重点去背一些八股文就好了。还在学校的同学好好上课一般就没问题。

学习基础能帮助自己今后发展更稳定,且更容易接受新知识,所以请不要相信基础无用论。

思考问题

  1. 计算机网络各层有哪些协议?
  2. TCP 和 UDP 协议的区别?
  3. TCP 为什么需要三次握手和四次挥手?
  4. HTTP 和 HTTPS 协议的区别?

资源

尾声

巩固基础要花至少 1 个月的时间,当你读完《Java 核心技术卷1》并且不用查询文档也能熟练地用 Java 做题时,就可以接着往下了。

阶段 3:企业开发基础

目标

虽然说我们还在学校,但是面向薪资编程,学习实际后台开发工作要用的基础技术和框架,并能 独立 做出一个具有完整功能的 Java Web 项目,还是很有必要的。而且对于巩固基础,提高实战能力也有很大帮助。

学完这个阶段后,你应该已经能独立开发出大多数常见的后台系统了,比如各种管理系统、商城系统等。

MySQL 数据库(7 天)

企业中大部分业务数据都是用关系型数据库存储的,因此数据库是后台开发同学的必备技能,其中 MySQL 数据库是目前的主流,也是面试时的重点。

详细的学习路线会在后期完善补充,敬请期待。

下面的是简单的学习路线

需掌握的知识

  • 基本概念
  • MySQL 搭建
  • SQL 语句编写
  • 约束
  • 索引
  • 事务
  • 锁机制
  • 设计数据库表
  • 性能优化

学习建议

其中,SQL 语句编写设计数据库表 这两个能力一定要有!

比如让你做一个学生管理系统,你要能想到需要哪些表,比如学生表、班级表;每个表需要哪些字段、字段类型。

这就要求大家多写 SQL、多根据实际的业务场景去练习设计能力。

思考问题

  1. MySQL 索引的最左原则
  2. InnoDB 和 MyIsam 引擎的区别?
  3. 有哪些优化数据库性能的方法?
  4. 如何定位慢查询?
  5. MySQL 支持行锁还是表锁?分别有哪些优缺点?

资源

开发框架(60 天)

Java 之所以能成为主流的企业开发语言,很大一部分原因是它完善的框架生态,用好框架,不仅能够大大提升开发效率,还能提高项目的稳定性、减少维护成本。

开发框架是后台开发工作中不可或缺的,也是面试考察的重点,一定要好好学!

不知道 Java 能做什么的朋友们,学完开发框架,就会有答案啦。

下面给大家推荐的都是企业中应用最多的主流开发框架,知识点比较零碎,就放在一起讲了。

需掌握的知识

PS:名称前面有红色感叹号:exclamation:的,是咱们必须要学习与掌握的,而有:grey_exclamation:灰色感叹号的则是选学内容。

:exclamation: Java Web
  • 描述:Java 网页应用开发基础
  • 一丢丢前端基础
  • XML
  • JSON
  • Servlet
  • Filter
  • Listener
  • JSP
  • JSTL
  • Cookie
  • Session
:exclamation: Spring 5
  • 描述:Java 轻量级应用框架
  • IOC
  • AOP
  • 事务
:exclamation: SpringMVC
  • 描述:Java 轻量级 web 开发框架
  • 什么是 MVC?
  • 请求与响应
  • Restful API
  • 拦截器
  • 配置
  • 执行过程
:exclamation:MyBatis
  • 描述:数据访问框架,操作数据库进行增删改查等操作
  • 增删改查
  • 全局配置
  • 动态 SQL
  • 缓存
  • 和其他框架的整合
  • 逆向工程
:grey_exclamation: MyBatis Plus
  • 描述:Mybatis 的增强工具,能够简化开发、提高效率
  • 引入
  • 通用 CRUD
  • 条件构造器
  • 代码生成器
  • 插件扩展
  • 自定义全局操作
:exclamation: SpringBoot 2
  • 描述:简化 Spring 应用的初始搭建以及开发过程,提高效率
  • 常用注解
  • 资源整合
  • 高级特性
  • 本地热部署
:grey_exclamation:Spring Security
  • 描述:Spring 的安全管理框架
  • 用户认证
  • 权限管理
  • 相关技术:Shiro
:grey_exclamation:Maven / Gradle
  • 描述:项目管理工具
  • 构建
  • 依赖管理
  • 插件
  • 配置
  • 子父工程
  • 多模块打包构建
  • Nexus 私服搭建

学习建议

由于技术较多,且框架之间存在一定的联系,因此建议大家看同一系列的视频教程(尚硅谷、狂神说等等都可以),以保证学习内容的连续以及体验上的一致。

学这些技术的时候,千万不能懒 !一定要多记笔记,并且跟着老师写代码。原理部分不要太过纠结,先以能跟着敲出代码、写出可运行的项目为主,有些东西做出来也能帮助你更好地理解理论。

学习顺序挺重要的,建议按推荐的顺序学,不要一上手就学 SpringBoot。只有先学习下自己整合框架的方法,才能帮你理解 SpringBoot 解决的问题,感受到它的方便和高效。

Maven / Gradle 当成工具用就好,面试基本不问,跟着框架教程去用就行了。以后急着找工作的话,也先不用花太多时间去深入学。大厂面试问这个的也不多。

思考问题

  1. Spring 的 IOC 和 AOP 是什么,有哪些优点?
  2. Spring 框架用到了哪些设计模式?
  3. 介绍 Spring Bean 的生命周期
  4. MyBatis 如何实现延迟加载?
  5. 介绍 MyBatis 的多级缓存机制

资源

已下资源分为两大类,希望快速做出项目的同学请看【速成视频】,但是在时间充裕的情况下,还是一点一点一步一步学习更好

开发规范(3 天)

开发不规范,同事两行泪。

开发规范是团队开发中必须遵守的,有利于提高项目的开发效率、降低维护成本。

工作了是这样的,我们在校生不必那么遵守,但是工作了的就要考虑很多了(bushi)

玩笑归玩笑,养成习惯,形成规范,还是对自己的学习和往后的工作很有帮助的。

需掌握的知识

  • 代码规范
    • 代码风格
    • 命名
    • 其他规则
  • 代码校验(CheckStyle)
  • 提交规范

学习建议

项目做得多了,自然会养成好的习惯,不用刻意去记(毕竟每个团队规范也不完全相同,背了也没用)。也可以直接利用开发工具自带的一些代码检查插件,帮忙养成好的编码习惯。

以后工作了,入职前有时间的话,简单过一遍公司或者团队的代码规范手册就好了,以后做项目的时候能想起来的话就去使用,或者从书中、网上查规范文档,再去遵守。

资源

Git(3 天)

此前大家可能听说过 GitHub,一流的代码开源托管平台。

咱们社团也有 Github 和 Gitee 仓库,不知道Gitee的后面也会知道的 XD。

Git 和它可不一样,是一个版本控制工具,可以更好地管理和共享项目代码,比如把自己的代码传到 GitHub 上、或者从远程下载。

无论自己做项目、还是团队开发,Git 都是现在不可或缺的神器。

所以非常!非常有必要掌握它!

需掌握的知识

  • 区分 Git 和 GitHub
  • 工作区
  • 分支
  • 代码提交、推送、拉取、回退、重置
  • 分支操作
  • 代码合并、解决冲突
  • 标签
  • cherry-pick
  • Git Flow
  • 相关技术:SVN(比较老)

学习建议

每个命令跟着敲一遍,有个大致的印象,会用即可。

建议平时大家可以多把自己的代码使用 Git 命令上传到 自己的Gitee仓库 上,如果能上传到 Github 最好,用的多了自然就熟悉了。

思考问题

  1. 如何解决提交冲突?
  2. 提交不小心出现误操作,如何撤销?
  3. 什么是 Git Flow,它有什么好处?

资源

尾声

学完这个阶段的知识后,一定要再串起来回忆一遍,必须自己独立开发一个 Java Web 项目(量级可以不大,但你学过的技术尽可能地用上)。

如果你只是对 Java 感兴趣、或者只是想试着自己开发后台,并不是想靠 Java 找工作的话,学到这里就可以了。可以把更多时间投入到你主方向的学习中。

关于Java基础部分的学习路线就到这里结束了,后期也会发布完整的包含进阶学习路线的文档,敬请期待~

加油学习吧!

下面还有自学Java的专题资源哦,感兴趣和有需要的同学可以看一看。

自学 Java 专题资源

最后修订时间 2024 / 8 / 19