当前位置:首页 » 《关注互联网》 » 正文

亲身历时两个月,这可能是一篇最全面的2021大厂技术岗实习面经_JeremyZhao1998的博客

5 人参与  2021年03月24日 16:35  分类 : 《关注互联网》  评论

点击全文阅读


亲身历时两个月,这可能是一篇最全面的2021大厂技术岗实习面经


本篇仅从个人经历角度讲述2021春季日常实习的求职经历,涉及到微软、商汤、字节跳动、依图、寒武纪、百度、腾讯、旷视、轻舟智航等企业的面试或笔试。以下内容均不涉及公司保密有关信息。由于我没有在每一轮面试或笔试之后都详细记录,所写仅凭回忆,如有叙述不准确敬请指正。

本文建议顺序阅读。


在这里插入图片描述

第一轮CSDN审核以涉嫌“推广营销”为由拒绝通过本文审核,我很无语,请审核员仔细阅读本文,看看哪里有一个字引流到别的平台,哪里有一个商业链接,哪里有一句商业宣传?我写这篇纯粹给学弟学妹一点实习经验,望通过。


文章目录

    • 亲身历时两个月,这可能是一篇最全面的2021大厂技术岗实习面经
      • 背景
      • 求职经历和结果
      • MSRA(微软亚洲研究院)-研发
      • 商汤研究院-算法
      • 字节跳动-研发
      • 依图-高性能计算
      • 寒武纪-算法
      • 腾讯-研发
      • 百度研究院-算法
      • 旷视-算法+研发
      • Red Hat(红帽)-研发
      • 轻舟智航-算法
      • 写在最后的个人小建议/总结


背景

本人学业背景是北京某985院校本科,计算机科学与技术专业,2021年6月毕业。原本计划出国读硕,但是因为疫情和家庭原因放弃了,转入考研大军,所以大三的结束的黄金实习时间并没有找实习,在准备考研,直到考研初试结束才开始找第一份实习。在这之前学校里除了书本之外,专业实践经历几乎没有,各种竞赛因为对出国申请没有什么贡献,一直没有参加过。大二暑假到大三秋季学期在实验室做了一段时间打杂的工作,也几乎没有什么学术贡献和技术积累,最主要的收获可能是学会了安装双系统的Linux和基于百度和CSDN的Debug法。再加上GPA和排名在专业里只能算中游稍偏上(甚至没能保研),我的简历在纸面上看可以说是没有任何竞争力的。

纸面上没有任何竞争力,而实际上呢,没令大家失望,也没有任何竞争力。我在专业课方面也是每门核心课程都有各自的硬伤。体系结构实验没能做到中断异常处理模块,操作系统理论考试刷分重修过,编译原理理论考试分数惨淡,机器学习和深度学习只是泛泛了解过,数据库甚至没有选修这门课(同一时间选了FPGA的课)导致服务端原理一窍不通,前端也没有接触过…

后来和朋友聊天,大家都有共同的感觉,就是自己其实很废物,但又不想当个废物。于是在本科要结束的时候一定要抓住学术上起飞的最后机会,毕业设计和实习。


求职经历和结果

怀着一颗不能再当废物的心,我的毕业设计选了极具挑战性的面向FPGA的深度学习编译器,这方面我会在专门的分类专栏:FPGA深度学习加速 持续更新。而在实习方面,我投递了海量的公司和岗位,经历了三个月断断续续的面试和笔试,最终拿到了比较心仪的实习Offer。按照时间顺序,我的求职经历和结果如下:

公司组别/岗位岗位职责考核轮数结果
MSRA(微软亚洲研究院)Networking Group,工程岗Verilog实现数据中心交换机只有1轮面试被拒
商汤研究院通用模型组,算法岗深度伪造/活体检测共3轮面试,考核至第2轮被拒
字节跳动互动娱乐业务线,工程岗测试框架共3轮面试,考核至第1轮被拒
依图高性能计算,工程岗深度学习异构平台加速共2轮面试,考核制第1轮被拒
寒武纪机器学习,算法岗结合智能处理器设计部署AI共2轮面试,考核至第1轮被拒
腾讯腾讯地图业务线,工程岗测试开发,代码质量共3轮面试,考核至第3轮Offer
百度研究院商业智能实验室,算法岗百度飞桨框架实现只有1轮笔试Offer
旷视机器学习,算法岗模型设计总轮数不定,考核至第2轮——
旷视基础架构,工程岗数据平台建设总轮数不定,考核至第1轮Offer
Red Hat(红帽)OpenShift,工程岗代码质量共2轮面试,考核至第2轮中断
轻舟智航机器学习,算法岗模型选型调参、落地加速总轮数不定,考核至第2轮Offer

