大厂战略Linux C/C++技术栈
Linux C/C++ 从0到大牛的技术栈线、自己的真实学习路线和经验,干货很多,建议收藏,认真阅读。
小学初中不想上课可以不去、高中不努力学习考不上985/211最多去一所次一点的大学。但是如果打算走编程这条道路、一定不能懒散、松懈、要有战略思想、技术栈,坚持不懈的努力。不管是什么专业学历怎么样都可以学编程,哪怕是一个高中毕业生,只要有战略、技术栈线+努力都能在编程的领域里分到一勺汤。下面主要结合自己的战略、技术栈、和经历写一篇Linux C/C++大厂战略技术栈。
想进大厂,必须要有战略思想、技术栈线。历史上有那个大的战役没有战略方向的?如果有只能是败仗。想进大厂也不是梦,阿里、腾讯、头条、百度、美团、小米、京东等等大厂每天都在招人。开句玩笑(搞编程的不想努力进大厂,就好比不想当将军的士兵不是好士兵)。只要自己比别人多努力,比别人优秀一点,别人不会的你会(大厂offer机会就来了)。
Linux C/C++ 技术栈的一些思考
为什么要选择Linux C/C++?这个问题值得每一个走Linux C/C++的人深思熟虑,走Linux C/C++要比走java、python路线门槛高一点点,但是学技术都一样,相通的。java、python工作岗位相对要比Linux C/C++工作岗位多一些,学的人也多一些。
Linux C/C++国内真正的大牛少之又少,阿里、腾讯、头条、百度、美团、小米、京东等等大厂都有招Linux C/C++这个岗位,阿里云,百度核心搜索、腾讯底层架构都是C++写的。只要学好根本不用担心找不到工作,而且薪资方面也不错。
Linux C/C++更接近底层机器,自然而言效率比java、python效率高很多,但是各有各的优势,就好像“PHP是世界上最好的语言这个玩笑一样。想更深入了解操作系统,控制系统,选择Linux C/C++最好不过了。
从我当年,有些同学朋友走IOS、android、.net、java、python方向,经常看到有些人最近学这个方向,过一段时间又学另一个方向,这是兵家大忌。不管走那个方向,一定要沉稳、沉稳、沉稳,选择了就坚持走下去,除非那个技术栈没落了。学习的过程是枯燥的,学习时的苦痛是暂时的,未学到的痛苦是终生的。
大厂特别喜欢考:计算机组成原理、操作系统、计算机网络、数据库、设计模式、数据结构、算法。一定要这种把数据结构和算法做充分的准备,进大厂,靠算法就卡死很多人。说一下我当年的经历,是如何突破的,我当年大一的时候就是每天一到ACM上面的程序题目,大概坚持了一个多学期,大一下的时候开始学数据结构,后来自己又学了算法导论,然后坚持了一年多,刷了三轮左右,开始的时候是看视频、看书、然后对着视频敲,最后达到了手撕的代码的能力,最后准备暑假实习和春招的时候刷了很多剑指offer、leetcode上面的很多题目。
大厂很注重基础和算法、不管走什么技术栈,都要稳扎稳打,基础打牢、能不能进大厂就看你掌握的基础的程度,大厂=基础+算法+项目。要有能拿得出手的项目,能够讲出为什么做这个项目,做这个项目有什么作用,目的性,用什么技术,项目的缺点,哪方面还可以提高。如果这样做了充足准备何愁拿不到大厂的offer。技术栈的每个环境都不能遗漏,基础越牢固,编程的道路就走得越远。学编程要有大厂意识、大厂战略、大厂的思想。别人不会你会,你就是牛逼、你别别人优秀,别人就被刷了,你就有机会拿offer。
基础知识
开发环境
Linux(ubuntu、红帽子、deepin)、熟悉Linux常用命令、Git、Sql。建议看鸟哥私房菜、Git教程建议看廖雪峰的教程。搭好Linux环境,多捣蛋,搞坏了就修、重装。工欲善其事必先利其器。
基础:
C/C++语言(工具)、计算机组成原理、操作系统、计算机网络、数据库、设计模式、数据结构、算法(颜色标识的不管什么方向是进大厂必须会的,饶不了的圈子)。
C语言:
数组、函数、指针、熟练内存操作。
推荐书籍:
C 程序设计语言、C 缺陷与陷阱、C 专家编程、C 和指针。
C++语言:
const的用法、引用的用法、#define用法、构造函数、析构函数、拷贝构造、new、delete 和 malloc、free 的区别、访问限定符 public、private、protected、深拷贝和浅拷贝、友元函数、static、内联函数、继承、虚继承、钻石继承问题、同名覆盖问题、虚函数表、虚指针、虚函数、纯虚函数、接口、多态、重写、重载、函数重载、运算符重载、流类库和文件。
C++ 进阶:
函数模板、类模板,C++ 中对于异常的处理,对于继承和多态底层的理解,对于 virtual 底层的理解等。在C++ 中 boost 库八大智能指针的掌握与理解,其核心是理解并且剖析过相应的源码,
对于迭代器、空间配置器的理解,比如:一级空间配置器、二级空间配置器的运用场合分别是什么?一二级空间配置器的本质是什么,如何用内存池去管理?所存在的问题又有哪些,源码又是如何实现的等等,这些问题都需要去思考。
推荐书籍:
C++Priner Plus第六版、Effective C++、more Effectice C++、more Effectice C++、深度探索 C++ 对象模型、C++ 沉思录、STL 源码剖析、泛型编程与STL。
数据结构:
线性表、链表、堆栈、队列、树((BinTree、BST、AVL、RBtree、B+、B-)、图等等。(建议:先从简单入手+视频+原理+原理+实现+应用)
推荐书籍:
大话数据结构、数据结构(清华大学严蔚敏)、数据结构与算法分析(机械工业版)。
Linux系统编程、网络编程:
1:进程环境、进程控制、信号和信号处理、多进程。
2:进程之间通信:文件、管道、FIFO管道、消息队列、信号量、共享内存、socket编程。
3:线程、多线程、线程同步使用互斥量、线程同步使用读写锁。条件变量、信号量。
4:文件I/O文件管理、流I/O。
5:特别要理解这几个进程之间通信的原理、特征优缺点。
6:TCP/UDP协议、socket编程、多路I/O复用select、poll、epoll 高并发。
计算机网络:
TCP/IP协议、OSI参考模型及TCP/IP参考模型 、常见的网络协议(网桥、ARP、IP、ICMP、TCP、UDP、DNS、DHCP)、协议的选择 、TCP 三次握手与四次挥手、流量控制 + 拥塞控制、网络相关概念 、socket概念 、socket类型 、 socket信息数据结构 、数据存储优先顺序的转换 、地址格式转化 、名字地址转化、socket编程 、 使用TCP协议的流程图 、单播、广播、组播(多播) 。
推荐书籍:
Linux高性能服务器编程、UNIX网络编程卷一、UNIX网络编程卷二、
UNIX 环境高级编程、Linux C程序设计大全、TCP/IP详解。
内核源码剖析:
Linux 内核源码,可以先看 Linux 内核的设计与实现,摸清楚每部分的构造与原理,前期多看书、多看相关视频,对一些源码的解读,到一定程度,找一份Linux 内核源码,分析源码的。
推荐书籍:
Linux 内核设计与实现、深入理解 Linux 内核。
数据库:
数据库就是存数据的仓库,数据库作为存储数据的地方,其不同的数据结构、与应用的场景不一样,采取不同的数据库,对于 mysql 基本操作、写 sql 的优化、表的设计、索引优化、如何更快的查询、底层数据结构的设计原理等等问题。
设计模式:
设计模式基本原则、依赖倒置和迪米特法则、单例模式_懒汉式和饿汉式、懒汉式遇上多线程问题、简单工厂模式、模板、命令、责任链、策略、中介、观察者、访问者、状态、解释器、迭代式模式等等。
主要是学习设计模式的思想、单例模式是必须写代码实现的,其他设计模式理解思想,作为了解内容,后台开发工程师与 mysql 打交道挺多的,也是面试常见问题之一。
算法:
从简单的入手,十大排序算法(冒泡排序、插入排序、选择排序、快排排序、希尔排序、堆排排序、归并排序、桶排排序、基数排序、计数排序),字符串常见算法、数组常见算法、递归算法、贪婪算法、分而治之算法、动态规划算法、随机优化算法、回溯算法、图论算法等等。
(建议:先从简单入手+视频+原理+原理+实现+应用)
对于算法,从易到难,先把我列的一些算法掌握了,在去刷一些题,会有一些成就感,才能有自信,也要早早开始,一直刷一些算法题,保持住手感,对于五大算法,是要刷一定题量的,要及时的做好归纳整理、总结反思。
视频资料:
有需要资料的公众号留言,一天内回复,资料仅供学习,主要是避免侵权问题,担心侵犯别人知识产权、现在越来越注重知识产权。
除了以上截图资料,还有很多就不一一截图出来,需要资料的留言!
项目:
对于走校招的,不管是春招还是秋招、走内推还是什么,除了基础和方向外,下面重中之重的就是项目。对于大家都是应届生,项目也不用有社招的项目那么有技术含量,难度多大,这就是校招和社招的区别。着重是自己真真正正在校发挥出来,自己去做的,以及在同样的校招当中,你的项目比别人的项目有突出的技术亮点,让面试官看出你比别人牛逼。
其实要写一个项目,可以用很多技术来写,
例子:
我当时做的一个项目是基于RTMP音视频传输,RTMP是一个流媒体协议,从电脑摄像头获取音视频-基于RTMP协议传输到web页面,最后实现直播、万人直播。RTMP协议是基于TCP协议,当时项目设计涉及到的知识点有:多线程、网络编程、循环链表、音视频、RTMP协议(参考雷神博客学习的)、等等技术。
对于项目这块,面试的常见问题有:
项目的背景?
项目模块,怎么实现?
项目中技术亮点?
项目中难点,如何解决的?
不足,改进?
通过上面简单介绍大家应该对项目有一点感觉了,其实找工作,就必须有自己的亮点来证明你比别人优秀,我觉得我基础牢固就是我在应届毕业生当中脱颖而出。面试的时候问到的问题尽量都回答清楚别且全面,经常举一些类似的例子,展现出各自的优点和缺点,总之被问到,别人不会,你会,你就是牛逼。
面试:
面试管它三七二十一,只要是有名气的公司都投,海投,内推,内推失败不影响官网投简历;大三下-大四上大大小小的战役的都有100来场吧,永远把面试当作是自己的最后机会,把面试当作打仗,只要有面试机会就努力抓住,面试完及时做总结,归纳反思;实力+运气=offer。
面试刚刚开始会有一点点紧张,就好像小朋友见到陌生人一样,难免会有点生涩,当自己经过一轮一轮大大小小的战役之后,再也不会怕面试,就把面试当作是上课回答问题,回答的越好,老师给你的平时成绩就越高分。每一次面试都是机会,面得越多心态就越好。
最后总结
其实上面推荐的视频仅仅是我整理出来的一部分资料,我当年就是这么学的,首先是:看视频-看书-再跟着视频敲-然后运用起来,刷好几轮,总结归纳。学到的知识点就把csdn、51cto、等等你相关的优秀文章过一遍加深印象。
其实现在学习资料特别多,建议大家不要贪多,全面的掌握一套教程,反反复复吸取他的精华,再去啃下一套教程。推荐网站B站、牛客网、七月算法、网易云课程等等,其实想要的资料都可以去上面找。
我走的是Linux C/C++技术栈,一篇文章不可能全部总结完,还有很多知识点靠大家日积月累,学技术不可能一下子就掌握的,说那话的都是培训机构。碰到问题大家多谷歌/百度、用网络解决问题,或者问什么问题或者需要资料留言。
最后祝大家成为大厂offer收割机!!!
坚持坚持坚持!!!
学有所成!!!
继续搬砖