寒食节,Linux C/C++ 学习道路(已拿腾讯、百度 offer),鼓楼

一、秋招 Linux C/C++ offer 状况

二、Linux C/C++ 方向的一些考虑

三、计算机根底常识的收拾

四、C++ 方向的深化学习路途

五、项目 + 亮点 + 面试的一些考虑

六、总结


前语


Linux C/C++ 从零根底到大神的学习路途,自己的实在学习路途,干货许多,主张保藏,仔细阅览。


在校期间,我一向走的都是 Linux C/C++ 学习路途,历经暑期实习、秋招决战、校招期间投的大部分岗位都是 Linux C/C++ 后台方向,关于这个方向,有着自己的了解。


从触摸 C++ 到我现在正式作业,大约有 2 年多的时刻,关于这个方向的学习路途、以及学习编程的办法探究出来了一些,看完本文,期望关于正在走 Linux C/C++ 路上的同学能有所协助。


一、秋招 Linux C/C++ offer 状况


自己就读于双非院校、非科班本科学生,专业是偏硬件的(校园课程只需一门 C 言语与编程相关,其他的课程跟编程一点点的联系都没有),在校期nh962间也没拿过什么大的奖项。


计算机根底为零,大二上学期触摸 C 言语,大二一年寒食节,Linux C/C++ 学习路途(已拿腾讯、百度 offer),鼓楼学了 C 言语和数据结构,大三寒食节,Linux C/C++ 学习路途(已拿腾讯、百度 offer),鼓楼在校园的实验室开端学习计算机根底和学习 C++ 方向,一路自学编程,一向信任自己,也是拿到了大厂 offer。


秋招 offer 状况:

腾讯 后台开发工程师(实习转正)

百度 手百 feeds 流,软件研制工程师

美团 后台开发 (C++ 方向面试)

作业帮 后台开发工程师

好未来 后台开发工程师

迅雷 后台开发工程师

隆重游戏 C++ 开发工程师

。。。


2017 年暑期实习腾讯,2018 年头实习百度,校招拿了十几个 Linux C/C++ 方向的 offer,终究的挑选也很形而上学,去了自己想去的公司,从事自己喜爱的岗位,现在在编程的路上越走越远。


二、Linux C/C++ 方向的一些考虑


1、

关于方向的挑选,许多人都挑选了 Java 或许 Python 方向,Java 或许 Python 方向确实学的人多,岗位需求许多,入门能比 Linux C/C++ 方向简略一些,可是往深了学,各有各的难度,先敲定了方向,再深化学习。


Linux C/C++ 方向,国内实在把握的人,其实是极少数,这个方向的学习人数也是相对比较少的,入门一般首选 C 言语或许 Python,C、C++ 在编程排行榜也是经久不衰的,排名靠前,假如喜爱,有爱好,走这个方向是能够的。


Linux C/C++ 方向,国内许多大公司都有招聘这个方向的岗位,BAT 都有,特别腾讯,底层架构都是 C++ 写的洋媚子,百度中心查找许多模块也是 C++ 写的,阿里云也在招聘 C++ 方向的工程师,这个方向,学的不错的,底子不必忧虑找作业的问题,学的一般的,其实就比较难找了。


Linux C/C++ 的功率是比 Java、Python 快一些的,更倾向于底层,能直接操作内存,关于编程思维、逻辑才干的提高是有协助的;其实学习这个方向,是有一点单调的,不像 Python 爬虫、Java、前端能做出一些风趣的东西,小程序开宣布一些产品,都能很快用于实战,取得编程的趣味,进一步影响自己学习。


C++ 方向没有那么多风趣的东西能够做,在很长的一段时刻内,要靠自己的爱好去坚持学习。


2、

我在大三的时分,用 C++ 写过五子棋、内存监控东西、紧缩东西、以及完成一些比较杂乱的数据结构,完成网络编程的并发模型;当你学习 Linux C/C++ 方向到必定程度的时分,你会找到这个方向的趣味,跟其他方向彻底不一样的趣味,不过,前期真的很难,有一段时刻极端苦楚,是要通过很长一段时刻的学习,才干有必定的作用,假如对这个方向,真的没有啥爱好,最好挑选走前端、Java、Python 等是最好的挑选。


