当前位置:   article > 正文

【2024最新】大佬花了半个月整理出来的Java后端学习路线,果断收藏了!_后端学什么

后端学什么

计算机网络

世界上第一台通用计算机「ENIAC」于 1946 被发明出来,如其名字一样仅仅是用于计算,在后来计算机越来越多,如果没有网络每台计算机都将成为一个孤岛,也不会有现在互联网的繁荣,「计算机网络」这门课程的学习路线非常清晰,就是围绕着如何让地理位置上不同的计算机连接起来,并高效可靠的交换数据信息,实现人在家中做,天下事尽知。

计算机网络有分层次,根据各层属性和特点,分为:

  • 物理层

  • 数据链路层

  • 网络层

  • 传输层

  • 应用层

这个层次划分从上到下就是一个网络数据包的接收路径,反之就是发送路径。既然要交换信息肯定得商量一套通用的协议,就像我们和老外交流,要么他们学中文要么我们学英文,反正得统一出一个标准语言出来,这在计算机网络中称之为「通信协议」。如上述的网络分层,每层都有各自适配的协议,所以计算机网络的学习基本就是围绕着分层协议的学习。

如果你想要学习Java的话,我给你分享一些Java的学习资料,你不用浪费时间到处搜了,从Java入门到精通的资料我都给你整理好了,这些资料都是我做Java这几年整理的Java最新学习路线,Java笔试题,Java面试题,Java零基础到精通视频课程,Java开发工具,Java练手项目,Java电子书,Java学习笔记,PDF文档教程,Java程序员面经,Java求职简历模板等,这些资料对你接下来学习Java一定会带来非常大的帮助,每个Java初学者都必备,请你进我的**Java技术qq交流群**自行下载,所有资料都在群文件里,进去要跟大家多交流学习哦。

操作系统

操作系统也是一种软件。你熟悉的微软Windos操作系统,后台开发熟悉的各种发行版的 Linux 系统,都是通过软件的形式安装在计算机上。

只不过这个软件和我们平常接触的应用程序软件不同,它比较特殊,因为它向下和计算机硬件(就是我们在计算机组成原理中学习的那些硬件)打交道,向上给其他应用程序和用户提供通用的交互的接口,说白了操作系统就是个中介和管家的角色。它帮我们做了下面这些事情:

  • 进程管理(柠檬说:你写的程序运行起来才能干活,运行起来的程序称为进程,进程是资源的最小单位)

  • 内存管理(柠檬说:计算机内存又贵又少,动不动又要来个高并发,内存管理大有学问)

  • 文件管理(柠檬说:计算机中的资料和信息需要通过文件系统来保存、管理)

  • 输入输出管理(柠檬说:各种外部设备如何接入计算机和接入之后又如何管理)

数据结构

数据结构大家最熟悉,即使毫无计算机基础或是想转行计算机,第一个遇到的就是数据结构,因为面试刷的算法题本质上就是对各种数据结构的运用。所以单纯对面试功利的角度来说,数据结构也是必须要掌握的计算机基础,数据结构要学到:

  • 线性表(链表、数组、循环链表)

  • 栈和队列

  • 树和各种二叉树(二叉排序树、平衡二叉树、哈夫曼树、B树、B+树、Trie树)

  • 图(图的存储结构、BFS、DFS、最短路径、最小生成树、拓扑排序、关键路径)

  • 查找算法(二分查找、B树查找、HASH表、KMP字符串模式匹配)

  • 排序算法(插入排序、冒泡排序、归并排序、基数排序、堆排序)

  • 贪心算法

  • 位运算

  • 分治算法

  • 动态规划

好了,计算机基础四大专业课已经大概过了一遍,当然这是我给没有计算机基础同学的实用主义建议,等你学完这四门课程也只能够说入门计算机了,不过这已经比很多人厉害了。如果想真正的了解计算机这门学科,可以等学完了这 4 门基础课程之后,再花写时间挑一些上面培养方案中的课程去学习,做一个知识体系完备的计算机软件后端开发工程师。

Linux


在后台开发领域,你所能接触到的后端服务不敢说 100%,至少也有 90% 以上是运行在 Linux 系统之上,因为它开源、便利、功能强大,需要学习以下技术点:

图片

Linux系统使用

所以如果你想走后端开发这条路线,我建议你趁早使用 Linux ,越早越好。可以是在个人 PC 上装 Linux 虚拟机,或者装个双系统,我在大学就是这么玩的,那时候云服务器还没现在这么普及,现在我觉得买个 Linux 云服务器最方便,如果是学生还有教育优惠也不贵。

有了Linux系统之后干嘛呢?把它作为你的常用系统,经常登录进去对照着「鸟哥的 Linux 私房菜」从头到尾操作一遍,ok,Linux的基础操作你就掌握了。

Linux 高级编程

