lwh1019

前言

最近老是有粉丝私信我说感觉自己学java越来越难了,这其中有刚毕业的应届生说自己的技术找不到满意的工作,也有在学校的大学习说找不到学习方式,更多的是正在工作的java开发人员说是现在的技术更新太快,自己很难跟得上大厂的需求跳槽太难!针对粉丝跟我说的这些情况我为大家整理了java全栈的这一套学习路线,深入浅出,简单好学!满满的干货都放在下面了!

Java 入门

学什么?

Java 语言从诞生到现在已经有20多年了,从Tiobe排行榜上来看,Java 语言常年霸榜经久不衰,所以不要怕学完 Java 后突然不流行了,至少这几年Java 就业机会非常多。

如果你有其他语言的基础,比如之前学过 C、C++等,那学起 Java 应该是非常容易的,也容易上手。如果你没有语言基础,又不想了解太底层的东西,那学 Java 还是不错的。至于说 python,光从语言层面上看,python 确实非常简单,估计你一周内就可以学会并且代码写的还不错,但是 Java 不一样,一周你只能简单了解一下语法,想写好代码几乎不可能。另外 Go 语言势头很猛,大家也可以关注一下。

一般来说 Java 入门你需要掌握下面这些知识点:

  • 面向过程 VS 面向对象
  • 面向对象基本特征:封装、继承、多态
  • 访问控制符:private、default、protected、public
  • 数据类型:基本类型、引用类型
  • 控制流程:for、while、switch 等
  • 序列化
  • 异常处理(有点难度)
  • 泛型(有点难度)

怎么学?

如果你是零基础,建议你可以找一些 Java 入门的视频看一下,网上视频鱼龙混杂,大家注意甄别。推荐一个比较好的平台:B 站
不是让你去看二次元的,里面有很多学习资源。(嘿哈)

敲黑板啦:视频不要贪多,因为没有一个大牛是看视频看出来的。 看视频是别人将知识点往你脑袋里灌,最大的好处是能让你快速入门,如果你想学到更多,你需要的是自我学习,带有思考的自我学习。

计算机基础

科班出身的同学对《计算机网络》和《操作系统》这两门课应该不会陌生,至于掌握了多少,你懂得,都是在考前一两周突击学习的,哈哈。

现在大公司对于应届生的要求越来越高,计网和操作系统这两门课是必考的。那些拿了 SSSP Offer 的大牛计算机基础都非常扎实。

学什么?

计算网络的协议非常非常多,很多同学学完都一头雾水,或者仅仅懂一点 HTTP,但是真正要掌握的东西可不少:

  • OSI 七层模型、TCP/IP五层模型
  • 常见网络协议:HTTP、TCP/IP、UDP
  • 网络安全:非对称加密、数字签名、数字证书
  • 网络攻击:DDOS、XSS、CSRF 跨域攻击

怎么学?

计算机网络面试有一道非常经典的面试题:说说你从URL输入到最终页面展现的过程。这一题可以覆盖大部分计网的知识点,可以从 DNS 解析到 HTTP、TCP/IP协议、物理层协议,一直到浏览器渲染页面,你技术功底有多深你就可以聊多深。希望大家学完了也能试着回答一下这个问题。

数据结构和算法

学什么?

有些同学可能要问了:我学 Java 的有必要学习算法吗?答案是:别无选择!

国内互联网面试的流程逐渐在向国外靠拢,像字节跳动、BAT 等大厂,手撕算法题已经成为了必选动作。

确实, Java 相对于 C、C++有着丰富的类库和三方框架,进入工作后大部分人都是在写业务代码,俗称 API boy 或者 Crud boy,算法看起来并不是那么重要,但是考算法真的是公司面试筛选人的低成本办法,如果你写出了算法并且通过了,要么你聪明要么你勤奋(刷题了)。

所以不管你是学什么语言:C、C++、python、Java、GO,算法这一关你必须得过。数据结构和算法的面试核心知识点我已经列出来了,大家可以参考学习,逐个击破。

  • 栈与队列:先进先出、后进先出
  • 线性链表
  • 查找:顺序查找、二分查找
  • 排序:交换类、插入类、选择类
  • 树、二叉树、图:深度优先(DFS)、广度优先(BFS)
  • 递归
  • 分治
  • 滑窗
  • 三大牛逼算法:回溯、贪心、动态规划(DP)

怎么学?

