后端压力大,我选择了嵌入式开发

发表时间: 2023-11-29 14:39

通知:代码随想录算法训练营 27期将在11月29日开营,目前可以报名,提前拉群,坐等开营!

今年互联网能提供的 C++后端岗位 还是很少的,基本都是大厂。

一些录友半路转了嵌入式,其实 C++后端 和 嵌入式 绝大部分知识都是重合的。

有的录友可能想,做什么项目 既可以作为 C++后端也可以作为嵌入式的项目呢。

这里比较推荐 MIT的6.s081的课程(6.S081 / Fall 2020),自己实现一个操作系统,作后端项目,还是做嵌入式项目,都很不错。

以下是一位半路转嵌入式的录友在知识星球里的分享:

首先多谢卡哥的邀请,秋招9月弄完了就去忙论文了,期间抽空整理了一下自己C++的学习路线

之前已经在知识星球分享过我秋招转嵌入式的经历了,一些基本信息我就不再赘述了。

在整理学习过的资料的时候发现很难进行系统的整理,因为涉及到东西实在是太杂了,C++知识,STL容器,嵌入式的知识,操作系统,计算机网络,Linux的东西。

这些还只是秋招找工作的基础,C++岗位一般属于某个专业领域,比如数据库,音视频,AI,驱动,开发板,BSP,图形等等。

下文我还是打算详细写C++岗位基础的学习路线,略写一些领域知识,卡哥的最强八股文整理得很全面,后续内容更多的说的是星球的八股文以外的学习内容。

首先就是C++知识,无论是《C++ Primer》还是《C++ Primer Plus》都足够入门C++ 11的知识了。

不要因为 《C++ Primer》900页就劝退了,静下心来一点点看,3个月就足够学完。

重点就在于它每一节的课后习题,你最后会实现一个自己的vector和string(各位应该看到过面试手撕vector和string的内容)。

我做完每个章节的课后题以后都会上传到github上。

在刚上手C++的时候可能还写不出课后习题,可以看github别人的代码找找感觉:
https://github.com/Mooophy/Cpp-Primer 。

当你完成了这些东西的时候,基本C++的语法就入门了,如果要了解C++后续的语法比如14,17,20这些最好还是去cppreference上看(cppreference.com)。

除此以外可以在空闲的时候看看b站的一些讲解C++的up的视频,拓展一下视野。

STL容器方面,无可厚非的侯捷老师的《STL源码剖析》,很经典的一本书。

STL容器的使用在刷算法提的时候肯定用得不少,再通过这本书了解一下底层的内容配合着八股基本都能拿下,同样要看更多更新的内容去cppreference浏览。

小tips:书中讲解的二级分配器的内容,其实在C++17之后就已经用pmr替代了,那这些pmr的相关内容和C++新特性你整理成自己的八股文之后,面试的时候你就能展现出差异来了嘛

嵌入式知识,这一块我秋招前两个月才补起来,没什么发言权,基本就是看博客,当时就是看韦东山的b站视频简单入门

操作系统和计算机网络如果要从0学,就是b站看王道考研视频,要看完整内容就是那两本大黑书《操作系统》《TCP/IP详解》。

八股文小林coding(小林coding)对许多八股文的内容进行了深入解析。

但是在这个人人都知道小林coding的情况下,尤其是面试官问你的问题明显能感觉到就是从小林里面问的时候,你就需要自己准备一些不一样的东西,来展现出你的差异,来展现出你不是一个只会背八股的人。

具体怎么收集还是要自己下功夫,多看博客,多google,对八股文的每一条内容都能了解一下背后的设计和实现,甚至在此基础上了解如何做优化。

这些整理听着就知道工作量会很大,但是你不下功夫,嫌烦的话凭什么给你offer呢。

同样空闲时间可以看b站的视频拓展视野,强推南大jyy老师的操作系统视频(绿导师原谅你了)

Linux才是真正的大头,C++不能失去Linux正如西方不能失去耶路撒冷。

招C++的岗位99%都会有Linux要求,而Linux的知识又分成了两种,一种是用户态的API,命令,另一种是内核实现。

用户态的API使用毫无疑问的apue《UNIX环境高级编程》大而全,当你有读《C++ Primer》这本大部头的耐心后apue学完也只是时间问题。

Linux命令力推鸟哥《Linux私房菜》基础指令和命令选项基本全涵盖了,基本命令不谈,重点关注管道命令的使用(sort,wc,uniq,tr,join)和文件处理(sed,awk)这些笔试常考了。

但是命令行的学习看书并不能提升自己的专业能力,具体来说是RTFM的能力,推荐OverTheWire上的Linux命令游戏(OverTheWire: Bandit),如果完全自己动手,自己man了所有指令绝对提升自身能力。

Linux内核的内容,我也只是菜鸟,可以说内核领域连入门都算不上的菜鸟。

在这里只能推荐MIT的6.s081的课程(6.S081 / Fall 2020)里面有文档,有指引,有参考文献。

xv6操作系统小而美,9k多行代码配合官网的xv6 book文档其实不看视频课程也能吃透了这个系统了。

当然这中间少不了google,stack overflow了(非常不推荐百度,很多中文回答很一般),只能说多多STFW。

课后的lab不难但耗时,大部分lab在网站上都给出引导了,甚至有些lab就是让你填空,花下去一些时间肯定可以做完。

我在学了这门课程的基础上看Linux内核的内容《深入理解Linux内核》和《Linux内核设计与实现》。

有些网上博主会推荐Linux 0.11源码阅读,但是我知乎关注的一些大佬基本都说0.11没有太大学习作用,2.6之后的现代架构更加值得学习。

现代Linux的设计又极其复杂,并且和指令集高度绑定,所以看前人帮你提取出的共性的内容,站在巨人的肩膀上真的很重要。

到此基本理论算是入门了,面试对付一下面试官的理论问题基本ok了。

动手Linux内核这就是另外的话题了,各位最好去开源社区自行了解或者直接Linux kernel官网入手。同样强推南大jyy老师的操作系统视频拓展视野(绿导师原谅你了)

再随便说说一些领域知识吧,AI相关的就是读论文了真没什么捷径,看看b站李沐和李宏毅视频,各种知乎博客,苏剑林大佬的文章(分类 信息时代 下的文章 - 科学空间|Scientific Spaces)。

驱动相关的话,我看的韦东山的linux驱动课程,买的也是他们家的板子。

如果不想买板子,并且喜欢读英文的话(学了xv6的话基本没问题)
https://sysprog21.github.io/lkmpg/ 这本开源社区的书籍也可以在没有开发板的情况下入门Linux驱动了。

最后总结一下吧,C++这个方向学的东西挺多的,不仅多而且要求深。

如果有论文要求只能课余时间学习的话,一年打底吧,各位加油。

xv6作为一个项目不管在后端还是驱动岗,写在简历里面绝对是一个加分项,而且学完之后对OS的理解提升很大,更容易理解Linux的一些机制。

知识星球最近发布了代码随想录知识星球精华|最强八股文(第四版) 八股文扫盲利器。

如果时间紧张可以按照代码随想录八股文-速记版直接背诵。

我已经在星球里回答了9000+个问题, 基本你目前的疑惑,你的前辈录友们在星球里都问过我了。

已经有2w录友加入了知识星球,方向比努力更重要,一群人可以走的更远!