目录
一. 入门
1.1 C语言基础
1.2 c++基础
二、提高
三、进阶
3.1. STL 源码
3.2 对象模型
四. 编程基础四大件
二、提高
三、进阶
1. STL 源码
2 对象模型
四. 编程基础四大件
大家好,我是羽峰,一个c++刚入门的小白,本文整理了一些c++学习路线,当然自己也在路上,期待与您一起成长。如有需要,欢迎关注“羽峰码字”公众号,我们一起畅聊人生。
学习C++ 可以分为几个阶段
首先是c语言基础
推荐书籍:《C Primer Plus》、《C和指针》、《C专家编程》
当然这只是c++基础,理解就好,当然,指针和内存管理是很重要的,建议多理解,多看看。接下来我们重点理解c++一些东西
c++基础,可以看b站黑马程序员c++视频,还可以看这个网址:https://github.com/Light-City/CPlusPlusThings
这个过程你需要了解并且掌握一些基本概念
变量、常量、类型、循环、判断、数组、字符串、对象、输入输出等,
c++面向对象编程:封装,继承,多态,
C++ 中一些特有的东西,比如命名空间 namespace、引用、模板等。
最后就是一些 STL 中的类库,比如 string、vector、find 等。
了解基础之后,就是敲代码了,理论和实践是不一样的,特别是c++,理论很懂,但实操会有各种bug,敲代码可以更好的理解理论中一些自己忽略的东西。这里推荐一个网址:
https://www.codewars.com/kata/search/cpp
,有点像 LeetCode 刷算法题一样,这里针对每一个语法知识点都有一系列的练习题可供选择。
这里在辅助一下以下基本书,主推前两本。
《Accelerated C++》(美国斯坦福大学的经典教材)
《C++ Primer》(大而全)
《The C++ Programming Language》(C++之父 Bjarne Stroustrup 所著)
《Accelerated C++》《C++Primer》适合初学者;
《C++ Programming language》 是C++专家自学指南,顾名思义,适合有较深厚 C++ 功底的读者。
这几本书是一个辅助工具,可以对不懂的地方查漏补缺,不会哪里看哪里。也可以看着目录,看一些自己感兴趣的章节,没有必要从第一页开始挨着挨着读。
多用代码去验证自己的想法,尤其是指针、引用、构造、析构这些地方,可以去刷力扣题,或者github上一些开源的小项目。
学习 C++ 以及日常开发一定要记得这几个网站,可以随时查阅一些语法的用法和标准库:
http://cplusplus.com/
https://en.cppreference.com/w/
https://gcc.gnu.org/
基础之后就是提高了,提高篇就是优化自己的代码效率,命名规范,内存管理,数据传递方式,以及一些使用技巧。由于 C++ 是一门系统级编程的语言,你需要掌握一些 OS 方面的知识才能更好的使用。
尤其是内存编译链接这一块,比如堆、栈、静态链接、动态链接等等。
还有一些 C++ 里比较特殊的概念,比如 RAII 的资源管理方式、值语义与生命期、引用、右值引用等等。
这些东西似乎没有一本很系统的书籍可以帮助你掌握,只能在不同的书里吸收完善。
这一块,我也在学习,这里给出一些在这些方面有帮助的书籍:
《Effective》三部曲
一言概括,就是帮助你快速习得一些 C++ 里正确的姿势。
这里推荐b站侯捷老师一些视频,可以辅助看看,应该会有不一样的效率。
《程序员自我修养》& 《CSAPP》
帮助你掌握一些系统级编程的知识。如内存管理、堆栈、链接这类在 C、C++ 中极其重要的概念。
《Linux多线程服务端编程》
这本书严格来说不是纯讲 C++ 的。
但是里面会有一些章节,关于 C++ 多线程编程、锁、线程安全、C++ 一些工程实践经验还不错。
《Google C++ Style Guide》
谷歌的 C++ 代码规范,写代码是一件专业的事,把代码写得漂亮、专业也是一项能力。
谷歌的代码规范算是 C++ 领域一个标杆了。
侯捷老师说:源码之下,了无秘密。所以源码一定很重要,避免一些杂七杂八东西来浪费自己的时间
为了更好的使用 STL,一个方法就是阅读 STL 源码 或者掌握部分实现:
《STL源码剖析》
这本书讲解了 STL 五大组件的底层实现。
包括内存管理、各类容器的数据结构实现、算法的实现等。
建议列为必读,可以帮助深入理解 STL 底层。
其中也有很多面试常考的知识点,如内存池、traits 技法、vector 动态扩容、set、map 等实现原理等。
《深度探索C++对象模型》
这本书其实就是围绕一个点:C++ 里的对象是在内存中是如何组织的。
这是每个章节内容:
关于对象
构造函数语意学
Data语意学
Function语意学
构造、解构、拷贝语意学
执行期语意学
基础四大件包括:数据结构和算法、计算机网络、操作系统、设计模式
这跟学什么编程语言、后续从事什么编程方向均无关,只要做编程开发,这四个计算机基础就无法避开。可以这么说,这基础四大件真的比编程语言重要!!!
1、数据结构和算法
可以说这个直接决定了面试的成败!几种基础数据结构类型得烂熟于心,比如:字符串、链表、二叉树、堆、栈、队列、哈希等;基本的几大算法也要了如指掌,比如查找、排序、动态规划、分治等等。
建议LeetCode多刷题。
参考资料: 《大话数据结构》、《算法》、《剑指offer》《LeetCode刷题》
2、计算机网络
此处的计算机网络指的就是TCP/IP协议栈,可以说它是当下互联网通信的基石,无论如何一定要对TCP/IP的协议栈了如指掌,主要就是学习和掌握原理,包括:ARP协议、IP协议、ICMP协议、TCP和UDP协议、DNS协议、HTTP协议、HTTPS协议。
推荐书籍: 《TCP/IP详解》
3、操作系统
该部分重点包括:进程和线程的相关原理、内存相关原理
推荐书籍:《深入理解计算机系统》
4、设计模式
倒不需要23种设计模式全部记住,常见的几个如:单例模式、工厂模式、代理模式、策略模式、模板方法模式建议熟练于心。
推荐书籍:《大话设计模式》、《设计模式之禅》
这里借鉴了公众号:编程指北 大佬的公共号的一篇文章,欢迎关注该大佬。还有知乎上一些回答,如有侵权,欢迎告知。
写在最后,我是是一名小白,期待与您一起成长。
我是羽峰,公众号“羽峰码字”,欢迎来撩