最终我的选择是接了百度研究院的Offer,学习设计实现PaddlePaddle框架有关小样本学习的组件。表格里列出的结果,旷视的模式比较特殊,在后面的篇幅会专门介绍,红帽的第2轮面试已经安排在了我决定去百度入职之后,因此中断了红帽的求职。当然还有一些简历没有过的公司和岗位,在这里没有列出来。

历时两个月终于接到了自己心仪的Offer,面试的经历可以说是相当坎坷。可以看得出来我投递的岗位以算法,或者非常偏重AI落地的工程为主。从我自身出发,一颗“不想当废物”的心让我始终觉得,实习不能仅仅只是进厂搬砖,它一定要对我今后的学术发展起到一定的作用。当然绝不是工程岗无用,在工程实践的道路上技术经验的积累至关重要。一条路是算法研究,计算机科学家,另一条路是工程实践,顶级架构师,这两条路的终点都是值得行业景仰的大师,同学们脚踏实地攀登的时候别忘了抬头看看自己的前路是哪一条。

下面的篇幅,具体介绍每一次面试或笔试的情况。


MSRA(微软亚洲研究院)-研发

MSRA对简历筛选的条件极为严苛,从正式员工到实习生,国内高校几乎是以清北中科大为主的班底。绝大多数公司在筛选简历的过程中,985计算机专业几乎可以完美地完成敲门砖使命,但在MSRA不行,在此基础上需要更好的成绩,或过硬的奖项经历。我能够人生第一次面试就得到MSRA的机会,也是运气比较好,我有一位电子信息专业的同学在MSRA实习期满离职,组里正好缺人,通过他的内推拿到了面试的机会。

MSRA的沟通会让求职者感受到充分的尊重,组里leader亲自发邮件沟通面试时间和方式,即便被拒也是leader亲自邮件发拒信并表示歉意。邮件沟通全英文,但面试可以使用中文(当然他们也支持英文的面试)。

面试只有一轮,共一小时,使用微软研发的网页端屏幕共享工具,包括leader在内的三位面试官同时在听,轮流提问,面试压力会给的很大。首先是询问简历上的项目,具体实现方法,遇到的困难,如何解决。有关简历的问题可以占到整个面试时间的一半左右,询问非常详细,要求你对自己简历上写的经历或技术非常熟悉。如果有Github账号并有代码项目,面试官们会查看你的项目和代码并提问。

(这里插一句建议,如果第一次面试技术岗的同学,不要听信市面上任何非技术岗的所谓面试和简历技巧,没有用,技术岗里技术就是一切,简历来不得半点虚的)

简历挖得差不多了就开始代码题,这也是我平生第一次共享屏幕,让三个人看着我写代码,当时心情紧张到了极点。由于组里的主要工作是使用Verilog语言写FPGA,实现数据中心交换机的功能,所以题目是一道Verilog写状态机的问题。题目本身并不难,但是奈何我上一次写Verilog已经是两年前,对状态机并不熟悉(所以到这里大家能明白为什么电子信息专业的同学会在组里更有优势)。代码写得磕磕绊绊,也没有实现功能,最终只是描述了思路,面试结束。

总结经验:一定要熟悉自己简历上已有的项目;一定要看面经做准备,裸面和裸考没有什么区别,结局只有失败。


商汤研究院-算法

商汤研究院同样是同学内推了简历,通用模型组算法岗主要目标是顶会顶刊的论文,科研味道浓厚,是我认为最适合我发展目标的岗位。但商汤并不是高校,并不以培养学生为首要目标,因为考核需要你有足够扎实的机器学习基础。

