学习路线和一些想法

下面的学习路线是我自己走过的路,不会适合所有人,给大家一个参考吧,关键字是: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了。

--------------------------------------------------------------------

有朋友问笔记可不可以分享,或者付费也可以。我是用语雀记的笔记,分享要会员,但这不是钱的问题,比较麻烦。还有两点,一是我的笔记是大段摘抄的网上的八股,只是按自己的思路重新整理了一下,公开分享不合适。二是八股只有自己整理,印象才深刻。所以笔记就不分享了。

全部评论
校友的话如醍醐灌顶,处处透露出大佬之气
4 回复 分享
发布于 2023-09-17 19:33 陕西
想问下佬秀哥知识星球里面那个八股文怎么样呢,不是网站的那个,是星球内部第五版的,深度够吗
3 回复 分享
发布于 2023-09-17 22:29 广东
有一起拼卡哥的星球嘛
2 回复 分享
发布于 2023-09-18 16:53 未知
佬的文笔也是相当好
2 回复 分享
发布于 2023-09-18 21:40 四川
听君一席话 胜读十年书😌
1 回复 分享
发布于 2023-09-17 21:52 陕西
C++今年好起来了
1 回复 分享
发布于 2023-09-17 22:18 江苏
https://csguide.cn/cpp/ C++面试指北被cue了
1 回复 分享
发布于 2023-09-18 20:06 广东
大佬是我学习的榜样
1 回复 分享
发布于 2023-09-22 10:59 江苏
大赞,佬
点赞 回复 分享
发布于 2023-09-17 19:52 陕西
真正的佬,敢于付出行动且能坚持下去,还有对未来的规划
点赞 回复 分享
发布于 2023-09-17 22:28 湖北
大佬
点赞 回复 分享
发布于 2023-09-19 00:50 江苏
求大佬现身说法,c++后端开发还可以选吗?我看牛客上到处都是说c++后端不招几个人
点赞 回复 分享
发布于 2023-09-19 16:58 湖南
给大佬点赞,真的太强了
点赞 回复 分享
发布于 2023-09-26 11:40 广东
oi✌
点赞 回复 分享
发布于 2023-10-06 18:42 广东
太好了
点赞 回复 分享
发布于 2023-12-03 20:07 广东
佬候捷和施磊的课程在哪里里可以看到勒
点赞 回复 分享
发布于 2023-12-09 16:12 江苏

相关推荐

