写点什么

从浑浑噩噩到拿到腾讯 T9 offer,看看我是怎么做到的

用户头像
北游学Java
关注
发布于: 2020 年 11 月 23 日
从浑浑噩噩到拿到腾讯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++交流群:973961276学习资料已经共享在群里了,期待你的加入~



日积月累,终有所成!!!


用户头像

北游学Java

关注

进群1044279583分享学习经验和分享面试心得 2020.11.16 加入

我秃了,也变强了

评论 (1 条评论)

发布
用户头像
66666
2020 年 11 月 26 日 17:21
回复
没有更多了
从浑浑噩噩到拿到腾讯T9 offer,看看我是怎么做到的