面试Google,我挂在了第七轮......( 二 )


相比 Onsite , 电话面试不能在一个很好的沟通环境下 , 不能面对面和面试官进行交流 。
当初我面试的一道题目和二叉树的遍历相关 , 当然题目不会是直接写二叉树的先序/中序/后序/层次之类的遍历 , 会有一个具体的业务场景在里边 。
需要你分析这个具体的业务场景 , 能够抽象出题目本质上就是 , 二叉树的遍历方法 。
这道题目算是拿下了 , 实际 Coding 后 , 面试官可能会根据你写的 Code 去提问 , 一些边界条件以及让你提优化方案 。
HR 小姐姐介绍的电话面试时 1-2 轮 , 其实我理解 , 这应该是需要看第一轮的面试官的反馈 , 是否犹豫是否再安排一轮电话面试 。
毕竟和 Onsite 相比 , 电话面试成本相对更低一些 。 在线 Code 其实在面试过程中 , 还是蛮重要的环节 。
从你 Code 的细节 , 包括 Code Style , 边界条件的判断 , 哪怕是注释情况 , 都能看出一些编程习惯 。
我认为这个环节对于招聘一个写代码的工程师来说 , 肯定是一个必不可少的环节(Google 整个就搞了五六轮) 。
现场面试
电话面试通过后 , HR 会很快跟你反馈沟通面试结果 , 是否通过 , 以及 Onsite 的安排 。
因为现场面试是 4-5 轮 , 平均 1 轮一小时的话 , 需要 4-5 个小时 , 其实还是蛮耗费精力的 。
一般会沟通可以约 2 个半天或者 1 整天 , 两个半天的好处是 , 时间不会那么紧张 , 前两轮后 , 中途可以过几天再休整调整下再继续 。
我当初就选择“快刀斩乱麻/早死早超生”的方案直接约了 1 天时间搞定 。
面试Google,我挂在了第七轮......
本文插图
Onsite 也基本上是在电脑上 Coding , 你和面试官一人一个笔记本 , Code 时共享屏幕 , 有时候题目面试官会在白板上写出 。
Onsite 的题目 , 明显就要比电话面试的题目难度高一些呢 。 但实际上比我想象中的要简单些 。
因为曾经想 Google 这样的公司面试恐怕连理解题目意思都要理解大半天吧 , 可能也是社招的缘故 , 社招整体感觉在算法的要求比校招就要低一些 。
这只是我的主观感受啦 。 (确实自己在当面试官的过程中 , 在算法这块对社招的同学预期也会低一些)
我记得其中有一道题目就跟 leetcode 上的类似(再次声明不是原题 , 也不 share 原题))leetcode 上那个题目应该是二维矩阵 , 最短路径相关的 , 用 dp 可以解决 。 只不过 , 一般题目会分为好几个小问题 , 难度一般从易到难 。
同时也考察到了二叉树 , 仍然围绕着二叉树的遍历进行 。 需要熟知二叉树的各种遍历方式 , 非递归的方法(递归比较容易 , 一般不会让写这个) 。 在遇到二叉树相关问题的时候 , 是否可以联想到二叉树的遍历上来 。
另外有一道系统设计的问题 , “知识图谱”的概念 , 围绕着“图”的相关算法 , 这个要求在白板上写出设计方案和伪代码 。
同时面试官会不断 Push 你让你提出更优的解决方案 , 有足够多的计算资源 , 并行去跑 , 以及具体怎么实现 。 这道题目我回答的不好(当初也知道不好 , 后面 HR 反馈也印证了这一点) 。
还有一道题目 , 是解决生活中的场景题目 。 需要你抽象出这个问题 , 用代码来解决 。
一般这种题目 , 就需要反复跟面试官去沟通和确认其中的场景 , 怎样把业务抽象成算法 。
记得之前面试 Amazon 的时候也有类似的题目(只不过当初面 Amazon 考察的是 OO Design , 而本题是具体算法实现) 。
Onsite 一共聊了 5 轮 , 上午 2 轮 , 下午 3 轮 , 其中有两轮是英文面试(英文面试后面会说) 。
整体来说 , 工程师岗位面试会围绕如下几个方面进行(以下参考 HR 提供的面试指南):