转专业NG无实习,我是怎么找到大厂SDE全职工作的

avatar 584729
烙一烙稞
16640
29
疫情期间,看到地里很多小伙伴艰难找工的苦恼,也看到转专业的同学对前途的迷茫,我想要分享一下我今年找工的经历和自己的总结,希望能够对找工作的同学起到一些帮助。小弟见识浅薄,只说自身情况,求地里的大神轻喷(最好不喷lol)~

楼主背景:
  • 南部非名校某小众工程学PhD,学历成分复杂,还有一个统计的Master,另一工程学本硕。
  • 没实习,没绿卡,男性。
  • 从1月中找工开始,投了一百来份简历,LinkedIn没撩HR(本来准备临近毕业再撩的),收到了6个OA,3个电面,2个VO,1个offer,签完之后还有没面完的就没继续。
  • 1point3acres.com在这里。


1. 我为什么不做DS,MLE,而是直接转SWE

DS或MLE对于我来说可能更加符合一些,工程学PhD+统计的学位,研究使用了ML的方法,也提出了新的ML模型,虽然跟地里专门做ML的大神比简直是玩具项目了,但是面试的时候也不至于完全不相关。我在PhD早期也是打算毕业做DS的。但是,最近两年身边的PhD找DS工作普遍不太顺利,如果不能去大厂,那pay也不见得比传统行业engineer要高,引发了我对找工作方向的思考。

最重要的一点是岗位需求,我今天在LinkedIn上简单搜了一下美国DS,MLE和SWE的job opening数量,找到的数据是:DS: 9.7K,MLE: 1.6k,SWE: 67K。这与glassdoor.com统计的数字差距不太大。总体来看DS和MLE的需求跟SWE比还是有很大的差距的。

第二个考虑的是竞争压力,DS和MLE的赛道上站满了PhD和博后,竞争力强的是名校CS、统计、数学和物理的PhD,我对自己有自知之明,想直接进大厂可能难度不小。SWE赛道可能压力小一些,毕竟这条赛道够宽啊。

第三个考虑的是准备难度,DS不同的厂准备的方向不完全一样,有的侧重刷题,有的侧重统计,有的疯狂SQL,有的deep不见底。NLP和图像识别我根本没碰过,要从头开始准备。但是SWE也要从头学OOD,系统设计,刷题可能要求更高一点。所以对我而言,从准备难度上来看,DS需要准备的东西多而杂,SWE需要准备的相对来说少而精。

我希望第一份工作能有一个好一点的平台,把身份解决,所以想去tech的大公司,至少也要是大公司,或者比较头部的start up。综合上述找工方向的思考,决定直接转SWE,上了岸再说。

2. 时间不够的情况下,我是怎么准备的


去年的这个时候,我一句Java都不会写,连最简单的binary search写起来都费劲。在当时是绝对没有机会找到实习的,而没有实习应该也是我简历上最大的硬伤。所以建议大家早作打算,不要像我这样最后一年了才各种抓瞎。

在去年下决定转码的时候,我总结了自身的问题和优势。
  • 问题在于:时间不够,基础又差,需要快速且有效率的提升自己的知识。
  • 优势在于:有高等学位,且自身能力较强,能够快速学习。


针对以上自身的问题和优势,我决定报班学习,包括coding bootcamp和project bootcamp,可以参考linkedin.com决定自己适不适合报班学习。

经过bootcamp的打磨,我觉得自己稍微入了点门,做的项目也勉强可以把简历填满了。我在9-12月基本上把PhD毕业需要的材料完成得差不多了,在圣诞节前开始全力冲刺面试。面试准备的几个方面我分别简单说一说,有时间可以细聊:

A. 刷题

地里感觉普遍刷题800起步,更有一些刷穿了LC题库的选手。我对于这些同学非常崇拜,如果时间充沛,也确实应该多做一些准备。但是楼主时间不够,只能采取对我自己最高效的方式。

首先,我认为刷题主要体现的是代码水平,在面试中主要考察的是应对日常代码工作,是否能够完成以及拥有一定的熟练程度。那么刷题数量不应该是衡量代码水平的metric,但是代码水平又很难衡量,所以地里大多数人只能用刷题数量来评价。这就给一些同学造成了“我题目刷的多我代码水平就牛逼”的错觉。(当然,实际工作中的代码水平和刷题肯定不一样,我们这里只说面试的代码水平,不说别的)

那么代码水平怎样才能迅速提高呢?我的策略是系统学习、抓大放小、一题多解、举一反三。

系统学习指的是根据具体的算法和数据结构,有条理地进行学习,要以课本教材的章节为提纲,而不是以LC的题目tag为复习提纲。我得益于算法班帮我都总结好了,不报班自学的同学需要有较强的总结归纳能力,不然很容易有知识点遗漏。这样虽然比直接上手做题要慢,但是一旦完成积累,是能够大大提高刷题效率的。

抓大放小尤其适用于新手,或者目标不在一线公司的同学(往往对于转专业的同学,可能一线公司的面试都拿不到😭)。期末突击复习过的同学都知道,从0分水平学到60分水平相对来说比较简单,60分到80分要付出一定的努力,而从80分到100分则要付出大量大量的努力(和/或天赋)。如果大家时间紧迫,可以考虑先拿80分,在每个知识点下面不追求深度,而是追求广度。针对每种题型建立自己的认识,总结适合自己的模板/框架,等有时间再进行难题的训练。如果觉得DP很难并且目标不是冲击一线和准一线的同学,可以选择性放弃。这样一来不仅学习和复习的负担减少,还能够减轻训练时的焦虑,让自己更加自信。