商汤面试共三轮,其中前两轮会连续进行,第一轮大约45分钟,几分钟之后HR会再次打电话通知你是否要进行第二轮,然后立即进行第二轮。两轮的流程大同小异,侧重点不同。使用小鱼易连共享屏幕。

第一轮面试侧重点应该在基础知识是否扎实。对于简历上的问题会简单询问,了解你做的项目大体的流程,不会很仔细地挖,简历问过之后是一波深度学习的知识提问,需要你比较详细地叙述深度学习一些经典的算法,最后是代码题,岛屿个数问题,不是很难,但我在面试初期并没有刷过很多代码题,竟然没能在规定时间写完。

第二轮面试的侧重点放在了对简历的挖掘,会针对简历上的项目提问一些深度学习知识,比如调参的时候是怎么调的,为什么这么调。代码题:数组中出现次数超过一半的数字 。这道题我苦想之后想出了快排Partition查中位数的方法,但是没有时间写代码了,也是只叙述了思路。

两轮面试对深度学习知识的提问有一部分重合,具体的题目我没法全部回忆出来,但重点高频问题:ResNet的理解、BatchNorm的理解、梯度下降及Adam优化的理解等。具体的问题,商汤的面经也很多了,同学们自查。

面试隔了一天后收到拒信。

总结经验:除了MSRA特殊组别要求Verilog以外,大部分公司会要求高级语言写代码题,要刷Leetcode,熟悉高频题目的思想和套路。


字节跳动-研发

字节跳动同样是得到了学长内推(字节跳动在北京简直是我们学院实习大本营,薪酬高福利好,十个人有七个都在字节实习),被推到了头条业务线的后端开发。

开发岗和刚经历的商汤算法岗面试截然不同,面试的侧重点一下子从深度学习来到了数据库、Linux、计算机网络应用层协议。字节跳动会有三轮技术面和一轮HR面,使用牛客网面试链接。第一轮的关注点几乎只在基础知识。但是基础知识方面我再次吃了大亏,没有答出来的点包括但不限于:ping的原理和过程、Linux用什么指令查看内存占用情况、Shell脚本实现追加文件内容…

代码题方面:给定一个数组,选取两数,要求右侧数减去左侧数的差值最大,返回两数下标。例如[1, 2, -5, 4, 3, -6, 0, 10, 7],最大值应该是10 - (-6) = 16,返回-6的下标5,和10的下标7。此题和朋友们讨论应该要使用动态规划,但当时我清奇地给出了一种分治做法,面试官似乎认可了我的做法,但面试结束后我验证发现我的做法是错的。此题后来我没有再仔细考虑,同学们自行思考吧。一轮面试后没有消息,代表着被拒。(很多公司是不发拒信的)

总结经验:所申请的岗位一定要复合自身实际,或者针对岗位专门复习相关知识。 计算机专业内部也是隔行如隔山,如果碰巧这个领域你特别陌生,即便你在其他领域建树颇丰,也一样会失败。至此为止我三次面试的代码题写得都不顺利,从此开始认真刷剑指offer。个人认为剑指offer难度也一般,没有覆盖到动态规划和高阶数据结构,还需要Leetcode稍难一些的题目作补充。

补充说明:字节跳动是一家快速发展的公司,各类岗位都很多,实习生的薪资福利都是统一的,这会给同学们造成一定的错觉。总的来说研发岗还是比较容易的,但AI-Lab要求非常高。如果同学们立志搞算法研究,其实是没有必要为了大厂的名号去做研发岗的。


依图-高性能计算

从依图之后的所有企业都是没有内推的,从牛客网或者企业官网投递。亲测内推的意义可能仅限于查进度会方便一些,并不会降低入职考核的难度。专门选择依图这个岗位是为了贴近我毕业设计的主题:深度学习编译器或异构计算。

这一类岗位在我的认知里,属于算法和工程之间的性质,深度学习算法的落地加速,这是一个极有前景也一直会有很大需求的方向。依图同样使用牛客网面试链接。这一轮的面试里,在简历方面面试官着重提问了体系结构和操作系统的课程设计,问到了流水线中的数据冲突和解决办法。基础知识方面问到了流水线结构性能测试的方法,指令的吞吐量。但面试官问到了“单条指令的吞吐量如何测”这个问题,我并没有理解他想问的意思。

