语言漩涡

thirtiseven 的博客

0%

2022春招找实习实录

我是预计 23 年毕业,所以一般来说在2022年春招需要找一些暑期的实习。本来迷迷糊糊,打算三月再开始投的,但是21年11月底谷突然发了投简历邀请,搞了几天把简历搞出来,心想如果人生第一个面试就面 google 可能会对我的身心带来严重的伤害,于是就想投点别的企业把实习的事情解决了。最后一共投了12家的简历,日常和暑期提前批混投,3家没有理我(AfterPay、Apple、VMWare),4家面试挂了/面试完没消息(Google、SAP、蔚来、字节跳动),5家获得了offer,分别是 Amazon、MicroSoft、NVIDIA、Unity 和商汤,都是开发岗。分享一下面试的内容和时间线,聊一聊自己的感想。

做简历

很久之前在boss直聘什么的上面填了一点项目经历,扒拉了下来。然后对着一个Latex版子写简历,非常痛苦...

一个小技巧是,在google上搜索 university resume,能看到各大牛逼大学就业指导中心的做简历教程,选择你申不上的梦校,获得他们的同款简历吧(不是),反正别再看知乎了...

另一个小技巧是,学会了怎么写简历之后先写英文的... 因为写中文的总是会有一种惰性的思维,英文的简历有固定的格式,所以更好写。然后写完英文的翻译成中文,然后看看中文的问题再在英文上改,来回往复,这叫,模拟生成对抗网络(

最后一个小技巧是写完简历抓点牛逼网友改一改,我当时抓了我在 Meta 的好朋友陈同学,他专门花了接近一个小时的时间和我打了个电话,给我提出了非常多英文措辞的建议,很有收获,非常感谢他。

最后简历上写了的东西:教育背景、项目(一个学校做的脑机接口项目,一个打杂向的计算传播学项目,一个凑字数向的服务外包项目)、奖项(ICPC区域赛铜邀请赛银+服务外包二等+研究生数模二等)、活动(写了看了很多书、挂了博客链接),总的来说我对自己简历最后做出来的效果还是很满意的,但是简历的内容确实一般,但我确实也就是这个实力...

面试准备

由于主要投的是外企,所以完全没有背八股文,主要重点还是放在了做算法题上。一开始觉得自己不需要刷算法题,碾过去就行了,但是我在实际面试的过程中感觉还是有很多基础的东西不会,例如链表的题和二叉树的题。另一方面,技术面试的面试官往往也不具有很高的算法水平,所以考察的题不会很难很偏,我在面试中遇到了大量leetcode热门题,虽然几乎都没做过,但是后来发现大家都做过... 我的室友最近也在准备春招,所以晚上经常和他一起做题。我觉得处在一个刷题的氛围是很重要的,能和人进行一些讨论也对我的面试交流能力有很大帮助。

关于八股文,我花了大概两个小时把一个github上的八股文合集看了一遍,结果发现很有用,很多东西都是在常见八股文里的,但是要我背我肯定是背不出来的。我觉得科班出身的同学即使像我这种基础极差的,面对一些风格的八股文也是可以大概说出或者猜出答案的,但是对于一些技术细节就没什么办法了,这个也是要看运气。我的看法是如果面试官执着于考察一些我不会的东西,说明这个岗位我不是很合适。换言之,如果我很适合这个岗位,那么面试官就应该问我会的东西。所以面试题答不出来可能不是水平的问题,而是岗位选择的问题。

Google

  • 11.30 发邮件说 Kick start 打过了,让申请 fast-track 的暑期实习
  • 12.3 在网站上申请了,填了问卷,这个问卷还要填面试时间,一副简历包过的样子
  • 至今没理我,感觉被挂了,怎么回事啊?
  • 12.29 等了快一个月,收到进面试的邮件,面试时间在1.4~1.10之间,一会儿就收到具体的安排时间,安排在1.6早上,连面两场。当晚打开 kick start 开始刷 extreme hard(
  • 1.6 面试(去掉具体信息):
    • 第一轮:上来就写题,面试官有个看上去是独立办公室的东西... 不错啊。
    • 写了一个题,一开始想复杂了,说了一堆支离破碎的错误思路,然后面试官说这只是一个warm-up的题,就想出来了,写了一下,写了一万个小bug出来。follow up 也想出来了,好像和面试官的想法不一样,写了一下(写的时候又出了一堆小bug)他觉得没问题,又来了一个follow up,没说出什么东西。太紧张了,反问什么都没问出来。感觉交流不太顺畅,由于太紧张以及分不清上下左右最大最小,写出了一堆bug。
    • 第二轮:上来就做题,面试官说摄像头坏了,还遇到一些网络问题。第一题做出来了,简单的follow up,又做出来了;第二题做出来了,好像有一点小问题,和面试官讨论了一些细节,然后算过了。有点超时啊... 问了下实习生做什么,说做一些小功能或者小工具。
    • 感觉应该是会挂的吧,第一轮太紧张了,题目没有预料之中的难,第二轮发挥还可以
  • 1.24 晚上邮箱拒信,约了第二天早上打个电话聊一下
  • 1.25 打电话,说交流OK,提出算法也OK,就是Coding不太好。主要还是按照面试的表现来看。

Unity

  • 12.10 在 LinkedIn 上发现 Unity 的人私聊我发广告,是春季的日常实习,一周三天,感觉挺好的,随手投了一下,晚上就发了笔试
  • 12.11 打了下笔试,题很简单,但是竟然没拿满分,96分,应该能进面吧...
  • 12.14 一大早打电话没接到,是HR,明确一下实习的时间,约了16号面试
  • 12.16 面试
    • 工作中遇到了什么困难?前几天升级py2代码,调不出来,没有注释的代码读了一年,很困难,说得支支吾吾的,不太行
    • 算法题,只有012的数组排序。先说了个计数赋值,然后说了个先把2换到后面再把1换到后面,写完后有点小bug,调了调就过了,面试官觉得不太行,提示了快速排序的思想,嘴出来了,他说不用写了。
    • 团队介绍:云 编辑器 sdk 你的期望是什么?后端,能做点偏大数据的也很好,因为想找个地方写scala。没有大数据。我:问题不大,后端就不错,C++也能写。
    • 反问:对实习生的期望,回答:能留下来。问:需要实习生有什么贡献,回答:融入团队。问:什么时候能知道工作内容,答:来了再安排
    • 17:38 电话给了口头offer

Amazon

  • 12.10 发现在招提前批,投了一下,上海没多少岗位但我还是勇敢地选了 no relocate,挂了就三月再见
  • 12.13 说简历关过了,给了 OA,下午做了一下,两题 90 分钟,第二题还挺难的,是说一个数组里有多少个包含不超过k个奇数的本质不同的子区间,写了个 O(n^2) 的前缀和+双 hash 骗过去了(应该能骗过去吧),最优解应该是在前缀和上二分,同时用个 trie 或者后缀数组维护,谁爱写谁写吧,感觉自己字符串题完全不会
  • 12.16 收到短信说进面了,约了22号面试,20号没消息就电话/微信提醒一下HR
  • 12.20 中午提醒了一下HR,晚上收到通知邮件
  • 12.22 面试
    • 第一轮面试官是女的,上来自我介绍,她就说了一句话,我也就说了一句话(...),第一个题是给一个字符串数组 按照anagram分类,就是只要两个词拆开打乱重组之后是一样的就分成一类。写了个map<string, vector> ,写完问有没有更好的方法,我说用hash,然后分析了一波复杂度,感觉本质上没什么优化,然后她提示说考虑只有26个字母,我说用一个数组当map的key,然后她说数组当key是不是不太能比较,我说那可以考虑数据范围然后序列化一下,然后就下一题了。第二题:给一个街区的数组,每个街区有若干种公共设施(餐馆,杂货店,学校之类的),我有一个设施要求的数组,希望自己买的房子周边要有这些设施。求一个我买房的街区 使我从我家出发到我想去的设施的最长距离最短。暴力是trivial的,然后发现本质就是找一个最短的区间,这个区间长度可以二分,然后就讲了讲这个二分的思路,分析了一下复杂度,然后写了一下,写出来了。然后她说有没有更好的方法,这个区间滑动窗口的思路是对的,能不能只扫一次。我说可以双指针,维护一个l和r搞一搞,然后又写了一下,这次只要求写思路不要求全部实现。然后反问,我问了问上海有哪些组,以及对实习生的要求(每次都问),提前十几分钟结束了。
    • 第二轮面试官是个Java选手,好像对C++不是很熟悉,说先写两个题然后问问简历然后我反问,第一题是求二叉树的LCA,看到题心肺骤停,满脑子都是树上倍增树链剖分O(n)-O(1)RMQ之类的东西,大脑空白了一段时间。然后开始写一个trivial的方法,打算先把暴力分拿满。暴力方法就是记录每个节点的深度,记录每个节点的祖先,先让两个点到同一层,然后同步向上走。写了大概十来分钟写完了,他看懂之后觉得是对的,要求优化成只dfs一遍,隐约记得是什么后序遍历之类的玩意儿,嘴了一下嘴出来了,就是看一个子树下面有没有这两个节点,有的话就是一个祖先,然后用一个后序遍历保证第一个祖先就是这个节点。写了一下,写出来了。他看了也觉得没什么问题,就下一题了,是个裸的边权为1的最短路,我直接说dijkstra啊,不会真让我默dijkstra吧,他说可以有更简单的方法,你要写也可以。然后我说那就BFS呗,写了一下BFS,有些代码他没看懂,一部分是我变量名取得不太好,多源最短路的那个数组我叫他path... 但是总体来说是bug-free的... 应该还行吧,然后问了下简历里信息茧房那个项目,我简单说了下,稍微聊了一会儿吧,比较友好,反问问了那个对实习生的要求,也是说做一个完整的东西出来,问了下还有几轮,他说没了,一会儿和上一轮面试官商量一下
  • 12.28 北京的网友收到了一波拒信
  • 1.4 北京的网友有的收到了oc,怎么回事啊
  • 1.7 收到offer call

Microsoft

  • 12.13 暑期实习刚开,问了问小马,投了简历,填了一大堆东西,但是怎么没让我选组啊?
  • 12.23 看了宣讲会,怎么是1.17号入职,而且上海好像只有C+AI,感觉bar很高... 但是做的东西很感兴趣。
  • 12.27 填了表,一志愿C+AI,二志愿STCA,三个关键词:后端、全栈、云,冲
  • 1.10 约面试
  • 1.11 面试确认邮件,1.17+1.18 每天下午各一轮
  • 1.12 1.18那场换到上午了
  • 1.17 一面
    • 部门介绍
    • 脑机接口项目是做啥的?巴拉巴拉
    • 看你看了很多书啊,看了什么技术书?说了一堆,提到了DDIA,里面有点啥啊?忘了
    • 系统设计:一个api平均五分钟才能出结果,怎么设计?我说发个指令过去让他调用 然后立刻回复收到 然后让它后台慢慢跑 跑完了再告诉用户 他:跑完了怎么告诉用户呢 我:能不能发个消息通知一下啊 他:不能 我嘴了一些异步的东西 什么future啊之类的 好像意思还是不对 我说那就让用户发了请求之后五分钟自己查一下 他说:对!是不是其实很简单哈哈哈哈
    • C的并发:他问的是 多线程 一个线程只能读cpu缓存里的一个变量 另外一堆线程可以写 这个时候我们写代码要在这个进程前面加个violate(不知道是不是这么拼)问我为啥 说为了进程安全 让编译器知道他是个不会写的进程 可能编译出来会快一点 他说不对 是因为防止编译器因为这个进程只会读不会写把这个进程优化掉
    • 写题:非递归二叉树中序遍历,写不出来,他教了一下,写出来了
    • 反问:实习生做啥?你问了我并发编程的东西,这种东西怎么学啊?
  • 1.18 二面之前十分钟收到一面过了的消息
    • https://leetcode-cn.com/problems/find-the-duplicate-number
    • 找到数组中重复的数字
    • 方法一:拿个数组统计,他还以为是O(n^2) 的,写了一下
    • 方法二:排序,嘴了一下
    • 方法三:二分,写了一下,讲了一下
    • 方法四:提示建图,建出来了,提示找环,我:快慢指针,他:那你会了啊,我:快慢指针不会。推了一年,他教了一下,我仿佛会了,然后时间没来得及
    • 反问:实习生做啥?做VS,VS code,Teams,都会有release发出来
  • 1.21 lead 面
    • 自我介绍(一句话版)
    • 问C++,C++和java的区别,C++内存管理,构造函数的类型,普通函数静态函数虚函数的区别,虚函数和纯虚函数。
    • 脑电项目的架构,多线程怎么处理,接收指令然后做相应的操作是什么设计模式,抢占式和非抢占式。
    • 写题:打家劫舍,环形打家劫舍,区间合并,都秒了,问了下引用和直接传值的区别,C++的复制在底层怎么实现。
    • 反问:实习生做什么?不知道啊,是大pool里捞人,但是组里是做开发者的一些工具的;技术栈:比较杂,java、python、Csharp、Go、Typescript、javascript
    • 题写得不错,技术大部分都是猜的,不知道猜对没有,全程没啥回应啊
  • 1.29 上午邮件意向书

Apple

  • 12.13 填了个信息
  • 12.17 网上投了个 Smart Factory & Data Science Intern
  • 我真的投了吗?

vmware

  • 12.14 网上投了一下,“软件工程师”,其他啥信息都没,咋回事啊

AfterPay

  • 12.14 网上投了一下 backend risk 的实习,看起来很大数据,有点喜欢

SAP

  • 12.14 网上投了一下 backend 的实习,这个实习项目好像不错,但是已经一个月过去了怎么还没招到人
  • 12.20 HR打来电话核实了一下情况,应该是简历关过了,面试是面试官自己约我,保持手机畅通。中国人面试,可能会问两句英语,准备一下英文的自我介绍和项目经历
  • 12.29 面试官打来电话约面试,约到了12.31两点
  • 12.30 看了看面经,提前认输
  • 12.31 面试,是一个中国人,人听上去挺好的。先中文自我介绍,然后开始问了一点java里面数据结构实现的问题,我根据c++的知识猜了猜,然后问了点redis和mysql,然后问了点系统设计的东西,我都勉强猜了猜,虽然答得都很烂,但他还是挺积极的,比较educational,一直在聊天的感觉,最后问了问后端主要做些什么,说得挺好的,学到很多。
  • 不是,外企挂人也不发拒信的吗?

NVIDIA

  • 12.15 网上投了一下,Spark岗,spark 完全不会
  • 12.20 HR打电话来约了12.21 上午 11:00 开始面试,立刻开始学习 spark
  • 12.21 面试
    • HR系统打不开,介绍了一下组里在做啥,说让spark支持在GPU上计算。然后我说那不错啊我正好会scala,问为什么要学scala,我说在找一个既能OO又能函数式的语言,觉得很好玩就学了下。
    • 课程相关:机器学习课做了什么?复现了篇超图神经网络搞行人再识别的论文。超图是什么?巴拉巴拉。为什么加了就有改进?巴拉巴拉。你做了什么?没做什么,点击播放键就放起来了,有些路径格式之类的小问题(...)。模式识别干了什么,手写了几个传统算法,NB EM SVM,挑一个讲讲?讲了SVM,有没有什么和SVM思想比较相近的东西,说了fisher aka lda ,lda英文全称是什么(?)。图像处理课是干啥的,上课讲传统方法,作业复现论文。设计一个边缘检测的卷积核,上下边缘比较明显,左右边缘不用很明显,020101020 说错了,也没说出来什么拉普拉斯算子之类的。有没有做过compiler相关的实验?没有,我看你教automata,为什么要教这个?因为导师教自动机。沉默... 而且我也有兴趣。那你有没有实现过什么现代语言的自动机?没有
    • 问项目:脑电做了啥啊?巴拉巴拉,有没有和其他学校合作,没有,和医院合作了。交大有个项目和你们这个很像啊。很合理啊,老师就是交大来的。叫什么,(???)巴拉巴拉。HTTP Post和Get有啥区别,不会,编了编。信息茧房:这又是啥?和传播人合作的,代码都是我写的。介绍一下,介绍了一下,介绍得一塌糊涂。对word2vec进行了一些讨论,好像答得不太好,解释了一些社交网络分析的东西,解释了什么是余弦相似度。18年的项目,推荐系统,什么框架,sk-learn。
    • spark会不会啊,问问呗。spark在发一个任务的时候可以设置哪些参数啊,不知道。好。
    • 数据库学过吧,学过,sql,两张一样大的表,select sum from column A group by column B, 第一个表B的unique是10000,第二个是10,哪个快,第二个快,因为对每个A找B的操作对第二个只用做10次,他说可以开个 hash map 就一样快了,我说那建 hash map 的时候也要时间,第一个会慢。试图算一下复杂度,然后他说复杂度没问题了,来点体系结构的解释,我:第二个cache更友好,命中率高
    • 反问:我问你们平时工作做啥 他:把spark里的算子改到gpu上,先改spark,然后再用c++写cuda,既然你不会spark那我就只能这么跟你说了 实习生能做啥 他:如果你会spark倒是能直接上手改spark本身的代码 不会的话就写写应用吧 再不行就写写linux脚本
    • 感觉面得很烂啊?应该是挂了
  • 12.30 结果还过了,约了1.5 2~3pm二面
  • 1.5 下午面试,问了一些scala(flatmap 是什么,flatmap 是不是lazy的,模式匹配),问了一些modern c++(unique_ptr 怎么赋值,还有一个根本没听说过...),在hackerrank上写了一个前缀和题和一个二叉树的递归题,都写出来了,应该能过吧
  • 1.10 约了明天上午面试
  • 1.11 三面,面试官是校友,聊得挺愉快的,问了一些职业发展相关的事情。
  • 1.11 offer call

Intel

  • 12.16 网上填了个简历,好像没什么合适的实习岗位
  • 然后Intel就持续给我邮箱发群发广告...

蔚来

  • 12.18 在实习僧上随便投了下,三个方向可以选,好像很 general,HR当场就看了简历,然后没理我
  • 12.20 16:51 HR打电话来说简历过了,问了一些问题,约了周二下午四点半面试
  • 12.21 下午采完数据面试了一下,开始让我自我介绍,然后开始问脑电,然后开始让我表演二叉树后序遍历,随便写了个递归的,然后试着改成非递归的,不会,他教了下我,会了,然后想写个输入输出测一下,写不出来,非常狼狈... python会不会啊?问问呗?装饰器,迭代器,生成器?不会。你平时用python做啥啊?巴拉巴拉,那不会很正常。反问:组里做啥,组里做这个和那个,反问:希望实习生能做啥,回答得挺好的,忘了。
  • 面完半小时HR说过了,约了下一轮的时间,下一轮还是coding,是周五下午
  • 12.24 二面,面试官迟到了二十分钟,不过感觉水平不错。介绍了一下部门,然后做算法题,给一个离散概率分布,根据这个分布随机返回它是第几个值。就前缀和上二分一下,写了半天二分,面试官认为二分的一些corner case是错的,然后测不出错。我说我二分一直是这么写的啊,说了两遍... 反问,我问感知测评的难度主要在哪里,他说了一堆,说得挺好的。
  • 然后就没声音了,懒得问HR了,感觉体验不是很好啊?

商汤

  • 12.18 在实习僧上随便投了下,全栈开发,我真就全栈开发好吧
  • 12.19 晚上同一个职位的 leader 在boss上找我推荐了这个职位,不知道有什么玄机,反正又投了一份
  • 12.20 HR打电话来通知简历过了,不知道什么时候面试,等邮件
  • 12.21 周四上午11点面商汤
  • 12.23 自我介绍,说得比较随便。介绍一些项目,随便说了一下,他没说啥,问了问数据库会多少,我说不怎么会,问问吧,问mysql有几种锁,不知道,好那不问了,做题吧。第一个题,快速幂,写了个trivial的,说要走支持负数,写了写,然后写了个递归的,然后说了位运算那个的思路。第二个题,打家劫舍,秒了。第三个题,最短合法括号子串,一开始读成子序列了,写完才发现,交流了一下,写了写就过了。然后反问,随便问了问实习生做啥,他不是很想说的感觉,问了问还有几轮,他说一共三轮,就结束了。
  • 下午收到电话说一面过了,约了下周一面试。
  • 12.27 二面,自我介绍,介绍项目,我说了一堆脑电项目,写计算器,写了个支持+-的,然后要写个带括号的,写了半天写不出来,面试官看了代码觉得大体上没问题有些东西写错了。反问。
  • 12.29 HR打电话来说过了(这也能过...),约了下午的HR面
  • HR面,问了问简历,问了问各种情况,问了问有没有其他offer,基本上就是商业互吹
  • 1.6 说这几天offer会下来
  • 1.13 发了offer

字节跳动

  • 12.18 boss 上找我 投了 抖音本地生活后端开发实习生
  • 12.20 中午同部门另一个人又找了一遍 然后又投了一遍 是不是只有这个部门招人啊
  • 12.20 下午收到HR电话,约了 12.23 下午两点的面试
  • 12.23 面试,问了一堆基础的知识,我什么都不会。然后考了个leetcode002大数相加,面崩了,几乎没做出来什么东西,然后就结束了,应该过不了。
  • 12.24 邮箱拒信
  • 12.28 另一个部门的什么算法系统工程师实习捞了我,约了下周二(1.4)下午面试
  • 1.4 面了一下,问项目+问http+写了一个二分+问mysql+问redis
  • 1.7 拒信
  • 1.12 LinkedIn 上又给我发邀请... 我说面贵司挂了两回了,可能贵司对候选人的要求和我的能力不太匹配(
  • 1.17 又捞我,我说不要再捞我了谢谢

总结

我觉得在找工作过程中最重要的素质是勇敢,很多岗位,敢于投递,好好做针对性准备,门槛是没有那么高的。相反,一直在焦虑地做准备,然后只投递在面试准备期间学的东西相关的岗位/盲目海投,效果可能反而不佳。但是其实这也是一个小马过河式的事后感悟,可能我不同的面试结果就会带来不同的结论。但是大体上,我觉得找工作不同于考试和申请学校,它的选择非常多,反馈也很快,在一个不断面试的过程中寻找自己适合的岗位,不断调整预期,一定是比闷头准备更好的。我不是一个有自信的人,敢投这些公司主要是因为谷歌邀请投简历给了我一些自信,一开始 unity 一天拿 offer 也加强了这种自信,让我敢于尝试一些预期中过不了的更好的公司。

对最终的结果还是很满意的!接下来好好实习,不继续春招了...