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

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

了解你投递的职位

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

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

6b077113e5b944b881003e7341f0a2f1

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

下方Google的SWE职位。

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

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

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

面试技巧

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

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

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

b5a1d693cd60416abf25c38c468e0587

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

电话面试

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

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

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

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

  4. 预先要自己主动多思考,自测,而不要等到面试官来提示你或者指出你的错误。在面试当中,你主动思考写测试用例会有加分的。

编码(算法)面试

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

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

  • 例如,快排/归并/堆排序/插入/基数排序等等;知道在有一些特殊的场景下,可能插入排序或基数排序会常规常见的快排,归并或堆排序。

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

  • 例如在Google相对比较常见。例如选取问题-N个中选K个的方法等;

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

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

系统设计

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

在某些特定的场景中,一定的约束条件下,如何设计出可扩展性强的系统,如何平衡简单的性,性能,鲁棒性。

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

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

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

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

经典算法面试宝典

着:左程云

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

bc17ae4c83dc4af0990de9b4231326e1

fad998e27935442c9e83fb8eca2340b6

95a95fb7361648549499b31220cb0699

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

10fd691c92b64f8aa863435c850ec512

3e698219422a41f38c684088c450d98c

Java面试突击

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

技术要点

  1. 爪哇

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

  3. 的Linux

  4. 的MySQL

  5. 雷迪斯

  6. 弹簧

  7. 消息数值

  8. 达博

  9. 数据结构

  10. 算法

d2baee19614a40ff86aafe97e2cf1b4c

1000道面试题及答案

内容涵盖:Java。MyBatis。ZooKeeper。达博。Elasticsearch,Memcached,Redis,MySQL,Spring,Spring Boot。春天的云。RabbitMQ,Kafka,Linux等技术栈

4450afc826eb4afea30b57897b1e1cdc

749713568468400e8e579d4457540025

程序员面试指南,1000 +面试题及答案,Java面试突击,算法等面试宝典,发现者的小伙伴转发此文关注我加VX:MXW5308可以免费领取



猜你喜欢

转载自blog.51cto.com/14455981/2517155