Linux「高级编程」的意思是比上面的 Linux 基础操作更深入一个层次。

学会了 Linux 的使用还不算是一个真正的开发人员,使用系统是成为开发者最基本要求,会操作Linux 就像使用 Windows 系统一样,只不过是学习成本的问题,如果这个世界没有 Window 系统,你女朋友花点时间也能掌握 Linux 系统基本操作。

要想进阶成为后端开发人员,就要懂得如何使用 Linux 系统提供的各种系统API(系统调用接口)进行编程开发,程序员用你写的代码来控制系统,普通用户只会用鼠标操纵。这个阶段需要学习:

  • Unix 系统实现 Linux、基本系统数据类型

  • 文件操作函数: openread close write dup fcntl ioctl stat chmod``access chdir

  • 系统编程接口的基本特性和高级特性

  • Linux进程环境、如何创建进程、线程,程序的存储空间分配、环境变量

  • 进程组、会话以及任务控制、进程优先级和调度

  • 动态库和静态库

  • 进程间通信:管道和FIFO、消息队列、信号量、共享内存、内存映射

  • 套接字和网络编程

总之,这一阶段需要学习的是在 Linux 环境下的高级编程技巧,通过对这些内容的学习也能让你更深入的理解 Linux 系统是如何工作和运行的,并且真正的踏入 Linux 系统编程大门。

如果你想要学习Java的话,我给你分享一些Java的学习资料,你不用浪费时间到处搜了,从Java入门到精通的资料我都给你整理好了,这些资料都是我做Java这几年整理的Java最新学习路线,Java笔试题,Java面试题,Java零基础到精通视频课程,Java开发工具,Java练手项目,Java电子书,Java学习笔记,PDF文档教程,Java程序员面经,Java求职简历模板等,这些资料对你接下来学习Java一定会带来非常大的帮助,每个Java初学者都必备,请你进我的**Java技术qq交流群**自行下载,所有资料都在群文件里,进去要跟大家多交流学习哦。

网络编程

网络编程是通过网络套接字 socket 方式实现的通信,所以也属于进程间通信 IPC(Inter-Process Communication)。

由于现在的后台服务基于服务端/客户端模型,两者之间基于网络通信,你在家用手机点个外卖的服务请求,也是通过网络通信发给某团的后台服务器,所以后台服务开发,说到底还是网络编程,以及建立在网络编程数据之上的应用层开发。

网络编程学什么:

  • 什么是socket套接字

  • 套接字选项

  • TCP/UDP 套接字编程

  • Unix domain 协议和编程

  • 原始套接字编程

  • IO多路复用:select 、poll、epoll、kqueue

  • 序列化技术

  • 零拷贝技术

  • 开源网络库:muduo、libevent

学完以上内容你大概可以写一个类似QQ一样的网络聊天小工具。

不在在工作中,都有成熟的网络框架或网络通信库,大公司比如鹅厂大部分是自研网络通信框架,小公司用开源项目,这让很多后台开发人员不必关心底层的网络通信细节,除了部分基础架构的开发同学,大部分后台开发同学工作都是在做业务系统的开发。

但了解底层网络编程原理,是后台开发人员的核心能力,这点对于 C/C++ 后台开发程序员尤为重要。它能拔高你看问题的高度,不了解底层原理,就像是在黑盒编程一样,出了问题无从下手排查。

学完了以上内容,基本是具备了从事后台开发的基础能力,也能开发出一个简单的后台服务器了。

数据库


除非是单纯的转发路由类后台服务,一般来说后台开发的web服务器后台程序,后台服务程序说白了就是个死循环:

接收客户端数据包 -> 处理数据包 -> 业务逻辑处理 -> 保存必要的数据 -> 回复响应数据给客户端

这其中会伴随对各种数据的处理,比如电商系统会处理订单数据、用户数据,游戏后台会处理角色数据和装备数据等等,有数据就会涉及到存储系统,数据一般都存储到数据库。

图片

主要学习 2 大类数据库:

关系型数据库是指采用了关系模型来组织数据的数据库,简单理解就是二维表格模型。

非关系型数据库一般指的是 key-value 形式存储数据的 NoSQL 数据库,数据和键值是简单的映射关系。

关系型数据库

  • MySQL 数据库架构

  • MySQL索引使用和优化

  • innoDB存储引擎

  • 查询性能优化

  • 聚集索引、非聚集索引

  • 事务隔离,ACID,MVCC

  • 锁机制,乐观锁、悲观锁、读锁、写锁、意向锁

  • 日志

  • 数据备份与恢复

非关系型数据库

  • redis 基本操作和使用

  • redis 设计与实现原理

  • MongoDB

  • levelDB

  • memcache

  • HBase

  • CKV+ 腾讯自研

后台开发服务还需要学会解决三高问题:高并发、高可用、高性能。

