字节跳动大佬分享:如何在一年内精通C++?

发表时间: 2021-01-14 17:15

微信搜「 后端技术学堂 」程序员的学习课堂,回复「1024」获取 50 本计算机编程学习电子书,回复「路线」获取最全面技术学习路线思维导图

这个问题有点历史了,不过我想换个角度,从 C++ 应用方向来回答下这个问题。当初学习C++也是用知乎和 Google 搜索学习方法,现在把自己的学习经验分享出来给后来的同学。

首先,只是掌握 C++ 还不够,所有编程语言都只是个工具而已,本质上我们要用语言工具去实现产品逻辑,软件开发就是要做一个东西出来。

所以先想清楚,你想用C++做哪些事或者从事哪方面工作

方向不同,需要学习掌握的内容也大不相同。我大概罗列一下,C++的应用方向,包括但不限于:

  • 服务器后台开发(流媒体后台,游戏后台,高性能服务器后台)
  • 应用开发工程师(QT和MFC,偏前端)
  • C++游戏开发(游戏方向,熟悉游戏引擎cocos2dx等)
  • C++逆向开发工程师(网络安全,破解等)
  • 嵌入式软件开发(C/C++,Linux平台,软硬兼施)
  • 音视频编解码方向(协议优化)
  • 图像处理(机器视觉,医学图像,遥感图像,人像美颜等)

从上面可以看出,一样都是学 C++,应用方向不同,技能要求和需要掌握的技术栈也不一样。其中需求比较大,也是大部分人选择的方向是「C++服务器后台开发」方向,也是我自身工作相关内容。

在招聘网站找了一个「腾讯的 C++ 研发工程师招聘要求」,可以看到除了对 C++ 语言的要求外,对面试者的其他要求也不少,我们可以从招聘需求反推需要掌握的技能。

「如何用一年时间掌握C++」这个问题有点大,能力有限,我来回答如何用一年时间掌握C++服务器后台开发?

总结下 C++ 服务器后台开发的一般学习路线,可以归类为以下 4 个阶段:

  • C++基础
  • C++进阶
  • 现代C++
  • 后端技术
  • 项目练习

首先当然是学习C++

C++后台开发,顾名思义也要先学 C++ 。题主有C语言基础的话,C++的学习还是相对会容易一些,但你要说「精通」,即使是用C++这么多年,也不敢在简历上写这两个字。

敢说精通C++的人要么是真的特别厉害,要么是半桶水学会了一点拿出来忽悠面试官,第二种人早晚会被遭受面试官‘毒打’,要是限定一年时间,达到熟练使用C++的水平没有问题,前提是按正确的学习路线,不要走了弯路。

开始之前,还是先来看下,C++学习到底要学哪些东西:

C++知识点

  • 基础:类型、遍历、const 限定符号、声明与定义
  • 标准库和算法:string、vector、bitset、map
  • 数组、指针和引用、动态数组、多维数组
  • 表达式、循环、条件判断语句
  • 堆和栈的区别,mallocl和 new 的区别
  • 面向对象的特性,封装、继承、多态
  • 虚函数、虚函数表、派生类虚表,对象内存布局
  • 重载 Overloading 和覆盖Overriding
  • 析构函数、构造函数,派生类中的构造函数与析构函数
  • 模板与泛型编程:模板定义、实例化、模板编译、模板特化
  • 继承:单继承、多继承、菱形继承、虚继承
  • static关键字作用
  • #define与 const 的区别
  • C++中的强制类型转换:static_cast, dynamic_cast, const_cast, reinterpret_cast
  • 异常处理、命名空间
  • 现代C++:C++1X、C++20 新特性

怎么学C++?看书学!最高效的学习方式,看经典图书。

我当初在学习C++的时候,第一件事就是 Google 搜索前辈们推荐的 C++ 经典书单,前人的经验能让你少走弯路,这里我也分享下自己学习C++,从入门到进阶之路看过的图书:基础 3 本,进阶 3 本,现代C++ 1本。

自学C++相比Java和Python还是要难一些,因为C++更接近操作系统底层,需要自己管理内存等等。

一定要看的书,总共 7 本书(带封面,方便你找),一年应该看得完。

C++基础 3 本

  • 《C++ Primer 》豆瓣9.4

  • 《Effective C++》豆瓣9.5

  • 《More Effective C++》 豆瓣9.2

C++进阶 3 本

  • 《Inside the C++ Object Model》 这本书中文版《深度探索C++对象模型》翻译质量也很高, 豆瓣9.1

  • 《STL源码剖析》 豆瓣 8.7

  • 《C++编程思想》

