Part 1 面试流程
1、第1周期:电面(Phone Screen)
电面的面试官特别有可能是你以后的同事或经理。
倘若你申请的是软件工程关联职位,电面将连续 30 到 60 分钟。回答编码关联问题时,你需要一边在与面试官共享的 Google Doc 上编写代码,一边清晰地阐述你的思路。意见你运用耳机或扬声器,以便你能够自由输入关联内容。
电面会问到数据结构和算法。运用你最善于的编程语言写 20-30 行代码。按照如下过程做编码练习(重视你的代码风格,参考文案:《Google 官方代码风格指南》):
你会被问到一个开放式的问题。面试官会据此问有些问题,而后制定有些需求。
用一个算法解释这个问题。
将其转换为可行的代码。 (提示:由于有时间限制,不想要着一下子写出完美的代码,写下你所想到的,稍后再进行修改,还要保证思虑了边界状况和运行问题。)
优化代码,测试用例并发掘错误。
针对所有其他职位,电面将连续 30 到 45 分钟。请准备好回答涵盖职位关联知识的行径问题、假设问题或案例式问题。
2、第二周期:现场面试(Onsite)
通常状况下,会有 4 位 Google 员工(有些可能作为你以后的同事,还有有些是跨职能分部的员工)面试你,每一个人的面试时间大约为 30-45 分钟。
针对软件工程职位的应聘者,面试官期盼认识你的编码技能和技术行业的专业知识(其中包含工具或编程语言,以及相关数据结构和算法等主题的通常知识)。面试官一般会在这种讨论中反复提及与此关联的问题,就像讨论实质工作中遇到的问题同样,由于她们爱好激发彼此的思想碰撞火花,从而认识区别的办法。因此呢,请准备好深入探讨你的处理方法。超越自我界限,找到最佳答案,这很可能就表率了您的工作方式。
工程职位以外的应聘者将有机会从 4 个区别的方面明显展示自己的优良:
通常认知能力:
面试官会提出有些开放式问题,以便认识你怎样着手处理问题和处理问题。这些问题无标准答案,因此呢,她们最看重的是,你是不是具备必定的能力,能够清晰地阐明你的思路以及你怎样利用数据做出明智决策。
领导能力:
准备好谈一谈你曾怎样利用自己的沟通和决策能力调动他人积极性。这种案例能够是你在工作时期或单位的领导岗位晋升经历,亦能够是你带领团队取得成功(即便在你并未正式作为领导者的状况下)的经历。
职位关联知识:
面试官期盼能够认识你怎样将自己的个人优良与经验相结合以带来积极的影响。面试官不仅想晓得你日前能做出的贡献,还要认识你打算怎样提高自己能力以便挑战区别的职位,乃至包含日前尚不存在的职位。
Google 精神:
分享你怎样独立工作以及怎样与团队协作,怎样帮忙他人,怎样在迷茫中找到方向,以及怎样激励自己居安思危、持续进步。
在全部面试过程中,你能够安心大胆地请面试官知道说明面试问题,以保证你完全理解所问的问题。你亦能够畅所欲言,面试面试官们,询问相关工作、团队和文化的问题,这般做能够帮忙你确定相应职位是不是适合你。
Part 2 怎样准备
1、适用于所有职位的面试
预测可能遇到的面试问题:
你能够预测到面试官会向您提出的 90% 的面试问题。例如“为何想要这份工作?”、“你曾处理过什么棘手的问题?”等等。倘若你实在想不出来,能够阅读《硅谷程序员面试宝典》,将你认为最有可能被问到的前 20 个问题写下来。
计划:
针对你列表上的每一个问题写下答案。这有助于你牢记关联问题及答案,以便在需要时能够不假思索地说出来,这一点至关重要。
制定备用方法:
实质上,针对每一个问题,意见你写下 3 个答案。为何要写 3 个呢?针对每一个问题,你都需要另一准备一个一样可行的区别答案,由于第1个面试官有可能不爱好你讲述的案例,此时,你就得寄期盼于下一位面试官听听你的另一个案例,或许他/她能因此呢作为你的支持者。
说出想法:
面试官想认识你的想法,在面试中说出你的思考过程和决策。 请记住,面试过程中,不仅评定你的技术能力,更加是要评定你怎样处理问题并尝试处理问题。 和面试官知道地说明和检测他给出的假设,保证它们是恰当。
用数据说话:
在回答每一个问题时,你都需要经过详细案例来讲明自己具备问题中所需求的能力。例如,倘若你被问到“你是怎样履行领导职责的?”这般的问题,你应该回答:“我是一个拥有协作能力/决策能力/诸如此类任何能力的领导,我来给你讲一下当我在…”
遇到问题询问:
面试题可能是有问题的,面试官故意不提,来深入认识你在技术困难中所看重的范畴和信息。 她们是想瞧瞧你是怎样参与处理问题的。 必定要谈谈你的思考过程,倘若遇到疑问,随时提问。
优化:
想想怎样改进你供给的处理方法。在许多状况下,你一起始的处理方法可能需要有些细化和进一步的解释。 倘若有必要,从暴力处理方法起始,改进它 - 要让面试官晓得你在做什么以及为何。
练习:
每一个人都能够经过持续练习得到进步。大声复述你的面试答案,直到你能够简明扼要地讲述每一个案例。
2、适用于软件工程和技术职位的面试
编码实践:
你能够在 LintCode、CodeLab、Quora 和 Stack Overflow 等网站上找到有些编码问题示例。美国大机构面试真题训练和 Google Mock Interview 亦值得一做。面试会需求手写,因此请在纸张或白板上练习编写代码。必定要测试你的代码,并保证它易读况且无错误。不要纠结于小的语法错误,例如针对给定的办法用哪个子串,直接选取一个,让面试官晓得就能够了。
编码:
最少善于一种编程语言,最好是C ++,Java,Python,Go或C。倘若你善于API、面向对象设计和编程,晓得怎样测试代码,以及晓得怎样处理边界状况更好。请重视:面试注重的是概念理解而不是记忆。
算法:
把握用自下而上和自顶向下的算法处理问题。晓得算法的繁杂性,以及怎样优化/改变算法。熟练处理Google问题的算法:排序,分治法,动态规划,贪心,递归或相关数据结构的算法。晓得Big-O符号(例如运行时间),并准备好似Dijkstra和A *这般的繁杂算法。在编写代码之前,意见你讨论或阐述你所想到的算法。
排序:
熟练平常的排序类型以及它们有效的输入数据类型。思虑运行时间和空间。例如,在特殊状况下,插进排序或基数排序比通用的快速排序、归并排序、堆排序答案要好得多。
数据结构:
科研尽可能多的数据结构。最常运用的数据结构是数组,链表,堆栈,队列,哈希集合,哈希图,哈希表,字典树,树和二叉树,堆和图。认识内部的数据结构,以及那些算法倾向于和哪个数据结构一块运用。
数学:
有些面试官会提有些基本的离散数学问题。尤其在Google,由于Google的工作经常会接触计数问题、概率问题和其他离散Math 101状况。在面试之前花上有些时间,记住基本概率理论和组合的基本要素。熟练n选取问题和类似的问题。
图:
思虑一个问题是不是能够应用于距离、搜索、连接、循环检测等图形算法中。有三种图形暗示办法:对象和指针、矩阵、邻接列表,你需要熟练每一个办法及其利坏处。把握基本图遍历算法、广度优先搜索和深度优先搜索。认识它们的繁杂度,认识什么状况该用哪个,以及怎样在实质代码中实现它们。
递归:
许多编码问题触及递归的思想和用递归编码给出处理方法。针对能够用迭代的办法处理的问题,用递归找到更优的处理方法。
Part 3 其他问题
着装:
大部分面试对着装都无特定的需求,但招聘人员会通知你怎样着装最得体。如果你不确定哪种风格适合自己,那就做你自己,穿你认为舒适的衣服就好。
怎样组织面试答案:
回答问题时,请务必说明你是怎样得出处理方法的,因此呢,你能够想到什么就说什么。
做准备工作时要思虑的有帮忙的问题:
独立工作以及参与团队协作时,你怎样让自己的能力得到充分发挥?你在求学时和职场中遇到过那些挑战?你是怎样战胜这些挑战的?你有那些技能和经验可做为你申请本职位的优良,为何?
倘若你无理解面试问题:
能够请面试官知道说明,且回答问题时可视需要从容作答。