Linux C/C++ 方向,入门略微难一点,一旦挑选了要走 C++ 方向的,在心态上面,要做好预备,必定不能有畏难心里,做好触摸底层、杂乱逻辑的分析、以及具有面向进程 + 面向目标的思维;便是退一步讲,我学习了 Linux C/C++ 方向,具有了编程思维和了解了 C++ 言语,以后去公司上班了,也能很快的上手 Java、Python 等方向(我说的上手指的是言语根底很快的学习,要想深化,还得花大把的时刻)。


依照现在身边人找作业的状况,遍及来说,Java、Python、前端、数据分析、测验方向都要比 C++ 好找一些,更简略找到作业,尽管我是走的 Linux C/C++ 方向,可是关于对底层没有爱好,对 C 言语没有爱好的人,不主张走这个方向。


3、

我一路走过来,真的很剑侠情缘苦楚,在校期间都想过抛弃这个方向,从前想学个 Java 或许会好一些(身边学习 Java 的人仍是挺多的),每逢快抛弃的时分,又想到都学了这么长时刻了,再坚持坚持,就这样一路走过来了;我是觉得自己真的挺走运的,有时分,真的不必定非要头铁 C++ 方向,要看整个市场行情,顺势而为,挑选好方向,在深化!


关于 Java 仍是 C++ 方向的挑选,没有哪个方向必定好找作业,没有哪个方向必定工资待遇高,互联网这行,特别是靠技能说话的,这些都取决于你本身的技能才干。


挑选走 C++ 方向的,必定要走 L程晓玥inux C/C++,面向网络编程,学会 Linux 至关重要!


大厂特别喜爱调查计算机根底常识,关于根底把握的怎样,在很大程度大将决议你是否能进入大厂,必定要注重根底常识的学习;秋招预备寒食节,Linux C/C++ 学习路途(已拿腾讯、百度 offer),鼓楼:根底 + 算法 + 项目,加上自己的方向(C++、Java、Python、前端等),其间每个环节都得预备到位,才干最大程度上拿到大厂 offer,认识很重要,有了认识,再看详细的学习路途。


三、计算机根底常识的收拾


计算机根底:数据结构 + 算法、操作体系 + 计算机网络、数据库 +  Linux、C 言语


作业必备东西:Linux + Git + Sql


不论你是学习什么方向的,Java、Python、前端、测验、运维等等,这些根底都不能忽视,有时刻的话,必定要打厚实了,有了厚实的功底,在这行才干走的更远更快!


1、

数据结构:关于常用的数据结构,链表、栈、行列、矩阵、树(BinTree、BST、AVL、RBtree、B+、B-)、跳表、图等,学郭鹤年小女儿郭燕光习从界说--->原理--->完成--->使用,都要有不同程度的把握。


靠前的数据结构必定要十分的娴熟,关于树、图杂乱的数据结构,最起码的把握界说、原理、部分完成,我就记住:我在面试的时分,手写过红黑树的旋转算法,关于图的一些最短途径算法也是当面手写过,头条的面试根本上便是全程算法,难度不低(我个人博客上面有所有的数据结构的收拾)。


书本:

<鬼话数据结构>,合适入门学习;

<数据结构>,清华大学严蔚敏写的,作为进阶和深化。


视频:

https://pan.baidu.com/s/1qQrHTdkvxMLSGv7G4nHWBw 暗码:4o9p


2、

算法:必定要确保把握根底算法 + 常见算法,十大排序算法(冒泡、刺进、挑选、快排、希尔、堆排、归并、桶排、基数、计数)是最简略的,也是必定必定要娴熟把握的,别的还有字符串常见算法、数组常见算法、递归算法等等。


关于算法,从易到难,先把我列的一些算法把握了,在去刷一些题,会有一些成就感,才干有自傲,也要早早开端,一向刷一些算法题,坚持住手感,关于五大算法,是要刷必定题量的,要及时的做好概括收拾、总结反思。


视频面试便是编译器上面直接敲代码,现场面试,大部分状况下都是手写代码,写一些中心的算法逻辑,要特别注意判别鸿沟状况,与面试官边评论边写,《剑指 offer》至少刷 2-3 遍,在刷刷 leetcode 上面 easy、medium 类型的标题就好了(我 github 上面有自己收拾的常见算法标题)。


在算法方面的要求上,C++ 方向关于算法的要求显着更高,算法功底必定要厚实!


书本:

<啊哈算法>,合适入门学习;