现代C++ 1本

所谓的现代C++就是C++1X 甚至 C++20 引入的新特性,让C++这门「古老」的编程语言更加现代化。学完上面推荐的书籍,你已经是算的上是掌握了传统 C++ 用法,如何快速上手现代 C++ 特性,入门我推荐开源电子书:

  • 《现代C++教程:高速上手C++11/14/17/20》



本书号称『高速上手』,从内容上对二十一世纪二十年代之前产生 C++ 的相关特性做了非常相对全面的介绍,读者可以自行根据下面的目录选取感兴趣的内容进行学习,快速熟悉需要了解的内容。这些特性并不需要全部掌握,只需针对自己的使用需求和特定的应用场景,学习、查阅最适合自己的新特性即可。

这本书已在Github开源 changkun/modern-cpp-tutorial

以上,多了也不推荐,看完这 7 本书差不多算是掌握C++,要达到熟练掌握,还需要项目练习和代码量积累,至于找哪些适合的练手项目,这个我后面会说。

C++后台开发

其实 C++ 语言学习在 C++ 后台开发中,只占了非常非常小一的部分,要知道语言只是一个工具,你要做开发,工具使用是最低的要求,还需要学习以下内容才能符合岗位要求。

归纳起来,C++后端开发需要掌握的技术点包括:

  • 计算机基础
  • Linux
  • 数据库
  • 设计模式
  • 中间件
  • 分布式
  • 高并发
  • 高可用
  • 高性能(统称互联网三高)
  • 搜索引擎
  • 测试技术
  • 监控运营
  • 虚拟化
  • 安全技术
  • 大数据

技术点比较多,这里只说下计算机基础学习,这是软件开发基础。

后端开发工作中经常用到 Java、C++、Python、Golang ,这些语言称为高级编程语言,之所以称为高级语言,是它们接近我们日常交流的自然语言,离计算机底层远。但所有的高级语言最终都会转化成汇编->计算机指令->控制流操控计算机硬件。

所以学习计算机构成和工作原理、操作系统这些基础知识,能够加深我们对高级语言的理解。

计算机基础

计算机科学技术 CS(Computer Science),大学计算机专业课,计算机基础是软件开发的基本功,当然也是C++开发的基本功,下面是一份中中科大的计算机技术本科主要课程结构安排


计算机基础课程包括

计算机组成原理

  • 数据在计算机中的表示和运算
  • 存储系统
  • 指令系统
  • 中央处理器
  • 总线
  • 输入输出系统
  • 计算机网络
  • 计算机操作系统

操作系统

  • 进程管理
  • 内存管理
  • 文件管理
  • 输入输出管理

数据结构与算法

  • 线性表(链表、数组、循环链表)
  • 栈和队列
  • 树和各种二叉树(二叉排序树、平衡二叉树、哈夫曼树、B树、B+树、Trie树)
  • 图(图的存储结构、BFS、DFS、最短路径、最小生成树、拓扑排序、关键路径)
  • 查找算法(二分查找、B树查找、HASH表、KMP字符串模式匹配)
  • 排序算法(插入排序、冒泡排序、归并排序、基数排序、堆排序)
  • 贪心算法
  • 位运算
  • 分治算法
  • 动态规划

数据结构大家最熟悉,大家面试刷的算法题本质上就是对各种数据结构的运用。


项目练习

在完成上述学习内容的同时,可以同步找一些开源项目源码来学习,任何一门编程语言学习都需要多动手,一直看书不动手敲代码的效果也不好,可以试着着用C++造几个轮子玩玩,不仅可以积累代码量,同时也是一件很有成就感的事,编程是个手艺活,无他,唯手熟尔

还是那句话,对于C++初学者推荐看书+视频的方式学习。


读者福利

新年新气象,感谢各位读者大大对 @程序员柠檬橙 一年以来的关注和支持!

微信红包封面送给大家,数量有限,比手速拼运气,手慢无哦!

另外,牛气好运分享给更多小伙伴,祝大家新年牛气冲天~

领取方式:私信@程序员柠檬橙 发送:【666】领取


往期精彩文章

C/C++后台研发需要点亮哪些技能树?学习路线规划

C++ 能用来做什么?八大就业方向分析

全网最全总结,如何高效学习C++软件开发(详细书单)

这个大学在Github开源了计算机课程,看完在家上个 985


我是@程序员柠檬橙 关注我,学习更多编程知识!若有帮助,请点赞转发支持~

点击下方「了解更多」下载学习资源