谈谈大型科技公司喜闻乐见的几种面试形式

avatar 135483
michaelzju
13660
21
楼主有一个朋友小麥最近拿了两个FLAG的offer。楼主一直对科技行业也很感兴趣,所以就采访了这位朋友——小麥,和ta探讨了大型科技公司喜闻乐见的技术面试形式。本文中的问题有两个来源:一个是楼主自己希望在面试准备过程中知道的;另一个是小麥在拿到offer之后被朋友问到的。

1. Overview 概览
楼主:你可以简单介绍一下大型科技公司的面试流程么?
小麥:大型科技公司的面试一般分为以下三个部分:OA (Online Assessment, 在线测试)、Phone Interview电话面试和On-site Interview (上门面试)。有像脸和狗的电话一般有一、两轮,on-site通常会有四到五场。

1.1 Knowledge 面试知识点
楼主:那每轮面试主要考察面试者的什么资质与知识点呢?
小麥:技术面试主要考察与算法 (Algorithm)和数据结构 (Data Structure)相关的technical questions (技术问题),也可能会涉及简历中提到的其他技术知识。下面是常见的面试知识点。
Preview


1.2 Timeline 时间线
楼主:从recruiter联系你开始,到最终拿到offer一共需要花费多久的时间呢?
小麥:时间可长可短。快的话,从recruiter联系你到拿到offer只需要6到8周。慢的话,我听说过最长的,一个人为了每轮能有充分的时间准备,一共拖了6个月。大型科技公司entry-level的岗位大多是General Hire,是在确定发offer时甚至入职之后再做team match选组,所以他们一般都不急、不会催你。

1.3 Programming Language 编程语言
楼主:那面试是用哪种编程语言呢?面试官有对编程语言的偏好么?
小麥:被面试者可以选择自己擅长的编程语言,C++,Java,或者Python都可以。因为,面试看重的是你解决问题的思路,所以用什么语言并不重要。只要不滥用语言内置的函数就可以啦。比如,让你求一个数组里的第k大的元素,你不能直接调用一个返回第k大元素的内置函数。

2. OA 在线测试
楼主:可以简单介绍下OA的形式么?
小麥:OA顾名思义就是online assessment,国语是在线测试。通常情况下,你会通过电子邮件收到一个网页链接,网页链接上会有题目。在打开链接看到题目后,你需要在规定的时间(取决于题目数量,时间限制通常从半小时到两小时)内完成题目。

2.1 Due Date 截止日期
楼主:那么你在收到OA之后的什么时间做都可以么?比如一周或者一个月都可以么?
小麥:有的OA会有deadline,比如要求你在三天内的任意两个小时内完成。有的OA只是告诉你越早完成越好,就像申请学校时的rolling admission。

2.2 Question Format 题目形式
楼主:那么OA的题目是什么类型的呢?是像Leetcode上一样的算法题吗?
小麥:Leetcode形式的算法题是最普遍的一种OA形式。除此之外,另一种是多项选择(Multiple Choice),这适合用来考察基础知识与算法的时间与空间复杂度。

楼主:在做Leetcode的时候,我通常会提交很多次才能AC,我甚至还会看没有通过的test case来debug。那么OA中的算法题,我可以提交很多次直到通过么?如果没有通过,我会看到没有通过的test case么?
小麥: OA中的算法题,通常允许你提交很多次。但是,OA不会告诉你没有通过的test case具体是什么;有的甚至不会告诉你是否通过所有test case,你只能自己尽可能的完善自己的算法。所以,在平时做Leetcode的过程中,最好能自己想到各种edge case,而不是依靠Online Judge来debug。下面是一个常见的OA界面。
Preview

小麥:以上介绍的是码农的OA。有些Data Scientist的岗位也会发OA。Data Scientist的OA和码农的OA非常不同,Data Scientist的OA比较开放,会给你数据集,让你自己研制出合适的算法来做预测。通过预测的准确度来评价(evaluate)你的solution。

2.3 How many OAs have you done?
楼主:那么面试一个岗位会有OA呢?
小麥:一个岗位通常只有一个OA。如果你申请同一个公司的不同岗位,不同岗位可能会有不同的OA。

楼主:那么在这次找工作过程中,你一共做了多少个OA呢?
小麥:在这次找工作的过程中,我一共做了10家公司的14个OA,因为有相同的公司给我发了多个不同岗位的OA。其中很多OA是系统自动群发的。只要你申请,他们就会给你发OA(比如,我曾在申请之后15分钟内立刻收到了OA);即使OA里的题目你都做对了,他们也不一定会给你发面试。听说若干年前,LinkedIn的OA的链接直接就在job description里。

3. Phone Interview 电话面试
楼主:那电话面试是如何进行呢?难道是你在电话里给对方一行一行地念你写的code么?
Preview

小麥:在电话面试中,你会被要求在一个网页形式的打字版上写代码。面试官可以实时看到你写的代码。面试官也会借助这个网页,在上面打字来给你描述题目。常见的网站有HackerRank。

楼主:你说这是一个写字板。那我可以在网页上运行我的代码来测试运行结果么?
小麥:网站有可能可以运行代码;网站也有可能不能运行代码(execution disabled),这样你就不能借助IDE而只能人工debug啦。
Preview


小麥:网站有可能可以根据你的语言显示代码语法提示与格式(formatting);网站也可能不显示语法提示与格式,这样你就像是直接在一个Word里写代码。你感受到了么?
Preview

楼主:嗯,明白啦。原来这也是写code的一种方式呢。

