C++开发的学习路线
前言
了解C++开发的学习路线和推荐基础内容。需要明确认识的是,语言学习仅仅是一小部分,与项目实际开发之间有着很大的鸿沟。 下文将详细介绍。
C++/C与Java的区别
C++/C的语言粒度非常细,机制很多。性能确实高,但语言本身的包袱重,称为”造轮子“的语言,什么都能做。Java相比有着明显“生态圈”的概念,本身服务于互联网软件开发,主要用作后端开发、客户端开发居多,学习和应用领域相对非常清楚。
C++偏向底层,比Java难一些
C++做通信公司或者互联网公司的后台开发居多(也包括部分游戏公司),也就是服务端开发 ,当然其也有很多细分的工作岗位:做数据处理和分析;做基础协议和通信;做服务端底层应用优化;做后台系统的驱动和内核。
C++语言学习路线
C语言最重要的就是指针和内存管理。C++是对C语言的扩充和延申,可以理解为在C语言里加入一些面向对象的特性,使得代码能更好的复用、扩展和工程化,这是大型项目必备的要素。比如C++新加入的面向对象的特性:封装、继承与多态,更高级的主题类似泛型和模板、STL库等等。
语言学习不要脱太久,高强度压下来
推荐书籍
《Essential C++》(侯捷译):适合从C语言过渡到C++的学习
《C++ Primer》
《Effective C++》
《More Effective C++》
《C++标准程序库》
《深度探索C++对象模型》(内容很深,进阶内容)
基础四大件
四大件包括数据结构预算法、计算机网络、操作系统、设计模式。只要未来想从事变成岗位,这4个理论基础都必须掌握。基础四大件比编程语言本身要重要的多!
数据结构与算法
直接决定能否拿到offer。
常见的数据结构需要掌握,比如字符串、链表、二叉树、堆、栈、队列、哈希表。
常见算法需要掌握,比如查找、排序、动态规划,多刷题。
推荐书籍:
《大话数据结构》
《算法》(Java语言)
《剑指offer》(找工作必看)
其余精力建议全部用来刷题。
计算机网络
可以狭义理解为TCP/IP协议栈,其可以说是当下互联网通信的基石。
主要要做到对于协议栈原理的了解,包括里面的具体协议:ARP协议、IP协议、ICMP协议、TCP、UDP协议、DNS协议、HTTP协议、HTTPS协议。
推荐书籍:
《TCP/IP详解》
操作系统
该领域在面试时频次比较高的问题:
-
进程和线程
由此引发多线程的一些问题,比如原子性、并发、锁
-
内存
包括内存分布、内存调度的算法
推荐书籍:
《深入理解操作系统》
设计模式
倒不是说23种设计模式都要熟悉,常见的需要掌握,比如单例、工厂、代理、策略模式、模板方法。
推荐书籍:
《大话设计模式》
应用和编程实践
涉及到工具和编程环境。
Linux操作系统学习
实际企业级开发中,尤其是后端开发或者服务端开发几乎都是使用Linux操作系统:
-
常见的Linux系统操作指令要掌握。
-
基本的shell编程要熟悉
生产力工具,一些批处理和自动化的脚本
推荐书籍:
《鸟哥的Linux私房菜》
《Linux就该这么学》(通俗易懂)
编译和调试工具
Win10上的VS基于微软的MS编译器,有可视化的界面。但在公司工作中,Linux平台的编译器必须掌握,最重要的就是GCC。
有些公司有定制过的交叉编译工具
实际项目的编译动作叫make
,编译动作过程是写在makefile文件中。因此需要会写makefile文件,里面的规则要求掌握,学会设计和编写整个编译过程。
Win10用vs调试:打断点、运行。在通信公司和互联网公司中的后台开发中,也是使用Linux操作系统,主要使用GBD调试工具,借助进行代码调试。
推荐书籍:
《debugging with gdb》中文版
GNU官方关于GCC的文档(对英文有一定要求)
GNU官方关于GDB的文档(对英文有一定要求)
《跟我一起写makefile》陈皓
Linux编程环境
这部分主要学习Linux平台具体的编程。
-
学习Linux操作系统API的使用
-
多线程编程
服务端任务量大,多线程相关的东西无法避免。包括线程、资源、信号、同步、互斥、锁的编程实践
-
网络编程
操作系统上的一些网络编程的API,包括一些IO函数的代码编程
推荐书籍:
《Unix环境高级编程》(必看)
《Linux高性能服务器编程》
《POSIX多线程程序设计》