【最佳收藏】后端技术学习路线思维导图!肯定会有你想学的!

作为一个非科班自学计算机成功转行软件开发的人,体会过当初想学又不知从何学起的迷茫,还好最后摸索出了一条正确学习的路线。

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

朝着正确的方向努力否则只会离目标越来越远,不是吗?

所以一张完整的后端技术学习路线思维导图,分享给你~~~

要成为一个符合 BAT、TMD 大厂要求的后端技术工程师,到底需要学哪些技术?后端技术学习路线是怎样的?

 

学习路线

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


 

接下来我们来逐个展开介绍!!!(喜欢点个关注吧)

一、计算机基础


 

不管是后端开发还是前端开发,说到底我们所有的软件开发都是在计算上编写程序。

虽然对于大部分人来说,真正开始写代码的时候很少会让你去解决计算机底层的问题,不接触不代表不重要,计算机基础是最重要的。

后端开发工作中经常用到 Java、C++、Python、Golang 这些语言称为高级编程语言,称为高级是它们接近我们日常交流的自然语言,离计算机底层远。

但所有的高级语言最终都会转化成汇编->计算机指令->控制流操控计算机硬件 ,所以学习计算机构成和工作原理、操作系统这些基础知识,能够加深我们队高级语言的理解。

那我们一直说的计算机基础到底是什么?

计算机科学技术 CS(Computer Science)作为一门专业课程,就和其他工科课程一样有自己的理论体系。

如果你是计算机专业的同学不用我来教该学什么,计算机专业大学四年学校教的那些就是基础,别小看你在学校学的那些看起来没啥用的课程。 

我这有一份科大的计算机技术本科主要课程结构安排 :

 

一流大学的计算机专业要学什么可以对照着看下,从学科数学理论基础、计算机体系结构、软件工程方法等等维度展开。

那如果你不是计算机相关专业的想转行,也不要被吓到了,毕竟这是人家四年时间的学习内容。

本科的培养目标不仅仅是培养出一个软件工程师,本科学习还是面向硕士博士的基础培养。


 

如果只是面向后台开发和工作面试,或者你是非计算机专业想转行,社畜没有太多时间去学习大学那些理论课程;

那帮我把计算机基础的范围缩小到上图所示这几门专业课: 计算机组成原理、计算机网路、操作系统、数据结构等。

 

1、计算机组成原理

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

    ♢ 数据在计算机中的表示和运算(计算机不识数,只认得高低电平,所以数据在计算机内部都用二进制的0和1表示)

    ♢ 存储系统(数据和程序指令都要存储下来,学习计算机的存储层次,内存、外存、高速缓存、虚拟存储技术)

    ♢ 指令系统(写的代码最终都要被翻译成计算机指令,指令格式和寻址方式有多种,控制器来控制指令执行)

    ♢ 中央处理器(也就是 CPU 计算机的大脑,主要构成是运算器和控制器)

    ♢ 总线(计算机的血管动脉,连接计算机各功能组件,用来传输数据、地址信号、控制信号)

    ♢ 输入输出系统(Input/Output 也叫 IO 系统,连接和管理各种外部设备比如键盘、显示器等等)

 

 

2、计算机网络

世界上第一台通用计算机「ENIAC」于 1946 被发明出来,如其名字一样仅仅是用于计算,在后来计算机越来越多...

如果没有网络每台计算机都将成为一个孤岛,也不会有现在互联网的繁荣。

「计算机网络」这门课程的学习路线非常清晰,就是围绕着如何让地理位置上不同的计算机连接起来,并高效可靠的交换数据信息,实现人在家中做,天下事尽知。

 

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

    ♢ 物理层

    ♢ 数据链路层

    ♢ 网络层

    ♢ 传输层

    ♢ 应用层

 

这个层次划分从上到下就是一个网络数据包的接收路径,反之就是发送路径。

既然要交换信息肯定得商量一套通用的协议,就像我们和老外交流,要么他们学中文要么我们学英文。

反正得统一出一个标准语言出来,这在计算机网络中称之为「通信协议」。

如上述的网络分层,每层都有各自适配的协议,所以计算机网络的学习基本就是围绕着分层协议的学习。

 

3、操作系统

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

只不过这个软件和我们平常接触的应用程序软件不同,它比较特殊...

因为它向下和计算机硬件(就是我们在计算机组成原理中学习的那些硬件)打交道,向上给其他应用程序和用户提供通用的交互的接口,说白了操作系统就是个中介和管家的角色。

它帮我们做了下面这些事情:

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

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

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

    ♢ 输入输出管理(各种外部设备如何接入计算机和接入之后又如何管理)

 

 

4、数据结构

数据结构大家最熟悉,即使毫无计算机基础或是想转行计算机,第一个遇到的就是数据结构。

因为面试刷的算法题本质上就是对各种数据结构的运用,所以单纯对面试功利的角度来说,数据结构也是必须要掌握的计算机基础。

 

数据结构要学到:

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

    ♢ 栈和队列

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

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

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

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

    ♢ 贪心算法

    ♢ 位运算

    ♢ 分治算法

    ♢ 动态规划

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

 

二、Linux

在后台开发领域,你所能接触到的后端服务不敢说 100%,至少也有 90% 以上是运行在 Linux 系统之上。

因为它开源、便利、功能强大,需要学习以下技术点:

 

1、Linux系统使用

所以如果你想走后端开发这条路线,我建议你趁早使用 Linux ,越早越好。

可以是在个人 PC 上装 Linux 虚拟机,或者装个双系统。

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

 

2、Linux 高级编程

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

学会了 Linux 的使用还不算是一个真正的开发人员,使用系统是成为开发者最基本要求。

会操作Linux 就像使用 Windows 系统一样,只不过是学习成本的问题,如果这个世界没有 Window 系统,你女朋友花点时间也能掌握 Linux 系统基本操作。

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

这个阶段需要学习:

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

    ♢ 文件操作函数: open 、 read close write dup fcntl ioctl stat chmod access chdir...

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

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

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

    ♢ 动态库和静态库

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

    ♢ 套接字和网络编程

 

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

 

3、网络编程

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

由于现在的后台服务基于服务端/客户端模型,两者之间基于网络通信,你在家用手机点个外卖的服务请求,也是通过网络通信发给某团的后台服务器。

所以后台服务开发,说到底还是网络编程,以及建立在网络编程数据之上的应用层开发。

 

网络编程学什么:

    ♢ 什么是socket套接字

    ♢ 套接字选项

    ♢ TCP/UDP 套接字编程

    ♢ Unix domain 协议和编程

    ♢ 原始套接字编程

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

    ♢ 序列化技术

    ♢ 零拷贝技术

    ♢ 开源网络库:muduo、libevent

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

不在在工作中,都有成熟的网络框架或网络通信库,大公司比如鹅厂大部分是自研网络通信框架,小公司用开源项目。

这让很多后台开发人员不必关心底层的网络通信细节,除了部分基础架构的开发同学,大部分后台开发同学工作都是在做业务系统的开发。

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


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

今天的学习就止步于此吧,明天的你依旧要努力学习呀,后面跟大家来分享数据库、高并发、设计模式、分布式等等....


 

最后,不管你是转行也好,初学也罢,进阶也可,如果你想学编程~

【值得关注】我的 C/C++编程学习交流俱乐部!【点击进入】

问题答疑,学习交流,技术探讨,还有超多编程资源大全,零基础的视频也超棒~

原文地址:https://www.cnblogs.com/huya-edu/p/14255076.html