最好或者最笨的方法就是刷题,强烈推荐力扣
建议刷300题以上,要覆盖简单、中等、困难的题目。面试前要训练手感,不要生疏了,可以选保持每日或几日一题。

设计模式

学什么?

金庸小说中牛叉的武功太多了,综合性最强的还是九阳真经,九阴真经分为上、下两卷,上卷为内功基础,下卷为武功招式,这些都是极负盛名的武学秘籍。

那大家思考一下什么是武学秘籍?其实打开来开就是一些固定的招式,牢记这些招式并运用好就是绝顶高手了。

回到编程上来,除了要写干净的代码(clean code),还要运用各种设计模式使代码可读性强、扩展性好、松耦合,这便是大家经常说的编码大牛。

所以不管是学武功还是学编码,都是有一些固定的招式,也就是设计模式。

说到设计模式很多同学可能会跳出来:这个我知道,就是单例模式、工厂模式……

巴拉巴拉说了一堆,但是真正在写代码的时候又是一脸蒙:为什么我写的代码用不到设计模式?究其原因是你的代码经验不够。

想一下设计模式是怎么来的?上个世纪四个大男人搞了一个组合叫 GoF,并出版了一本书,这本书共收录了23种设计模式,后面逐渐被人熟知。这四个人从大量的代码实践中总结了一套方法论(写代码的套路),而我们作为一个在学校的学生或者刚工作的新人,可能连代码都写的少,怎么可能轻松快速地掌握这么多设计模式。

所以说你学完了设计模式,但是还不会运用到日常的代码实践中,这个是很正常的,因为代码经验还不够。

那还学不学?当然要学,因为面试的时候有可能会问到。设计模式的理论知识我们还是要打好基础,需要掌握这些知识点:

设计模式的六大原则:单一职责、里氏替换、依赖倒置、接口隔离、迪米特法则、开闭原则
UML 基础知识
设计模式三大分类:创建型、结构型、行为型
常用设计模式基本原理
经典设计模式总共有23种(现在远不止23种了,还有一些变种),全部掌握难度太大了,我们只需要掌握一些常用的就好了,必须要掌握的我用小红旗已经标出来了。

怎么学?

网上关于设计模式的学习资料非常多,质量也是参差不齐,大家找的时候可要擦亮眼睛。

在看书之前我还是推荐你熟悉一下 UML 的理论知识,因为你如果不懂 UML 那任何一本设计模式的书你都可能读不下去, UML 是设计模式的前提。

Java 高手进阶

学什么?

恭喜你终于Java 入门了,大牛和菜鸟的区别在于菜鸟永远止步于入门水平,而大牛已经找到新大陆了,翻过这几座山你离高手就不远了。

Java 高手进阶需要掌握的东西非常非常多,这里列举一些核心知识点,必须全部掌握的。这是 Java 面试高频考点,也是传说中 Java 八股文的一部分,面好了进入下一面,面不好回家等消息。

  • Java 集合类源码
  • 线程池
  • Java 代理
  • IO 模型
  • JVM
  • Java 并发编程(JUC)

怎么学?

Java 已经入门了,你都想进阶了,建议你不要再找视频看了,一边看书一边思考吧。

基础框架(SSM)

学什么?

学习 Java 语言特性可能比较枯燥,接下来可以学习基础框架动手做一些项目,比如 Java 领域非常流行的 Spring 框架,这就是为 Java 后端量身定做的,非常好用。

在 spring 流行之前,还出现 Struts 这样流行的框架,后面由于种种原因还是被 Spring 打败了。

大家在网上应该可以经常看到 SSM 的缩写,其实就是Spring+SpringMVC+MyBatis的缩写了。

你需要掌握以下这些:

  • Spring 全家桶(Spring、Spring MVC、Spring Boot)使用
  • ORM 框架(MyBatis、Hibernate)使用
  • Spring 原理
  • ORM 框架原理

怎么学?

学习 SSM 框架最好是动手完成一个简单的项目,建议跟着视频并且把代码敲出来,一来熟悉项目的开发流程,也可以给自己带来成就感。

敲黑板:阶段性成就感非常重要,没有这个很容易放弃学习,所以要不定时给自己定个小目标,加加鸡腿啥的。

有很多新手在做项目的时候非常纠结界面,作为一个 Java 后端程序员,你又不是全栈开发,纠结这个干什么,我的建议:要么不要界面只写接口,要么自己动手写点 html,不需要美观,实现功能即可。

