干货:18张思维导图,后端技术学习路线长这样!应用程序服务器中间件计算机编程

思来想去,学习方向和路线很重要。比起具体的技术细节,可复制的经验、清晰的学习路线,是大部分人更加需要的东西。

话不多说,直接上后端技术学习路线思维导图框架:

图中的每一个节点我都做了细分,在后面章节逐个展开介绍。

计算机基础

不管是后端开发还是前端开发,说到底我们所有的软件开发都是在计算上编写程序,虽然对于大部分人来说,真正开始写代码的时候很少会让你去解决计算机底层的问题,但不接触不代表不重要,计算机基础是最重要的。

后端开发工作中经常用到Java、C++、Python、Golang,这些语言称为高级编程语言。称为高级是因为它们接近我们日常交流的自然语言,离计算机底层远。但所有的高级语言最终都会转化成汇编->计算机指令->控制流操控计算机硬件,所以学习计算机构成和工作原理、操作系统这些基础知识,能够加深我们对高级语言的理解。

计算机组成原理

这门课程让你了解计算机的组成和工作原理,要学习的内容包括:

计算机网络

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

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

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

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

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

数据结构

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

Linux

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

Linux系统使用

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

Linux高级编程

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

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

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

网络编程

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

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

网络编程学什么:

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

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

数据库

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

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

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

主要学习2大类数据库:

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

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

关系型数据库非关系型数据库

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

高并发

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

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

多进程

多线程

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

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

协程

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

异步回调

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

高性能

高可用

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

设计模式

设计模式6大原则:

常见设计模式分类

分布式

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

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

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

安全

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

监控与统计

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

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

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

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

搜索引擎

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

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

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

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

大数据

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

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

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

虚拟化

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

虚拟化的好处

常见的虚拟化技术:KVM、Xen、OpenVZ、Docker

OpenStack管理VM(VirtualMachine)虚拟机的工具;Kubernetes简称K8s,是管理container容器的工具。

中间件

在后端开发中你可能经常听说到「中间件」这个词,那什么是中间件?看下Wiki上的定义:

中间件技术创建在对应用软件部分常用功能的抽象上,将常用且重要的过程调用、分布式组件、消息队列、事务、安全、链接器、商业流程、网络并发、HTTP服务器、WebService等功能集于一身或者分别在不同品牌的不同产品中分别完成。中国科学院软件所研究员仲萃豪把中间件定义为「平台+通信」。这个定义限定了只有用于分布式系统中的此类软件才能被称为中间件,同时此定义也把中间件与实际应用的应用软件区分开来。

大白话来说,中间件就是把分布式系统中一些通用功能的抽象出来提供服务的一类软件统称。它屏蔽掉了底层操作系统的复杂性,向上提供一个统一的开发环境,降低了软件系统开发的复杂度,由于中间件是介于操作系统和应用软件之间,为应用软件提供服务功能的软件,由于介于两种软件之间,所以称为中间件。

常见的的开源中间件有下面几种,组合起来就能搭建一个完整的分布式后台服务系统:

版本控制

大型软件项目的代码量巨大,如何有效组织和管理源码和版本,于是产生了版本控制系统。版本控制系统就是我们常说的SVN或Git,用来追踪、维护源码、文件以及配置文件等等的改动,并且提供控制这些改动控制权的程序。

常见的版本控制系统分为两大类:集中式版本控制和分布式版本控制。作为后端开发工程师,版本控制系统的使用也是必须掌握的基础技能,不过这些系统一般都是边使用边熟悉,刚开始熟悉一些常用操作就好。

工具

编辑器

在Linux下开发肯定离不开Vim或者Emacs,这两个都是常用的编辑器,已经形成了两大爱好者阵营。特别是Vim编辑器,学习成本有点高,配合上各种插件和配置,有些Vim爱好者已经把它当成IDE来用了,一旦掌握可以大幅提升工作效率,值得你去学习。

当然除了Vim如果是文字编辑工作,比如写README文档或者写技术博客,那么强烈推荐学习下Markdown语法,这是一种种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,注重内容本身不用过多的调整排版。Markdown编辑器推荐Typora、有道云笔记Markdown编辑器、VSCodeMarkdown插件。

IDE

编辑器作为小工程还可以胜任,不过后端开发工作中,一般都是大型的软件工程项目,所以不大可能用编辑器来管理,这时候就需要学习使用专业的集成开发工具。

集成开发环境(IDE,IntegratedDevelopmentEnvironment)是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。

磨刀不误砍柴工,挑一把趁手的兵器再去编程世界遨游。各语言IDE五花八门,推荐JetBrains系列和VSCode,JetBrains产品包括各语言开发的一系列的IDE,特别是Java的IntellijIDEA口碑非常不错,部分对应的产品系列如下。