<编程之美>、<算法导论>,进阶提高必看;

关于算临产法导论,尽管比较难,数学公式许多,可是有视频的,有些学到了,真的不亏,能够学一部分的;

<剑指 offer>、leetcode 找实习/作业前,刷题就好。


视频:左神的算法视频引荐看看,讲的很清楚。

算法导论的视频:

https://pan.baidu.com/s/1Bm34-92TwN5TbMOXfPk水煎包的做法Y6g 

暗码:1i38


3、

操作体系:很常问的一些技能点,堆和栈、内存分区、虚拟内存 + 物理内存、进程 + 线程 + 阿卡丽协程、死锁、分片机制、五大组件、中止和体系调用 、同步和异步等等问题。


关于操作体系的了解,关于这些根底的计算机常识的把握是有必要深化学习,要花很大的功夫去了解清楚这些,作业中,关于实在线上体系的稳定性、关于底层技能的了解是有协助的,操作体系是面试中常见问题之一。


书本:

<现代操作体系>、<深化了解计算机体系> 是比较全面,写的比较好的书,极力引荐。


视频:

https://pan.baidu.com/s梧州天气预报/1XiKe5e0UoI2Fp3Amn7aCCA

暗码:y230 


4、

计算机网络:OSI 七层模型和 TCP/IP 四层体系结构,TCP 三次握手与四次挥手、常见的网络协议(网桥、ARP、IP、ICMP、TCP、UDP、DNS、DHCP)、TCP 粘包、流量操控 + 拥塞操控、数字签名原理、http + https,http 的状况码,https 的安全机制,网络安身全、输入 www.baidu.com 背面发生了什么等等问题。


其实作业中,有时就会呈现,网络颤动、网络推迟,网络拥塞的状况,此刻就需求具有必定的网络常识,及时的处理问题,计算机网络是面试中常见问题之一。


书本:

<计算机网络>(谢希仁第 7 版);

<TCP/IP>(卷一)


视频:

https://pan.baidu.com/s/1xRvWUlWzQ9c67XTo0Lkg-g 

暗码:c85g 


5、

数据库:数据库作为存储数据的当地,其不同的数据结构、与使用的场景不一样,采纳不同的数据库,关于 mysql 根本操作、写 sql 的优化、表的规划、索引优化、怎样更快的查询、底层数据结构的规划原理等等问题。


常见的规划形式、主要是学习规划形式的思维、单例形式是有必要写代码完成的,其他规划形式了解思维,作为了解内容,后台开发工程师与 mysql 打交道挺多的,也是面试常见问题之一。


书本:

<MySQL 必知必会>

<高性能 Mysql>

<鬼话规划形式>


视频:

数据库视频:

https://pan.baidu.com/s/1yIT0nVwFazu0f7mJA0pBiA 

暗码:33n1 


6、

Linux:Linux 的目录结构、文件体系、发动进程、用户环境,Linux 下常用命令(find、grep、awk、xargs)、正则表达式、软/硬链接、重定向、日志信息、网络装备(top、ps、ifconfig、ping 等)、简略的 shell 脚本会写(常见的脚本写一些主动化东西或许守时使命)。


娴熟把握 vim,用 C++ 写代码的话,还需求把握 gcc、g++、gdb 调试,makefile 的编写,作业根本上离不开 Linux,也是面试常见问题之一。


书本:<鸟哥私房菜>


视频:Linux 这块的视频,现在最好的是:马哥的和老男孩的视频,主张我们去网上搜着找一下。

ht寒食节,Linux C/C++ 学习路途(已拿腾讯、百度 offer),鼓楼tps://pan.baidu.com/s/1y9Nw2sL0tcFzej2q6DzUwg 

暗码:3o32 


7、

C 言语:C 言语是我学习编程的榜首门言语,是面向进程的言语,关于 C 言语中的数组、函数、指针、内存对其形式、巨细端问题、野指针、内存走漏、static、register、define、typedef、struct、union 等一些关键字的调查。


我一向把 C 言语作为根底,不是方向,在 C 言语这儿学到了许多编程的思维,关于 Linux C/C++ 方向,C 言语是根本功,也是必定调查的当地,最初我也是由于特别喜爱 C,走上了 C++ 的路途。


书本:

<C 程序规划言语> 合适入门学习;

<C 缺点与圈套>、<C 专家编程>、<C 和指针> 合适进阶提高


