我觉得还是有必要记录一下我今年的秋招,但实际上记录的目的是为了什么呢?或许,仍然是刻印下自己的足迹并或多或少给阅读之人带来些许启发。

暑期实习

其实投暑期实习的时候,我还是十分自信的,觉得靠着自己的能力拿下一个暑期实习是没有什么问题的。国内的大厂我投了百度、美团、阿里和腾讯。拼多多还有字节我直接选择没投,我觉得我没有那个命,而且我很不认同拼多多对不懂计算机的人群的歧视(参考2022年度最不可赦漏洞)。同时我也投了一些外企的暑期实习,比如说亚马逊,英伟达和Paypal这些公司。

由于我本科双非,阿里实习简历过不了(面了个所谓的电话面),外企的面试属于可遇不可求。我总共只面试了百度,美团和腾讯这三个公司的暑期实习。

百度

百度是我最开始投的公司,当时我选择的岗位是C++软件研发工程师,做笔试的时候运气好,三道算法题我做出了两道算法题,拿到了面试机会。我现在已经记不清楚面试的内容了,我只记得一面做的是LeetCode 143,二面做的是LeetCode 25。由于当时就没刷题,在只有20分钟左右的时间下,我很难写出在ACM模式下的LeetCode 25题。同时由于我自己自言自语地说了一句,感觉思路不对,然后面试官回了一句,“确实思路肯定有问题,你想一想”。又浪费了不少的时间。

题做不起,自然而然就被挂了。实际上二面的面试官问我做的科研横向项目在分布式集群下怎么收集的数据(实际上这个横向项目技术含量比较低,苦于没有实习经历,我还是得写一个看起来正经的项目吧),我说是使用python来收集的,他反问我为什么不适用Kafka。最后结束的时候他给我说搞工程和搞学术是不一样的。

其实,我很不能理解这些面试官的心态,没有必要教育我一顿。我的业务场景根本不需要那么重的东西,我只需要收集点数据处理就行了。

美团

美团我的笔试做的一塌糊涂,100分拿了个40分?美团我进行到了第二面,由于是投的基础研发部,所以面试需要进行三轮。

一面的面试官,主要是询问我做的国外公开课的CS149中的能够解析任务依赖的异步Fork-Join任务库是怎么实现的,我记得当时我是把整个数据结构怎么设计的,以及同步的过程详细给面试官说了。可能因为回答的好,后面面试官给了我一个很简单的算法题。

然而,最令我震撼的是那个面试官在反问环节对我说的一番话(当时我问了他,你工作的时候觉得做的最有意思的事情是什么?):

你做的这个东西,我们一般都是直接用别人的库,平时我们很少写这些。可能你因为还是学生,没有上班,可能还比较幼稚,工作本身就是没有意义的,可能最大的乐趣就是解决了一个BUG。

实际上,我被这句话震撼了。我其实并不是不明白上面这句话的道理。我感到了深深的悲哀,我一下意识到了我如果从事互联网的工作,可能也是这样。我该追求什么呢?

二面就比较抽象了,面试官一上来就问我我为什么笔试做的这么糟糕,我说题比较难,我尽力了。然后让我写了一个简化的我没有做的笔试题,然后他说我函数参数传错了。我或多或少写了5年的cpp了,真的不至于传参数都能传错。然后我直接说我确实参数传错了,然后面试就这样结束了,时间不到30分钟。

腾讯

腾讯是面的最舒服的,因为他直接问我现在能来实习吗?我说不能,然后面试就结束了。多好不要浪费大家的时间。

小结

我在面完上面三家公司,感到了深深的疲倦。于是在当时我在朋友圈发了以下的内容:

从2月份到现在,面试了百度,腾讯,阿里这三家公司。我的体会是,面试变成了一件相当无聊的事情,二十分钟不明所以聊一下你做的项目,然后给你一道LeetCode的中等题目或者hard的题目让你做一做,然后你就一直做,面试官几乎不说话,做得起就继续,做不起就拜拜。如果你做起了,还会因为你现在不能来实习成为廉价劳动力直接挂你。

我在想这些面试官对我的了解基本等于0,就因为我能做起一个题就让我继续下一轮……,我是真心觉得无语。问些八股还要去找公司里面的题库,问newmalloc的区别这种无聊的问题。

从现在的经验来看,国内的互联网做的东西真心很无聊。还是思考一下换赛道吧,还是希望能做点有意思的东西的。

于是乎,我做了一个很不理智的决定,直接放弃了其他大厂的暑期实习。根本不想面,我觉得面试毫无意义,同时去这些大厂实习也是毫无意义(当然,我肯定是偏激的观点)。不如在学校做点有意思的事情。

