C++后端开发学习路线(超级详细) - 哔哩哔哩

后台开发又称服务端开发,后端开发一般指的也是它。

前后端分离”是现阶段非常热门的一种开发方式,简单来说就是将一款应用的实现代码分为前端代码和后台代码两部分:

举个简单的例子,微信的聊天界面就是由前端代码呈现给用户的,而聊天功能由后台代码负责实现。

负责开发前端代码的程序员称为前端工程师,负责开发后台代码的程序员称为后台工程师,前端和后台都能 hold 得住的程序员称为全栈工程师。

C/C++ 能做的事情有很多,比如后台开发、游戏开发、嵌入式开发、界面开发等等,对于想扎根在 C/C++ 方向、尤其想进大厂的小伙伴,建议优先选择后台开发方向。

和其它开发方向相比,C/C++ 后台开发岗位的薪资是非常客观的。其次 C/C++ 后台开发有技术深度,轻易触摸不到天花板,只要你持续进步,不躺平摆烂,就能走出内卷成为卷王,不需要担心 35 岁中年危机的问题。

支持后台开发的编程语言有很多,比如 Java、C/C++、GOlang、Python、PHP 等。每个公司都有自己主打的后台开发语言,比如腾讯和百度使用较多的是 C++,阿里和美团使用较多的是 Java。本节给大家介绍的 C/C++ 后台开发学习路线,只是众多后台开发技术体系中的一个。

这是一套非常详细的 C/C++ 后台开发学习路线,它坚持实用主义,追求前沿技术,不但为初学者规划好了具体的学习步骤,还为初学者指明了常见的陷阱和困难。

和互联网上其他博主分享的学习路线相比,这套学习路线不仅更加完整和详细,而且还会帮你做出选择和取舍,让你尽快学有所成,找到一份高薪工作。

注意,拥有选择权是一件非常重要的事情!

C/C++ 后台开发涉及到的技能板块非常繁杂,短期内不可能全部都掌握,为了加快学习进度,尽早达到工作要求,我们需要暂时先舍弃一些过时的技能,或者对这些技能浅尝辄止,等到以后有余力/有需要的话再回来学习。

这套学习路线就肩负了这个使命,它将告诉你各种技能的重要程度,以及在不同场景下的适用情况,让你知道如何选择,避免折腾和踩坑。

开发平台的选择

很多操作系统都可以作为运行后台程序的平台,比如 Linux、Windows Server、Unix、NetWare 等。在国内,后台程序基本都是运行在 Linux 系统上,Linux 的市场占用率是最大的,没有之一。

Windows Server 是微软专为服务器设计的操作系统;NetWare 是一款网络操作系统,市场占用率较小。

选择 Linux 作为后台程序的运行平台,至少有以下优势:

学习 C/C++ 后台开发,我建议你选择 Linux 平台,本文提供的也是 Linux C/C++ 后台服务端开发的完整学习路线。

Linux C/C++后台开发学习路线

1. 编程语言

所谓 Linux C/C++ 后台开发,其实就是在 Linux 环境下编写 C++ 程序,因此 C++ 是必须要掌握的。

我强烈建议先学习C语言,然后再学习 C++。这里给大家推荐一套适合新手小白阅读的 C 语言教程,教程通俗易懂、知识点全面,适合想快速入门 C 语言的小伙伴:

C++ 和 C语言虽然是两种编程语言,但它们的关系非常密切。你可以这样理解,C++ 是在C语言的基础上发展来的,C++ 在C语言的基础上增加了很多新的特性,玩出了新花样,大大提高了开发效率。因此学习了C语言也就学习了 C++ 的一半,从C语言转向 C++ 时,不需要再从头开始,接着C语言往下学就可以。

如果你没有任何编程基础,我建议先从C语言学起,等熟悉了C语言,能编写上百行的代码了,这个时候再去了解 C++ 究竟在 C语言基础上增加了什么,你就站在了一定的高度。

有人可能会问,能不能跳过C语言直接学习 C++ 呢?原则上是可以的,但是初学者直接学习 C++ 会比较吃力,尤其在对计算机底层知识不太理解的情况下,C++ 是很难学懂的,所以不建议你直接学习 C++。

另外,就算你直接学习 C++,也要先学习 C语言部分,然后才能学习 C++ 的新增特性。