高并发


图片

利用到目前为止学习的内容,我们的开发的后台服务器应付一些小并发场景绰绰有余,但是随着互联网应用业务量的上涨,对后台服务端的请求数剧增,高并发需求随之而来,高并发指的就是高 TPS 和高 QPS

  • TPS (Transactions Per Second)每秒事务数

  • QPS(Query Per Second)每秒查询数等。

对于高并发服务必须改变传统的单进程模型,才能处理的过来如此海量的请求。

多进程

对于高并发的服务请求,由于后台服务一般都是 IO 密集型应用,IO 密集型应用就是大部分 CPU 时间用在网络 IO 上,相对的是 CPU 密集型应用大部分时间花在数据计算上。

大多数的后台服务程序都是 IO 密集型的应用,网络 IO 的时候 CPU 等待白白浪费时间, 这就告诉我们 CPU 的潜力还没有完全发挥,所以当一个进程的处理能力达到上限,我们可以多创建几个进程,这就是多进程模型。

多线程

多线程与多进程类似,实际在Linux系统中线程是由轻量级的进程 LWP(Light-weight process)实现,多线程方式实现的后台服务相对于多进程更加轻量,因为多线程是在同一个进程内部实现。

不过多线程也会带来新的问题,比如全局数据竞争和同步问题,引入线程锁还要防止死锁的发生。

协程

那什么是协程呢?协程 Coroutines 是一种比线程更加轻量级的微线程。类比一个进程可以拥有多个线程,一个线程也可以拥有多个协程,因此协程又称微线程和纤程。可以粗略的把协程理解成子程序调用,每个子程序都可以在一个单独的协程内执行。

异步回调

所谓异步回调就是,服务端发起 IO 请求的线程不等网络 IO 线程操作完成,就继续执行随后的代码,一般请求线程需要先注册一个回调函数,当IO 完成之后网络IO线程通过调用之前注册的回调函数来通知发起 IO 请求的线程,这样发起请求的线程就不会阻塞住等待结果,提高了服务处理性能。

高性能


图片

按以上服务模型可以提高服务本身处理能力,高性能后台服务往往还会利用多种技术、从多个维度优化提高性能。比如采用CDN(Content Delivery Network)内容分发网络,存储和分发使用户就近获取内容,缩短响应时间;采用池化技术,避免频繁的资源分配与回收;采用服务集群,横向扩展服务能力;采用缓存技术,热点数据加入缓存,减少数据库访问。

  • CND 内容分发技术

  • 池化技术:数据库连接池,线程池

  • 集群化

  • 缓存技术

高可用


图片

高可用即保证服务的稳定性,不出现重大问题或宕机,常见的解决高可用思路是冗余和负载均衡。冗余的意思就是多部署几台服务器,当其中一台挂掉另外一台能顶上。通过负载均衡技术实现对流量的动态调配,不至于出现大量流量冲击某台机器出现请求不均匀,软件负载均衡技术可以通过DNS、Nginx、LVS等技术实现。这里主要学习的技术有:

  • 负载均衡技术,软硬件负载均衡

  • 限流隔离降级技术

  • 应用层容灾,资源隔离熔断

  • 异地多活

设计模式


图片

设计模式代表着软件开发的一种最佳实践。已经经历了很长一段时间的发展,它们提供了软件开发过程中面临的一般问题的最佳解决方案。学习这些模式有助于经验不足的开发人员通过一种简单快捷的方式来学习软件设计,当设计大规模软件时遵循必要的设计模式能让写出的代码更加健壮和可扩展

设计模式 6 大原则:

  • 开闭原则:对扩展开放,对修改关闭,多使用抽象类和接口。

  • 里氏替换原则:基类可以被子类替换,使用抽象类继承,不使用具体类继承。

  • 依赖倒转原则:要依赖于抽象,不要依赖于具体,针对接口编程,不针对实现编程。

  • 接口隔离原则:使用多个隔离的接口,比使用单个接口好,建立最小的接口。

  • 迪米特法则:一个软件实体应当尽可能少地与其他实体发生相互作用,通过中间类建立联系。

  • 合成复用原则:尽量使用合成/聚合,而不是使用继承。

常见设计模式分类

  • 工厂模式

  • 单例模式

  • 建造者模式

  • 适配器模式

  • 桥接模式

  • 过滤器模式

  • 装饰器模式

  • 外观模式

  • 享元模式

  • 代理模式

  • 责任链模式

  • 解释器模式

  • 迭代器模式

  • 观察者模式

分布式


图片

为什么会出现分布式?随着业务的体量不断增长,单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。

分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。