视频:b 站郝斌的 C 言语强烈引荐


C 言语能够学,C 言语是根底,不是方向,可是挑选走 C++ 方向要稳重!


关于上面的每一个模块,其实都能单拿出来,写的更为详细一些,后边有时刻的话,我会写的尽量详细。


四、C++ 方向的深化学习路途


1、

C++ 根底:C++ 是面向目标的言语,必定要了解清楚面向寒食节,Linux C/C++ 学习路途(已拿腾讯、百度 offer),鼓楼目标的思维,先把 C++ 的根底常识点打牢,刚从面向进程中转变过来,必定必定要习气面向目标的写法。


在学习面向目标的时分,也要考虑怎样用面向进程去完成面向目标(其实也便是结构体中有一个成员是函数指针),关于 C++ 的根底常识,我简略罗列如下:


1、const的用法

2、引证的用法

3、#define用法

4、结构函数

5、析构函数

6、复制结构

7、new、delete 和 malloc、free 的差异

8、拜访限定符 public、private、protected

9、深复制和浅复制

10、友元函数

11、static

12、内联函数

13、承继、虚承继

14、钻石承继问题

15、同名掩盖问题

16、虚函数表

17、虚指针

18、虚函数、纯虚函数

19、接口

20、多态

21、重写

22、重载

23、函数重载

24、运算符重载

25、流类库和文件


书本:

<C++ Primer> 第 5 版先全面的了解清楚 C++ 的根底。


2、

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


关于 C++ 中 boost 库八大智能指针的把握与了解,其间心是了解而且分析过相应的源码, <scoped_ptr/shared_ptr/weak_ptr> 这三个是最中心的智能指针,理生菜的做法解清楚智能指针的实质是,内存的申请与开释悉数交给了目标办理,以防止人为忽略,形成内存走漏。


书本:

<Effective C++>

<more Effectice C++>

<深度探究 C++ 目标模型>

<C++ 深思录>


3、

STL 源码:关于 STL 中的容器分析,常见容器有 list、vector、stack、queue、map 等,调查主动扩容的原理、map 的底层完成(RBtree),源码是有必要手动至少分析一遍的。


关于迭代器、空间装备器的了解,比方:一级空间装备器、二级空间装备器的运用场合别离是什么?一二级空间装备器的实质是什么,怎样用内存池去办理?所存在的问题又有哪些,源码又是怎样完成的等等,这些问题都需求去考虑。


书本:

<STL 源码分析>

<泛型编程与STL>


4、

Linux 网络编程:

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、静态库和动态库


书本:

<Linux高性能服务器编程>

<UNIX网络编程卷一>

<UNIX网络编程卷二>

<UNIX 环境高档编程>


视频:

https://pan.baidu.com/s/1vSKPRpNEPSj59iASaZD38A 暗码:e4q3 (陈硕的网络编程)


5、

内核源码分析:关于 Linux 内核源码,能够先看 Linux 内核的规划与完成,了解清楚每部分的结构与原理,前期多看书、多看相关视频,对一些源码的解读,到必定程度,最好拿到 Linu北川杏樹x 2.6 版别内核源码,我是用 Source Insight 东西辅佐分析源码的。


这个东西关于源码的分析特别友爱,很快定位变量、追寻函数,其实要点应该放在内核文件体系与内核数据结构的完成上面,多看看源码是怎样完成的,比方:内核链表的源码完成,真的是一种十分共同的思维,没有看的能够去看看(没有源码的能够找我要)。


书本:

<Linux 内核规划与完成>

<深化了解 Linux 内核>


内核视频:

https://pan.baidu.com/s/1jvLYQFJa5ZTZ0_E3kZ-pcQ 暗码:yn06 

https:ng//pan.baidu.com/s/1ZsngBAllXGEkThSVearOuQ 暗码:h9qs 


C++ 相关视频:引荐看黑马的 C+++ 视频,是全套的,讲的比较好,关于推动的书本,先看看目录,就大约了解其内容了。


6、

开源网络库:关于 Linux C/C++ 方向,还需求重视一些业界开源的网络库,比方:MemCached、libevent 等,在 github 上面能够直接搜,关于分布式、高并发、集群和负载均衡等常识,这部分作为了解,要是有爱好,也能够深化看看,在深度的前提下,作为技能广度的扩大。