除了掌握 C/C++ 的基础语法外,以下这些知识也是需要掌握的:

注意

编程语言只是一种工具,千万不要在学习 C++ 语法上浪费太多时间,陷在编程语言的泥潭里拔不出来,纠缠于各种语法细节。

初学者花费两个月左右的时间就能掌握 C/C++ 常用语法,并初步建立起编程思维,做出类似学生信息管理系统这样的“小玩意”,此时你的 C/C++ 水平就足够支撑后续的学习了。

当然,如果你想找一份后台开发工作,尤其是进大厂,C/C++ 一定要玩得非常溜。这个可以在后续的实际项目开发中逐步深入,并在找工作之前进行一下突击。

只有亲自做过项目,才能知道哪里是重点,才能有的放矢,才能节省学习时间;如果一开始就陷进编程语言的沼泽中,捣鼓那些万年不用的“语法糖”,那么只会让自己越学越吐血,逐渐消磨掉兴趣和热情。

2. Linux操作系统

很多人学习 C/C++ 都是在 Windows 环境中,使用类似 Visual Studio 这样的集成开发环境(IDE)中一键运行 C/C++ 程序。还是那句话,企业里 C/C++ 后台开发几乎都是基于 Linux 平台的,因此必须转战到 Linux 操作系统,尽可能深入地了解 Linux。

对于初学者来说,首先要掌握一些常用的 Linux 命令,初步具备操作 Linux 的能力。可以下载一个带图形界面的 Linux 发行版,比如 Ubuntu、CentOS 等,边玩边学。

在 Linux 上编写 C/C++ 程序,以下罗列的内容是必须掌握的:

学会 Vim 编辑器的基本用法;学会用 GCC 编译、链接和运行程序;学会用 GDB 调试程序;学会 Makefile 的书写规则,还有精力的话可以研究 Bazel、CMake 等一些构建工具的用法。

Linux 环境中也可以安装一些 C/C++ IDE,比如 CLion、VSCode 等,但不建议大家使用,实际工作中也不主张用这些 IDE,而是使用 GCC、GDB、Makefile 这些开发工具。

在 Linux 环境中编写 C/C++ 程序,很多功能都可以直接调用 Linux API(接口)实现,一些常用 Linux API 函数的功能和用法是需要记住的,而且记住得越多越好。

C/C++ 的执行效率高,但它也更偏向底层,实际开发过程中碰到的很多“偏难怪”问题都可能和操作系统有关系,解决此类问题要求对操作系统的底层原理有较深入的理解,重点包括内存管理(虚拟内存、内存分配机制等)和进程管理(进程和线程、并发、锁机制等)等。当然,如果你想尽快学有所成,可以暂时跳过操作系统的学习,等找到工作之前再回来恶补。

如果你想找一份后台开发的工作,尤其是进大厂,建议系统地学一下操作系统。如果你只是想自己鼓捣一些小玩意,那就看着办吧,操作系统的底层原理貌似没有那么重要。

3. 数据结构和算法

数据结构和算法本质上是两门课程,但是它们之间又相互依赖,有时候很难分得一清二楚,所以很多教材喜欢将它们掺杂到一起,讲解数据结构的时候也会涉及一些常见算法。

数据结构研究数据的存储和读取方式,算法研究解决问题的方法和步骤;在不同的开发场景中,需要采用不同的数据结构和算法。

数据结构和算法的选择会极大影响程序的运行效率和资源占用,一种高效的数据结构和算法的组合,有时候能让程序的综合性能提升一个数量级。

数据结构和算法设计极其考验一个程序员的逻辑思维能力和问题解决能力,一个强者往往胜过十个臭皮匠。那些在大厂搞算法的程序员,工资往往都比那些搞软件开发/应用开发的程序员高一截,年薪百万都司空见惯。

总起来说,数据结构和算法是一个程序员最硬核的能力之一。这里给大家列举几个比较重要的数据结构和算法,面试经常会问:

在实际开发中,常见的数据结构和算法其实都已经被编程语言/库/框架封装好了,很多时候你不用自己手撸代码去实现,只需要调用一下 API 就行。但是,调用 API 之前你需要知道它的优势和劣势,明确它能够胜任的具体场景,此时就需要你了解数据结构和算法的底层原理。