02-04 01:02
安徽大学 Java
投票
Java抽象带篮子:不需要,八股才是王道。外卖项目可以看看我的魔改苍穹外卖话术,还额外扩展了很多技术亮点呢推荐项目的话我还有个7000字话术是轮子项目[偷笑R]
点赞 评论 收藏
分享
02-10 15:19
已编辑
北京邮电大学 C++
嵌入式类岗位大致分为以下几个类型:嵌入式软件开发工程师、驱动工程师、系统软件开发工程师、应用软件工程师、嵌入式测试工程师;还有一些:电子研发工程师、C/C++软件工程师(嵌入式)、智能驾驶软件工程师、机器人软件工程师、硬件产品经理等等。1.1. 嵌入式软件开发工程师A公司岗位描述:1、负责设备软件的设计和交付,包括单片机嵌入式开发、DSP嵌入式软件开发、多线程多任务的动态调度、动态内存管理等软件关键技术研究;2、负责设备软件研发及商用过程中的功能、性能、功耗、可靠性等问题的定位解决;3、负责设备软件新技术的预研和产品实现,提升产品优势;4、跟进行业新技术动态,参与新技术的研究,并能引入到产品开发中。A公司任职要求:1、熟练掌握汇编/C/C++编程语言和基本的常用数据结构,了解操作系统原理;2、熟悉Linux系统编程,嵌入式系统,ARM或单片机,RTOS实时操作系统;3、熟悉HTTP/TCP/UDP等网络协议,熟悉一种或以上接口协议优佳,如:USB、UART、Ethernet、PCIE、EMMC、I2C、SPI等;4、有嵌入式系统或产品的开发项目经验优先;小结:嵌入式软件开发工程师主要负责该部门嵌入式产品的研发工作,固件开发,单元测试,代码维护等,提升产品优势。很多公司都是大类嵌入式软件开发工程师,而不进行驱动、系统、应用工程师等区分。1.2. 驱动工程师B公司岗位描述:1、负责底层驱动及上层应用的开发和调试,外设驱动的开发优化工作,比如Camera、LCD、Sensor等;2、负责软硬件结合新器件技术预研和开发工作;B公司任职要求:(与A公司要求相差不大)C芯片公司驱动岗位描述:1、设计和开发驱动程序(user mode, kernel mode, firmware etc),HAL/API,提供应用程序库的支持,提供包括内存管理,任务管理,硬件资源管理等功能;2、建立驱动程序的开发环境,包括硅前和硅后测试和调试环境,以及相关驱动程序测试工具;3、与硬件工程师和软件工程师协调提供解决平台中出现的问题。C芯片公司任职要求:1、精通C/C++编程,有Linux编程经验者优先;2、熟悉计算机体系构架,算法设计等;3、具备CUDA/OpenCL/GPU shader programming知识和经验者优先;4、有较强学习新知识的能力;具备较强的沟通能力。小结:驱动工程师主要是编写和移植各种芯片驱动,优化硬件设备驱动,一般驱动工程师指Linux上的驱动开发工程师,所以需要精通Linux驱动框架,结合芯片本身去编写驱动,所以芯片公司招聘嵌入式相关的岗位一般是驱动工程师。1.3. 系统软件开发工程师D公司岗位描述:1、参与soc软件开发,包括soc bring up软件开发、IP驱动软件开发、bootloader软件开发、操作系统移植等;2、参与soc 软件、硬件系统验证;3、参与板级外设驱动软件开发与调试;4、参与soc BSP 、soc SDK 软件开发、软件测试。D公司任职要求: (与A公司要求相差不大)小结:系统软件开发工程师主要是编写固件,需要熟悉整个操作系统组成与调度,对固件的稳定性高求很高,是驱动和应用的基础。1.4. 应用软件工程师E公司岗位描述:1、负责嵌入式系统的搭建与维护,熟悉芯片驱动、嵌入式OS、SD接口定义;2、负责软件系统的跨芯片移植(如:NXP系列、STM32系列);3、负责系统集成以及调试工作;4、负责进行嵌入式软件系统的应用开发、优化。E公司任职要求: (与A公司要求相差不大)小结:应用软件工程师主要是编写业务逻辑程序,调用驱动工程师提供的接口控制设备,软件开发过程所涉内容范围非常广,主要使用C语言开发,但经常会涉及其它语言、数据库、前端后台、各种通讯协议等。1.5. 嵌入式测试工程师F公司岗位描述:1、负责嵌入式项目功能测试、性能测试、SDK测试或者自动化测试;2、根据产品需求制定测试方案、设计测试用例,搭建测试环境;3、依据测试用例完成产品的功能测试、硬件指标测试等,记录测试结果,报告与跟踪产品缺陷,并协助研发人员进行缺陷定位与重现;4、编写测试报告,根据测试结果评估软件质量;5、进行测试总结,编写测试相关文档,对测试中存在的问题及时分析与解决,并提出改进建议E公司任职要求:1、有嵌入式软件开发的经验优先;2、有脚本语言(如python/shell)的使用经验;3、有Linux下的自动测试和测试开发的经验;4、熟悉嵌入式调试技术及工具;5、具备良好的沟通表达能力,良好的分析解决问题的能力;剩余的大佬面经总结了  链接在下边   http://daxprogram.com
点赞 评论 收藏
分享
评论
150
875
分享

创作者周榜

更多
牛客网
牛客企业服务