这个问题有点历史了,不过我想换个角度,从 C++ 应用方向来回答下这个问题。当初学习C++也是用知乎和 Google 搜索学习方法,现在把自己的学习经验分享出来给后来的同学。
图源 hippopx CC0
首先,只是掌握 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++更接近操作系统底层,需要自己管理内存等等。
关于C++优质视频学习资源这块,这块我整理了一系列优质的C++公开课和教程视频资源:
<a href="http://www.zhihu.com/question/21661498/answer/1673362143" data-draft-node="block" data-draft-type="link-card" data-image="http://pic2.zhimg.com/v2-52a91223c84a45fb921e02c48f1a5ec9_l.jpg" data-image-width="402" data-image-height="487" class="internal">有没有什么好的C++视频教程?一定要看的书,总共 7 本书(带封面,方便你找),一年应该看得完。
C++基础 3 本
- 《More Effective C++》 豆瓣9.2
C++进阶 3 本
- 《Inside the C++ Object Model》 这本书中文版《深度探索C++对象模型》翻译质量也很高, 豆瓣9.1
现代C++ 2本
所谓的现代C++就是C++1X 甚至 C++20 引入的新特性,让C++这门「古老」的编程语言更加现代化。学完上面推荐的书籍,你已经是算的上是掌握了传统 C++ 用法,如何快速上手现代 C++ 特性,入门我推荐开源电子书:
看过Effective C++ 都知道那是多么经典的一本书,这本书的作者和Effect C++是同一位:
20多年来,Scott Meyers的“Effective C++从书”(包括《Effective C++》、《More Effecitve C++》和《Effective STL》)已经为C++程序设计指南的业界设立标杆。他清晰明了引人入胜的、对复杂技术材料进行条分缕析的阐释为他赢得了世界范围内的称誉,也使他成为一名广受欢迎的培训师、咨询顾问和会议讲师。他拥有布朗大学计科学专业的博士学位。 原书在豆瓣评分9.0,这本书有中文版,学习现代C++必备的高质量图书。
- 《现代C++教程:高速上手C++11/14/17/20》
本书号称『高速上手』,从内容上对二十一世纪二十年代之前产生 C++ 的相关特性做了非常相对全面的介绍,读者可以自行根据下面的目录选取感兴趣的内容进行学习,快速熟悉需要了解的内容。这些特性并不需要全部掌握,只需针对自己的使用需求和特定的应用场景,学习、查阅最适合自己的新特性即可。 这本书已在Github开源 changkun/modern-cpp-tutorial
以上,多了也不推荐,看完这 7 本书差不多算是掌握C++,要达到熟练掌握,还需要项目练习和代码量积累,至于找哪些适合的练手项目,这个我后面会说。
附带了一份我整理的 C++ 电子书合集:C++ 必读书籍推荐(含下载方式)
C++后台开发
其实 C++ 语言学习在 C++ 后台开发中,只占了非常非常小一的部分,要知道语言只是一个工具,你要做开发,工具使用是最低的要求,还需要学习以下内容才能符合岗位要求。
归纳起来,C++后端开发需要掌握的技术点包括:
- 计算机基础
- Linux
- 数据库
- 设计模式
- 中间件
- 分布式
- 高并发
- 高可用
- 高性能(统称互联网三高)
- 搜索引擎
- 测试技术
- 监控运营
- 虚拟化
- 安全技术
- 大数据
技术点比较多,这里只说下计算机基础学习,这是软件开发基础。
后端开发工作中经常用到 Java、C++、Python、Golang ,这些语言称为高级编程语言,之所以称为高级语言,是它们接近我们日常交流的自然语言,离计算机底层远。但所有的高级语言最终都会转化成汇编->计算机指令->控制流操控计算机硬件。
所以学习计算机构成和工作原理、操作系统这些基础知识,能够加深我们对高级语言的理解。
计算机基础
计算机科学技术 CS(Computer Science),大学计算机专业课,计算机基础是软件开发的基本功,当然也是C++开发的基本功,下面是一份中中科大的计算机技术本科主要课程结构安排。
计算机基础课程包括:
计算机组成原理
- 数据在计算机中的表示和运算
- 存储系统
- 指令系统
- 中央处理器
- 总线
- 输入输出系统
- 计算机网络
- 计算机操作系统
操作系统
数据结构与算法
- 线性表(链表、数组、循环链表)
- 栈和队列
- 树和各种二叉树(二叉排序树、平衡二叉树、哈夫曼树、B树、B+树、Trie树)
- 图(图的存储结构、BFS、DFS、最短路径、最小生成树、拓扑排序、关键路径)
- 查找算法(二分查找、B树查找、HASH表、KMP字符串模式匹配)
- 排序算法(插入排序、冒泡排序、归并排序、基数排序、堆排序)
- 贪心算法
- 位运算
- 分治算法
- 动态规划
数据结构大家最熟悉,大家面试刷的算法题本质上就是对各种数据结构的运用。
计算机基础的学习,理论知识会比较枯燥,建议结合视频公开课,我整理了一些优秀的计算机基础公开课资源:
计算机专业有哪些不错的公开课资源?讲完了后端开发技术体系的「计算机基础部分」,关于C++后端开发的其他技术点,以前我花了半个月时间整理过,就是下面这篇1 万 5 千字后端开发完全学习指南,对各个知识点的学习已经讲得非常详细,想了解C++后端开发技术栈的同学可以看看:
后端都要学习什么?项目练习
在完成上述学习内容的同时,可以同步找一些开源项目源码来学习,任何一门编程语言学习都需要多动手,一直看书不动手敲代码的效果也不好,可以试着着用C++造几个轮子玩玩,不仅可以积累代码量,同时也是一件很有成就感的事,编程是个手艺活,无他,唯手熟尔。
还是那句话,对于C++初学者推荐看书+视频的方式学习。
关于如何寻找适合练手的开源项目,我之前帮大家找过一些,适合练手和观摩学习的开源项目:
- cpp_redis
- LevelDb
- TinyXML
- yaml-cpp
- Muduo
- rpc
- ...
项目地址和详细介绍,看我下面这个回答,这里就不再搬运一遍了,给个传送门:
C++后台开发有哪些练基础的开源项目?你所看到的大神都是在写了无数代码之后,从量变引起的质变,学习C++编程没有捷径可走,总结起来两句话:多写代码,多看书。
当然了,一年时间掌握全部后端开发技术是不可能,但可以做到掌握C++和了解后端开发技术栈。这时候找个像上面招聘要求的那种,C++后端开发相关工作问题不大。
如果你连一年时间都没有,比如学生党只有一个寒假时间想C++入门,我觉得也没问题。某种程度上是对大目标的拆解,分成切实可行的小目标,反而没有那么大的执行压力,解决了大部分人的拖延症。
寒假 45 天如何自学入门C++?如果你时间还充足一些,比如很多人想利用研究生两年学习C++,这样时间更多可以安排的内容也更多,学的会扎实一些,其实两年时间认真学习,找一份相关工作问题不大。
研究生生涯还剩两年,学C++(达到可以找工作的标准)时间够用吗?最后,在这个短平快的时代,很多人总想给学习界定时间,想速成。但是啊,学无止境,C++ 学习也是一条漫长的道路,不追求一年速成,也不可能一年精通,只要每天都有进步,共勉。
最后,再给大家送上点干货!
下面这些是我知乎的高赞回答合集,建议大家点赞&收藏,一是鼓励我创作分享,二是方便以后查找!
- 互联网大厂炙手可热的后端开发岗位,如何成体系的学好?收获点赞3000+ 收藏 5100+
后端都要学习什么?2. VS Code 如何编写运行 C/C++ 代码?实战开发经验分享,收获 1000+点赞 2100+ 收藏
Visual Studio Code 如何编写运行 C、C++ 程序?3. 你们初刷leetcode时会怀疑自己的智商吗?手把手教会你算法刷题的正确方式,效率翻倍!
你们初刷leetcode时会怀疑自己的智商吗?3. 算法与数据结构中,AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中?4000+ 收藏!
AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中?2. C++开发有哪些练基础的开源项目推荐?从入门到进阶,安排明明白白,点赞1400+ 收藏3700+
C++后台开发有哪些练基础的开源项目?赶紧点赞和收藏吧~ 我是 @程序员柠檬 专注分享计算机编程学习~
<hr/>如果回答对你有帮助,码字不易,点赞收藏分享给更多需要的同学~
更多干货回答和文章,可以查看我的专栏,面向工资编程:
学编程,涨工资2021.03.05更新:C++常见面试题也整理出来了,需要自取。
精选 30 个 C++ 面试题(含解析) |