差不多从四月份开始我就开始学习Writing An Interpreter in GoWriting A Compiler In Go,我用cpp进行了自己的一个实现(见cppmpiler)。

然后,给ehForwarderBot社区做了一些贡献,主要是给slave端的QQ添加发送文件的支持。

当然,我不得不刷LeetCode。这可谓是我秋招过程中做的最痛苦的事情。让我回想起高中为了成绩不得不刷题的感觉。明明我还想写一个模拟器,还想去探索一下内存模型和缓存一致性。

秋招

秋招是从7月份就开始的,因为很多公司已经开始提前批了。还是希望自己能毕业进大厂的,至少平台要高一些。所以还是采取了海投策略。

百度提前批

百度提前批约我面试的时间应该是2023年7月中旬左右,一面的面试官是一位女生,我已经记不清她开了摄像头还是没开摄像头,听着她虚弱的声音,我就觉得她已经很累了。她问了我一些并行计算的项目,然后就让我做两道算法题了。我直接把两道算法题秒了,毕竟我不是在做题,我只是在默写。

二面咋说了,面试官还是比较有水平的,问了我并行计算,怎么使用CUDA的,然后怎么做Reduce操作。然后问了我个CPU指令乱序,回答不上(那个时候体系结构方面的知识确实忘了许多)。然后写了个LRU,给我介绍了一下部门的情况,面完二面就直接挂了。

要说我不觉得不甘,那肯定是扯淡的。不过从实习我得到的一个宝贵的经验就是面试也就是这个样,主要还是看顺眼了就行了。许多东西都是强求不得的。

美团

美团由于填写简历的时候填错了,学历填成了非统招,所以做完笔试就没有后续了,实际上我觉得cpp面美团也没有什么优势,毕竟java基本不懂,数据库也只会底层的原理,不懂上层的东西。

阿里

阿里总共有6个部门,因为阿里卡第一学历,所以我阿里的简历筛选一个都通过不了。我其实觉得这个公司的HR挺无能的,作为一个公司核心就应该是选择人才,如果通过卡第一学历甚至那什么28所名单来进行筛选,只能够体现这个公司的无能。

腾讯

腾讯我投的是后台开发,说实在的,我觉得cpp就不应该投后台开发,然而我没有更好的选择。腾讯第一次捞我,把我调到技术运营的岗位去了,我研究生做的是云方面的研究,这个岗位就是针对内部系统的运营维护的,面试了就是聊天加项目加八股。没什么新意。然后二面也比较常规,三面主管面没发挥好,可能主管觉得我go语言基础不是那么好加上iptables的实现没有解释的清楚(我忘了),三面就给我挂了。

后面第二次捞我,是腾讯健康的部门的后台开发,第一面面了两个小时,当时我就知道多半这次面试就已经结束了。实际上这个题的代码很不好写,内存有限制,面试官一定要让我把代码写出来。前面八股问了半个小时,我和他讨论思路用了50分钟,怎么设计数据结构是合理的,怎么避免内存限制,怎样效率最高。然后我就开始写了,这个代码很不好调试,从4点开始面到5点50左右,我的精神已经开始恍惚了。我主要想吃饭了,然后我主动给面试官说我写不了了,就这样结束吧,大家好吃饭。

B站

B站由于认识HR,虽说简历全挂了,还是给了我一个分布式存储开发岗位的机会。一面的话是八股加体系结构,这可以说是我进行的最有深度的一次面试了,给面试官讲解内存子系统。当然二面只进行了20分钟就结束了,显然B站不招人嘛。但是我觉得这是给我想法转变一次的面试,cpp真的要搞后台开发吗?我学的技能就不是互联网的东西。

龙芯

龙芯的面试我是已经在英伟达实习的时候面的了,这个岗位相当有意思,名字叫基础软件研发,主要做gcc和ocaml的编译器适配和优化,你可知对于一个学习过Haskell的人并接触过一些ocaml语言的人来说,这个岗位有多么的吸引。面试的过程还是主要考察体系结构的知识,以及询问我怎么在CPU上实现矩阵的乘法的优化。二面主要问我调试器是怎么实现的,怎么做并行计算的,怎么实现SUNDR(一个安全方面课程的最后的作业),然后问了我个在Linux系统上用鼠标左键点击PPT翻页,从设备到内核态到用户态的整个过程(这是一个很有意思的问题)。目前,状态在泡池子中。

其他

实际上,我还投了许多公司。

  • 简历挂的:字节,拼多多,京东,滴滴,小米,米哈游,大疆,网易。
  • 泡池子的:华为(云计算开发工程师),比亚迪(操作系统研发工程师)。

英伟达

