Google 面经分享
本文公众号来源:程序猿石头作者:码农唐磊本文已收录至我的GitHub
去年换工作的时候, 面试了一下 Google (这里说的是 Google 中国), 来了个 Google 面试六轮游, 结果是没通过. ? 现在分享下我参与面试的具体流程以及个人认为应该注意的事项, 希望对大家有所帮助.
个人相关背景
先介绍下自己相关背景, 985 本科, top2硕士(其实, 大公司都比较看重第一学历的). 在校期间, 科研也没啥能拿得出手的论文. 社招时, 4 年多工作经验, 面试时为大疆后端开发TL(带3~4个人而已).
面试流程
Google 整体面试流程上基本如下:
Recruiter Prescreen →
Phone Interview (1~2 sessions) →
Onsite Interview (4~5 sessions, 1 week to receive feedback) →
Hiring Committee Review →
Offer Review →
Offer Delivery (Yippee!)
我一共经历了 1 轮电话面试, 5 轮 onsite, 如果算上前面的HR 的预筛选的话, 就是 7 轮.
简历投递
之前校招其实也参加过, 无奈门槛太高, 竞争压力太大, 连面试流程都木有进. 当初校招时直接网上刷题, 这个网站上其实还能看到往年的一些题目情况: Google Code Jam. 基本上分几轮, 每轮 top xx 的选手才有机会进入面试.
第一次换工作的时候, 其实也有找在 Google 的同学内推, 填了不少内推推荐理由呀等等, 最后简历都没过. ? 当然, 简历没过肯定也有多种理由啦, 这个其实跟各个公司都一样. 比如人家需求是招聘 P7, 以你的工作年限经验等最多就 P6, 肯定不行; 还有比如希望是招聘机器学习等相关经验的等等, 岗位信息等不匹配也不行; 当然还有一种, 岗位描述等都相关, 确实简历没啥亮点, 太平庸, 也直接被 HR 给筛选掉了.
这次其实刚开始是没有考虑过面 Google 的, 机缘巧合在 linkedin 在有 Google 的 HR 联系, 说要不要试试 Google 的机会. 当然就抱着 “试试就试试” 的想法跟进面试流程啦. 既然要尝试, 当然还是需要认真对待, 修改简历. 防止手生, 肯定需要提前准备”刷题”的. 发简历给HR 小姐姐后, HR 小姐姐会给你一些准备材料供你参考, 这份材料还相对比较丰富, 直接会告诉你面试涉及到的知识点, 推荐书籍还有一些推荐参考的视频等.需要的小伙伴可以留言, 我整理下发给你(跟 HR 求证过, 这些资料是可以公开分享的哈).
其实, 时间有限, “刷题”准备不够, 当初预感估计面试面不下来. 不过真正走完所有面试流程, 发现其实面试题目没有想象中的那么难(然而, 我仍然没有过, 说明实力不足呀), 积极准备, 还是有希望的. 因为面试题目比较敏感, 不能直接分享原题哈, 不过我会根据我的理解, 找类似知识点和类似难度的题目分享一下.
HR 面试
这也是我参与的所有面试当中, HR 直接参与的”技术”面的. 我理解就通过这一轮面试可以用比较少的成本把一些不合适的候选人直接排除了. 当然这种方法可能不一定适用于所有公司.
电话面试
相比 onsite, 电话面试不能在一个很好的沟通环境下, 不能面对面和面试官进行交流. 当初我面试的一道题目和二叉树的遍历相关, 当然题目不会是直接写二叉树的先序/中序/后序/层次之类的遍历, 会有一个具体的业务场景在里边. 需要你分析这个具体的业务场景, 能够抽象出题目本质上就是 二叉树的遍历方法. 这道题目算是拿下了. 实际 coding 后, 面试官可能会根据你写的 code 去提问, 一些边界条件以及让你提优化方案.
HR 小姐姐介绍的电话面试时 1-2 轮, 其实我理解, 这应该是需要看第一轮的面试官的反馈, 是否犹豫是否再安排一轮电话面试. 毕竟和 onsite 相比, 电话面试成本相对更低一些. 在线 code 其实在面试过程中, 还是蛮重要的环节. 从你 code 的细节, 包括 code style, 边界条件的判断, 哪怕是注释情况, 都能看出一些编程习惯. 我认为这个环节对于招聘一个写代码的工程师来说, 肯定是一个必不可少的环节(google 整个就搞了五六轮).
现场面试
我记得其中有一道题目就跟 leetcode 上的类似(再次声明不是原题, 也不 share 原题), leetcode 上那个题目应该是二维矩阵, 最短路径相关的. 用 dp 可以解决. 只不过, 一般题目会分为好几个小问题, 难度一般从易到难.同时也考察到了二叉树, 仍然围绕着二叉树的遍历进行. 需要熟知二叉树的各种遍历方式, 非递归的方法(递归比较容易, 一般不会让写这个). 在遇到二叉树相关问题的时候, 是否可以联想到二叉树的遍历上来.另外有一道系统设计的问题, “知识图谱”的概念, 围绕着”图”的相关算法, 这个要求在白板上写出设计方案和伪代码. 同时面试官会不断 push 你让你提出更优的解决方案. 有足够多的计算资源, 并行去跑, 以及具体怎么实现. 这道题目我回答的不好(当初也知道不好, 后面 HR 反馈也印证了这一点).还有一道题目, 是解决生活中的场景题目. 需要你抽象出这个问题, 用代码来解决. 一般这种题目, 就需要反复跟面试官去沟通和确认其中的场景, 怎样把业务抽象成算法. 记得之前面试 Amazon 的时候也有类似的题目(只不过当初面 Amazon 考察的是 OO Design, 而本题是具体算法实现).onsite 一共聊了 5 轮, 上午 2 轮, 下午 3 轮, 其中有两轮是英文面试(英文面试后面会说). 整体来说,工程师岗位面试会围绕如下几个方面进行(以下参考 HR 提供的面试指南):
Coding: 用熟悉的编程语言(不限)实现给定的题目. 会重点关注解题目过程中的理解和沟通能力;
算法: 涉及到 排序/搜索/分治/动态规划/贪心/递归, 具体数据结构, 以及也有可能会涉及到
Dijkstra
和A*
等算法, 需要会算法复杂度的分析;排序: 常见的排序算法, 时间/空间复杂度, 例如 快排/归并/堆排序/插入/基数排序等等;
数据结构: 数组/连表/堆/栈/hash/数/二叉树等;
数学: 可能会涉及到离散数学, 组合数学, 例如 N个中选k 个的方法等;
图: 图的表达(例如矩阵/邻接表), bfs/dfs 等;
递归: 递归和迭代的转换;
其他: 设计和操作系统等;
午饭
中午 HR 小姐姐会安排一个 Google 的工程师, 带你吃饭, 跟你聊天. 有任何疑问都可以跟他沟通. 不得不说, Google 的伙食还是蛮不错的. 我当初就跟小哥哥聊了下他在 Google 工作的感受.
英文面试
各类知识点总结
下面的文章都有对应的原创精美PDF,在持续更新中,可以来找我催更~
- 92页的Mybatis
- 129页的多线程
- 141页的Servlet
- 158页的JSP
- 76页的集合
- 64页的JDBC
- 105页的数据结构和算法
- 142页的Spring
- 58页的过滤器和监听器
- 30页的HTTP
- 42页的SpringMVC
- Hibernate
- AJAX
- Redis
- ......
扫码或者微信搜Java3y 免费领取原创思维导图、精美PDF。在公众号回复「888」领取,PDF内容纯手打有任何不懂欢迎来问我。
原创电子书
原创思维导图