VisualStudioCode(简称VSCode)是一个由微软开发,同时支持Windows、Linux和macOS等操作系统的免费代码编辑器,它支持测试,并内置了Git版本控制功能,同时也具有开发环境功能,例如代码补全(类似于IntelliSense)、代码片段和代码重构等。该编辑器支持用户个性化配置,例如改变主题颜色、键盘快捷方式等各种属性和参数,同时还在编辑器中内置了扩展程序管理的功能。

在2019年的StackOverflow组织的开发者调研中,VSCode被认为是最受开发者欢迎的开发环境。

测试

软件工程师不仅要写代码,还要做测试,软件测试和软件开发是相伴相生,测试能让保证我们写出代码更加健壮和可维护。

TDD是测试驱动开发(Test-DrivenDevelopment)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,根据测试代码确定需要编写什么产品代码。需要掌握和了解以下测试技术和方法。

学习顺序

总结下,后端技术学习的内容还是很多的,不可能一蹴而就。

我就按个人的学习经验并结合认识的大厂高P给的建议,给你把以上技术路线学习优先级做个排序,你照着学就行。

THE END
1.网络基础与通信原理:构建数字世界的框架计算机网络是一个由多台计算机和其他计算设备通过通信介质连接起来,实现数据通信和资源共享的系统。 以下是对计算机网络的介绍: 组成要素: 硬件设备:包括各种类型的计算机、服务器、交换机、路由器等网络设备。 通信介质:指的是用于数据传输的物理通道,比如双绞线、光纤、无线电波等。 https://open.alipay.com/portal/forum/post/156001091
2.学习计算机网络这一篇就够了,神仙级入门教程电脑网络入门学习IP地址是实际的物理地址,别人可以在在网络中通过这个IP地址找到这个设备。 题外话 初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:新职业在线学习平台发展报告 2023届全国高校毕业生预计达到1158万人,就业形势严峻; https://blog.csdn.net/m0_59236127/article/details/132211278
3.计算机学习心得(15篇)在一学期的学习过程中,我个人认为,在理论课上,着实学到了好多实用的关于计算机硬件的识别选购的技巧,同时,也学会了基本的计算机理论知识。如今,我们已经不再以只是单纯的知道计算机的三大件为荣了,就拿最核心的部件CPU来说,我开始懂得了当前的CPU产品主要有奔腾系列,赛扬系列、凌动系列及当前主流的酷睿系列(Core i2https://www.gdyjs.com/lizhi/xinde/465659.html
4.计算机教学计划(精选21篇)今年, 20中的学生人数xx,xx学年开始,我仔细观察,发现学生对学习计算机有浓厚的兴趣。 二、课程介绍 本课程系统地介绍了计算机文化、计算机基础知识和Windows20xx 操作系统、汉字输入和办公自动化、文字处理软件Word20xx、电子表格软件Excel20xx、文档处理软件PowerPoint20xx和计算机网络基础等。 https://www.oh100.com/kaoshi/jiaoxuejihua/616512.html
5.计算机网络技术专业(中专)2023年人才培养方案人才培养方案本专业属于电子与信息大类,专业代码为?710202。本专业作为中专班类别主要以支持学生就业需求面向中小企业信息化建设与管理培养具备初等实用技术的人才,并同时为向高级院校的计算机应用技术和计算机网络技术等专业输送具备良好专业基础和继续学习能力的后备人才开展人才培养。具体职业面向如下表所示: https://www.eie.net.cn/html/999/2023-05-07/content-7016.html
6.《计算机网络技术》专业人才培养方案(斗门校区)本专业面向中小型网络建设管理与网站维护等领域,培养具有相应的计算机网络系统的规划设计、施工、运维和Web应用开发等能力。能够从事网络工程、网站建设、网络应用开发、网络信息安全管理等工作,培养与我国社会主义现代化建设要求相适应,德、智、体、美全面发展,具有公民基本素养和职业发展基础的中等应用型技能人才。 https://www.zhszx.cn/Item/12407.aspx
7.网络安全小技巧之二安全上网指南,你一定用得到信息网络管理办公室在我们日常使用网络时,网络瘫痪、网络攻击大部分原因是因为我们平时不注意,给了病毒、木马可乘之机。所以,保障网络安全,要从我们日常行为开始。针对一些常见安全问题,信息网络管理办公室分享一些相关知识,希望对大家今后的工作、学习、生活能够带来帮助。 一、计算机安全 https://www.sph.com.cn/Html/News/Articles/11498.html
8.数字化学习资源及其应用专题培训一般可分为两类:专门设计的学习资源,如教科书、语言实验室等;非专门设计的学习资源或可利用的学习资源,如戏剧、博物馆等。 数字化学习资源是指经过数字化处理,依据学习者特征进行编辑的,可以在多媒体计算机上或网络环境下运行的供学习者自主、合作学习的,且可以实现共享的多媒体材料。按其呈现方式不同,大致可以分http://www.zpxx.wj.czedu.cn/html/article731078.html
9.高中信息技术课程标准例烽火台、信函、电报电话、广播电视、计算机网络代表着信息传播技术发展的不同阶段。 (2)知道信息来源的多样性及其实际意义;学会根据问题确定信息需求和信息来源,并选择适当的方法获取信息。 (3)掌握网络信息检索的几种主要策略与技巧,能够合法地获取网上信息。 https://www.fqkhzx.cn/index/article/view/id/94.html
10.网络课程总结通用12篇项目组在多年的课题研究、教研教改和自身学习实践的基础上,形成了自己的学习理念与感悟,积累了比较丰富的网络化学习技巧、经验和典型个案,亟待进行系统梳理和提升。 二、研究现状 目前,地方高师院校在培养高师生网络化学习能力方面普遍存在以下问题或弊端: https://zgzxs.xueshu.com/haowen/48619.html
11.2019计算机网络技术专业人才培养方案,荆州理工职业学院计算机网络技术专业课程体系构建的总体思路是:根据课程体系遵循学生的认知规律和职业成长规律,由易到难,由单一到复杂,系统设计基础知识和实践能力训练体系,实现知识、技能、素质的同步提高,培养学生的职业能力。具体根据典型的工作任务构建基于工作任务的学习领域总体课程体系打破原来的课程体系,结合网站前端开发工程师、网络管https://www.jzlg.cn/zn/zy/10837.html
12.致PS新手:怎样才能真正学好PS优设网常用的PS工具并不多,但是每个工具都是自己独特的使用方法和技巧。色阶和曲线,都可以用来调色和提升亮度/对比度,为什么发明了曲线,又多了一个色阶?用其中的一个工具不可以么?当然不可以。既然他们两可以同时存在,那肯定有他们存在的道理。因为很多人不了解他们的特性,所以在调色时,就会盲目的乱用。在学习这些工具的https://www.uisdc.com/how-to-learn-ps
13.计算机网络课程学习心得体会(精选12篇)计算机网络课程学习心得体会(精选12篇) 某些事情让我们心里有了一些心得后,常常可以将它们写成一篇心得体会,这样有利于我们不断提升自我。很多人都十分头疼怎么写一篇精彩的心得体会,以下是小编精心整理的计算机网络课程学习心得体会,仅供参考,大家一起来看看吧。 https://www.yjbys.com/xuexi/xinde/1985126.html
14.学习计算机网络的心得体会(通用12篇)当我们积累了新的体会时,将其记录在心得体会里,让自己铭记于心,这样能够培养人思考的习惯。怎样写好心得体会呢?下面是小编收集整理的学习计算机网络的心得体会,欢迎大家借鉴与参考,希望对大家有所帮助。 学习计算机网络的心得体会 篇1 通过为期一个学期的选修课程的学习,作为一个涉及计算机网络不深的我来说收益匪浅。https://www.ruiwen.com/xindetihui/4625027.html
15.计算机网络技术学习心得体会(通用11篇)计算机网络技术学习心得体会(通用11篇) 当我们受到启发,对学习和工作生活有了新的看法时,好好地写一份心得体会,这样我们就可以提高对思维的训练。那么好的心得体会是什么样的呢?下面是小编精心整理的计算机网络技术学习心得体会,希望对大家有所帮助。 计算机网络技术学习心得体会 1 https://www.wenshubang.com/xindetihui/3344448.html
16.计算机基础知识入门教程本文将带你深入了解计算机基础知识,涵盖硬件组件、操作系统、基础软件使用、网络基础及计算机安全。文章还提供了维护技巧和编程示例,帮助读者全面掌握计算机相关技能。 计算机基础知识入门教程 计算机硬件介绍 计算机是由多个硬件组件组成的设备,它们共同协作以完成各种计算任务。计算机的基本组成部分包括:处理器(CPU)、内存(RAhttps://www.imooc.com/article/362357
17.计算机网络基础知识教案今天我们就通过学习计算机网络基础知识,一起走进网络世界,去发现、探索计算机网络的奥秘。 二、新课学习 1、打开电子室软件,控制学生电脑屏幕,播放制作好的幻灯片,让学生对什么是计算机网络有一个直观的认识。 2、在学习计算机网络的作用时,采用登陆qq帐号与学生进行语音、视频聊天的形式突破本次教学的难点。(学生可https://www.qinxue365.com/fangfa/485667.html
18.华为认证网络工程师(HCIA)路由交换视频教程共240课时韩老师讲Word2010文档排版技巧视频教程 4.9韩立刚 会员免费 IP地址子网划分讲解v2视频课程 5.0韩立刚 会员免费 计算机网络原理精讲视频课程 5.0韩立刚 ¥119.00 Windows10课程讲解-韩立刚 5.0韩立刚 ¥9.00 PacketTracer GNS3和VMWare搭建网络学习环境视频课程 4.9韩立刚 https://edu.51cto.com/course/11268.html