一题多解往往更加符合面试的逻辑,要尽量做一题就吃透一题。以LC10为例,从Brute Force出发,想到dfs,再递进到dfs+memo来节省时间复杂度,再到dp,最后优化出更好空间复杂度的dp(滚动数组)。在训练的时候,要想着做每一题的目的是对自己思维+代码的训练,而不仅仅是把答案草草抄了了事。真到了面试前几天遇到实在不会做的面经再背也不迟。但是背题除了极端情况,都不是有效率的手段。

举一反三需要比较好的学习习惯,对于一类题的触类旁通。有些同学需要大量的练习来实现量变到质变,这一点因人而异,刷题经验也有很多人写,最关键的是找到适合自己的方法。

B. OOD和系统设计

如果说算法和数据结构自己在以前的学习和研究中或多或少接触过一些,那OOD和系统设计对我来说是全新的东西。根据我在面经板块看留言的反馈,这类也是NG最怵的题目。我觉得我也没有准备的很好,但是想要分享一些经验:

对于转专业的同学,特别是工程学的同学而言,OOD和System Design和我们平时接触到的工程设计问题有很多相似的地方。在本专业培养的工程学思维完全可以用在分析此类问题上。在做设计的题时,需要考虑设计的模块之间的联系,为什么要做这样的设计,优点和缺点是什么,设计的瓶颈是什么。在训练的时候,刚开始可能都是从抄答案开始,但是在抄答案之后,自己整理整理大体框架,想一想为什么要这么做,具体的工程优化怎么实现,常见的格式是怎样的。有条件可以看一看工业代码,多问自己一个为什么,相信能够很快得到提高。

当然,对于NG来说,系统设计即使考察也不会太过于深入,有时候可能只是考察一下分布式系统的简单应用,按照其他的帖子按部就班准备即可,优先级我认为应该是刷题>=OOD>系统设计。

C. BQ和面试准备

转专业选手在BQ上不会吃太大的亏,反而“为什么转码”是可预测的必考题。好好准备自己的例子,特别是和项目相关的例子,在面试前多研究面试的公司,展现出自己的素质和对公司的兴趣就好。地里有很多非常好的文章,indeed上也有一些介绍BQ准备的视频,对我帮助很大。

除了回答BQ题之外,做题的时候同样需要沟通技巧,而且做题时的沟通是可以刻意训练的。拿到题目之后和面试官沟通,把输入输出,constraints聊清楚了再说解法。介绍解法的时候可以画图、写步骤来帮助自己解释,写代码的时候看着自己写的提纲思路也更加清晰。如果有刷题小组的话,互相mock互相讲题应该可以很快提高。我茕茕孑立只能买了一块白板自己给自己说。除此以外,沟通不仅仅是你单向的输出,还有能够接收面试官提供的信息,形成有效的双向交流。沟通这一点应该是我的优势,所以我没有花太多的时间准备,也没有更多更好的建议分享。

面试中的自信的气场尤其重要。对于不熟悉的领域和问题,加上面试高压的环境,很容易自我怀疑,语气中让人察觉到不自信。面试前保证每天都做几道题保持手感,刻意练习去掉说话中不必要的语气助词,可以有所改观。但是自信有时是和性格相关,不自信也不意味着拿不到offer,所以不用过于强求。

最后,在面试中保持有礼貌、谦逊、态度积极,遇到问题积极沟通,展现对技术的热情,不要因为对某地区面试官的stereotype而影响自己的发挥,相信自己能发挥出正常的水平。

3. 对于转码的一些建议

转码选手在我看来最难过的就是简历关了。转码 + PhD + NG + 男 + 需要sponsor这五个放在一起,估计HR看着直摇头(也可能HR根本就没看到)。疫情期间,CS本专业都很难找到工作,转码更是难上加难。绝大多数new grad的job post上其实明确写着要本科或者master,可能觉得PhD有点overqualified(但是我真的不在乎😭),而且中小厂应该也很少主动招PhD。

地里很多人说转码找个中小厂上岸,但是根本没有中小厂理我。反而给我机会的基本上都是大厂。对于大厂的opening,一定要好好把握机会,找人refer,联系HR或者HM,尽量能拿到面试。

转码的每一个面试机会都弥足珍贵,一定要好好把握,对自己能够掌握的部分(简历、项目、刷题、design,BQ)争取准备到极致,如果时间来不及的话,先把每一项都做到80分,不能有跛脚的部分。

早作打算永远不会错。在我最焦虑的时候我常常后悔不已,我如果能找个实习就好了,我如果不贪玩秋招开始找就好了,我如果有时间能多刷几道题就好了。但是世上没有后悔药,如果你决定了要转码,就早点行动起来吧。

不要自怨自艾。转专业选手的常态是投了很多简历,大多数可能都石沉大海。有的时候来了一个OA或者电面,以为自己做的很好,以为自己抓住了上岸的稻草,但结果还是挂了,心态很容易搞崩。但是面试运气成分很大,被淘汰了可能因为hc取消了,竞争者太强了,种种原因都有可能。机会错过了很可惜,但是及时调整心态move on更重要。

最后,感谢大家能耐着性子看到这里,楼主很多年不写中文了,表达不清的地方请多包涵。也希望所有人都能收获自己满意的offer!楼主码字不易,求一波米,谢谢!!
  • 237
29条回复