发布于 2025-12-10 1 阅读
0

在 Google、Facebook、Foursquare、Dropbox、Fog Creek 等公司进行面试 1. Google 2. Fog Creek 3. Bloomberg 4. Dropbox 5. Twilio 6. Foursquare 7. Facebook 总结

曾在 Google、Facebook、Foursquare、Dropbox、Fog Creek 等公司面试。

1. 谷歌

2. 雾溪

3.彭博社

4. Dropbox

5. Twilio

6. Foursquare

7. Facebook

总结

结论

这篇文章最初发表于我大学三年级时的博客上。由于它与 DEV.to 的用户相关,我决定在这里重新发布。

今年我申请了几家科技公司的实习,包括 Google、Facebook、Foursquare、Dropbox、Twilio、Bloomberg 和 Fog Creek。

下面,我将描述所有这些公司的面试流程。对于潜在的申请人,本文将提供我在这些面试中收到的所有问题,这应该会成为面试准备的有用资源。对于所有编程电话面试(我没有签署保密协议),我都附上了面试时编写的实际代码。

我只能提供轶事证据,但我相信我在这些公司的面试经历可以深入了解他们的招聘理念。

这是一篇很长的文章(约 3000 字),因此请随意跳过您不感兴趣的公司。

1. 谷歌

采访次数:3

职位:软件工程师实习生

经历:我在谷歌网站上申请了职位,大约三周后收到了HR的邮件,安排了两次连续50分钟的电话面试(中间休息10分钟)。我签了保密协议,所以不会透露具体的问题。这两次面试都与我在其他公司的经历截然不同。

第一次面试,面试官打电话迟到了20分钟,50分钟的面试变成了30分钟。他问了一道涉及UTF编码的低级编程题。我第一次听到这个问题时,完全不知道该怎么回答。我对操作单个位(bit)的经验不多,所以我慢慢地、刻意地把问题重复给他听,以确保我理解了他的意思。我很快在Google上搜索了如何在C语言中使用位运算符,并在StackOverflow上找到了这个很棒的代码片段,它让这个问题变得很容易解决。我提前写了一个解决方案,面试官似乎对我的答案很满意。

(更新:为了回应一些读者在电话面试中提出的使用谷歌的道德问题,我需要澄清一点。在我完成面试中的那个 UTF 编码问题后,面试官问我校验位宏在哪里找到的(他看到我粘贴了它)。我告诉他我从 StackOverflow 上找到了它。他似乎并不关心。)

在第二次面试中,我采访了一位谷歌员工,他负责管理一个服务器集群,并参与谷歌专有服务器硬件固件的开发。面试过程中,他占了90%的发言时间,用了大部分时间来解释他的工作有多么出色。他用夸张的语言详细描述了他工作的设施,并解释了他的服务器是如何存储PB级缓存搜索数据的。他只问了我几个问题,这些问题似乎是针对电气工程师的(例如,关于如何降低硬件功耗的问题)。我凭借自己微薄的物理和电子工程知识,给出了一些模糊的回答,但他都给出了很好的回应。

电话面试结束后,我对面试的问题不太满意。我觉得这些问题没能让我展现出我的计算机科学知识。面试官没有问任何关于数据结构或算法的问题,我唯一巧妙的做法就是快速地在谷歌上搜索了其中一个问题的答案。我虽然充满希望,但对自己的胜算却不太有信心。

两次面试几周后,HR 再次联系我,令我惊讶的是,他们告诉我我进入了最后一轮。招聘人员给我发了一封邮件,解释了最后一轮的流程:

简单来说,流程的下一个阶段是为您寻找项目。此流程可能需要三周时间才能完成,并且我们无法保证一定能找到项目或提供报价。我们承诺会尽力为您匹配合适的项目!

作为项目匹配流程的一部分,我会将您的信息分享给我们的实习生导师。实习生导师会审核您的信息,如果他们认为您有潜力胜任他们的项目或团队,会通知我。如果导师感兴趣,我会安排您参加 30 至 45 分钟的导师面试。面试将通过电话进行,旨在考察您的技能与项目的匹配程度。虽然导师的面试方式各不相同,但您应该做好心理准备,因为这可能是一场技术面试(因为许多导师希望进一步了解您的技术技能与他们项目的匹配程度)。

下一轮的运作方式是谷歌独有的。所有进入这一阶段的申请人都会被放入一个匹配池。这意味着所有这些申请人(包括他们的简历、候选人资料、以往面试成绩等)都会被录入一个数据库。潜在的面试官可以搜索这个数据库,并根据编程语言、GPA、分数等筛选结果。每位面试官都可以选择自己想要匹配的暑期实习生。通常,这位面试官会从一批申请人中挑选出一位进行第三轮面试,然后从中挑选一位实习生。

我处于匹配阶段超过三个半月,最终一位房东选中我参加第三次面试,而不是招聘人员说的“三周”。匹配成功让我如释重负;在11月到2月中旬这段时间里,我决定拒绝其他工作机会,争取获得谷歌的工作机会。