代码题方面,从左上角开始蛇形打印一个矩阵,比如在这里插入图片描述
应该输出为:1, 4, 2, 3, 5, 7, 8, 6, 9。我的思路和回型打印一样,设置方向标记和转向标记,根据方向和转向标记来确定下一个数的走向。很繁琐,没有在规定时间昨晚,面试官提示说思考他们下标和最终打印序号之间的关系,但是没有想出来。

这一轮面试非常可惜,我认为我本身是比较适合这个岗位的,简历和基础知识问答比较顺利,最后可能是因为代码题的问题被拒,也有可能是底层硬件相关的工作本身极具挑战性,对工程人员的要求自然会更高。后来的反问环节我问到了组里做的具体工作,这位面试官所在的组是负责公司所有和效率有关的测试,测模型的执行效率,测计算平台的吞吐量等性能,这也解释了为什么会问到前面所述的问题。一轮面试之后没有消息。


寒武纪-算法

去寒武纪求职的想法和依图一样。寒武纪是国内少有的拥有自研AI专用处理器的公司,在AI硬件加速方面技术积淀深厚,还有中科院的背景,作为正是求职也是非常不错的选择。

但让我吃惊的是寒武纪的面试是电话面试,没有写代码的环节,问答甚至几乎没有问到体系结构相关,只问了机器学习和深度学习相关的内容。依旧是和商汤非常相似的热点问题:BatchNorm原理、损失函数的选取、如何解决梯度消失和梯度爆炸、K-Means原理、Dropout原理。简历里提到了使用过PyTroch,所以问到PyTorch中的Dataloader和Dataset之间的关系,如何使用,然后问到了Python的迭代器和生成器。

我的简历里深度学习的经历本来就不多,再加上有一些概念确实没有理解透,还没有代码环节来展示基础能力,这一轮被拒在情理之中。一轮面试之后没有消息。


腾讯-研发

在连续被五家公司拒掉之后(还不算拒掉简历的公司)我的信心已经跌到了冰点,开始思考一些要求稍低的岗位作为保底选择,毕竟即便是离发展方向较远的实习经历也好过没有实习经历。可能仅存的信心就是,已经把要求降低到了测试开发,就一定要去大厂。这一阶段我投出了腾讯和Red Hat的测试开发用来保底,以及百度、阿里和旷视的算法岗来挑战。

腾讯的实习生共两轮技术面和一轮HR面。第一轮的面试官是我遇到的第一位女性面试官,对于简历上的信息询问并不详细,在基础知识环节主要问到了数据结构、操作系统、计算机网络、C++特性这些方面,几乎都问到了我熟悉的知识,或者临时补充的面试常见知识点,比如我们学校的计算机网络课程几乎不涉及的应用层协议特性,Http请求的类型和其区别(对于网络方面,面试中几乎只会询问应用层协议或网络编程)。

第一轮的代码题是一道简单的哈希问题:数组中找出两个加起来等于目标值的数 。腾讯的面试使用腾讯会议共享桌面,代码在自己本地的编辑器里写并运行。这一轮开始的时候我打开了Dev-cpp,但在使用C++的哈希容器<unordered_map>的时候,Dev使用的编译器缺少这个包,导致我的代码最终并没有运行。但好在题目思路简单,我写得也很流畅,和面试官讲了思路之后就顺利通过。

一天之后收到二面通知,第二轮的面试官同样是一位女士,听上去像是部门leader。这位面试官的面试非常简洁,自我介绍之后简单询问了简历上的一些经历,具体讲述了项目,十五分钟之后就表示她没有别的问题了,进入反问环节。我很惊讶表示这一轮不需要我写代码吗,面试官当即表示如果你想的话就给你出一道题吧(求锤得锤…),但面试官表示说思路即可,不需要实现。