我在秋招的时候仍然是投了英伟达的实习岗位,其实我只是抱着试一试的心态,无论是学历还是经历,我比起申请的人都差了不少。但是英伟达给了我面试的机会,这个岗位是Software Intern - CUDA Test Development。实际上英伟达的面试能够让我感受到很重要的一点,就是注重对基础的考察,而且在面试过程中与面试官的交流才是最重要的,怎么去解决问题。面试官会和你一起去沟通解决这个问题。

实际上我在面完这个岗,是给我发了拒信的。当时候另外一个实习岗位Software Intern - Autonomous Vehicles给了我面试机会。然而,好巧不巧,HR找到我,说上一个岗位准备给我发offer了(其实是有人鸽了),在确定性和不确定性之间,我选择了确定性的offer。因为已经9月份底了,加上英伟达的光环,我还是非常希望能够转正的,毕竟我没拿到一个大厂的offer(或者说,他们连面试的机会都不愿意给我)。于是我选择放弃了当前的面试,接受了这个offer。实际上目前回想,我不应该做这个选择,我应该坚持我想要的。

正式入职英伟达的时候已经10月中旬了,软件测试的工作说来有趣说来也无趣,公司的同事以及主管都对我很好,英伟达给的福利待遇也很好。我其实已经十分地幸运了,能够拿到这样的实习,能够有转正的机会。这是我敢都不敢想的事情。然而,我的主管很大方地支持我去投内部的秋招,我是非常的感动。而且,实习也会给你自己探索的机会,我就在实习期间写了个python的命令行工具来自动化流程,提升大家的效率。主管还给了我20分钟的时间作汇报,我当时才进组两周左右。

于是乎,我投递了System Software Engineer, SoC - New College Grad的岗位,我为什么想投这个岗位,是因为我内心想做的事情驱动着我。我非常感谢能给我这个面试机会,如果不是因为我能够拿到英伟达实习的机会,我是绝对拿不到秋招的面试机会。面试主要还是问体系结构方面的知识,我最感动的是第一位面试官对我的评价:

从你的身上,我感受到你对技术的热爱与热情。

我从来没有得到过这么高的评价,在我看来,这是对我很高的认可。然后就是二面从1点进行到5点,仍然是我所说的,交流沟通才是最重要的,在会议室和面试官一起在白板上写代码,一起讨论问题。英伟达的面试体验可谓是我面过的公司最好的,二面基本都是4个小时,足以体现对面试者相当高的尊重。

我最终也是幸运地拿到了这份offer,我做梦也不敢想的事情发生到了自己的身上。

感想

我的秋招并不是那么顺利,因为第一学历的限制我几乎没有什么好的选择,加上我学的东西几乎与业务无关(我在整个学生生涯写的web后端还有sql几乎等于没有),我几乎拿不到大厂的offer,如果没有英伟达的offer,我就只能等华为,龙芯还有比亚迪了。

然而,我一直在思考我自己想要的是什么,我前段时间看到的文章每个人每天都只有24小时,希望我的选择真的是我的选择让我深思了不少,正如同文章的题目一样,对自我的叩问才是成长,做什么样的事,成为什么样的人,需要用一辈子的时间去寻找答案。我为什么面试互联网大厂几乎到主管面就不行,我思考过这个问题,是因为我没有态度,我内心其实一直在排斥。如果我去做后台开发自己学的这些底层知识还有什么用。所以我面试的时候很多时候遇到无语的问题,我一般不会反驳,而是说“嗯嗯,你说得对”。

在整个秋招期间,我看到了本硕西电的有些朋友学java能够拿很多大厂的offer,我的内心难免会有嫉妒之情,对自己第一学历被卡的无奈,以及底层知识远离业务的无奈。每当面试官面试的时候问我,你做这个东西有什么意义的时候,我总是无奈一笑,说我挺喜欢做这些没有意义的活。

后面我意识到了不能着急,于是我仍然按照我自己的步骤走,因为学习并行计算,认识到了必须要去深入了内存子系统才能提高程序性能,于是我认真了学习了这两本书(从9月份到现在,实际上正是因为这两本书让我在英伟达秋招的这个岗位占了优势):

  • UNIX systems for modern architectures: symmetric multiprocesssing and caching for kernel programmers.
  • A Primer on Memory Consistency and Cache Coherence.

实际上,我觉得人生就应该做一些没有意义的事情。这些没有意义的事情总会在运气到来的时候给予我们或多或少的帮助。在我看来,面试还是运气大于实习,我不喜欢超人的想法,觉得努力就能够有所收获,这是一种傲慢的想法。失去了同理心的想法。我一点也不觉得我能拿到这个offer是我的实力占主要因素,能够得到面试机会的人,没有人实力很差,至少我觉得大家都差不多。

我最后想用《三傻大闹宝莱坞》中的结尾话作为总结:

追求卓越,成功将不期而至。