C++自救指南-方向梳理篇
在本篇章中,我会根据我浅薄的行业理解,并结合各家招聘网站上的 JD(Job description)来谈一谈,C++ 到底能干啥,当然,类似游戏客户端等Windows平台为主的C++岗位除外, 这里主要谈的是Linux端的C++岗位,或者跨平台的C++岗位。
Tips:活学活用,将你梦中情岗的任职要求扔给大语言模型,并让他给你制定一个详细的学习计划,看看对你有什么启发 ~
# 嵌入式
我对嵌入式没啥了解,而且随着时代的发展,这个方向也在不断变化着,以往的嵌入式 99.9% 都是 C,现在因为硬件的不断升级,嵌入式中的一些工作可能会使用到 C++,我们以嵌入式殿堂级公司大疆为例,看一看他们的嵌入式岗位需要用到什么技术栈,跟着 JD 学就完了。
下面只列出部分公司的部分岗位,详细信息去各家官网的招聘网站,都是有的~ 有些信息还是需要靠自己收集
# 大疆嵌入式
职位投递 - 校园招聘 - DJI 大疆招聘 (opens new window)
# 嵌入式底层软件开发
卓驭科技就是大疆分离出来的做驾驶的公司,底软也就是这类公司最常见的开发岗位。
看任职要求中,除了掌握基本的语言以外,这个岗位还尤其看重面试者对于 Linux 底层机制的认识,比如进程调度管理啊,内存管理啊,文件系统等等,所以对于嵌入式选手来说,熟悉 Linux 就是基本功,如果想要跟应聘该类岗位,你的主要精力就需要放在研究 Linux 内核上。
# 嵌入式中间件开发
不知道自动驾驶中的中间件的可以去读一下这篇科普文章:一文读懂自动驾驶的“中间件” (opens new window)
可以看到和嵌入式底软的任职要求有一点不同的是,大疆嵌入式中间件开发的语言要求明确了该岗位使用的是 C++,从我不多的投递经验来看,通常来说,写熟悉 C/C++ 的大概率是写 C,只有明确写 C++ 的岗位,进去才可能真写 C++。
像这种任职要求,通常的 Linux C++ 选手都可以尝试投递,算是比较 match,基本就是一套东西的,唯一可能需要单独准备的就是一些行业的编码规范(任职要求的第二条)
# 相机嵌入式
除了大疆,一些手机厂会有类似相关的岗位,说实话我不太懂这个。。大伙自己琢磨吧。
# 智能驾驶-高性能计算
这就是典型的新时代下诞生的嵌入式岗位,看任职要求的介绍,这个团队应该是 C C++ 都用,同时还需要有比较深入的 AI 相关的知识,那么会使用 CUDA 就是几乎必要的条件了(注意:优先条件往往就是必要条件。。。除非实在招不到人)想要应聘相关岗位的同学,可以尝试在一些嵌入式平台上部署一些模型,来练练手。这种嵌入式岗位,个人感觉和老牌嵌入式的用人需求是不太一样的,不需要太底层的知识,做的大部分都是软件层面的事了。
# 小米嵌入式
再来介绍一个手机厂代表吧(而且小米汽车岗位也不少,利好嵌入式)
# 嵌入式软件工程师
emmm,完全看不懂,岗位描述的五个方向,像是五个不同的部门。。。不过核心还是研究 Linux Kernel 啦,然后有一些 RTOS 经验就更好了。
# 机器人-嵌入式软件工程师
像是更偏硬件了。。。完全不懂哎。。。不过和其他岗位一样,不管什么嵌入式,都要研究 Linux Kernel,所以究竟要学什么,就很明了了吧~
# 汽车 OS 研发
感觉和大疆的中间件岗位类似,只有这类岗位,才会使用 C++ 进行开发,其他的岗位,基本都是 C 为主。
# 软件开发工程师-BSP 方向
又是完全不懂的领域。。。不过看岗位要求,还是和基本的嵌入式岗位类似; 总之,学好 Linux Kernel,肯定有饭吃~
# 后端
好了,来到了 C++ 寄中之寄的岗位,后端(这里专指 Web Server)。 首先,C++ 就不适合去做后端 CRUD 的任务,不到万不得已的情况下,谁会给自己找麻烦?但是因为历史原因,或者其他什么的,一些企业会使用 C++ 来开发后端,现在也很少见了。
由于实在找不到纯 C++ 后端的 JD,所以我就整理一些后端 JD 来 ~~凑个数 ~~介绍
# 字节
字节的岗位是先划分部门,再划分岗位,个人觉得这种排列方式更好。
# 后端-抖音电商
字节的 JD 还是偏向基础的,没看出什么特殊要求来,不过在 JD 中寻找亮点~
后端该学谁一目了然。
# 腾讯
腾讯招聘的分层逻辑就是先选岗位类别,再选部门,这也是大多数公司招聘岗位的逻辑。
https://join.qq.com/post.html (opens new window)
# 后台开发
可以发现,后端的岗位对于语言没有那么多限制,而是更多考察网络、系统、数据库等相关的基础知识(TX 尤其爱问网络)所以,实际上你学什么语言都可以去投后端岗,而这么多语言中,C++ 的学习成本明显更高,就算拿到 offer,进去以后可能也是转 Go 或者转 Java,所以,何必呢。
我稍微说一下后端同学可能需要学的知识,其实 TX 的 JD 写的已经蛮清楚了,除了常见的网络,操作系统之类的基础知识, 数据库也是必须要学的(C++ 其他方向还真不用学)。
常用的关系型数据库(MySQL), 非关系型(Redis) 都是工作中必须掌握的技能,如果你是想走后端,请自行搜索资料去学习。
另外,在这个内卷的时代,学会上面的这些往往也是不够的,记得我前面说过的话吗:加分项也都是必须项!
所以,一些分布式相关的技术,系统的设计:如何高可用,如何灾备份,等等等等。 都是你要掌握的, 后面我会开一个章节 (opens new window) 分享一下如何快速了解相关的一些知识。
# 总结
后端岗位通常对语言的要求不会卡那么死,不同公司也会有自己偏爱的后端语言,比如阿里系,美团等基本都是 Java;字节,腾讯等新开的项目后端基本都是 Go, 拿 C++ 来 CRUD 确实非常少见,C++ 在互联网公司中,更多是用来做基础框架的开发工作,其中也细分为很多个小方向,后续我会介绍。
如果你想做后端,请学**Java **or Go,面向就业市场就业,不要和主流对抗~
# 量化/高频
抱歉,我不够格。。。
# 基础架构 Infra
终于来到了 C++ 被大量使用的领域了,这也是互联网企业 C++ 选手的聚集地,大多 C++ 岗位也都是此类部门提供。
什么行业需要使用 C++ 来构建 Infra 呢? 涉及到海量数据的存储,海量数据的计算。
什么样的部门会涉及到呢? Data 部门,AI 部门,搜广推的架构部门、etc。
我把其中涉及到的最多两个方向:存储、计算 单独抽出来说一下。
# 存储
嵌入式领域 C 占大头,后端国内基本是 Java 和 Go 的天下,但存储方向,那基本都是 C++ 的地盘。(我把数据库相关的方向也归为存储应该没人会打我吧~)
不过不同存储系统间的技术栈亦有差异,可以观看下面的视频,详细了解(jyy,yyds):
现代存储系统 (关系数据库和分布式存储系统) [南京大学 2022 操作系统-P30]_哔哩哔哩_bilibili (opens new window)
下面我将介绍几个存储方向具有头代表性的公司和岗位
这是一家非常有名的数据库厂商,旗下分布式时序数据库 DolphinDB 相当有名
# 智臾科技 : C++ 后端开发工程师
虽然写的是后端。。但是其实这和其他后端干的活可不太一样(如果你觉得这也算后端的话那就是你对),看岗位要求应该是就维护并开发自家的数据库。
所需要的技术栈也就是 Linux C++ 常见的那些技能(网络编程、多线程、模板等),加上对数据库引擎的了解。
把握住 JD 当中的关键点:**加分项,**这家公司范围都已经给你写出来了,如果想进去,那就抓紧学去吧。
# 快手:数据库研发工程师
重点都写在 JD 里了,挑其中一个开源项目猛学!
# 蚂蚁:应用研发工程师-C/C++
蚂蚁的数据库明星产品 OceanBase,这也是蚂蚁为数不多的 C++ 岗位,还是一样,如果想提前准备的话,关注 JD 中的加分项,照着加分项学就完了。
# 小米:分布式存储研发工程师
小米的分布式存储研发岗,其实具体的工作就是照着那几个开源项目爆改罢了
# 总结
存储岗看起来比较高大上,但需求相较于后端是比较小的,卷度也非常高,请慎重选择。
# 计算
又是一个 C++ 的大基本盘,也是本 🐀 的所从事的方向了(大概)。
高性能一直是 C++ 的底裤,也是为什么这个语言被设计地如此抽象的原因,几乎一切都是为了性能。
深度学习时代,近乎无限的计算需求无疑是给 C++ 这个 20 多岁的老东西续了一口大奶。
作为这个领域无可撼动的老大哥,其实大部分 cpper 的梦中情岗也聚集在这里,当然,卷度也是拉满了的。
这个世界上几乎一切计算密集型任务都逃不开 C/C++, 那什么是计算? 或许你可以看看这些: 一文讲清超算,高性能计算,并行计算,分布式计算的区别 (opens new window) 并行计算:高性能计算学习路线(针对大二同学) - orion-orion - 博客园 (opens new window) 异构计算分析 (opens new window)
下面我将介绍一些比较相关的典型岗位,并进行分析。
# 小红书:搜推工程
这就是新时代下的互联网企业 C++ 相关招人相对较多的一类岗位,需要对深度学习的算法以及部署工具要有足够的认识与实践经验,通常这类岗位也是企业当中的核心中的核心,所以对同学的要求也是非常之高。
另外,相较于其他 C++ 岗位, 这种 AI 工程化的岗位,还需要学习相关的很多行业知识,一些常见的深度学习模型,肯定是要了解的,CUDA 编程更是吃饭的手艺,还有需要掌握常见的模型推理框架,如 NCNN 之类的,这些对于其他方向的选手来说可能用不太上,算是这类方向的专属技术栈。
# 百度:AI 异构计算工程师
比小红书那个 JD 要更加全面,同时也展示了这个方向与其他方向的不同:需要学习很多方向不太通用的知识
这一块我不是特别特别懂,有相关经验的大佬可以跟我分享,我来补充。。。
# 字节:机器学习编译优化工程师 & 硬件加速器工具链软件
方向过于小众。。而且不应该放在这里的。。但是实在没地方放了,这种岗位主要就是工具链部门,招人基本都是要求 C/C++
# 百度:分布式计算研发工程师
通常这类岗位,计算和存储都是同一个小组内的,这种类似的岗位算是 C++er 的梦中情岗了(卷度爆表), 其中核心技术栈就是分布式技术,谷歌的三驾马车肯定是要熟悉的。然后就去学一学开源的分布式项目。
# 百度:向量检索
emmm,不了解,但是很多大厂都有这个岗位,和普通人无关。
# 字节:搜索架构
通常来说,架构的核心计算层,很多都是使用 C++ 封装,然后供其他语言使用(当然有的厂也不一定用 C++ 写这些。。。)
# 总结
目前,相当多互联网企业的 Data 部门,AI 部门等,当中涉及到的高性能计算平台和存储平台都是使用 C++ 搭建的,此类岗位相对较少,竞争比较激烈,平时工作压力也是拉满。
同时,Infra 岗,业务层面其实涉及到的不多,架构层难免逃不掉 On Call 的命运,涨薪机会也没有业务仔多, 裁员时也容易被认为产出低被干掉。。。
好处是:出去跟别人吹的时候,很装逼~(一无是处)
# 音视频
TODO
# 客户端
TODO