写点什么

凭借这份 Github 上 55.3K 面试指南,我成功拿到 Google、阿里的 offer

发布于: 2021 年 01 月 30 日

因为这份面试指南相对比较通用,因此小编直接把题目从 Google 面试指南改为大厂面试指南了。下面就直接来说重点吧。


了解你投递的岗位


首先最重要的就是了解你要投递、面试的岗位具体的工作内容和职责,一般还需要了解对应 hc 的职级。一般而言,公司招聘都是一个萝卜一个坑,萝卜太大或太小都不一定合适。比如有的公司,预期是招聘 P7 级别的,但你刚毕业两三年,可能希望就不大。本来只想招聘 P6,结果来了一个 P8 的候选人肯定不合适,所以有时候面试没通过并不是候选人不够优秀,也有可能是候选人过于优秀。


这里分享一个国内部分互联网公司职级薪酬对比图,大家可以参考一下。



互联网大厂薪资对应关系,图来源:曾加 @知乎


下面阐述下原文中的 Google 的 SWE 岗位。


SWE 其实就是 Software Engineer 的缩写,就是一般的码农岗位啦。Google 的 SWE 岗位根据不同的项目,可能需要参与到项目的各个流程中,比如:调研(研究),设计架构,做计划,开发测试以及发布等各个周期。


涉及到具体的产品可能需要处理大规模的数据,需要提供详细的解决方案,将具体的方案落地时可能会涉及到技术的方方面面。有点“全栈工程师”的味道。


Google 是一家技术驱动型公司,招聘各种技术人才来处理各种技术难题,影响的用户都是数千万上亿级别的。设计到的具体产品包括:AdWords,Chrome 浏览器,Android,Youtube Google 云和 Google 地图等等,Google 的工程师正在通过各种各样的技术来改变世界。


面试 Tips


在面试过程中,期望了解到候选人的思考过程,不仅仅是考察技术能力,同时也会考察候选人到底是怎么来解决具体问题的。候选人需要和面试官来回沟通确认来明确和佐证自己的观点。


在面试过程中可能会遇到一些开放式的问题。这个时候也不用紧张,可以和面试官来沟通明确具体问题的边界,一步一步来解决。


当回答一个问题的时候,候选人需要多尝试思考一些优化的方案。很多情况下,可能最开始的解法不一定是最优的。如果可能的话,在最开始回答问题的时候,可以直接先给面试官一个暴力的解法,这样方便在很短的时间之内明确你是否真的了解清楚了题意。



面试过程中,并不一定真的会在 IDE 上编译和跑通代码。但最好刻意提前在白板或者纸上联系写代码。注意要想清楚一些边界的条件,不要遗留一些明显的 bug。但不用纠结一些具体的很小语法错误,只要让面试官明确意思即可,比如不用纠结 substring 的参数到底是(startIndex, length) 还是 (startIndex, endIndex)。


电话面试


电话面试一般会涉及到数据结构和算法,大概也就是 20~30 行代码,你可以用你自己最熟悉的编程语言。注意代码有良好的可读性,并且足够鲁棒。


  1. 你可能会被问一个很开放的问题,需要你跟面试官沟通明确问题的边界,具体的需求;

  2. 问题明确后,你需要向面试官解释你的算法思路;

  3. 然后需要有能力将上面的算法思路转成代码。因为时间有限,不会要求你给一个完美的解法的。可以先写出一个解法来,然后再逐步优化。注意一些边界的 case。确实在真实的面试场景中这一步就会卡掉很多人。

  4. 逐步优化你的代码,自己主动写测试用例来测试解决其中的 bug。一定要自己主动多思考、自测,而不要等到面试官来提示你或者指出你的 bug。在面试当中,你主动思考写测试用例会有加分的。


