Medium 好读版:https://reurl.cc/AkDRvp
一、前言
求职阶段,我参考了很多ptt上面的心得文,觉得受益良多,因此希望能回馈各位版友,
让大家求职时能更好地准备。
以我的经验来说,准备求职的时间相当长(今年2月~6月),也感觉疫情期间求职是比较困
难的,一路上跌跌撞撞,也有压力山大的时候,幸运地在朋友的鼓励和帮助下,最后才坚
持下来,找到一份理想的工作。
希望还在求职的大家别气馁,努力坚持下去,好工作就是你们的。
另外,这是我第一次在软工版发文,请各位大大们鞭小力一点,以下正文开始XD
二、个人背景
112学硕,大学辅CS,硕班做机器学习,研究兴趣是NLP和推荐系统。过去没有软件公司的
实习经验,也没有太多竞赛相关经验,履历只放硕论和课程期末专题。
因为一些个人因素,直到今年1月底才毕业。之后我花大概一个多月的时间,好好地休息
和放假,思考我未来要做什么,同时整理过去的专案和履历内容。
3月时主要在刷题,并根据目标职缺来复习对应的学科。4、5月开始投履历,面试阶段时
,Leetcode累积刷150~230题,以medium为主。
三、正文
1. Synology
应征职缺:Product Developer
请朋友内推,面试的部门由HR分配,是我第一家面试的公司,skype线上面试。
第一关是工程师,主要是聊聊履历内容,问题会很细节,需要对履历内容足够熟悉才行。
例如我有做一个SQL的专案,就被问当时怎么设计schema、为什么这样设计、有没有想过
当资料量大时哪里会有效能问题、那你会怎么解决。
另外,也问了一些OS的经典题目,例如process和thread是什么、inter-process
communication等。最后,考了一题实作linked list的程式题。
因为我刷题都用python练习,被问到C++很细节的问题,因为不熟直接GG。整体准备不够
充分,在面完第一位工程师以后,直接被HR通知面试结束,等待下一步寄信通知。
# 结果:一周后收到感谢函
2. 玩美移动
应征职缺:Machine Learning Engineer
透过104主动找我面试的公司,进公司先做python测验、性向测验和英文测验,测验通关
后跟主管面谈。
面试前需要先填个人资料表,包含个人照片、身分证号、户籍地址、家里电话、父母是谁
几岁做什么等。我觉得有点侵犯个人隐私,所以有些内容没填,主管好像不会很在意有留
白,给大家参考。
Python测验为20题左右的选择题,考题颇有鉴别力,包含python语法 (e.g. map,
filter)、numpy语法 (e.g. broadcast, shape, newaxis)和机器学习(e.g. CNN,
pooling, batch normalization, gradient descent)。
性向测验和英文测验时间都很短,建议一开始就用最快的速度写完。
面谈时,主管先介绍公司产品和商业模式,之后问我影像处理相关的经验和细节,最后考
一题情境题,问要怎么做微表情的情绪分类,可能可以从资料收集、标注、前处理、模型
设计等多方面开始考量。
# 结果:无声卡
3. MixerBox
应征职缺:Engineer Trainee Program
寄email投递履历,隔天就收到HackerRank线上测验邀请,三题难度在easy到medium之间
。测验完成后隔周,收到skype线上面试邀请,整体面试流程约1个半月,因为被告知考题
需要保密,以下只提及准备方向。
======
一面技术测验:(总时长2小时~2.5小时)
与一位工程师面试1.5小时,不用自我介绍,直接开始考技术,使用HackerRank的共编。
总共考了两个大题,每大题含基本题+2题follow up,难度大概是medium,考题方向是
array和graph(bfs, dfs)。
技术问答结束后,30分钟听HR介绍公司和团队,我这边分享一些内容,让大家能更认识
MixerBox。
公司的商业模式主要仰赖投放广告和APP内购物,广告大多在日本和美国投放,台湾因为
市场小广告利润不多,所以没有放广告,常做为算法A/B test的地区。
公司有主要的三个team,MixerBox、FreeTV和研发导向的lab,当lab里面有比较成熟的项
目就会转成一个新的team。而MixerBox最近发展方向是推广podcast,内容需要去各个网
站爬虫抓。
另外,为了提高营运利润,公司近期也投入游戏开发,目前正积极招募Unity工程师。
======
二面技术测验:(总时长2小时)
与两位工程师面试,每位工程师有一小时,各自考两题程式题,难度大概是medium到hard
,考题方向包含matrix(bfs)、monotonic stack、monotonic queue、3sum变形、
intervals、balanced tree等。
整体难度颇高,我大多是跟面试官讨论后,得到提示才慢慢解出来,面试官人也很好,会
提点思考方向是不是对的。
最后,可能是技术关解题实力不够,原本是投backend工程师,后来被通知改面Unity工程
师,问有没有兴趣继续。
=====
三面团队成员:(总时长1小时)
与人资和工程师主管聊天,这关可能是最难的,会问一些难以回答的问题。
例如问你全世界最喜欢哪三间软件公司?为什么?那如果都拿到offer会怎么选择?比较
注重公司名气、职缺内容或薪水?职缺内容透过面试了解可能还是很抽象,这样会怎么抉
择?
平常怎么自主学习?(问有没有用刷题网站练习的习惯) 有没有比较不擅长的领域?比较
喜欢做大project或小project?在团队中喜欢听指令或是担任领导者?
最后分享一些Unity团队的资讯,日常专案的人员组成是一位工程师和一位行销人员,开
发一项小游戏。如果有开发不错的项目,打算加速这款游戏的开发,才会多让几位工程师
共同开发。
尽管没能拿到offer,我觉得是新鲜人友善的公司,面试要求只看资料结构和算法,刷
题数可能要200 up比较稳。面试流程也相当舒适,面试前会提点准备方向,该怎么聊履历
上的个人经历,才符合公司文化,面试后大约一周就能知道结果,推荐有兴趣的人去试试
看。
# 结果:一周后收到感谢函
4. 趋势科技
应征职缺:Software Developer、Software Engineer in Test
透过104投递履历,隔周后收到Codility线上测验邀请,三题难度在easy和medium之间。
之后安排到公司面试,由HR自动配对能面试的职缺。
进公司以后,我先做QA职缺的Codility测验,我猜这份考题是针对Senior缺,范围包含
Windows、Android和IOS的debug工具、浏览器、网页前后端,以及三题系统设计简答题。
考完的感觉,我是谁?我在哪?你们484找错人了?
接下来,迎来两轮小组面谈。
第一轮是面试QA,请我聊聊过去的经历,并问了一题情境题,请问要如何测试一个log in
的网页?另外也问我对QA的角色和想像是什么,觉得QA都在做些什么事情?
第二轮面试有两个团队,也是先请我介绍过去的经历,并问了一些OS相关问题。包含解释
race condition和deadlock、怎么去实作critical section、mutex和semaphore的差异、
process和thread的差异、inter process communication有碰过哪些等。
有一题比较印象深刻,如果程式码的行数到10000行以上,要如何debug?
整体而言,我觉得面试官们知道新鲜人的实力不怎样,主要还是看对工作的热忱和态度。
最后,人资会询问你对各组的排序。
# 结果:两周后主动寄信follow up,收到感谢函
5. Appier
应征职缺:Machine Learning Scientist
请朋友帮忙内推,1周后收到线上面试邀请。
一面,与两位工程师聊天,总时长1个半小时,考题分三个部分。
第一部分是简单机器学习概念,例如overfit、imbalance data、time series data等。
第二部分是情境题,未来工作会遇到的机器学习问题,但因为我的研究背景跟题目不太搭
,回答得没有很好,后来变成介绍自己硕论的内容。
第三部分是算法题,考一题难度meidum的DP。
面试当下,我有问面试官自己的表现如何,有得到正面的回馈,但后来就没后续了。XD
# 结果:无声卡
6. Taiwan AILabs
应征职缺:Machine Learning Scientist
透过LinkedIn投递履历,2天内收到HR电话,提及未来可能会做机器翻译相关的工作,并
跟我确认面试日期。
三个小时的线上面试,前两关考机器学习,最后一关考算法。
第一位是speech team的ML工程师,先跟我聊聊硕论题目,后来主要在讨论文字处理的经
验。
第二位是news team的ML工程师,大多是技术问答,包含硕论用到的技术、如何选择
metric、专案用过的模型等,题型相当活,面试官想到什么问什么的感觉。
此外,也有考情境题,例如要在ptt八卦版中蒐集特定人物的相关文章,会怎么开始?有
没有办法找出带风向的网军们?面试官理解力好反应也快,跟他讨论相当有趣XD
第三位是系统工程师,问有没有开发程式、使用过docker或k8s的经验、知不知道SQL和
NoSQL的差异等,最后考两题leetcode,与matrix相关,难度medium。
个人感觉面试表现还行,可能过去经历和工作内容不太吻合,所以没能拿到工作机会。
# 结果:两周后主动寄信follow up,HR回需要更多时间来决定,隔周收到感谢函
7. AICS
应征职缺:Software Engineer - Big Data
透过官网投递履历,被HR要求补寄在校成绩单,1周后收到Codiity线上测验邀请,难度
easy到medium。测验完3周后,收到Microsoft Teams线上面试邀请,面试流程大约1个月
。
=====
一面 TS:(总时长1小时)
与工程师主管聊天,考两题程式,难度easy和medium,基本上主管都会主动与我互动并给
予提示,让我慢慢想出哪里可以继续优化,感觉得到他的友善和良好的沟通能力。
=====
二面 TS:(总时长1小时)
与工程师主管聊天,考一题程式,难度medium。这次面试官主要放着我自己慢慢想,幸好
我最后有提出解法,他也有询问我可以再怎么优化。
=====
三面 Full Loop:(总时长5小时,含中午休息1小时)
总共有四轮,每一轮有一位面试官,大多是前半小时聊天,后半小时考一题程式和Q&A。
第一轮,面试官是ML背景,请我自我介绍,聊过去经历的专案,大多担任什么角色,最骄
傲的专案是什么等。程式题考matrix,难度medium。
第二轮,面试官是系统背景,同样是聊过去经历的专案,会问一些系统面的设计问题。另
外还问我,如果要设计一个系统,里面有很多consumer和provider,要怎么设计比较高效
率?还有问在小组合作时,有没有遇到摩擦或冲突的经验,会怎么处理?程式题难度
medium偏easy。
第三轮,面试官应该是ML背景,问我硕论的创新点是什么,有什么样的应用价值,能否举
例说明。问我自己的强项和弱点,也问我过去失败的经验,学到了什么。程式题考DP,难
度medium。
第四轮,原本安排是HR面试,结果看到面试官才发现,竟然是黄泰一博士。简单聊聊天以
后,说要看看我写程式如何,如果题目有看过就要换一题,总共考了一题medium和一题
hard。
最后很可惜只留1分钟问问题时间,但黄博士也跟我说,如果有拿到offer,愿意再安排30
分钟陪我聊聊。
=====
加面:(共3次,与未来主管聊1小时、与HR聊30分钟+30分钟)
三面结束后,经过大概2个工作天,我就收到专案主管的聊天邀请,过程中拿到口头offer
,因此主要在聊专案目前的进度,以及之后的工作内容。
另外还有两次HR面谈,第一次主要聊聊个人特质、职涯规划、期待薪资和询问竞争对手公
司,第二次是讲解薪资福利等。
# 结果:offer get
8. Yahoo
应征职缺:Software Engineer
透过官网投递履历,请朋友帮忙内推,大概1个月后收到线上面试邀请,面试流程约2周。
=====
一面 HM Phone Screen:(总时长1小时)
与未来主管面试,听主管讲解团队在做什么,主要就是聊聊工作内容,看看我有没有兴趣
。最后,考了两题难度easy的程式题,感觉只是看你会不会写程式。XD
=====
二面 TA Phone Screen:(总时长45分钟)
与HR面谈,第一阶段先确认我对职缺的认知是否正确,第二阶段请我自我介绍,并针对我
的履历来问Behavior Questions,第三阶段问我对第一份工作的期待、如何选择、以及期
望薪资。
值得一提的是,因为近期Yahoo被Apollo收购,所以我特地问问内部员工对这件事的想法
。接收到的资讯是,员工大多正面看待此事,组织由上到下采取AMA (Ask Me Anything)
,让主管公开透明传达资讯以消除员工焦虑感。
=====
三面 Panel Interview:(总时长3小时)
和未来的团队成员聊天,总共四个人,两位工程主管和两位工程师。
据说会根据履历内容调整问题,我遇到的情况是,先考了两题难度medium的Leetcode,在
top interview清单都能找到,也有开放式的follow up问题。
再来,两题系统设计题。
第一题是给一段程式码,问觉得哪里有问题,会怎么修改程式设计。我先解决简单的bug
以后,还针对未来有可能变动的程式码,设计要如何refactor,并解释有用到的design
pattern。
第二题是设计一个选课系统,把整体的系统架构和流程列出来,还有会使用到的工具,资
料字段怎么设计等。
三面结束后的隔周,接到HR电话拿到口头offer,并告知需要等待总部批准正式offer,还
需要约2~3周的时间。
# 结果:offer get
9. Kronos
应征职缺:Quantitative Analyst
透过官网投递职缺,需要附大学成绩单,3天后收到Codility线上测验邀请,限定用C++或
Python,测验完隔天收到线上面试邀请,面试流程2周。
=====
一面:(总时长2小时)
总共有两轮,每一轮有两位面试官。
第一轮是统计关,同样先聊聊过去的经历,面试官会问跟交易相关的经验,像我自己比较
没接触这方面,所以我改为分享过去处理时间序列资料的经验。
考题包含线性回归模型的推导、怎么算股票与大盘走势的相关性、掷硬币的机率问题等。
第二轮是程式关,考deque的实作,因为我用python作答,还另外考一些decorator的问题
。
两轮的面试官们都相当健谈,很乐意与我分享工作日常。另外透过面谈我才了解,因为公
司做高频交易,所以深度学习都不会碰到,机器学习感觉也偏少,主要用统计模型为主。
=====
二面:(总时长3小时)
第一轮,与CEO的面试是全英文,先听完他自我介绍以后,他问我对Kronos感兴趣的理由
,还考线性回归模型的问题。
印象深刻的是,当我问他是什么驱使你做这份工作,他说交易就像玩西洋棋,每天都跟世
界各地最聪明的人们竞赛,享受玩游戏的过程就是热情的来源。
另一方面,感觉得到他很致力于营造团队气氛,他说比起只看交易绩效,更希望让公司的
大家喜欢上交易这项工作,并且透过交易和研究更了解市场。
第二轮,与CTO的面试是中文,他问我与交易相关的经历,还考了两个题目,分别与数字
、机率有关。
我感觉他是个很聪明的人,总能从不同的观点切入,谈论数位货币的时事,聊天过程颇受
启发。
第三轮,与HR聊聊可能进去哪个team,有拿到哪些offer,如何计算绩效奖金等。
二面结束后,经过3个工作天收到offer letter。
# 结果:offer get
四、结语
大家看完后可能会觉得,我投递的职缺真的是五花八门(?),包含软件开发、网页后端、
机器学习、量化交易的工作。其实,我是打算透过面试过程,渐渐发掘自己未来理想的工
作型态。
然而,我也花了更多的时间在准备。除了每天刷题维持手感以外,还复习了各式各样的学
科,包含资料结构、算法、作业系统、SQL、Design pattern、机器学习、机率统计。
事后回想起来,我觉得刷题和复习知识只能算是基本功,透过持续的练习面试,让自己有
更稳定的面试表现,才是决定能不能拿到offer的关键因素。
另外,如果能有明确的目标公司和职缺,集中精力准备少数公司,也是更有效率的做法。
最后,祝大家未来求职顺利,疫情期间身体健康,谢谢。