硅谷Python工程师面试指南:数据结构、算法与系统设计
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 现场面试

现场面试一般在面试公司的办公室进行。如果你不在本地,很多硅谷公司都会为你支付机票和酒店客房的费用。

现场面试通常由2~6人组成,在小型会议室中进行。每次面试大约需要一个小时,首先进行自我介绍,然后进入技术面试环节,最后让你提问题。

现场技术面试和电话面试之间的主要区别在于:你将在白板上进行编程。

在白板上写代码,不像在电脑上写代码,没有自动完成功能,没有调试工具,没有删除功能,没有复制功能等。在现场面试之前,需要不断练习在白板上写代码。在白板上写代码的技巧如下:

❑从白板的左上角开始,这给你最大的空间编写代码,因为你将需要比你想象中更多的空间。

❑在编写代码时,请在每行之间留空行,使以后添加内容变得更加容易。

❑花几秒的时间来决定你的变量名。这看起来似乎是在浪费时间,但是使用更具描述性的变量名,最终可以节省时间,因为这将使你在编写其余代码时不会感到困惑。

现场面试这一天可能会花费很长时间,最好保持开放状态,不要在下午或晚上制订其他计划。

当一切顺利时,你可以通过与CEO或其他董事聊天来结束面试。他们可能会邀请你下班后一起喝酒。

综上所述,漫长的现场面试可能安排如下:

❑上午10点至中午12点:两场背对背的技术面试,每场约一个小时;

❑中午12点至下午1点:一个或几个工程师将带你去吃午餐;

❑下午1点至下午4点:三场背对背的技术面试,每场约一个小时;

❑下午4点至下午5点:与CEO或其他董事面谈;

❑下午5点至晚上8点:与公司同事一起享用饮料和晚餐。

目前很多公司增加了企业文化面试,用来评价应聘人员是否符合公司的企业文化。

如果他们在几次面试后就让你离开了,那通常表明他们对你不感兴趣。

在白板面试的过程中,当然最核心的就是编程面试,这里涉及大量的数据结构和算法设计,还有系统设计问题等。为了更好地回答这些问题,需要大量的时间准备,因此本书的其他章节挑选了一些大公司比较经典的面试题目,来讲解面试过程中会遇到的技术问题,以期抛砖引玉,读者还需要去一些编程网站(比如www.leetcode.com),进行大量的反复练习,才能掌握面试的核心,以不变应万变。

下面介绍一些面试策略和技巧。

1.3.1 准备好闲谈素材

在深入考查代码能力之前,大多数面试官都喜欢聊一聊候选人的背景,可能涉及如下话题。

❑关于编程的认知。你是否考虑如何编写良好的代码?

❑领导力。你的工作是如何完成的?你是否会关注一些貌似“没有必要”的问题?

❑沟通能力。你与别人讨论技术问题的过程中是否会发生无法沟通的情况?

在谈论这类话题时,你应该提前准备至少一个有说服力的案例或者故事,举例如下。

❑你所解决的一个有趣的技术问题。

❑你克服的人际冲突的例子。

❑体现你领导力的例子。

❑关于你在过去的项目中做了些什么的故事。

❑有关公司产品/业务的思考。

❑有关公司的工程策略(如测试、敏捷等)的问题。

1.3.2 保持积极沟通

不管是实际工作中还是在面试场合,一旦你在编程上遇到困难,沟通就是解决问题的关键。在面试过程中,能够清晰地沟通自己需求的候选人,可能比那些盲目埋头于问题的候选人更好。

技术面试的沟通一般分为两种情况:编程和技术提问。编程时,面试官希望看到干净、有效的代码。技术提问时,面试官会引导你谈论一些问题,通常与高级系统设计(比如“你将如何构建像Twitter一样的应用?”)或比较琐碎的技术细节(比如“Java语言中的static是什么?”)有关。有时,琐碎的技术问题来自真实的开发场景,例如“如何快速对整数列表进行排序?现在假设我们拥有的整数……”。

在沟通时,除了技术实力,还有一些技巧可以使用。下面分享几个能有效增强沟通效果的小技巧。

❑表现得像在自己团队中一样。面试官总是想知道与你一起解决问题的感觉,因此你应该注意表现出你是懂得协作的。首先,表达时可以使用“我们”而不是“我”。例如:“如果进行广度优先搜索,我们将在On)的时间内得到答案。”其次,如果可以选择在纸上或者白板上编程,建议你选择白板,这样你可以面对面试官进行展示。

❑大胆思考。如果你遇到困难,可以大胆地说出你的想法,比如提出可能有效的方法,说出你认为可行的部分以及无效部分的原因,例如:“我们可以尝试以这种方式进行操作,虽然尚不确定它是否会起作用。”

❑对于确实不知道的事情,勇敢地说不知道。如果你遇到一个事实性问题(例如特定语言的细节、程序运行时的某个问题等),不要试图对你不了解的知识不懂装懂。你可以说“我不确定,但是我猜……因为……”。这样你可以通过列举一些思路、排除一些无效方案,或者用其他语言或相似场景的问题进行对比,来展示你的思考能力。

❑放慢节奏。在面试官提问时,不要立刻自信地脱口而出。即使你心中的答案是正确的,你也需要清晰地解释它。回答速度过快不会让你赢得任何东西,反而有可能让你在没听完问题就打断面试官,或者因为思考得不够全面而给出不够优秀甚至错误的答案。