在第三次面试中,我与一位负责 YouTube HTML5 视频界面的工程师进行了交流。他让我用 JavaScript 编写一个简单的 DOM 选择函数,然后我们简短地讨论了事件委托。看起来面试进行得很顺利。最后一次面试结束大约十五分钟后,我接到了招聘人员的电话,邀请我到加州圣布鲁诺的 YouTube 公司工作。

谷歌的面试流程显然存在缺陷,其中最糟糕的部分莫过于匹配环节。这个匹配池对实习生来说似乎非常实用便捷;实习生可以选择具备符合自身需求技能的实习生。然而,匹配环节对实习生来说却是一个痛苦的过程。匹配环节大约一个月后,我拒绝了另一份工作邀请(因为截止日期已过),为了争取谷歌的实习机会,我冒了很大的风险。拒绝了另一份邀请后,我又在匹配池里待了十周,那时我已经完全放弃了获得谷歌工作机会的希望。不知何故,事情终于有了转机。

优惠:

2. 雾溪

采访次数:6

职位:软件工程师实习生

经验:我在他们的网站上提交了在线申请后,两天内就收到了人力资源部门的邮件回复,安排了一次电话面试。我通过 EtherPad 进行了两次 45 分钟的编程电话面试,之后人力资源部门给我发了一封邮件,邀请我去纽约办公室进行现场面试。在 Fog Creek 办公室,我与 Fog Creek 的开发人员进行了四次 60 分钟的面试。

在我申请的所有公司中,Fog Creeks 的问题是最侧重数学和数据结构的。所有面试都涉及 ANSI C 编程,而且涉及编写一些非常酷炫的函数。以下是一些面试问题:

  • [根据 Fog Creek 的要求编辑]
  • 现场面试 3:写下itoa 。我很惊讶他们会问这个问题,因为 Joel 的《游击面试指南》明确提到这是一个很好的面试问题。

Fog Creek 的面试流程可以说是所有公司中最好的。HR 的邮件回复很快,他们的问题很有挑战性但又切实可行,而且我去办公室的时候他们提供了很棒的便利设施。他们的面试系统条理清晰,非常完善。虽然我没有收到录用通知,但我相信我在 Fog Creek 的面试中,最准确地展现了我的程序员技能。Fog Creek 的面试流程如此出色也就不足为奇了:他们的 CEO Joel Spolsky 甚至写了一本关于招聘科技人才的。他们持续推出优秀的产品,这一点我并不感到惊讶。

优惠:

3.彭博社

采访次数:3

职位:金融软件工程师实习生

经历:我通过校园职业中心网站申请,并参加了45分钟的校园面试。之后,我被安排去纽约办公室进行现场面试,最终进行了两次各60分钟的面试。所有编程问题都是一些简单的C语言字符串操作问题,不需要超过8-10行代码。示例问题:

  • 编写一个函数来转换字符串,使连续的下划线序列变成单个下划线。例如\ (_hello___world__ => _hello_world_)
  • 栈和堆有什么区别?
  • 给定一个char* 字符串,编写一个函数返回最常出现的字符的最后一次出现的索引。
  • 编写一个函数,接受一个char *string并将一系列连续的相同字符转换为连续字符的数量和字符本身。例如 (aaabbbbcccccdde => 3a4b5c2de)

彭博社问的问题和编程面试准备书中的题型一模一样。对一家公司来说,这种做法很危险;使用众所周知的问题会增加招到不合适的人的可能性。一个平庸的程序员即使记住了《编程面试大揭秘》中的例子,也能在彭博社的面试中表现出色。更糟糕的是,我在校园面试和公司内部面试中都被问到的第一个问题都是一样的(连续下划线题)。第一次我花了几分钟才解开,但第二次我当然立刻就记下了答案。对于彭博社这样的大公司来说,这简直是偷懒。我怀疑这不是巧合;我敢打赌,彭博社的员工都会拿到一本面试样题手册来问求职者。

优惠:

4. Dropbox

采访次数:0

职位:软件工程师实习生

经历:进入新一年,我最想去 Dropbox 工作,而不是其他任何公司。他们发展速度惊人,我忠实地使用他们的产品,而且他们解决了一个计算上很有趣的问题。我在线申请了职位,但没有收到回复。等了两个月后,我在 Dropbox 网站上搜索了一下,找到了两位招聘人员的邮箱。我给他们都发了邮件,附上了一封特意写的求职信和我的简历。但我什么也没收到,甚至连一封承认我存在的电子邮件都没有。真是太扫兴了。

优惠:

5. Twilio

采访次数:2

职位:软件工程师实习生

