LinuxC/C++后端都要学习哪些技能?

LinuxC/C++后端技术都要学啥?

在我大学刚毕业的时候,对这个问题也一直很迷茫。

先说下我自身的情况,我本科既不是985也不是211,知乎上称这种毫无存在感的大学为普通高校,学的还是非计算机专业,比起知乎上众多其他网友人均 985,不是 C9 毕业都不好意思说上过大学。

我毕业之后通过自学后端技术进入腾讯做「后端开发」工作

如果你是985、211院校,恭喜你,起点比我高。如果和我一样,不要放弃,看看我,还有机会。

像我这样非科班、无名校光环,经历过自学计算机成功转行软件开发(有想听转行之路经历的话,点赞的人多就写写)的人有,但不是很多。一开始也不愿意分享自己的这段经历,毕竟也没什么光环,但是我深切的体会过,当初想学又不知从何学

起的迷茫,还好最后摸索出了一条正确学习的路线,知道这条路不好走,最终,还是决定,把我这一路摸爬滚打过来的,后端学习经验分享给需要的同学

如果是初学者,可能就想直接问我:从哪里开始学习?

那我就不卖关子,如果你不知道从哪开始学,对于学习路线各个节点,我就按个人的学习经验并结合认识的大厂高 P 给的建议,给你把以上技术路线学习优先级做个排序,你照着学就行,排序规则:
星级越高,排名越靠前,重要程度越高,优先安排时间学习。

计算机基础—— 5星
Linux ——5 星
数据库 ——5 星
设计模式—— 5 星
工具 ——5 星
中间件 ——4 星
分布式 ——4 星
高并发、高可用、高性能 ——4 星
搜索引擎 ——4 星
测试 ——3 星
监控与统计 ——3 星
虚拟化 ——3 星
安全—— 3 星
大数据 ——3 星

学习方向和路线很重要,比起具体的技术细节,可复制的经验、清晰的学习路线,是大部分人更加需要的东西。
朝着正确的方向努力,否则只会离目标越来越远,不是吗?
只顾着写各种技术,不告诉大家这个知识点在后端技术图谱的什么位置,有点盲人摸象不知全貌的感觉,很多在我看来大家都懂的内容,其实只是我以为,信息差是客观存在的,抹平信息差是分享的价值所在。所以我花了半个月时间,整理了一张后端技术学习路线思维导图,来和你聊聊:

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

计算机组成原理

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

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

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

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

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

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

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

计算机网络

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

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

物理层
数据链路层
网络层
传输层
应用层

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

操作系统

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

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

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

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

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

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

数据结构

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

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

栈和队列

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

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

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

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

贪心算法

位运算

分治算法

动态规划

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

Linux后台开发知识点

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

【文章福利】小编推荐自己的linuxC/C++语言交流群:832218493,整理了一些个人觉得比较好的学习书籍、视频资料共享在里面,有需要的可以自行添加哦!~
在这里插入图片描述
在这里插入图片描述

一、 数据结构与算法、设计模式、工程管理

排序 (11种排序) 与 KMP红黑树 证明B树与B+树Hash与布隆过滤器责任链模式过滤器模式发布订阅模式工厂模式Makefile/cmake/configuregit /svn与持续集成Linux系统运行时命令

二、代码实现、方案分析

网络io与select/poll/epollreactor的原理与实现http/https web服务器的实现websocket协议与服务器实现服务器百万并发的实现(c10K,c1000k, C10M)redis/memcached/Nginx网络组件Posix API与网络协议栈UDP可靠协议 QUIC/KCP

三、池式结构、高性能组件、开源组件

线程池(手写)内存池 ringbuffer异步请求池 性能优化,异步mysql 异步dns 异步redismysql连接池redis连接池原子操作 CAS消息队列与无锁队列定时器的方案 红黑树 时间轮 最小堆锁的实现原理 互斥锁,自旋锁 ,乐观锁,悲观锁,分布式锁服务器连接保活 keepalivedtry/catch的实现libevent/libev框架异步日志方案 log4cpp应用层协议 protobuf/thriftopenssl加密json与xml解析器字符编码unicode/gbk/utf-

四、协程框架的实现、用户态协议栈 NtyTCP (tcp/ip)

协程的原理与工程案例
协程的调度器实现
滑动窗口 拥塞控制 满启动
tcp定时器的实现
epoll的源码实现

五、Skynet、ZeroMQ、DPDK

skynet高性能网关actor实现与cluster/负载均衡skynet网络与热更新 数据共享ZeroMQ Router-Dealter模式源码分析:消息模型与工程案例源码分析:网络机制dpdk PCI原理与 testpmd/l3fwd/skeletionkni数据流程dpdk实现dnsdpdk的高性能网关的实现半虚拟化 virtio/vhost的加速

六、 MySQL、Redis、Nginx、mongodb、dfs

SQL语句 索引 存储过程 触发器 2.数据库连接池与sql解析剖析存储引擎原理 MyISAM与Innodb 事务隔离自己实现一个存储引擎 MySQL源码MySQL集群与分布式 高可用高并发Redis相关命令与持久化Redis连接池与异步操作源码分析:存储原理与数据模型源码分析:主从 原子模型redis的集群方案Nginx使用conf配置nginx模块开发 过滤器模块Nginx模块开发 handler模块源码分析: Nginx Http状态机源码分析:进程间通信与Slab共享机制Mongo接口编程与MongoDB命令使用MongoDB的集群方案cephfastdfs

七、Linux内核进程管理、内存管理、文件系统

进程管理与调度
锁与进程间通信
系统调用 如何自己实现一个syscall
物理内存 伙伴算法 2.进程虚拟内存 mm_struct
页的回收与页交换
虚拟文件系统
Ext2/3/4 文件系统
无持久的存储

八、性能分析

工具 wrk/ webbench/ loadbalance/valgrind
Google gTest/Memtrack
火焰图/热图

九、分布式架构篇

腾讯的Tars
虚拟化的docker
分布式注册中心etcd
P2P 网络穿透 打洞 去中心化的网络

结语

说来惭愧有些我画在导图上的技术我也只是懂点皮毛,但整个后端技术栈的学习路线和方向是没问题的,我都画出来了,大家参考着学习和查漏补缺,在技术上我也需要继续精进学习,咱们共勉。

后端书单

1、Linux系统编程:《Unix高级环境编程
2、Tcp/ip:《tcp/ip详解卷一卷二卷三》
3、数据结构与算法:《算法导论》(第三版)
4、性能分析:《性能之巅 洞悉系统、企业与云计算
5、Linux内核:《深入理解Linux内核架构》(郭旭 译)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lingshengxueyuan/article/details/111993333