之前在板上潜水已久,去年有幸拿到几个offer,现在来回馈一下找工作的心得。
[背景]
学历:112学士、CMU硕士,皆非CS本科系
实习:因为疫情回台实习,只有台湾外商经验
工作:约一年的后端经验
[前言 aka很长的murmur,完全无重点可略过]
在CMU这间出了名的作业大学,还贪心选了好几门硬课,不意外一开学就被课业轰炸
每天熬夜到四五点还写不完,一周七天都在无止尽的死线摧残下苟活
导致完全无法抽空改履历,更别说投职缺了
开学一个多月了,我却一题都没刷,后来是听到室友已经要面试了
才下定决心海投一波,那时已经是九月最后几天了,我才丢出第一封履历
比起其他暑假就开始投的人我真的是慢了很多
我是五月才毕业,所以似乎也没有到非常紧急,毕竟还有春招
但我还是抱着破釜沉舟的心,一股脑申请下去了
只能说希望看到这篇文的人有空好好准备
不要像我一样,完全 没有 准备...像个靶子被...射死
我好像是赶鸭子上架般地找工作,其实后来反省了一下应该要选轻松而且少一点课
或干脆就下学期再找就好,54学分而且几乎都CS的课,真的太多了...
(CMU学分制有点怪,大约要除以3才是其他学校的学分)
整个学期都过得很痛苦,OA常常是到死线最后一天的凌晨两三点才在做
因为白天有课、晚上有作业deadline、反而凌晨才是最能自由运用的时间
但其实那个时间都在用精神力硬撑,可能也大幅影响表现,所以感觉OA都发挥很差
不过这样找下来也发现海投还是有一定的机会被看到,差不多每八间会收到一次OA
找工作这两三个月真的是跌跌撞撞,中间一度有状态很差的时期
OA怎么写怎么炸,大概有一个月的时间每个OA都写爆
最惨的是有次本来感觉时间不够只好写brute force解,结果两个test case没过
后来开始拼binray search解,但最后来不及要换回本来答案的时候
不知道哪里出了问题,一直无法compile导致那题直接全爆 = =
总之就是各种不顺,平常写得出来但当下就会当机,觉得自己变好笨
那个月唯一没有炸掉的OA是一间FAANG,最后也有进到onsite
其他好几个重要的OA,包含少数请人内推的公司也都这样浪费掉了
除了做题状态差,学校事情太多也是搞得生活一团糟,连约面试时间都可以一直雷自己
期中考和期末考各分别撞到一间onsite,一天内面试4-5小时再去考试2-3小时
能活着真的是奇蹟...
打到这边突然觉得又回忆起上学期的感觉
当时真的是有够郁闷、负能量满满XD
[履历]
履历的准备倒是没花太多时间,拿去年找实习的版本更新资讯
大致上就学历、skills、工作经验、projects
给学校的career advisor看过她觉得很不错,就直接一路投下去了
不过后来发现她好像对大家都说很不错...XD
[刷题]
过去自学资料结构加上找实习刷了200题,
过一年没碰了,连基本题都忘得一干二净
主要策略是把之前刷过的题目复习好,之后两三个月陆陆续续刷了近100题新的
这些新的题目大多是针对公司的高频题
我蛮讨厌刷题,身边刚好也都是不倾向疯狂刷题的人
认识最多大概就是刷到400多去脸书,但也有只刷个100多去苹果的
或是不到100就去推特的朋友,所以并不追求500题之类的熟练度
非本科系的人光是要把基本的资料结构和算法重新复习一遍就需要一阵子
再加上时间宝贵,我是只要一卡住就直接看解法,不会跟他拼拳
当然这样会不够熟,所以就是想办法多看几遍
大部分的面试我都来不及好好准备,就是硬著头皮上了
第一间onsite的时候程度约莫100题吧
但以下的准备程度是指十二月的第三个onsite时的状况,差不多200题
资料结构方面:
linked list, hash map, stack, queue, heap, tree, graph 弄到蛮熟的
实作细节到基本变化题都有准备到
算法方面:
只有binary search, common sorting algos, DFS/BFS, greedy, backtracking
可以算是有准备
其他像是shortest path, minimum spanning tree, dynamic programming
或是各种进阶sorting(radix, bucket, etc.)我都是半放弃状态
尤其是DP要维持手感真的要持续练习,我大概放著两周就无感了
所以在没有多于时间之下只好先略过不准备这些
我花了较多精力集中在各种tree的变化题以及monotonic stack
前者是因为觉得tree的变化题比graph更tricky(至少以medium题来说啦)
所以就加强练习
后者则是因为发现对不少FANNG高频题来说是重要观念
蛮推荐大家多练习
补充一下,半放弃的意思是没写题目,这些算法都学过但忘了差不多
更别题实作细节,所以复习时都是观念浏览完,顶多做一两题就跳过
这也代表除非遇到超高频题或最基本题,不然稳死哈哈
但我的策略就是只要有复习到的部分都尽量相当扎实
如果面试真的碰到冷门题目就认了,不过基本观念稳住至少能解决大部分题型
延伸变化或许也能够靠观念推出来
虽然跳过部分题型蛮可怕的,但还是会建议时间不够的人这样做
就像GRE要果断跳过长篇阅读一样(?)
忘记在哪看了个统计,依稀记得最爱考DP的G家也只有10%机率遇到
脸书可能2-3%之类的,可是DFS出现的机率却是15%
所以面试前prioritize准备的题型挺重要的,虽然我一开始也是盲目乱刷哈哈哈
-
本来觉得好像也该提一下BQ准备,但老实说我可以算是毫无准备...
在时间不足下可能也是prioritize的一种(?)
[统计]
应征:15X(大概4-5个内推,其他就是linkedin无脑海投)
收到OA:18
拿到面试:12(其中4间因为有offer了就没面完)
进到onsite:4(两间FANNG、一间crypto unicorn、一间hedge fund)
[心得]
- 大公司(FANNG之类的)
采比较制式的coding interview
去参加过几个info session他们也明讲就是考刷题、不问履历、不考system design
所以在准备刷题时基本上就是为了这些大公司
另外个人经验是也蛮常考string processing和class design
作为使用Java刷题的人,前者有点吃亏,后者倒是不错
- 新创
上述的coding interview加上多问一些履历以及你对公司的了解和兴趣
有些会考system design,也有遇过pair programming的面试法
感觉比较偏好有些实作经验的人
举例来说,有间onsite是要现场用Dropwizard搭配JDBI实作REST API
这两个framework我都没听过,面试官是直接把初始档案传来后要我分享萤幕开始实作
如果遇到问题只能查官方文件
好险我刚好蛮熟Spring Boot也略懂JDBC,所以还算顺利写完
后来还因为提早20分钟完成,被临时加了两题
其中包含要写DDL做DB migration,个人感觉是非常实务的考题
面试当下因为挺顺利的所以无感,但后来想想这样考试压力蛮大的
毕竟完全无法准备,真的是看过去累积的经验
而且超赤裸的,像是我curl指令不到很熟,因为平常都用postman
在测试endpoint时还要查怎么打POST request、怎么带header/payload之类的XD
不过语法毕竟是小问题,如果以前没写过REST API,应该直接现场挂掉吧...
这种考法就不会出现在大公司
- Hedge fund
他们问题比较杂,并且会期待你了解CS基础知识,只会刷题应该是很难上
尤其是OS, networking, distributed systems, database systems
要准备起来算是没有范围,但我面下来的感觉是他们也没有要把你问倒
比较像是希望在讨论过程中知道你知识的深度广度
我遇到的问题除了基础知识(TCP/UDP差异)以外
大部分进阶问题都是从过去经验延伸而来
所以如果在履历上澎风在这边会被电爆
跟一个当过面试官的CMU校友聊过,他之前当过15410的大助教
履历上如果有特别标注修过OS课程,他都会聊聊相关知识
我的例子是其中有一轮被问了对学校哪门课有兴趣,我答distributed systems
接下来就是半个小时的深入了解...LOL
另外coding的部分网络上都说很难,但我自己是觉得差不多medium左右
也可能因为我不是面quant职位,就没有超难吧
[后记]
其实学期开始前我完全不知道结果会怎样,毕竟我清楚自己的准备十分不足
开学之前没有好好刷题和准备履历
所以写这篇文章也是希望鼓励未来跟我差不多处境的人,只要开始努力都不嫌晚
从第一间phone screen到最后一间onsite,其实也就短短两个月而已
但这中间发生的种种真的是不敢想像怎么度过的
学期到尾声的时候真的很怕牺牲了课业成绩、休闲娱乐、睡眠时间
要是全灭换来一场空,下学期又要重头开始,每天想到就觉得压力山大
幸好最后有了好的结果,下学期能够专心上课
不用找工作的爽感远大于有工作的爽感啊!
最后感谢帮我内推的人、一路上鼓励支持我的人、也感谢我自己。