针对上面,从根底到 C++,我列出来的都是十分重要的常识点,当然了,也不或许悉数列到,有许多技能问题,许多细节,我或许没有考虑到,没有写到,这个还需求在学习的时分,仔细看看视频、看看书,把相应的常识都学到位,根底打厚实一些。


五、项目 + 亮点 + 面试的一些考虑


1

项目:关于暑期找实习,李振威营口或许秋招找作业,除了根底跟方向,接下来便是项目的预备了,关于 C++ 方向,许多人不知道要预备什么项目?其实项目不在于有多大、有多难,在于项目是否是自己实在做的,自己是否彻底消化了,项目中是否有什么亮点?


C++ 方面的实战项目,以数据结构 + 网络编程 + 实用东西为主;数据结构方面:能够完成红黑树、B+ 树,又或许用图处理什么实际问题,这些杂乱的数据结构完成能够作为项目的。


7 大进程间通讯,6 大高并发模型,能够写线程池,select、poll、epoll等局域并发谈天项目。


完成轻音乐纯音乐东西,以自己写个简略的紧缩东西、编译器、内存走漏检测东西等,这些都是项目的来历,我的项目就有:网粤语发音络编程实恶魔高校第三季现在线群聊、紧缩东西,对文件或许图片进行紧缩、解紧缩。


关于项目这块,面试的常见问题有:

a、做这个项目的布景是什么?
b、项目中详细有哪些模块,都是怎样完成的?

c、项目中你的技能亮点有哪些?
d、项目中有什么难点,你是怎样处理的?
e、寒食节,Linux C/C++ 学习路途(已拿腾讯、百度 offer),鼓楼要是重新做这个项目,你这个项目有什么缺乏,你会进行哪些改善?


2、

亮点:找实习或许找作业,有必要的有自己的亮点,我觉得在那么多根底常识中,数据结构 + C 言语便是我的亮点之一,只需问到关于这 2 个方面的问题,尽量答复全面清楚炸金花技巧一些,还有便是自己关于 Linux 内核数据结构的分析也是亮点之一,总归,必定要找到自己的亮点,与他人不一样的当地,这个便是面试的加分项。


查找引擎的底层原理、通讯的底层原理,关于这些底层的完成,有爱好的能够了解看看,其实也没那么难,要是在面试的时分,能答复出对这些技能的了解,以及自己的一些考虑,那便是加分项了。


3、

面试:春招实习、秋招决战,我不知道投了多少家公司,也不知道面试了多少场,根本上都是海投的,有了面试时机,就要捉住每一次,面试完多做总结、概括、反思;其实面试很形而上学,有本身实力的原因,也有命运的成分,信任自己,好好体现就好。


关于面试,才开端我也是比较严重的,可是当你面的多了,渐渐的就会调整过来,就会好许多,我现在把面试作为是,这是一次近距离和优异的人沟通的时机,是一次学习前进的时机,有了这种心态,其实就好的多了。


六、总结


引荐一些好的视频网站:b 站、牛客网、极客时刻、51cto、七月算法、网易云课程,根本上你所需求的视频材料都能够去找,实在不可上淘宝看看,有些视频文中没有给到,需求自己去找找,我的网盘满了,清空了一些,这些都很好找到的。


关于实在自己找不到视频、书本资源的读者,你私聊我,我有时刻给你找找,视频其实中心便是:捉住黑马(找一个全套的,跟着看、跟着学、一向走下去)。


我走的是 Linux C/C++ 路途,秋招投递这个岗位也许多,关于没有我简历的、没有 Google C++ 编程标准的,你私聊我,把这些该有的材料都送给你。


关于想走 Lin女性逼ux C/C++ 方向的同学,根本上依照上面的路途走,相应的书本以及视频都有引荐,多实战操作。


日寒食节,Linux C/C++ 学习路途(已拿腾讯、百度 offer),鼓楼积月累,终有所成!!!


我在 “2+2” 实验室座位


精选文章集

ps:大学期间的方向挑选、考研/工作挑选、暑期实习备战、秋招决战、offer 挑选、学习编程办法、习气等等等,合计 20 余万字的个人亲身阅历,合适每一位在校大学生多读读,找准自己的方向,人生打法!



把酒言欢 各抒己见


引荐阅览:

强烈引荐在校学生值得一看的文章

浅谈 996,一些实在阅历与主意


仔细的人 自带光辉