乐趣区

关于linux:从浑浑噩噩到拿腾讯T9-offer看看我是怎么做到的

前言

Linux C/C++ 从零根底到大神的学习路线,本人的实在学习路线,干货很多,倡议珍藏,认真浏览。

在校期间,我始终走的都是 Linux C/C++ 学习路线,历经暑期实习、秋招决战、校招期间投的大部分岗位都是 Linux C/C++ 后盾方向,对于这个方向,有着本人的了解。

从接触 C++ 到我当初正式工作,大略有 2 年多的工夫,对于这个方向的学习路线、以及学习编程的办法摸索进去了一些,看完本文,心愿对于正在走 Linux C/C++ 路上的同学能有所帮忙。

【文章福利】小编举荐本人的 linuxC/C++ 语言交换群:973961276!整顿了一些集体感觉比拟好的学习书籍、视频材料共享在群文件外面,有须要的能够自行添加哦!~

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

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

计算机根底为零,大二上学期接触 C 语言,大二一年学了 C 语言和数据结构,大三在学校的实验室开始学习计算机根底和学习 C++ 方向,一路自学编程,始终置信本人,也是拿到了大厂 offer。

校招 offer 状况:

  • 腾讯 后盾开发工程师(实习转正)
  • 百度 手百 feeds 流,软件研发工程师
  • 美团 后盾开发(C++ 方向面试)
  • 作业帮 后盾开发工程师
  • 好将来 后盾开发工程师
  • 迅雷 后盾开发工程师
  • 隆重游戏 C++ 开发工程师
    。。。

2018 年暑期实习腾讯,2019 年初实习百度,校招拿了十几个 Linux C/C++ 方向的 offer,最终的抉择也很玄学,去了本人想去的公司,从事本人喜爱的岗位,当初在编程的路上越走越远。

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

对于方向的抉择,很多人都抉择了 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++ 方向没有那么多乏味的货色能够做,在很长的一段时间内,要靠本人的趣味去保持学习。

一路走过去,真的很苦楚,在校期间都想过放弃这个方向,已经想学个 Java 可能会好一些(身边学习 Java 的人还是挺多的),每当快放弃的时候,又想到都学了这么长时间了,再保持保持,就这样一路走过去了;我是感觉本人真的挺侥幸的,有时候,真的不肯定非要头铁 C++ 方向,要看整个市场行情,趁势而为,抉择好方向,在深刻!

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

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

大厂特地喜爱考查计算机基础知识,对于根底把握的如何,在很大水平上将决定你是否能进入大厂,肯定要器重基础知识的学习;秋招筹备:根底 + 算法 + 我的项目,加上本人的方向(C++、Java、Python、前端等),其中每个环节都得筹备到位,能力最大水平上拿到大厂 offer,意识很重要,有了意识,再看具体的学习路线。

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

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

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

不论你是学习什么方向的,这些根底都不能漠视,有工夫的话,肯定要打扎实了,有了扎实的功底,在这行能力走的更远更快!

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

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

C++ 根底:C++ 是面向对象的语言,肯定要了解分明面向对象的思维,先把 C++ 的根底知识点打牢,刚从面向过程中转变过去,肯定肯定要适应面向对象的写法。

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

  • const 的用法
  • 援用的用法
  • define 用法
  • 构造函数
  • 析构函数
  • 拷贝结构
  • new、delete 和 malloc、free 的区别
  • 拜访限定符 public、private、protected
  • 深拷贝和浅拷贝
  • 友元函数
  • static
  • 内联函数
  • 继承、虚继承
  • 钻石继承问题
  • 同名笼罩问题
  • 虚函数表
  • 虚指针
  • 虚函数、纯虚函数
  • 接口
  • 多态
  • 重写
  • 重载
  • 函数重载
  • 运算符重载
  • 流类库和文件

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

对于 C++ 中 boost 库八大智能指针的把握与了解,其外围是了解并且分析过相应的源码,<scoped_ptr/shared_ptr/weak_ptr> 这三个是最外围的智能指针,了解分明智能指针的实质是,内存的申请与开释全副交给了对象治理,以防止人为忽略,造成内存泄露。

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

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

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

五、总结

最初,如果感觉学习材料难找的话,能够增加小编的 C 语言 /C++ 交换群:832218493 学习材料曾经共享在群里了,期待你的退出~

与日俱增,终有所成!!!

退出移动版