经验:我在 Twilio 网站上申请了职位,第二天就收到了 HR 的回复邮件。我参加了两次 30 分钟的电话面试,但最终没有收到录用通知。示例问题:

  • 创建一个推文搜索引擎,允许你将推文插入数据库,并按单词或短语搜索推文。不应使用关系数据库;所有数据结构都应存储在内存中。代码
  • 描述不同类型的数据库索引(主索引、唯一索引、索引等)。这些索引分别在何时使用,以及它们在数据结构层面有何不同。
  • 描述数据库规范化:要求是什么,不同的范式,为什么规范化很重要,等等。

我对 Twilio 的面试过程了解不多,因此无法对这个话题发表太多评论。

根据我的经验,他们的问题较少关注数据结构/算法,而更多关注 Web 开发和数据库。

优惠:

6. Foursquare

采访次数:2

职位:软件工程师实习生

经历:我是在网上申请的,大概一个月后,HR联系我安排电话面试。

第一次面试不涉及编程,更像是一场技术讨论。首先,我和面试官各自做了5分钟的自我介绍,介绍了自己的背景和正在做的项目。接下来的半个小时,我们讨论了几个计算机科学方面的话题。我们谈到了以下几点:

  • 数据库系统中的事务
  • 死锁、锁粒度
  • 并发,Peterson 解决方案

下一轮是编程电话面试。面试官要求我
用脚本语言实现一个 Foursquare 排行榜。本质上,我需要
创建一个类来存储用户在过去 7 天内每天获得的积分,并实现addPoints(user, points)getTotalPoints(user)
方法

我的第一个解决方案是一个七桶数组,用于存储用户过去七天获得的积分。当用户获得积分时,这些积分会被添加到数组的第 0 个桶中。午夜时分,一个 cron 任务或其他函数会将所有积分值向右移动,并将 0 积分值放置在第 0 个索引处。

看到这个问题后,面试官解释说,随着用户群的扩大,运行每日 cron 作业的计算成本会很高,并要求提供更好的解决方案。

我添加了一个属性,用于保存用户点阵列上次更新或读取的时间戳。每次读取/更新点阵列时,都会有一个方法计算自上次读取/更新以来已经过了多少天,并相应地移动点阵列。

第二次电话面试几周后,我收到了录用通知。

优惠:

7. Facebook

采访次数:

职位:软件工程师实习生

经历:我在十月的第一周在线申请了职位。两个多月过去了,我还没有收到回复,于是我联系了去年在 Facebook 面试过的朋友。他给了我他的招聘人员的联系方式,我联系了她。她立即回复说,申请者太多了,所以我需要在 InterviewStreet 上完成一个 45 分钟的限时编程挑战,作为电话面试前的准备工作。

我以为这个挑战会很容易,毕竟这只是电话面试前的准备。
结果我觉得相当难,不过你自己可以判断一下(Facebook
面试题
)。一开始我用 PHP 回答了 20 分钟,后来我意识到自己用 C 语言编写这类数据结构更有经验,于是决定换用 C 语言。这个选择很糟糕。我没能及时完成,也没能进入下一轮。

优惠:

总结

以下是我在大学面试过程中学到的一些经验教训:

面试准备书籍固然不错,但为了好玩而编码更佳——面试官问我的大多数问题都不是面试准备书籍中涵盖的类型。真正好的问题会涉及一些你从未见过的数据结构或函数。在我的 Fog Creek 面试中,面试官问我是否听说过间隙缓冲区 (Gap Buffer)。当我回答“没有”时,他回答“很好”,并接着描述了间隙缓冲区,并让我实现一个。面试官想看看你如何处理新事物。这就是为什么为了好玩而编码的价值所在;当我为了好玩而编写新程序时,我至少会花 25% 的时间在 Google 和 StackOverflow 上学习如何执行 X、Y 和 Z。通过这种练习,你可以学习如何快速学习新事物。

尽早申请,不要胆怯——我大二的时候,直到二月份才申请暑期实习。那时,很多科技公司已经招满了暑期实习生,而我却没有在顶级科技公司找到工作。大三的时候(今年),我在十月的第一周就提交了所有申请。如果公司没有回复你,就找到招聘人员的邮箱,给他们发个消息。利用你所有的人脉。你表弟的同父异母兄弟的叔叔在Facebook工作吗?联系他,让他帮你联系HR。问问他,你不会有什么损失。

做一个副业项目——我知道大家都这么说。但说真的,一定要去做。我之前提到的每家公司都让我描述一个过去有趣的编程项目。拥有一个副业项目会让你的自我介绍更有趣,它能展现你对编程的热情,还能让你积累解决实际问题的经验。谈论我的副业项目(ClosetPilot,一个Poshmark 机器人。阅读Poshmark 技巧)总能给面试官留下深刻印象。

结论

希望你喜欢我在博客圈的首篇文章。我之前从未见过任何文章概述科技公司面试流程的差异,所以我决定自己写一篇。

如果你好奇的话,我决定接受 Foursquare 的邀请。

鏂囩珷鏉ユ簮锛�https://dev.to/seanh/interviewing-at-google-facebook-foursquare-dropbox-fog-creek-etc-1hin