也就是说,学习数据结构和算法的目的并不一定是手写代码,而是知道如何使用现有的 API,让自己掌握选择权。

这里推荐一套非常 Nice 的数据结构和算法教程,教程以 C 语言作为开发语言,对各个知识点进行了图文并茂的讲解,还提供了完整、可运行的 C 语言程序,非常适合新手小白学习:

需要学到什么程度?

如果你想找一份靠谱的工作,尤其是进大厂/独角兽,那么就要认真研究一下常用的数据结构和算法,并亲自手撸代码去实现一遍。

当然,为了尽快入门后台开发并找到成就感,你可以暂时先简单了解一下常用的数据结构和算法,等到找工作之前再回来恶补。想进大厂的小伙伴要辛苦一点啦,需要多刷一些算法题。

如果你只是想自己捣鼓一些小玩意,那么只需要简单地了解一下常用的数据结构和算法,不用自己手撸代码去实现。

好吧,不得不承认,即使你不学习数据结构和算法,很多时候也不影响开发后台程序。

4. 链接库

中大型程序往往是以模块化的方式进行开发,对于 C/C++ 而言,所谓的模块就是链接库,具体来说包括动态链接库和静态链接库。

Linux 下的动态链接库文件后缀是 .so,静态链接库文件后缀是 .a。

动态链接库在程序运行阶段被加载,静态链接库在程序编译阶段被合并,它们各有优缺点,适用于不同的场景。

实际开发中我们会经常和各种库打交道,包括 C/C++ 标准库、系统库、第三方库和自己编写的库。不管你是找工作还是自己捣鼓后台程序,都需要学习链接库,即使你不自己开发链接库,也需要调用别人的链接库。

学习链接库,重点是掌握两种库的使用方法和制作方法,并搞清楚它们的优缺点和适用场景。

5. 并发编程

并发编程指的是充分利用 CPU 多核的计算能力,让计算机同时执行多个任务,提高程序的整体性能。

并发编程是实现高并发服务器的利器,不仅是笔试面试的必考知识点,也是实际开发中常用的技术,每个 C/C++ 后台程序员都必须熟练掌握。

并发编程的方式主要有两种,分别是多进程编程和多线程编程,两种方式各有优缺点。一般情况下,并发编程采用多线程编程来实现。

实现多进程/线程编程,既可以调用 Linux API,也可以调用 C/C++ 标准库或者第三方库。

如果你想找一份靠谱的工作,最好先从 Linux API 开始学习,然后再熟悉 C/C++ 标准库或者第三方库的使用方法。多线程是 Linux 系统内核提供的功能,学习 Linux API 能够从底层搞明白多线程的工作原理。

如果你只是想自己捣鼓一些小玩意,那就看着办吧,怎么方便怎么来,多线程的底层原理貌似没有那么重要。

6. 网络编程

所谓网络编程,就是学习联网计算机之间如何通信,并用编程语言来实现它。

C/C++ 后台开发是离不开网络编程的,甚至整个后台开发的过程都是在做网络编程。对于用户数量众多的服务器,网络通信至关重要,扛不住高并发可能会导致服务器宕机。

网络编程是 C++ 后台开发岗位面试的重头戏,重点要掌握的内容包括:

越是大型的互联网公司就越是重视网络编程,如果你想进大厂,我建议你一定要好好研究一下。

目前流行的网络库也有很多,大部分都是针对服务器端的,比如著名的 C++ 网络编程三剑客——Libevent、libev 和 Libuv。

另外,如果你的项目中使用的库/框架恰好包含了网络模块,那么也可以使用这些内置模块,比如 Boost 中的 Asio 模块。

没有哪种网络库能够一统江湖,很多企业内部还有自己开发的网络库,实际开发中需要根据具体场景做出正确的选择。

网络通信由 Linux 内置的 TCP/IP 协议栈提供支持,如果你想找一份靠谱的工作,我建议先从 Linux API 学起,把底层原理吃透,然后再学习一两个常见的网路库。

在此基础上,初学者可以找一个代码量少、代码精简的开源网络库(比如 muduo 库),反复琢磨内部的实现原理,既能提升 C/C++ 编程功底,也有加深对网络通信的理解。

如果你只是想自己开发一款小玩意,那就看着办吧,怎么方便就怎么来吧,很多时候使用网络库更加快捷和方便。

