24-25暑期实习总结-北美逃兵の流浪日记
我是22年从国内转学到美国读大三,正好碰到美国就业形势的转折点。22年九月份,我接到第一个电面(领英),当时hr说11月才开始明年夏天的实习招聘,后面11月hc突然被砍,我也没有能安排上技术面。 到了第二年春天,我累计投了超过600份简历,只有十几个笔试,但是即使笔试满分也没有任何消息。二月中侥幸得到了tesla的面试机会,但是缺乏经验也是一面挂。 当时便决定大三结束休学一年,看看能在国内找到什么样的实习。 timeline如下:
23年2月,阿里面试,但是当时完全没有看过八股,被女面试官怼着八股问了90分钟,整个人面完就感觉不好了。
23年三月,腾讯teg面试到三面挂,这次面试其实自我感觉比较良好,预期也比较高,所以挂了之后也是很失落。 同时三月份面了smartX也是被面试官直接吊打。 三月份还接到了The trade desk在国内分部的笔试,我直接把去年刷到满分的CodeSignal成绩交上去,很快约了电面,但是因为缺乏经验,后面一个月没反应自动挂了。
23年四月和五月,中间没怎么接到面试,面了蚂蚁也是一面挂,这个时候开始打磨自己的面试技术。 回国前夕接到了字节的第一个面试, 美中时间凌晨一点面完就启程去芝加哥的ord机场飞加州转机回国,在旧金山的机场登机前接到一面通过的消息,可惜后面二面不太顺利,整个timeline持续了一个月到三面被挂。 当时还挂了华为的性格测试(本来想华为保底)。
23年六月到七月, 这两个月比较曲折,我做了一个手术。住院的时候,我接到了字节第二个部门的面试和网易雷火的面试, 面试过程都比较顺利,但是也都没有offer。 雷火答出了所有的技术问题之后,面试官说基础不错,但是缺乏经验。 字节则是hr挂。七月中,一个朋友帮忙约了剪映的一面,面试比较顺利,但是一面挂。因为时间的原因,当时预期是比较低的,打算可能八月份就回美国了。 转折点是实习群的朋友推了抖音支付的实习岗,因为他们比较缺人,一个下午面了三轮(没有hr面),当天晚上就发了offer。 之后有幸在字节实习了小半年, 虽然工作时间上比较卷,但是部门的同事都特别nice, 尤其是我的mentor给了我很大的帮助。
23年的总结: 去年找暑期实习磨炼还是自己的面试技术和简历包装能力。 面试技术最基础的就是八股是不是很熟练,其次是能不能有自己的东西。 一个例子就是对于网络的八股, 最简单可能是tcp的四次握手, 进阶可能是窗口控制, 但是如果真的要求比较高,就会考核整个系统收包需要的数据结构和中断流程(网络的协议栈是怎么在操作系统中初始化的、软中断和硬中断的交互、socket初始化要怎么处理、vfs怎么分配fd给socket的)。 我体感是大部分面试官水平可能在第二层或者后面一点,如果能到第三层的地步,其实面试优势会很大。 其次简历包装, 大家简历项目其实都是烂大街的,那么不那么烂大街的可能就是项目的理解上面。 网络库的项目,我先是自己写了一个demo出来,其次是参考了很多经典的项目(Netty,Nginx,Muduo,Asio), 我参考的点会考虑他们支持的操作系统和底层有什么协议可以支持这些项目。 比如说windows的iocp才支持真正的Proactor结构,Asio在Linux上面模拟实现Proactor的设计就可以参考一下。
24年的timeline如下:
字节离职之后,我在家里休息了三个月,因为自己想转kernel和ai infra的方向, 就租了一个服务器来写Cuda。 对于今年的暑期实习,我预期是去腾讯和字节做广告系统和推荐系统的组,或者是一些国内外企分部。
24年3月和4月:因为去年的实习经历,我很顺利收到了字节国际电商的面试,让我有点惊喜的是我还收到了不少家量化公司的面试,但是外企就收到了野村信息的面试。 量化的面试,我是抱着一直学习的心态进行的,所以就不会很在乎结果,更在乎通过面试去界定自己能力的边界。 面北京一家量化的时候,碰到了一位背景特别吓人的面试官,他对虚拟货币的观点刷新了我之前的认知(同时人也是特别nice)。 字节的国际电商面试就是特别顺利,前两轮面了20分钟就进入垃圾时间了,面试官就会出道easy然后聊天到一个小时,第三轮也是象征性写代码就通过了。 字节的流程太顺利了,我觉得他们的offer应该是十拿九稳的了, 而且hr面反馈也是两天出offer, 所以我就推掉了很多面试(wxg的视频号和小程序,还有xhs的ai平台)。 最后让我没想到的是,字节拖了两周都没有发offer,最后hr告知评估不通过。雪上加霜的是,我在字节流程结束的那一周,被pcg在三面挂了(技术栈不太匹配,他们是写java比较多,而且会用到很多大数据组件和k8s)。 此时突然发现自己进入了一个很尴尬的位置,因为腾讯好一点的部门基本都没有hc了,其他写java的公司跟我也不匹配。 四月底被字节用户增长挂了之后,就没有继续投简历了,把注意力都放在自己其他的事情上,打算八月底直接回美国。
24年5月: 五一后,某家量化突然约面(三月底笔试,本来是默认挂了),面试出奇得顺利,顺利拿到了offer。腾讯cdg的广告团体也约了面试,一面当天约当天面当天通过,二面因为拿了量化的offer就推了。
总结: 今年找实习的结果是很出乎我意料的,因为自己本来觉得比较稳的部门全都挂了,反而拿到了远超预期的offer。 我注意到的是,除了技术问题,面试是很在乎面试者的用户画像的,比如说工作稳定性还有性格方面。 我性格比较出挑,而且因为北美的经历,hr会顾虑我的稳定性(实习之后是否转正)。 字节国际电商的hr面,后面复盘碰到最大的雷就是我直接问能不能转正到北美的base。 另一方面,公司的偏爱也很影响能不能拿到面试和offer, 我在国内面了一年半,接到的面试一半是字节腾讯阿里,另一半是各种量化,一些规模小一点的企业像滴滴,京东,快手,携程加起来是一个面试都没有。 我的经历让我有一个暴论就是: 其实面试结果的考量里面,技术占比可能不超过一半, 对面试者的偏爱和需求可能才是决定性的因素。 字节用户增长的二面,我连续A了4道算法,结果面试官直接出了道全网没有答案和思路的智力题(背景也非常不严谨和随意),我当时就知道他的意思了,第二天也是马上就挂了。
建议:
算法方面,我觉得熟练lc的hot150就可以cover90%的面试了,我面了二十多轮字节,考了起码6+的反转链表和接雨水,大部分面试官其实出算法题其实更多是表达一种对面试者的评价。
八股方面,我觉得八股最重要是要深,因为我面的大部分试都是一个方向问一个问题就结束了。 比如说操作系统线程和进程的区别,相比于背标准答案,如果自己知道task_struct thread_info mm_struct的结构还有fork等api的底层实现,基本面试官就不会再问下去了。
项目方面,我觉得项目可以烂大街,但是得有自己的理解。 我自己简历上也有烂大街的Raft项目,但是除了自己实现一个Raft协议之外,还会做一些项目实现的改动。 比如说分布式协议+leveldb其实是一个很好的组合, 面试的时候可以具体描述自己怎么实现配置变更和保障事务的实现。 如果碰到对这方面不了解的面试官,基本上可以直接镇住对方。 我觉得可以读一些相关的论文来增加自己的知识背景, 我自己就会读VlDB上面一些文章,还有数据库的经典论文(比如说对于硬件成本和收益的估算,还有关系数据库的原始论文)。