学习路线和一些想法
下面的学习路线是我自己走过的路,不会适合所有人,给大家一个参考吧,关键字是:C++、后端开发、网络编程。
零、一些基础
高中时参加过NOIP,现在好像改名了,就一本教材,8个月的时间,最后成绩也不咋样,算是我的编程启蒙吧。但是学的东西很有用,大一上学期C语言一节课没上过,期末还是满分,并且大学四年教的算法和数据结构,都没有超出我高中学习的内容。(16年就在写编辑距离了,现在还是不会。。。)
然后就是本科的课程了,我是科班,所以计算机基础、机器学习、分布式啥的都接触过,面试中的知识唯一没在本科学过的是Redis。最后是本科的项目,有两个大创项目,提供了一个专利,一个软著和一篇中文水刊(真水刊,给钱就能发的那种)。
以上就是本科的经历了,算是给找工作打了个基础,给简历提供了点内容。真正的准备还是在研究生阶段。
二、理论基础
新入行或者转码的朋友可以从这里开始看,下面列出了我学过的或者了解到的和C++、OS、计网、MySQL、Redis相关的资料。
2.1 C++
C++入门可以在B站找一些视频看,比如黑马C++课程,因为我有点基础,这部分就跳过了。
接下来就是《C++ Primer 第五版》,C++圣经,其实起步就看这个也是可以的,坚持下来很有收获。第一部分要全看完,第二第三部分尽可能看完理解,第四部分可以放一放。这本书有配套的练习题答案,可以在做完课后练习题后对一下。圣经第一次看肯定理解不全,等学完后面的内容再回过头来看可能会有新的理解(我就看了一遍)。起步就看这种书是很枯燥的,但是这本身也是锻炼自己的过程,既然选择了这一行,就在学习过程中找点乐趣吧。
看书的过程中可以穿插侯捷老师的视频课程,包括:C++面向对象高级编程、C++新标准、C++STL标准库和泛型编程。侯捷老师的课程是绝对的精品,很后悔没有早点知道。老师的系列课程还有C++内存管理和startup揭秘等,都可以看一下。(我只看了前三个,但是每个都看了三遍,先原速后倍速)
侯捷老师的课程精华很多,第一次看可能无法全部接受,可以看一下施磊老师的两个视频:C++开发工程师基础课程、C++开发工程师高级课程。
至此对于C++的基本了解应该就建立了,后面就是一些和实战或者方法论有关的书籍。主要有这样几本书:《STL源码剖析》(没看)、《Effective C++》、《深度探索C++对象》(没看)。一个是讲STL底层,一个是讲方法论,一个是讲C++对象模型,都比较重要。我没看的原因一是有点看不下去,还有就是时间太紧张了,给自己设定时间线后越看心越烦,索性直接背八股了。除此之外还有两本:《More Effective C++》、《Effective Modern C++》,可以有选择的看一下。
2.2 四大件
前面提到只有Redis没学过,第一次学习是看的尚硅谷,没什么内容,在有个初步理解后就开始背八股了。剩下的比如STL、对象模型、设计模式等等没有系统学到的,也是直接背的八股。在这里就列一下我看过的网站吧。
阿秀的学习笔记https://interviewguide.cn:C++和四大件的八股都有,还有智力题、海量数据处理题,内容非常全,我是把所有内容过了一遍。但是有个缺点就是八股质量不是很高,重点内容的八股不够深入,非重点八股占了不少篇幅,或者说侧重点不明显。(不是故意黑啊,我在秋招期间唯一的知识付费就是秀哥的知识星球,这个后面会提,而且秀哥的八股算是C++方向非常出名的了,质量的问题也是时间原因吧,秀哥求职当年或许是一份精品八股,但是放在2023年,重点内容有点不够深入)。
小林Codinghttps://xiaolincoding.com:四大件精品,我整理的八股很大一部分内容就来自这里。先是把核心文章全过了一遍(就是每一章的第一篇文章),边复习边按自己的思路整理,然后把OS和计网的几乎所有文章都过了一到两遍,因为这对于Cpper来说太重要了。两个数据库就整理了一遍,简单背了一下,面试也很少问到。
【从我有限的面试经验来看,数据库会被问到,但都是常规问题,不会深入考察实践,一方面也是因为我面试的岗位和项目的原因吧。计网和OS能多深入就多深入,深入到至少在看到我昵称的第一时间就反应过来的程度吧。。。开个玩笑。个人经验,仅供参考】
CSViewhttps://www.csview.cn:同样包含编程语言+四大件的内容,还有LeetCode和智力题等等,可以当个补充。
编程指北https://csguide.cn:里面的C++面试指北质量比较高,部分内容可以直接全文背诵。我的C++八股就是来自之前的笔记和这里。
JavaGuidehttps://javaguide.cn:Java经典八股网站,里面四大件的内容也可以参考一下。
TopK面试题https://osjobs.net/topk:有些高频问题,可以看着检验一下八股记忆程度。
【背八股很没意思,但是是必须经历的,要不怎么能叫八股呢】
2.3 网络编程
C++后端开发必须要涉及的,也是就业面最广、竞争最大的C++方向。不学网络编程的话,也可以做一些和音视频、嵌入式等有关的项目,或者国外计算机课程的实验,换个赛道,实验可以参考https://csdiy.wiki。
第一本书就是《TCP/IP 网络编程》,边看边敲实例,可以了解一下基本的系统调用。第二本就是《Linux 高性能服务器编程》,同样经典。我是两本书都看完了,第二本的重点章节还看了很多遍。第三本是《Linux多线程服务端编程》,看完了前两部分,一是多线程编程方法论,二是muduo源码剖析,收获很大,自己也把muduo源码看了一遍,写了篇万字长文剖析muduo网络库核心功能及其设计思想https://zhuanlan.zhihu.com/p/636581210。
在学习过程中,可以做个项目加深理解,参考TinyWebServer,网上资料很多,加上我没做过这个项目,就不贴链接了。我做过的项目是施磊老师的课程:手写muduo网络库、集群聊天服务器。施磊老师还有其他项目,比如:手写内存池、手写线程池、rpc等等,牛客网也有类似的项目,都可以参考一下。
做完以上可以对网络编程有个了解,面试需要的理论知识就够了,或者理论知识背背八股也就够了,但是单纯的webserver项目还是差点,毕竟已经2023年了,需要自己想办法添加内容。
还有一个项目可以参考https://www.bilibili.com/video/BV184411s7qF,这也是我的主项目,自己照着敲完后又按自己的想法重写了一遍,添加了很多内容,后续用该框架作为后端框架,前端使用Vue2写了个在线聊天室,并且部署到了云服务器上,这个项目对我面试帮助很大。可以参考我的GitHub:https://github.com/liucxi04/luwu1.0。
另外如果想进一步了解网络编程、IM相关内容,可以关注http://www.52im.net,里面的系列文章都是精品。
最后推荐一本书《深入理解Linux网络》,一本新书,是张彦飞大佬的作品,讲解了Linux内核网络子系统,比如Linux是如何收发网络包的,TCP是如何建立的,从源码级别追踪从下至上,再从上往下的回调调用链,能对背过的这两个八股有源码级别的理解。但是难度有点大,我也是看了其中的几章。
三、刷题
靠着吃高中的老本混了整个大学,等到了研究生,就忘得差不多了,只能从头开始。用于求职的刷题网站就二选一吧:LeetCode和牛客。对于我们朴素的求职目的,把经典题目写熟练就行,比如剑指offer和Hot100中的题目,高频题目还可以参考CodeTop。笔试就随缘吧,能过就过,而且好多公司不看笔试,比如腾讯、美团,还有公司提前批没笔试,比如百度、快手。面试时手撕都是经典题目,脱不开剑指offer和Hot100,手撕遇到**题目就放弃吧,不想要你的,比如让天下没有难做的生意的国际知名互联网企业阿里巴巴集团。
刷题可以参考几个网站或资料,代码随想录https://www.programmercarl.com,我是过了一遍,接着是LeetCode101https://github.com/changgyhub/leetcode_101,题目很有代表性,难度比较大。刷完之后还是将重点放在面试高频题吧,毕竟面试手撕写不出来就寄了。
感觉笔试和手撕都看状态的,状态不在就是做不出来,太难了。
四、其他资源
知识星球:前面提过我加了秀哥的知识星球,还在年初坚持打卡了两个月。但是用处不大,我个人自控力还行,天天想着打卡反而影响时间。也是有收获的,加了知识星球内部群,天天窥屏有很多有用的东西,比普通的互联网求职群信息密度大的多,是我秋招最重要的信息源。在第二部分提到的八股网站,大部分都有对应的星球,加不加看个人情况吧,确实智商税比较多。
极客时间:里面有很多高质量的课程,课程都比较贵,不花钱的自己想办法吧。推荐几个自己看过或了解的:MySQL45讲、现代C++实战30讲、罗剑锋的C++实战笔记、Redis核心技术与实战、数据结构与算法之美、左耳听风。课程的讲师都是业界比较出名的,会涉及一些具体业务场景,很有价值。
五、一些想法
选择国企/研究所,还是互联网,这个问题没有什么可争论的,按自己的选择来就好。有人喜欢安稳、希望离家近,想要更关注日常生活,就去选择国企、研究所,或者考公。对于我而言,一眼能望到头的日子让我打心底里恐惧,国企、研究所、公务员、医生、教师等等,这些一旦进去就很难离开的岗位,让我害怕。我不会在一个地方待太久,自然为了追求自由就要承担相应的压力,比如一刻不停的学习,比如加班裁员等等,为了追求自由我每一次的选择都不会是所谓的最优解,因为我要给未来留下可能,留下说走就走的机会。从局部次优解,达到全局满意解,这是我的贪心算法。
不需要争论什么,一个人选择走哪条路影响不到其他任何人,我也毫不在意其他人的选择。但是总有些人,自己不去互联网、不去大城市,但是逮到你就问,为什么不去研究所、996怎么办、裁员怎么办、买不起房怎么办、养不起孩子怎么办,像只苍蝇一样,这种人无论去哪,都让人讨厌。
最后还有点想法,从幼儿园到研究生毕业,整整20年的时间,就是为了一份工作,可以说最后的秋招春招非常重要了。但是另一方面,学习是为了更好的工作,工作是为了更好的生活,如果你很满意现在的生活,那么跳过前两个步骤也是可以的;如果你很满意现在的工作,那么就去学一些自己感兴趣的东西吧,别再背八股了。
从秋招开始就天天看牛客,现在找工作也结束了,也不用关心别人都拿了哪些offer了。
--------------------------------------------------------------------
有朋友问笔记可不可以分享,或者付费也可以。我是用语雀记的笔记,分享要会员,但这不是钱的问题,比较麻烦。还有两点,一是我的笔记是大段摘抄的网上的八股,只是按自己的思路重新整理了一下,公开分享不合适。二是八股只有自己整理,印象才深刻。所以笔记就不分享了。