当前位置: 首页 > news >正文

java进阶学习路线

目录

    • 前言
    • Java 入门
      • 怎么学?
    • 计算机基础
      • 学什么?
      • 怎么学?
    • 数据结构和算法
      • 学什么?
      • 怎么学?
    • 设计模式
      • 学什么?
      • 怎么学?
    • Java 高手进阶
      • 学什么?
      • 怎么学?
    • 基础框架(SSM)
      • 学什么?
      • 怎么学?
    • 微服务框架
      • 学什么?
    • 常用中间件
      • 学什么?
    • 数据库
      • 学什么?
      • 怎么学?
    • 分布式架构
      • 学什么?
      • 怎么学?

前言

最近老是有粉丝私信我说感觉自己学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

怎么学?

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

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于Python自动连接汕头大学校园网
  • 媒体服务zlmediakit系统架构图
  • python安装包,2024最新Python下载环境配置教程!
  • OpenCV几何图像变换(10)透视变换函数warpPerspective()的使用
  • 国内首个“舱泊一体”平台量产上车,这家芯片公司抢跑「跨域」新市场
  • Vue小玩意儿:vue3+express.js实现大文件分片上传
  • 一文掌握 Go 内存对齐
  • pygame开发课程系列(7):打砖块,飞行射击,跳跃游戏实例开发
  • 为什么我编写不出优秀的ChatGPT提示词?
  • 深度学习中常用参数解释
  • ADE7953ACPZ-RL带零线电流测量的单相多功能计量IC 高精度与功能特性概览
  • 车载T-Box通信稳定性弱网测试方案
  • transforms
  • C语言-指针
  • 【数学分析笔记】第2章第3节无穷大量(1)
  • [译] 怎样写一个基础的编译器
  • 【5+】跨webview多页面 触发事件(二)
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Invalidate和postInvalidate的区别
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Javascript 原型链
  • Promise面试题2实现异步串行执行
  • Webpack 4 学习01(基础配置)
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 第十八天-企业应用架构模式-基本模式
  • 聚类分析——Kmeans
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 力扣(LeetCode)965
  • 如何学习JavaEE,项目又该如何做?
  • 事件委托的小应用
  • 手机端车牌号码键盘的vue组件
  • 由插件封装引出的一丢丢思考
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • FaaS 的简单实践
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $.ajax中的eval及dataType
  • (1)Hilt的基本概念和使用
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (苍穹外卖)day03菜品管理
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (九)One-Wire总线-DS18B20
  • (四)JPA - JQPL 实现增删改查
  • (一)Docker基本介绍
  • (一)Linux+Windows下安装ffmpeg
  • (一)基于IDEA的JAVA基础10
  • (转)EXC_BREAKPOINT僵尸错误
  • (自用)gtest单元测试
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ******之网络***——物理***
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET CLR基本术语