标签:自我提高 预测 建议 成功 问题: 推荐文章 编译 int 大括号
作为四大科技巨头之一,谷歌公司面试无疑是对所有软件开发者技术能力的终极检验,没法靠运气或走捷径,只能通过努力的工作和准备。
好消息是,谷歌完全公开他们对于员工的期望。面试者对谷歌的面试流程和公司文化了解越多,就越有机会成功。本文将深入探讨谷歌的编程面试和行为面试,助你成功拿到offer。
整个面试过程需要两个月到两个半月。谷歌对软件开发者总共进行5到7次面试。其中包括最初与谷歌招募者的电话面试,接着是与不同谷歌员工进行的4到6次现场面试。所有编程面试题均要在白板、谷歌文档(Google Docs)或者Chromebook上完成。
谷歌一般雇佣T3级别的面试者(T11是最高级别)。T3是具有本科或硕士学位的入门级全职软件工程师,其年薪大约是11.7万美元。谷歌首选以下几种编程语言:Java、C++、CGo和Python。
谷歌面试中可能遇到以下三种编程问题:
· 系统设计问题:旨在评估面试者在考虑伸缩性的情况下进行高级系统设计的能力。
· 编程面试挑战:旨在评估面试者的数据结构和算法知识,这些知识用以优化常规问题的解决方法。
· 一般分析问题:旨在通过数学或基于观点的问题,来评估面试者的思维过程。
谷歌面试有何独特之处?
谷歌的编程面试流程虽与其它大型科技公司相似,但有一些独特之处,是什么呢?
明确的期望。谷歌的面试流程完全透明,因此在准备时无需臆测。以下是谷歌提供的资源:
· 对软件工程和技术角色的期望
· 如何进行谷歌环聊面试
· 谷歌如何招募人才
图源:unsplash
在谷歌文档中编程。在最初的电话面试中,面试者需要在谷歌文档中编程。通过练习才能在该平台上进行熟练编程,而学会这一技能很重要。点击这里阅读如何为技术面试设置谷歌文档。
评分等级。依据四个招聘标准,对每个面试者按1-4分打分,3分是录用的最低门槛。
招聘委员会。谷歌旨在实现无偏见的招聘,因此设立了招聘委员会来对所有候选人进行招聘筛选。
四个招聘标准。在候选人审核过程中,谷歌更重视认知能力、谷歌范儿(Googleyness)、领导能力以及技术技能。
认知能力。总体认知能力是指解决问题的能力、抽象思维、好奇心和学习意愿。谷歌寻求的是那些能对自己、团队和项目进行复杂思考的聪明人。
领导能力。谷歌聘用具有领导力的候选人。对于谷歌来说,领导力是在需要时解决困难问题的能力,同时能加强道德和安全。谷歌也寻求那些善于放手,让他人自我组织,促进开放交流的人。
谷歌范儿。与所有其它组织一样,谷歌具有特定的公司文化,并寻求与其价值观相契合的候选人。谷歌的主要关注点是人;他们在保持道德的同时,关心包容性和人们生活的改善,以小团体和鼓励创新创造、开放交流的休闲环境闻名。
技术技能。谷歌聘用具有极强编程能力的人,并主要基于对概念的理解而非死记硬背来评估技术技能。主要通过以下方面来评估编程技能:
· 算法
· 排序
· 数据结构
· 图表
· 循环
· 面向对象编程
· 大O符号
· API(应用程序接口)
· 如何测试代码
· 数学运算(如n选k程序)
准备。准备编程面试是一场持久战。笔者建议提前3个月准备。面试者需要做一个准备计划以免偏离轨道。看看由招聘经理制定的为期12周的最权威编程面试准备路线图(https://www.codinginterview.com/interview-roadmap)。请确保使用谷歌首选的语言来准备,如C++、Java、Python、Go或C。
简历撰写技巧:使用指标描述。尝试使用公式:通过Z,实现由Y度量的X。例如,如果简历上写道:“减少了服务器查询响应时间”,应将其改为:“通过重构API,服务器查询响应时间减少了15%。
更新简历。面试者的简历需要在6秒之内吸引谷歌招聘者的注意。简历过于粗制滥造,是有才能的申请者错失面试机会最常见的原因之一。请务必花一些时间更新简历。
如果简历通过筛选,招聘方会安排电话面试,以了解面试者的更多技能与经验。从简历通过到电话面试大约需要一周的时间。
图源:unsplash
电话面试将持续45~60分钟,可能在谷歌环聊(Google Hangout)上进行。谷歌员工将使用与数据结构和算法相关的编程问题进行面试。面试者需要在谷歌文档上使用20~30行代码来解决这些问题。
能在工作中交流思维过程至关重要,这是谷歌评估面试者总体认知能力的方式。
面试者可能会遇到开放式编程面试题。进一步提出疑问,阐明问题是展示解决问题能力的好方法。如果面试者提前完成挑战,可以在剩余时间里寻找优化方法并检查错误,一定要考虑到细节问题。
面试者通过预筛选后,将进行现场面试。面试者需要与4~6名谷歌员工会面,每人45分钟。
现场面试的主要关注点是编码,尤其是数据结构和算法。面试者需要在谷歌员工提供的白板或谷歌笔记本上编写代码。最好提前询问招聘方,以便进行适当练习。
现场面试还包括行为面试问题,用以评估面试者作为潜在员工的资质。谷歌希望面试者符合公司的价值观,所以也一定要做好行为面试的准备。稍后将继续讨论。
面试官的评分等级为1~4分,3分是录用的最低标准。面试结束后,招聘委员会将根据反馈做出最终决定。该过程需要几周时间,如果很长时间过去还没有回音,可以发送一封提醒邮件。
面试者被录用后就可以准备讨论薪资和就职日期了。因此很有必要温习一下谈判技巧。如果没有被录用,可以在六个月后再次申请,这将为面试者留出充分时间来做准备,并改进弱点。
图源:unsplash
练习编程问题需要付出很多的时间和努力。下面将对最常见的谷歌编程问题进行分析,并提出面试准备的可行建议。
1.找到K个最接近的数。
问题陈述:给定一个排好序的数字数组和2个整数——K、X,在数组中找到K个最接近X的数。返回排序后的数字。X不一定出现在数组中。
2.求数据流中第K大的元素。
问题陈述:设计一个类,在数据流中高效地找到第k大的元素。该类需满足以下两个条件:
· 该类的构造函数能接收一个整数数组,包含数据流的初始元素和整数K。
· 该类应该公开一个函数add(int num),该函数将存储给定数字并返回第k大的数字。
3.删除给定键的节点。
问题陈述:给定一个链表表头和一个键。需要删除包含该键的节点。
4.镜像二叉树。
问题陈述:给定一个二叉树的根节点,交换所有节点的左右子节点。
5.找到和的所有路径。
问题陈述:给定一个二叉树和数字S,找到所有从根到叶节点的路径,每一路径的所有节点值等于S。
6.找出最多有K个不同字符的最长子字符串的长度。
问题陈述:给定一个字符串,找出最长子字符串的长度,其中最多有K个不同字符。
7.查找无重复字符的最长子字符串。
问题陈述:给定一个字符串,看其字母能否重排,使任意两个相同的字母不相邻。
8.划分等和子集。
问题陈述:给定一组正数,判断能否将其划分为两个子集,使得两个子集的元素和相等。
9.判断数字是否有效。
问题陈述:给定一个输入字符串,判断它是否为有效数字。简单起见,假设输入中不存在空白字符。
10.复制具有任意指针的链表
问题陈述:给定一个链表,该节点有2个指针。第一个是常规的next指针。第二个为arbitrary_pointer(任意指针),可以指向链表的任一节点。
面试者需要编写代码,实现对给定链表的深度拷贝。这里的“深度拷贝”指对原始链表的任何操作(插入、修改和移除)都不会影响拷贝的链表。
11.输出平衡大括号组合。
问题陈述:给定值N,输出N组大括号的所有组合,以使其平衡。
12.给定多个任务,判断能否安排所有任务。
问题陈述:有N个任务,从0标记到(N-1)。每个任务都有一些需要在安排之前完成的先决任务。给定任务数量和先决任务的列表对,判断能否安排所有任务。
13.实现LRU缓存
问题陈述:最近最少使用(Least Recently Used,LRU)是一种常见的缓存策略。它定义了从缓存中驱逐元素的策略,以便在缓存满时为新元素腾出空间,这就意味着需要首先删除最近最少使用的数据。
14.找到最大值和最小值的相应下标
问题陈述:给定一个排序的整型数组,返回给定键的最大和最小数组下标。如果找不到,返回-1。数组长度可达数百万,且存在许多重复项。
15.合并重叠的时间间隔
问题陈述:给定一个区间数组(列表)作为输入,每个区间都有开始和结束时间戳。输入数组按开始时间戳排序。要求合并重叠的时间间隔,并返回输出数组(列表)。
图源:unsplash
准备谷歌编程面试是有技巧的。它需要数月的准备和练习,以掌握正确的概念,培养自信心。下面这份权威的12周准备计划,已成功帮助许多人在大公司找到工作。
第0周。基于谷歌的期望和自己的偏好,选择一门编程语言。
第1周。复习所选编程语言的基础知识,这样会大大减少在面试中犯错的几率。回顾一些概念,如怎样从控制台读取输入、声明以及使用二维数组。
第2&3周。熟悉数据结构和算法。这对于谷歌的编程面试至关重要。
面试者应该知道的数据结构:数组、链表、堆栈、队列、树、图表、堆排序、散列集、哈希映射/哈希表。
面试者应该知道的算法:广度优先搜索、深度优先搜索、二分查找、快速排序、归并排序、A*算法、动态规划、分治法。
第4&5周。在Educative或Leetcode网站上练习数据结构和算法挑战。先从简单的编程问题入手,由浅入深,逐渐增加难度。
第6~8周。练习复杂的编程问题并计时。考虑每种解决方法的运行时间和空间复杂度。
第9&10周。学习系统设计面试问题。这是面试过程中不可或缺的一部分,会影响面试者的招聘水平。
第11周。学习操作系统(OS)和并发概念。这些问题用于评估面试者的招聘水平。复习多线程原理,以在谷歌的面试梯队中名列前茅。
第12周。学习面向对象编程和设计方面的问题。这些问题能评估面试者的批判性思维和基于项目的问题解决能力。
图源:unsplash
练习编程没有捷径。以下是指导面试者做好准备阶段的一些基本技巧。
注意时间。编程面试会限时,因此请务必注意时间。如果面试者习惯了在有限时间内进行准备,那么实际面试中的压力会小得多。
了解常见陷阱。谷歌面试常见的三大陷阱:不知道算法的大O符号的复杂性,不了解谷歌的期望,不能清楚表达问题的解决过程。一定要记住这三大陷阱。
清楚地表达过程。谷歌想了解面试者的思维过程。在练习时要习惯于解释自己为什么这样做以及正在做什么。那些对自己工作方式有着清晰认识的人总会脱颖而出。
知道自身弱点。每个人都有弱点,在准备时要注意自己的弱点。谷歌已经声明,其关注面试者的思维过程,因此,如果遇到弱点,就说出来,以表明自己渴望提高的决心。
软件开发候选人常常会忽视行为面试。但事实上,这可能是决定面试者能否成功的关键一役。谷歌非常注重其价值观,所以如果面试者对于这些问题毫无准备,面试官很容易发觉。文化和行为面试可以淘汰那些技能过关但价值观不契合的面试者。
谷歌行为面试一般问什么?
谷歌的行为面试旨在测试面试者在与就业相关的积极/消极情形或冲突中的表现。行为面试帮助面试官判断面试者是否是他们愿意与之共事的人。这些面试会要求面试者对过去的行为或表现做出反思,以测试其在压力下的表现和对专业精神的理解。问题可能有:
· 过去的经历
· 假设的情况
· 价值观
图源:unsplash
谷歌已经列出了准备行为面试问题的八个步骤。了解这些步骤,用它们来做准备,形成自己的答案。
· 预测未来。面试者可以准备一些可能被问到的问题。
· 练习。谷歌鼓励面试者大声练习,以构建更清晰的答案。
· 计划。写下答案,进行有策略的练习。不要忽略行为问题。
· 阐明。面试者可以使用开放性问题来表现自己作为候选人的价值。
· 数据驱动。谷歌期望看到与有形的增长、变化或技能示范直接相关的答案。
· 制定备选计划。谷歌建议每个问题准备三个答案。这能帮助面试者准备各种有趣的答案。
· 解释。谷歌要求面试者解释其思维过程和决策制定。明确阐述假设和过程能帮助面试者脱颖而出。
· 提高。谷歌鼓励面试者始终专注于自我提高。面试者可以先从粗糙的答案开始,然后努力改进。
图源:unsplash
谷歌编制了其面试官常用的行为面试问题清单,来看一下:
· 描述你的工作历程。虽然该问题没有错误答案,但它可以评估面试者的经历会对其作为开发者的生活产生的影响。一个好的答案应该深入到自己的工作流程、工具和团队合作能力之中。
· 关于自己,你还有什么想介绍的吗?一个好的答案应该显示面试者所具备的可能对谷歌有益的额外技能。面试官还会寻找软技能,看看面试者是否具备有益于团队的非技术经验。
· 讲述你遇到危机和失败的经历。该问题旨在了解面试者是如何学习和面对困难的。一个好的答案应表明面对失败时的诚实和学习的积极性。
· 你最自豪的成就是什么?该问题旨在建立多元化的团队。就长远来看,谷歌借此寻找面试者的专长、成就感和价值观。一个好的答案应该超过现有成绩,并能触及自己作为人的意义。
· 你的加入能对团队产生什么影响?该问题用于考察面试者在集体中与他人合作的能力。一个好的答案应该表明面试者对谷歌价值观进行了仔细研究。最佳答案应与谷歌的目标相吻合。
· 谈谈你工作过的非结构化环境。该问题通过面试者对非结构化的定义来评估其工作风格。一个好的答案应该将工作风格与工作岗位联系起来。面试者能否适应一个预定义的结构呢?
· 你最喜欢的谷歌工具是什么?你会怎样改进它?该问题用于评估面试者对谷歌的了解、面试者的创造性和创新意愿。一个好的答案应该基于数据但不过于技术化;确保专注于想要改变的原因。请记住:这种改变应使人们的生活更便利。
· 你所了解的最复杂的事是什么?该问题用于评估面试者的技能、沟通技巧以及向他人解释复杂性的能力。一个好的答案应该更专注于传达方式的有效性,而非信息本身。
· 谷歌范儿(being Googley)对你而言意味着什么?该问题是展示面试者文化适应性与价值观的好机会。一个好的答案应避免使用太多术语,但能说明谷歌文化的潜在价值。
· 你害怕什么?该问题能看出面试者的弱点和压力源。一个好的答案应该是自我反思的,其目的并不是简单地克服恐惧,而是要了解它们如何影响面试者的。
现在你应该已经了解了谷歌面试的过程、谷歌与其它公司面试的差异,以及如何准备谷歌面试。祝你面试顺利!
编译组:贺宇、陈枫
相关链接:
https://medium.com/better-programming/cracking-the-google-coding-interview-3b8dd29b0d6a
如转载,请后台留言,遵守转载规范
ACL2018论文集50篇解读
EMNLP2017论文集28篇论文解读
2018年AI三大顶会中国学术成果全链接
ACL2017论文集:34篇解读干货全在这里
10篇AAAI2017经典论文回顾
标签:自我提高 预测 建议 成功 问题: 推荐文章 编译 int 大括号
原文地址:https://blog.51cto.com/15057819/2565306