分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议。这里需要学习的内容包括:

  • 分布式一致性算法:PAXOS、Raft、Zab

  • 分布式事务:2PC、3PC、TCC

  • 分布式唯一 ID 生成:雪花算法、UUID、淘宝 TDDL SEQUENCE方案、美团 Leaf

  • 一致性HASH算法

  • 扩展性设计,设计可扩展的软件架构

  • 分布式文件系统:HDFS、FastDFS

  • 微服务架构设计,服务注册、服务发现、服务路由

安全

图片

本质上后台服务在网络上运行,需要和各种网络环境交互,在正常情况下能够工作,但互联网中有很多针对后台服务的恶意攻击,因此网络安全也是后台开发工程师需要学习的内容。这里主要包括:

  • web安全:CSRF、SQL注入、XSS

  • DDos防范

  • 加解密算法:对称加密、哈希算法、非对称加密

  • 网络隔离:内外网分离、跳板机

  • 授权认证算法:OAuth2.0、OIDC、2FA、单点登录SSO

监控与统计


图片

后台服务运行我们如何了解其运行状态和健康度?如果只是开发小玩具监控和统计大可不必,只需记录本地日志即可,对于成熟的大型后台服务系统,监控、统计、追踪必不可少,无监控,不运营

开源的监控软件有:Prometheus、Zabbix、Open-Falcon。

追踪系统也非常重要,特别是目前微服务化,一次服务请求需要经历多个不同的微服务处理,给分布式追踪带来新的挑战,主要包含以下三个方面:

  • 通过收集日志(Logging),记录程序的调试信息或错误信息,对系统和各个服务的运行状态进行监控

  • 通过收集量度(Metrics),比如累加量,对系统和各个服务的性能进行监控

  • 通过分布式追踪(Tracing ),追踪服务请求是如何在各个分布的组件中进行处理的细节

业界也有一些成熟的开源软件用于监控与追踪:SkyWalking、Pinpoint、Zipkin、CAT大众点评开源。不过大公司一般都有自研的一套监控与追踪系统,比如腾讯内部就有多套自研监控与调用链追踪系统。

搜索引擎


图片

我们讨论的是全文搜索引擎,什么是全文搜索引擎?

全文搜索引擎是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。

数据分为结构化数据与非结构化数据

像数据库表这种的数据是结构化数据;而对于像HTML、XML、文档这样不定长度且无固定格式的数据我们称之为非结构化数据。非结构化数据也称为全文数据,对非结构化数据的搜索可以用全文检索的方式,

目前两大主流的全文搜索引擎「Solr」和「Elasticsearch」都是基于 Lucene 建立。搜索引擎需要学习的内容:

  • 搜索引擎原理,搜索引擎利用倒排索引技术来实现对全文数据的高效检索。

  • Lucene,Apache Lucene 是一个开源的全文搜索引擎工具包。

  • Elasticsearch 原理与使用

  • Solr 原理与使用

大数据


图片

大数据,又称为巨量资料,指的是在传统数据处理应用软件不足以处理的大或复杂的数据集的术语。随着后台服务用户数增加和数据的积累,产生海量有待挖掘价值的数据,分析利用这些数据可以反馈线上决策,优化运营策略,产生数据价值。

海量数据也可以定义为来自各种来源的大量非结构化或结构化数据。

在软件开发领域的大数据概念自 20 世纪 90 年代的数据仓库开始,对于大数据的处理也导致各种海量数据的统计和处理技术发展。

主要包含以下的技术点需要学习:数据存储、离线分析、流式计算。

  • 大数据存储:Hadoop 框架,HDFS、HBase、YARN 架构、Apache Kudu

  • 离线分析:Hive、MapReduce、Spark

  • 流式计算:Flink、Storm、Kafka Stream、Spark Streaming

虚拟化


图片

虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。

虚拟化的好处

  • 灵活性:在同一硬件上同时运行多个操作系统

  • 敏捷性:移动操作系统的方式与将文件或图片从一台物理服务器移动到另一台物理服务器的方式相同。

  • 容错:当物理服务器出现故障时,管理软件会自动将实例迁移到可用服务器,甚至无感知物理硬件故障。

  • 降低成本:您不再需要过多的物理服务器,操作和维护所需的费用也随之减少。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
dea4a80b5dc4425ecb.png)​

虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。

虚拟化的好处

  • 灵活性:在同一硬件上同时运行多个操作系统

  • 敏捷性:移动操作系统的方式与将文件或图片从一台物理服务器移动到另一台物理服务器的方式相同。

  • 容错:当物理服务器出现故障时,管理软件会自动将实例迁移到可用服务器,甚至无感知物理硬件故障。

  • 降低成本:您不再需要过多的物理服务器,操作和维护所需的费用也随之减少。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-06HWkz69-1715136489507)]

[外链图片转存中…(img-3yA6D2em-1715136489508)]

[外链图片转存中…(img-j3szKEJE-1715136489508)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/892833
推荐阅读
相关标签
  

闽ICP备14008679号