编码(算法)面试


  • Coding: 至少用一门你熟悉的编程语言(不限,推荐 C++,Java,Python,Go 或者 C)实现给定的题目。从代码中会考察一些基本的 API、面向对象的设计,编码和测试,包括各种边界条件的处理。注意会重点关注解题目过程中的理解和沟通能力,而非背诵。

  • 算法: 可能会涉及到 排序/搜索/分治/动态规划/贪心/递归,具体数据结构,以及也有可能会涉及到 Dijkstra 和 A* 等算法,需要你会算法复杂度的分析。推荐你在下笔(下手)之前,最好先和面试官沟通大致思路。

  • 排序: 常见的排序算法,时间/空间复杂度,各自适用的使用场景分析。例如 快排/归并/堆排序/插入/基数排序等等;知道比如在有一些特殊的场景下,可能插入排序或者基数排序会优于常见的快排、归并或者堆排序。

  • 数据结构: 数组/链表/堆/栈/hash/数/二叉树等;知道具体什么算法搭配什么数据结构。

  • 数学: 可能会涉及到离散数学、组合数学等。这在 Google 还相对比较常见。例如选取问题 -- N 个中选 K 个的方法等;

  • 图: 有一些问题可能常常会涉及到图相关算法,例如距离,搜索,连通性,环的检测。你需要知道常见的图的表达方式(例如矩阵/邻接表),并理解各种表达方式的优缺点。图的遍历方式 bfs/dfs 等,算法复杂度和代码实现。

  • 递归: 递归和迭代的转换;


系统设计


系统设计问题会考察候选人如何将理论知识和经验到现实的具体问题场景中来。


比如常见的话题可能会包括:接口,类继承关系,分布式系统等。在特定的场景中,一定的约束条件下,如何设计出可扩展性强的系统,如何平衡比如简单性、性能、鲁棒性。


在系统设计过程中,需要你熟悉各种互联网技术,比如路由,域名解析,负载均衡,防火墙等等。


可能还会涉及到如一些图的遍历,分布式系统,以及如何抽象显示生活中的一些问题,变成产品设计。设计的知识点可能会包括:具体的 API,二叉树,缓存,MapReduce,索引,倒排索引,编译器,内存缓存,网络等等。


系统设计题目一般在面试中都会有,我在面试 Google、之前面试 Amazon 等都有一轮面试主要考察这个点。这里可以结合一些比如面向对象的设计原则等来解答,考虑系统可扩展性等。可能面试官会让你不断优化,直到你回答不上来为止。我理解面试官其实不是真正想要从你这里得到一个最优解,只是希望在这个过程中考察你的思维方式等。


操作系统也是其中的一个考察点,需要了解进程、线程,并发(并行),锁,信号量等等概念以及他们的实现机制。知道一些基本的比如死锁是怎么发生的以及如何避免,进程、线程的区别,他们的调度资源是什么。


经典算法面试宝典


著:左程云


这是一本程序员面试宝典!书中对 IT 名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现。针对当前程序员面试缺乏权威题目汇总这一痛点, 本书选取将近 200 道真实出现过的经典代码面试题,帮助广大程序员的面试准备做到万无-一失。 “刷”完本书后,你就是“题王”!


一键三连+评论,然后添加我的 VX(tkzl6666)即可免费领取。







附:排序与数据结构与算法




Java 面试突击


这是一本关于面试大厂回来整理的面经及知识点(每个题目有对应的面试答案)


技术要点


  1. Java

  2. 计算机网络常见面试点总结

  3. Linux

  4. MySQL

  5. Redis

  6. Spring

  7. 消息队列

  8. Dubbo

  9. 数据结构

  10. 算法



1000 道面试题及答案


内容涵盖: Java. MyBatis. ZooKeeper. Dubbo. Elasticsearch、Memcached、Redis、MySQL、Spring、 Spring Boot. Spring Cloud. RabbitMQ、 Kafka、Linux 等技术栈




程序员面试指南、1000+面试题及答案、Java 面试突击、算法等面试宝典,感兴趣的小伙伴


一键三连+评论,然后添加我的 VX(tkzl6666)即可免费领取。




用户头像

微信:tkzl6666 添加获取你想要的Java资料 2019.01.29 加入

添加VX(tkzl6666 ) 获取大厂面试真题,面试复习资料,Java进阶资料,Java实战项目。

评论 (1 条评论)

发布
用户头像
凭借这份 Github 上 55.3K 面试指南,我成功拿到 Google、阿里的 offer
2021 年 01 月 30 日 15:41
回复
没有更多了
凭借这份Github上55.3K面试指南,我成功拿到Google、阿里的offer