7. 设计模式

设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决某些特定问题的成熟套路。

设计模式一共有 23 种,初学者不需要把所有设计模式全部搞懂,先学会实际开发中常用的几种即可,包括工厂模式、单例模式、观察者模式、代理模式等。

实际开发中随着代码量的积累,对设计模式理解得越深入,你的 C/C++ 代码会变得越来越美观,可读性、可移植性方面也会提升好几个 Level。

8. 数据库

后台程序存储各种数据都需要数据库的支持,比如用户信息、文章内容、操作日志、商品详情、购买记录等。没有数据库就没有互联网,数据库是每个 C++ 后台程序员必须掌握的。

文件系统

有些初学者为了逃避数据库的学习,可能想过使用文件来保存数据。

的确,使用文件确实可以达到目的,早期的互联网就是这个干的。但是,文件系统的“增删改查”效率极其低下,操作也非常麻烦,有了数据库以后,再也没有程序员使用这种原始的解决方案了。

总之,不学习数据库就没法从事 C++ 后台开发,不学习数据库就是耍流氓。

学习哪种数据库?

市面上有很多优秀的数据库,其中最流行、最受欢迎、适用 C++ 后台项目的有两个,分别是 MySQL 和 Oracle。

MySQL 是一款免费、开源的关系型数据库,受到许多后台开发者的青睐,对于中小型规模的项目,MySQL 完全可以胜任。

我建议初学者从 MySQL 入手,先玩转数据库的基本操作,包括安装、配置、连接和增删改查等;如果有余力的话,再继续学习一下 Oracle 数据库。

SQL

MySQL 和 Oracle 属于关系型数据库,所有的关系型数据库都使用 SQL 语言进行操作,因此学习数据库的同时,也要配合学习 SQL 语言。

SQL 语言虽然有标准版本,但是基本所有数据库都针对自己的应用场景对标准 SQL 进行了裁剪或者扩充,这导致不同数据库所支持的 SQL 细节有所区别。

当然,这些特定版本的 SQL 都是从标准 SQL 演化而来,整体用法都是类似的,只要我们玩转了一种数据库,也会很快掌握其它数据库。

学到什么程度?

数据库是 C++后台程序员必备的硬核技能之一,从某种程度上来说,它决定了一个程序员的上限。当然,初学者的首要任务还是掌握数据库的基本概念,并能够熟练地使用 SQL 语句对数据库进行增加、删除、修改、查询等操作。

9. 分布式微服务框架

如果以上罗列的的知识点都掌握了,就具备了一定的 C++ 后台开发能力,可以尝试面试一些 C++ 的后台开发岗位。还有精力的话,可以了解一些和分布式相关的技术。

传统的开发模式会将所有的代码都编写在同一个工程/项目中,随着业务量和用户量的增加,整个系统暴露出的问题会越来越多,比如:

为了解决这些问题,企业需要采用分布式微服务架构:

总起来说,分布式微服务架构的核心思想就是先打散,再拼装。

熟悉 Java 后台开发的小伙伴都知道,Java 有两个大而全的分布式框架 Spring Boot 和 Spring Cloud,用这两个框架搞分布式足矣。遗憾地是,C++ 后台开发没有集成度这么高的分布式框架,只有一些集成度相对较高的框架,比如 bRPC(百度开源)、ZooKeeper、Etcd 等。

分布式知识体系非常庞大,C/C++ 后台程序员可以从以下几个方面入门分布式:

此外,分布式系统运行时极易受到各种外界因素的影响,比如网络延迟、服务器宕机等。针对各种突发状况,分布式技术的解决方案有均衡负载、流量控制、故障隔离等,这些也是需要了解的。

10. 其它知识

除了上面罗列的知识外,我们还需要掌握一些实际开发中常用的技术和工具。

图片[1]-C++后端开发学习路线(超级详细) - 哔哩哔哩-JieYingAI捷鹰AI

11. 总结

以上学习路线可能比较混乱,为了让读者有一个更加直观的印象,我特地制作了一份简明扼要的汇总表格,并标注出了不同技能的重要程度,这其中:

图片[2]-C++后端开发学习路线(超级详细) - 哔哩哔哩-JieYingAI捷鹰AI

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
来说点什么吧!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容