第二轮的代码题也并不复杂:定义驼峰字符串:由三个字符组成,首尾字符相同且中间字符与首尾不同,例如"bxb"是驼峰字符串;给定一个字符串,若其子串有驼峰字符串则删除之,保证最终输出结果没有驼峰字符串,例如"abcbd"处理后应为"ad",而"abcbda"处理后应为空串(第一次删除"bcb"后得到"ada"依然有驼峰,需要继续删除)。拿到题目后首先想到简单地滑动窗口遍历字符串,删除驼峰即可,面试官提示道:“这样就可以保证没有驼峰了吗?”随机意识到删除后可能引入新驼峰。改进了算法,使用状态机的方式判定待输出的字符串末尾是否会引入驼峰,引入则删除之,用以保证最终结果没有驼峰。面试官认可了这个做法,但说有更简单的实现逻辑。

一个周末过去之后收到了HR面的通知,这也是我漫长的面试之旅中唯一一轮HR面。HR面不会问技术问题,简单了解近期规划、实习时长、为什么想来实习、期望得到哪些收获,此外也是唯一询问我简历上非技术经历的一轮面试(所以简历上非技术经历越少越好啦,如果面技术岗的简历上全是非技术经历,很显然你没有技术经历,你在灌水)。

HR面之后过了五天才接到最终的Offer,据说HR面就不会再卡人了,毕竟你技术通过了考核,只要人没什么大问题都会录用的。


百度研究院-算法

其实刚看到这个岗位的时候,岗位的介绍是“Python研发”,但岗位要求需要懂机器学习和深度学习,猜想会是和算法非常贴近的岗位。投递过后leader亲自打来电话表示简历可以过,会给我邮件发来笔试链接,随时开始做,但一旦开始需要在两个小时里做完。在电话里leader就提示说笔试题里会涉及机器学习、线性代数,以及两三道编程题。

接下来的四五天备战,突击了西瓜书,读了一些深度学习基础知识的博客,这确实是一种捷径,先简单了解知识,可以在面试或笔试环节收到奇效。随后在约定的最后期限之前开始做这套笔试题。笔试题有四个模块:单选10题每题1分,多选5题每题2分,编程3题每题20分,简答题2题每题5分,规定可以选择大模块的答题顺序,一旦选择一个模块必须提交之后才能再次选择其它模块,提交之后就不能再回到该模块了,模块内部可以自由选择小题顺序,总时长两个小时。

单选和多选如leader所说,包含了机器学习、概率论和线性代数。机器学习只涉及到了概念,没有算法公式推导和定量计算,加之是选择题,甚至有不熟悉的概念也可以排除法做题,总体比较简单,大体浏览一遍西瓜书是肯定可以做全对的。概率论和线性代数涉及到计算,同学们提前备好草稿纸。计算也不会非常难,但由于这种进入一个模块必须全部提交的模式,我无法提前知道编程题的难度如何,为了给编程题留足够多时间,有一道概率问题我没有算就匆匆蒙答案跳过了。总的来说单选和多选难度不会很高,基础知识够扎实就可以。

编程题一共有三道,每题20分,在线测评,评测机会给出你的代码通过了百分之多少的测试点。第一道题可以说比较简单了(以至于我已经忘记了题目具体是什么),属于大一新手学第一门编程语言就可以做出来的程度,大家不用太关心(所谓签到题)。第二题是 单词反转 ,也并不难,前两题很快AC。第三题稍微繁琐,但也不难:给定十进制数字a(0 ≤ a ≤ 9),以及整数n(1 ≤ n ≤ 100),求 a + aa + aaa + … + aa…a(n个a) 之和。题目乍一看非常简单的加法,但n会比较大,需要手写高精度加法(高精度加减乘除博客),然后调用高精度加法来计算这n个数的和。

最后的简答题,原以为会是智力题或者机器学习简答题,结果拿到题发现是“希望从此次实习经历中获得什么?”和“我们要求的实习时长是6个月以上,请写出您的实习起止时间”这么两个问题,白送10分。

和leader约好的周四做题,她周五查看我的试卷。在周四晚上做完之后等到了第二个周一中午,接到了leader电话,给了口头Offer,并且介绍说岗位主要的职责是用Python实现Paddle中的算法包,希望代码尽快上线。因此虽说这个岗位不是以算法研究发论文为目标的传统意义上的算法岗,但它是和机器学习非常近的研发岗,我认为很适合我这样机器学习方面没有太深了解但迫切想入行的同学。听到消息之后是比较惊喜的,只有一轮笔试就直接发了Offer,并且可以参与国内最早可能也是最优秀的开源框架Paddle的建设,还能在Github上被标记为Contributor,可以说是非常超值了。


旷视-算法+研发

旷视,还有后面提到的自动驾驶初创企业轻舟智航,他们两家的面试模式比较特殊。前面提到的公司,投递简历都是投到具体的岗位,然后由该岗位组里的正式员工或者leader来面多轮,相当于闯关制度,闯过所有关即入职,但旷视和轻舟智航的模式是:投递的简历可以被多个项目组看到,有兴趣的项目组会捞起简历来面,如果这个组觉得达到了要求,会直接录用,因此面试的总轮数是不确定的。(也有可能由多个组之间协商,最终某个组发出Offer而其它组退出这样的机制。因此我的最终结果是研发岗里数据平台建设岗位给了我Offer,我不能确定是两个算法组拒了我,还是三个组协商之后由研发岗发我Offer)

旷视的面试经历也有些小插曲。原本我投递的是研发和算法两个大范围,所以HR联系了两次面试,每次连续两轮,每轮一小时左右,周三算法周四研发。在面试前我已经拿到了百度的Paddle岗,并不是很想在旷视做研发,然而算法岗面试前第二位面试官有会议,推迟了第二轮面试,周三只面了一轮算法。这一轮里面试官非常友好,提问了简历里的项目之后几乎没有问任何基础知识的问题,直接开始代码题:第一题:打印二叉树每一层的最后一个节点,我使用了层次遍历,实现之后面试官提示说深搜也是可以的。第二题:求全排列中某一排列的下一个排列,例如[1, 2, 3, 4, 5]的全排列中,“1 4 2 5 3"的下一个排列应为"1 4 3 2 5”。这一问题在C++STL中有封装好的函数next_permutation,具体实现也可以参照博客:全排列的下一个。想出来之后时间剩的不多,面试官表示讲思路就可以,并且认可了我的思路。总体来说这一轮我对自己的表现还是比较满意的,反问环节我问面试官为什么没有问我机器学习方面的问题(企图再次求锤得锤),面试官表示你的简历上也没什么这方面经历呀,真有道理,我只好表示虽说没有大项目经历但我基础知识还是可以的。

周四的两轮面试,我本以为是两轮研发岗,也是这么做准备的。第一轮的面试官和周三的模式相似,问过简历之后直接开始代码题:第一题:给定一个浮点数组,返回其从小到大稳定排序后的下标组,例如[0.5, 0.4, 0.3],应当返回[2, 1, 0],而[0.5, 0.4, 0.4]应当返回[1, 2, 0]。排序看似简单,问题在于首先要稳定,C++自带的sort()是灵活选用排序方式,如果是快排将失去稳定性;其次要返回原来数组里的下标,这需要保留原数组的数字和下标关系,有重复数导致无法使用哈希表。我的思路是定义结构体,将数和下标绑定,构建结构体数组,对数组进行归并排序,返回数组中结构体中的原下标。这种思路的实现很繁琐,写了比较久,还因为归并中的一点小问题卡在debug很久,好在最后成功了。但还有第二题:田忌赛马,加强版:田忌的马和齐王的马数组并非有序,需要使用回溯。最后只剩下几分钟的时间,甚至没有想出来。

第二轮面试官和旷视的前两位风格不同,询问简历之后问到了比较多的基础知识:高频高点操作系统的虚拟内存、Http请求的过程、数据库的类型(我表示数据库我真的没有上过课)。询问基础知识占用了比较多时间,所以代码题只有一道:在转动过的有序数组中寻找目标值。这道题我是刷过的,使用了比较复杂的分类讨论实现了logn,但我把我写过的算法又写了一次的时候面试官观察了很久,表示我的方法逻辑好复杂,好在算法运行结果没有问题,还是足够有说服力的。

三轮面试结束,周五接到了HR电话,HR表示研发岗的面试官联系了她,觉得更我更合适,愿意给我Offer。我问她我研发岗两轮面试的哪一位,她表示其实周四下午第一轮就是周三缺席的那位算法岗面试官,好巧不巧的正好我只有那一场的代码题做的不好,非常可惜。后来又和这位研发岗面试官取得了联系,询问过后得知他所在的组负责旷视的数据平台建设,主要技术栈是Go和Python。


Red Hat(红帽)-研发

Red Hat的经历也比较特殊,在我基本选定Offer之后才约第二轮面试,并且"Software Quality Engineering Internship"事实上属于测试开发,我基本确定了如果给我Offer也不会成为首选,因此中止了求职流程。和投递MSRA的想法一致,外企的实习不仅意味着高薪不加班,还会带来更加国际化的工作经验。职位描述、邮件往来,包括入职后的沟通很多都使用英语,实际应用是提升语言能力最好的方法。

Red Hat第一轮甚至算不上是正式的面试,是部门leader级别的员工打电话来确认了我目前的状况、实习时长、简历上的经历和技术栈,并且在我这么多轮公司面试中第一个首次联系就商议薪酬,可以看得出来诚意满满,应该是仔细评估过我的简历之后才会打来电话联系的。不过三天之后才发来邮件,约下周的面试。但彼时我基本去向已定,这一类原本保底的岗位已经没有什么意义再面,于是回复邮件表达歉意,中止了面试流程。

题外话:MSRA和Red Hat让我感受到了外企文化给员工或求职者的尊重,这方面可能也是国内大厂需要学习的吧,我认为至少应当为被拒的员工发出拒信,毕竟没有着落地等待的煎熬谁等谁知道。


轻舟智航-算法

轻舟智航是一家自动驾驶初创公司。其实类似的泛CV企业里感知算法或深度学习岗位我投递了很多,蔚来、深动、BIGO、元戎启行等等。但算法落地硬件加速这一类的岗位对从业者要求确实很高,很多企业表示了需要硕士以上,也有招收本科生的企业拒了我的简历,可能还是简历不够丰富。

轻舟的模式和旷视类似,有传感器融合和感知算法两个组先后面了我。第一轮面试官询问简历过后提问了比较偏应用的基础知识:高频考点:堆和栈的区别、C++的几种容器,其增删改查复杂度、写出10种Linux指令并解释功能和用法、还首次问到了OpenCV的相关函数(因为我简历上有写,但实质上我并不熟悉,因此不要写自己不熟悉的知识到简历上)。代码题:求两个矩形的交并比(交集面积和并集面积之比),此题实质上是要求出交集,但轻舟所用的代码共享页面没有运行功能,面试官也不对输入输出和形式作任何要求,因此我自己定义了矩形结构体,采用了比较复杂的分类讨论区分各种矩形相交的情况,最后面试官理解了我的意思,表示时间原因可以不用写对称的几种分类情况了,整体用时40分钟。

原本不定轮数的面试在第二天又加了一场,这位面试官询问了机器学习有关的知识:Max Pooling和Mean Pooling在反向传播时如何操作、拟合直线时已知有20%左右的点离直线较远如何优化拟合效果、多分类问题中样本不均衡的解决方法等等,考察很详细,也都不是经典面试考题,很多问题都是在面试官的提示之下回答出来的。之后是代码题:给定一个unsigned int类型数组,其中取两个不同的数按位与运算后的结果最大,求这两个数,例如[1, 2, 3, 4, 5]中,4 & 5 = 4是最大的,返回4和5。这道题同样是在面试官的多次提示之下,实现了O(n)的方法:unsigned int类型最多32位,从高位到第位依次扫描数组中有无这一位是1的数即可。总体来说这一轮面试我自我感觉发挥并不好,很多都靠提示,但面试官似乎对我很满意,在面试结束后向我介绍了自动驾驶行业趋势,公司的定位以及发展前景,当即就给出了口头Offer,并提供了组里三个方向供我选择:模型选型调参实现、剪枝蒸馏量化、CUDA部署加速。

在面试之后公司HR姐姐也表达了公司对我非常满意,希望我能加入,对此我感到受宠若惊,这是第一个希望我留下的纯算法岗,并且诚意满满,在这里真的非常感谢轻舟智航对我的认可,这也极大地提振了我的自信心。


写在最后的个人小建议/总结

  1. 有关简历:技术岗位对非技术经历的要求几乎是没有,没有必要让非技术经历在简历上大占篇幅。如果实在技术经历欠缺,用修过的专业课程或课程设计补充。对于不熟悉的技能点,不要出现在简历上,否则被问到后会成为减分项。
  2. 有关投递:海投,且同一时间多投,因为面试流程很长,最快的也要三五天,投一家出结果之后再考虑下一家太浪费时间,并且很多公司拒绝人是没有消息的(除非你足够自信你能够有投必中)。
  3. 有关备战:代码题是重中之重,Leetcode刷起来吧。此外可以重点了解高频考点的原理,不需要太深入,但要达到能侃侃而谈的程度。简历上的项目要非常熟悉,避免出现“我不太记得当时使用了什么样的技术”这样的回答。
  4. 有关岗位:志向科研:算法研究(以发Paper为目标)> 算法落地(剪枝优化加速异构计算等等)> 研发岗;志向系统架构:选择研发岗就可以,研发岗难度大体趋势:基础架构 ≈ 服务端 > 前端 > 测试。如果同学们是第一次实习,建议优先选择大厂。最好的情况是可以在实习过程中拿到实在的收获,比如Paper和专利。
  5. 有关自我介绍:和简历同理,不需要介绍学生会这类的非技术经历,也不需要介绍你的为人处世和兴趣爱好,这和你求职的岗位无关,即便有关也会在HR面环节。对于实习岗位,公司会优先考虑能够长期实习的同学,所以在自我介绍环节尽量讲明你的实习起止时间。最重要的是,不要讲你的劣势(我曾经亲耳听到隔壁寝室面试自我介绍讲自己内向不擅长沟通,很想过去直接堵他的嘴)。
  6. 有关答题技巧:对于基础知识问答,遇到自己熟悉的知识,在保证层次逻辑清晰的前提下尽可能多讲,甚至可以讲出相近的知识点,将面试官的问题一步步引入你熟悉的范围内。知识是无穷的,人总有不熟悉的知识点,而面试时间是一定的,在有限的时间内讲述熟悉的知识点越多,剩下的时间被问到不熟悉的知识点的概率就越小。
  7. 有关代码技巧:面试写代码时,面试官会观察你写代码的全过程,编码习惯、命名规范、申请空间释放空间、熟练程度甚至Debug方法都会被面试官看在眼里。首先要适应被看着写代码的方式(第一次面试时我就极不适应,极为紧张),其次在平时写码就要注意养成良好的习惯(在旷视的一次面试中我就因为malloc了空间而没有释放而被面试官提出)。但有一些情况下代码无需运行,有可能是共享平台的限制,也可能是面试官觉得不需要,因此写码时建议先实现核心代码,写完之后询问面试官是否需要运行,如果需要再设计输入输出。最终,即使共享平台支持代码在线编写共享和编译运行,也要提前备好本地熟悉可用的IDE和编译器,平台连接出现问题可以提出共享屏幕使用本地IDE编码。
  8. 有关反问环节:个人建议,具有岗位固定且多轮闯关的面试,建议反问环节询问组里的工作内容,这样下一轮面试可以根据工作内容作相应的准备。一般来说组里需要你做什么,就会问你什么,以保证你有足够的即战力。
  9. 感悟:不要失去信心。有学长告诉我,当你没有实习经历的时候找第一份实习是最难的,对方没有往往没有慧眼识珠看到你潜力的能力,所以只能用以往的经历来衡量你的价值。被拒不能说明能力差,甚至连续被拒五次也不能说明能力差,毕竟连续被拒五次的我最终也拿到了足够我选择的Offer。想要别人发现你的价值,先要自己认可自己的价值。

最后的最后,祝大家求职顺利!工作顺利!学业顺利!


点击全文阅读


本文链接:http://zhangshiyu.com/post/16353.html

面试  算法  简历  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1