原文最初发表于 Crunchskills 网站,经原作者 Jameson Quave 授权,InfoQ 中文站翻译并分享。
导读:又到毕业季,想去 Google 谋得 Offer?可是,面试这一关又怎么过呢?别急,有过来人告诉你如何应对 Google 的面试。祝你好运!
如果你是一名工程师或准工程师,想在 Google 谋得一个职位,你可能需要花点时间来研究 Google 面试中最常见的问题。在本文中,我想展示一些 Google 在电话面试时最常提到的问题,以及更深层次的初高级工程师职位的面试题。
给定一个任意字符串,例如,aabcdef。返回第一个重复出现的字符。
这个问题在电话面试中经常被问到,比其他任何问题都要多。令人惊讶的是,大部分应聘者居然败在这道看似简单的题,是因为他们提供的实现过于低效,从而阴沟里翻船。我们在最近一篇文章《Google 最常见的电话面试题》(Most common phone interview question at Google.)中,详细讨论了这个问题。
正解应该是 $O(n)$ 线性时间,如下所示:
Create a hashmap of seen characters
For all characters in string
If character is already in the hashtable
Return character // Solution found!
Else
Add character to hashtable // First occurence of a character found
给定一个整数列表,找出最先的连续整数集,其和为给定的数字 $k$。
我们在 GeekforGeeks 的朋友居然用六种不同的编程语言解答了这道题,太厉害了!你可以去看看他是怎么做的:https://www.geeksforgeeks.org/find-subarray-with-given-sum/
下面是 shreyanshi_arun 贡献的,用 Python 写的最佳答案:
# Returns true if the
# there is a subarray
# of arr[] with sum
# equal to 'sum'
# otherwise returns
# false. Also, prints
# the result
def subArraySum(arr, n, sum):
# Pick a starting
# point
for i in range(n):
curr_sum = arr[i]
# try all subarrays
# starting with 'i'
j = i+1
while j <= n:
if curr_sum == sum:
print ("Sum found between")
print("indexes %d and %d"%( i, j-1))
return 1
if curr_sum > sum or j == n:
break
curr_sum = curr_sum + arr[j]
j += 1
print ("No subarray found")
return 0
# Driver program
arr = [15, 2, 4, 8, 9, 5, 10, 23]
n = len(arr)
sum = 23
subArraySum(arr, n, sum)
# This code is Contributed by shreyanshi_arun.
给定一对相同的二叉树(A 和 B),在不修改任何树的情况下,返回树 B 中的引用到树 A 中的节点 N。
这个问题有几个变体,但总是有相同类型的解决方案。这个过程包括简单地对第二棵树 B 进行广度优先搜索(Breadth-first search,BFS),并将每个节点与目标 N 进行比较,一旦找到匹配项,只需将其返回即可。这个问题对于 Google 的面试来说,过于直截了当,因为这是一个以沟通为主的问题。面试官问这个问题是想看看,当给出一个微不足道的问题时,求职者是否还能清晰地解释出一个近乎于自动的思维过程。
假象一下,你与一个企业客户合作。他们关心的是将服务器迁移到云端上。你将如何处理这种情况?
这个问题有点不同,因为没有唯一的正解。对于这个问题,以及类似的问题,最好是依靠给出一个原创性的答案,帮助你证明你将如何体现出 Google 的核心价值。你应该还要让面试官知道,你对 Google Cloud Platform(GCP)中 Google 自家的云产品的理解有多深刻。
前首席执行官 Eric Schmidt 曾在《重新定义公司:谷歌是如何运营的》(How Google Works)一书中写道,Google 的核心价值观是:
注:Amazon 的 14 条领导力原则也包含了一个非常相似的最高价值理念:
顾客至上: 领导者从客户入手,再反向推动工作。他们努力工作,赢得并维系客户对他们的信任。虽然领导者会关注竞争对手,但是他们更关注客户。
你为什么想在 Google 工作?
我知道你在想什么,这个问题听起来很简单。但是,如果你知道有那么多候选者在这个问题上给出了让人感到腻味、未经深思熟虑的答案时,你会不会感到惊讶呢?这些候选人因为没有提前想好怎么回答这一问题,反而把求职面试给搞砸了!让我们来回顾一下那些“糟糕的答案”,以便了解对你来说,什么样的才算“好答案”。
我想在 Google 工作,因为我每天都在用 Google。
看上去,这个回答似乎不错,但这并不是因为它没有提到你的长处。
我想在 Google 工作,因为在那里,我可以解决难题,并挑战自己。
还是那样,这句话表面上听起来可能挺好的,也不像第一个答案听上去那么糟糕,然而,这个回答还可以答得更好一些。让我用一个简单的三个步骤来解释一下吧。
第一步:首先要说一些关于 Google 的正面的、不常见的或能够让你脱颖而出的东西。例如:
我之所以渴望去 Google 工作,首先是因为我非常敬佩他们凭借 Google Cloud Platform 在对抗 Amazon 时取得的优势。
老实说,仅仅这样回答并不是一个很好的答案,但它却是一个不错的做法,因为以这样开头,会给面试官留下一个好印象,同时也能够显示出你对 Google 的了解程度有多深。
第二步:我们要告诉他们,你有什么好处。你的回答这一部分,对我们来说非常重要。你要阐述非常诚实的原因:为什么想去 Google 工作。在这个回答中,你可以表达出有些自私的想法,甚至也可以是消极的想法。为什么可以这样做?因为你的目的是要跟面试官建立起信任感。举个例子:
在我花了大量时间来研究自己所做的选择后,我倾向于认为,Google 就是我能最有效地追求自己在机器学习方面的专业兴趣的公司。
最后一步:我们要把自己的优势告诉面试官,并从帮助公司的立场出发,告诉他们,我们的优势源于对他们公司有所帮助。
我还认为,我在计算机科学和行为面试中简明扼要的写作能力,正是 Google 在未来五到十年内发展所需要的。
对,就是这样!上面列出的五个问题,就是你在申请 Google 软件开发相关职位最有可能会遇到的面试题。
原文链接:
https://crunchskills.com/google-interview-questions-for-software-engineering-roles/
领取专属 10元无门槛券
私享最新 技术干货