跟着视频做完项目之后需要干什么?答案是:深入理解框架原理。会用框架并不代表你懂框架,作为一个有追求的程序员,懂原理是永远的必修课,谁让这一行太卷了呢,人无你有你最棒。

微服务框架

学什么?

近些年微服务架构非常火,究其原因是因为传统的单体架构和面向服务的架构逐渐不能满足互联网快速迭代的需求。微服务可以更容易提供持续继承和持续部署的能力,让产品更快速交付推向市场。

面向服务的架构其实在五六年前就已经提出,期间经过了一段低潮期,泡沫散去后逐渐浮现了一些好用的框架,国外以 SpringCloud 为代表,国内以 Dubbo 为代表。

springCloud 和 Dubbo 有区别但是很多基本原理也是类似,大家学习的时候需要掌握技术的本质。

下面列举一些核心知识点:

  • Dubbo框架
  • SpringCloud框架
  • 服务注册与发现
  • 分布式服务链路追踪
  • 服务隔离、熔断、降级
  • 服务网关

常用中间件

学什么?

最终用户并不直接使用中间件,换言之中间件不是大众消费类软件产品。但是在大公司里中间件是不可或缺的,它是支撑大型网站架构的一些基础的组件和服务,所以非常非常有必要学。

小百科

中间件(Middleware)通常是指在一个大型分布式的系统中,负责各个不同组件(Component)/服务(Service)之间管理以及交互数据的。

业界开源的优秀中间件非常多,通常会根据业务的需要在系统中引入若干,下面列举了一些常见的,都是必学的,非可选哈。

  • 缓存:Redis、Memcached( 推荐 Redis)
  • 消息队列:Kafka、RocketMQ、RabbitMQ、ActiveMQ、ZeroMQ(推荐 Kafka)
  • 数据库中间件:ShardingSpere、Mycat

数据库

学什么?

数据库非常重要,面试也是必考的,可以考的点非常多,可以考得很浅:问一下 SQL 使用,也可以考的很深:问索引和锁的实现原理。下面列了一些常见的知识点。

  • 数据库基本理论:范式、索引原理、数据库引擎
  • SQL 基本语法
  • SQL 调优,explain 执行计划
  • 数据库事务(ACID)
  • 数据库锁:乐观锁、悲观锁、表锁、行锁等

怎么学?

建议数据库零基础的同学还是要先学习一下数据库的基本理论,因为我看到很多人都是一上来就学 SQL ,最终也只是会用而已,到后面 SQL 调优的时候就很迷茫了。如果你只是想用一用数据库,这部分也可以跳过。

关于原理部分有一本非常经典的教材《数据库系统概念》以供学习,经典书籍一般都比较难啃坑也比较厚,建议大家先看目录,挑重点看。大学学过这本书的可以直接跳过了。

有了一些理论后就可以开始学习 SQL 语法了,这里推荐一本《MySQL 必知必会》,一边看书一边对着电脑敲。

当然面试大厂肯定会问一下比较难的东西,你需要搞懂索引的原理、事务 ACID、锁,问数据库这些东西必考哦!

分布式架构

学什么?

分布式这一部分就是面试的加分项了,答好了面试官会觉得你技术功底深厚,答不好,只要你前面的基础还不错也能过。所以呢,作为一个有追求的技术人,千万不要放过加分的机会。

分布式相关的内容非常多,下面列举几个在项目中或者面试中经常会遇到的知识点:

  • 分布式事务:两阶段提交(2PC)、补偿事务(TCC)
  • 分布式锁:基于关系型数据库(MySQL)、基于 Redis、基于Zookeeper
  • 分布式 ID:雪花算法(Snowflake)、美团 Leaf

怎么学?

这部分内容学好非常难,在很多书中都是轻轻带过,没有深入讲解原理,所以就不推荐书了。

那怎么学呢?大家可以针对每个知识点到网上搜索优质的博客,后面我也会逐步更文讲解这些知识点,敬请期待,欢迎催更哟。

总结

最后为了方便大家学习我为大家准备了ava核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书一起免费分享给大家!

有需要的朋友关注公众号:前程有光,领取!

感谢你看到这里,文章有什么不足还请指正,觉得文章对你有帮助的话记得给我点个赞,每天都会分享java相关技术文章或行业资讯,欢迎大家关注和转发文章!

相关文章: