年薪百万程序员倾心推荐,Linux C/C++学习这些就够了!不怕你找不到方向

229 阅读5分钟

前言:对于方向的抉择,很多人都选择了 Java 或者 Python 方向,Java 或者 Python 方向确实学的人多,岗位需求很多,入门能比 Linux C/C++ 方向容易一些,但是往深了学,各有各的难度,先敲定了方向,再深入学习。

![](https://upload-images.jianshu.io/upload_images/24762785-86a3c719a1a91224.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Linux C/C++ 方向,国内真正掌握的人,其实是极少数,这个方向的学习人数也是相对比较少的,入门一般首选 C 语言或者 Python,C、C++ 在编程排行榜也是经久不衰的,排名靠前,如果喜欢,有兴趣,走这个方向是可以的。

Linux C/C++ 方向,国内很多大公司都有招聘这个方向的岗位,BAT 都有,尤其腾讯,底层架构都是 C++写的,百度核心搜索很多模块也是 C++ 写的,阿里云也在招聘 C++方向的工程师,这个方向,学的不错的,根本不用担心找工作的问题,学的一般的,其实就比较难找了。

Linux C/C++ 的效率是比 Java、Python快一些的,更偏向于底层,能直接操作内存,对于编程思维、逻辑能力的提升是有帮助的;其实学习这个方向,是有一点枯燥的,不像 Python

爬虫、Java、前端能做出一些有趣的东西,小程序开发出一些产品,都能很快用于实战,获得编程的乐趣,进一步刺激自己学习。

C++ 方向没有那么多有趣的东西可以做,在很长的一段时间内,要靠自己的兴趣去坚持学习。

一路走过来,有时候,真的不一定非要头铁C++ 方向,要看整个市场行情,顺势而为,选择好方向,在深入!

对于 Java 还是 C++ 方向的选择,没有哪个方向一定好找工作,没有哪个方向一定工资待遇高,互联网这行,尤其是靠技术说话的,这些都取决于你自身的技术能力。

选择走 C++ 方向的,一定要走 Linux C/C++,面向网络编程,学会 Linux 至关重要!

![](https://upload-images.jianshu.io/upload_images/24762785-e9347a159c1688dc.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

大厂特别喜欢考察计算机基础知识,对于基础掌握的如何,在很大程度上将决定你是否能进入大厂,一定要重视基础知识的学习;秋招准备:基础 + 算法+ 项目,加上自己的方向(C++、Java、Python、前端等),其中每个环节都得准备到位,才能最大程度上拿到大厂offer,意识很重要,有了意识,再看具体的学习路线。

三、计算机基础知识的梳理

**计算机基础:**数据结构 + 算法、操作系统 + 计算机网络、数据库 + Linux、C 语言

**工作必备工具:**Linux + Git + Sql

不管你是学习什么方向的,这些基础都不能忽视,有时间的话,一定要打扎实了,有了扎实的功底,在这行才能走的更远更快!

在算法方面的要求上,C++ 方向对于算法的要求明显更高,算法功底一定要扎实!

四、C++ 方向的深入学习路线

**C++ 基础:**C++ 是面向对象的语言,一定要理解清楚面向对象的思想,先把 C++ 的基础知识点打牢,刚从面向过程中转变过来,一定一定要适应面向对象的写法。

如果你在学习C/C++的过程中遇到了问题,可以来加入小编的企鹅圈问小编哦~小编很热情的(●’◡’●)

在学习面向对象的时候,也要考虑如何用面向过程去实现面向对象(其实也就是结构体中有一个成员是函数指针),对于 C++ 的基础知识,我简单罗列如下:

const的用法

引用的用法

define用法

构造函数

析构函数

拷贝构造

new、delete 和 malloc、free 的区别

访问限定符 public、private、protected

深拷贝和浅拷贝

友元函数

static

内联函数

继承、虚继承

钻石继承问题

同名覆盖问题

虚函数表

虚指针

虚函数、纯虚函数

接口

多态

重写

重载

函数重载

运算符重载

流类库和文件

**C++ 进阶:**函数模板、类模板,C++ 中对于异常的处理,对于继承和多态底层的理解,对于 virtual 底层的理解等。

对于 C++ 中 boost 库八大智能指针的掌握与理解,其核心是理解并且剖析过相应的源码, 这三个是最核心的智能指针,理解清楚智能指针的本质是,内存的申请与释放全部交给了对象管理,以避免人为疏忽,造成内存泄露。

**STL 源码:**对于 STL 中的容器剖析,常见容器有 list、vector、stack、queue、map 等,考察自动扩容的原理、map 的底层实现(RBtree),源码是必须手动至少剖析一遍的。

对于迭代器、空间配置器的理解,比如:一级空间配置器、二级空间配置器的运用场合分别是什么?一二级空间配置器的本质是什么,如何用内存池去管理?所存在的问题又有哪些,源码又是如何实现的等等,这些问题都需要去思考。

Linux 网络编程:

![](https://upload-images.jianshu.io/upload_images/24762785-978ced09dfbc4382.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

1、Linux 进程环境:僵尸进程、孤儿进程、守护进程、进程组、会话、前台进程组、后台进程组

2、Linux 进程七大通信方式:signal、file、pipe、shm、sem、msg、socket

3、Linux 线程:互斥量、锁机制、条件变量、信号量、读写锁

4、Linux 下并发模型:多进程、多线程、线程池

5、Linux 下 I/O 复用:select、poll、epoll 高并发

6、Linux 网络编程

7、静态库和动态库!