3.1 Bug Free并不意味着没有Compilation Error
楼主:很多人还会在面试中提到bug-free这个要求?bug-free是指代码没有bug能一次性过么?
小麥:的确,很多人喜欢提bug-free这个概念。我不认为bug-free是指代码能一次性过。事实上,即使你的代码不能compile也没有关系;比如,变量名中有一个typo,这都是很正常的。但是,如果你有edge case没有考虑到的话(比如没有考虑到除法除数为0的情况),你会显得非常不熟练。

楼主:你一共面试了多少个电话面试呢?
小麥:Zoom,Facebook,Google,Bloomberg。

4. On-Site 现场面试
楼主:On-site整体上是怎么样的一个形式呢?会持续多长时间?
小麥:On-site一般需要一天的时间,从上午持续到下午。如果你要进行on-site,恭喜!请做好准备请一天的假去on-site。
Preview

小麥:On-site一般有四到五场面试,每场45分钟左右。每场一般有一个主面试官,有时候会有另外一个面试官做shadow (影子面试)。每场考察的重点也是算法和数据结构,会做一、两道算法题,也可能会穿插一些behavior questions,看看你的价值观与公司是不是契合。这都和电话面试一样。中午则会有个小姐姐或者小哥哥带你在公司的食堂吃饭,中午吃饭不计入考评范围;所以你可以在中午和小姐姐/哥哥吃饭的时候问任何你想问的问题。

4.1 White-boarding 白版编程
楼主:那on-site会提供电脑给你现场写code解算法题么?还是需要你自己带电脑呢?
小麥:大型科技公司的公司的on-site一般要求在白板上写代码,也就是所谓的white-boarding。也就是说,你需要拿着马克笔在白板上写代码,就像老师上课一样,可有意思啦。

楼主:我相信大部分人在平时都是在电脑上写code的,而不是在白板上写码。对于需要white-boarding的被面试者,你有什么建议么?
小麥:的确,白板写码和在电脑上写还是非常不一样。
在白板上,你当然不能compile & run test cases来debug。
此外,白板写码在物理上也会让人不适应。比如,在白板上写字的速度慢于在电脑上打字的速度。你不能把一段code剪切一下,然后粘贴到另外一个地方。你也不能直接在两行之间直接插入一行。
我强烈建议被面试者进行白板编程的实战演练:找几道不是那么复杂的题,自己在白板上写一写,体验下是什么感觉。即使没有白板,也墙裂建议面试者在白纸上写代码来训练white-boarding的能力。
Preview

小麥:最后补充一点,我面的Bloomberg的on-site是,Bloomberg在现场提供了电脑,我直接在电脑上进行编程的。就和Bloomberg之前的phone interview一样,在一个网页上写代码,还能compile & run test cases。但Bloomberg不是大型科技公司[手动滑稽]。

4.2 Location, Location, Location 面试地点
楼主:那on-site一般会哪个office进行呢?比如我想去加州的office,人却在纽约,我一定要飞去加州面试么?
小麥:大型科技公司在世界各地都有office,在不同的office面试不应该影响对被面试者的评价。大多数情况下,你有权利选择你的面试地点:如果你想来一趟公费旅游,你可以飞去加州;如果你不想旅途劳顿,你可以就在纽约面啦。听说亚麻还可以用视频会议进行virtual on-site。

5. Methodology 一剑破万法
Preview

轩辕一剑,一剑天涯,一暂层名,名扬天下。。。

5.1 Mock Interview模拟面试
楼主:你有找人mock interview么?
小麥:我没有找人mock interview。但是,我会天天逛论坛,参加Leetcode Weekly Contest。每当我遇到一道新题,我不仅会想用什么算法解出这道题,我还会设想面试官会从哪些方面challenge我的算法,又会有哪些follow-up questions。
Preview


5.2 Follow-up Questions常见的附加题型
楼主:那么有哪些常见的follow-up呢?
小麥:常见的follow-up有以下几类。
第一类,优化时间和/或空间复杂度。将space complexity从O(n)优化为O(1),常见的方式为利用input和/或output的space;比如,直接把中间运算的结果存在output的vector里,这样就不需要开辟额外的space存储中间的运算结果;又比如,直接修改input的vector。不改变O()意义上的时间复杂度,但在常数意义上优化时间复杂度,比如把O(3*n)优化为O(n)。
第二类,要求return不同的结果。比如,之前是要求返回符合条件的字符串的个数,现在要求返回所有符合要求的字符串。
第三类,input特别大。如果input是一个数组,数组的长度特别大怎么办。
第四类,改变input的类型。比如,如果input不是一个数组,而是data stream,依次给你数组的第一个、第二个、第三个元素、以此类推,你怎么改变你的算法。又比如,input不是integer,而是一个vector,vector里的每一个元素,表示integer的一个digit,这样这个integer可能会特别大。
第五类,要求不能改变input(input immutable)。常见的应对思路是:不能改变input,就改变output。比如Leetcode 289. Game of Life。

5.3 Study Makes Me Happy自学成材

楼主:你觉得你刷过的这些算法题对你的实际工作有帮助么?
小麥:这是一个老生常谈的问题啦。了解基本的数据结构,比如vector和list的区别,对写码当然是非常必要的。至于一些复杂的算法,面试官考察的并不是依据你最终有没有做出这道题评价你;而是考察你在遇到一个新的问题时如何解决,你的思路是否合理、有逻辑。有人秒解会被拒,有人一行代码没写(但是和面试官交流了很多思路)也能通过。
  • 365
置顶回复
收起
avatar 339876
adh360
这个太厉害了,特别是 followup 部分!

加分+收藏

CodePair 部分可以补充一句有的公司让自己写 main 函数来测试,虽然很简单,但当初我第一次面试写惯 LeetCode 那样的被这么一问突然慌了,出了好几个 compilation 问题
大米 4
2
gummycorn+1赞一个
michaelzju+3赞赞赞!
21条回复