我是如何准备“BAT”与“外企”面试的?

你好,我是朱涛。这是「沉思录」的第六篇文章。

入职新公司快半年了,今天,我想和你聊聊,关于找工作、面试的一些心得与体会。说实话,在这次找工作之前,我面试找工作的经历并不丰富,反而是当面试官的次数更多。所以呢,这次换工作,我把国内、国外一二线公司都面了一遍,也算是弥补了自己这方面经验的不足吧。

「国内公司」比如百度、阿里、腾讯、字节,「外企」以 Google、Facebook、Microsoft 为代表,它们都是一流的互联网公司,但它们的面试,不管是从流程上,还是从内容上,差异还是挺大的。

如果你最近也想面试:国内、国外的一些大厂,相信这篇文章可以给你一定的帮助。

我们先聊聊国内公司。

国内公司

国内公司,包含传统互联网企业,还有一些国企、央企。

​附:其他跳板机会:技术大厂【前端-后端-测试】机会上海、南京、东莞、杭州、苏州、深圳、成都、西安等等;待遇还可以,有需要的铁子们可以试试~​

面试流程

从我的面试经验来说,国内公司大致的流程是这样的。

  • HR 沟通:顺带约下一轮的时间;
  • 笔试:对于社招而言,互联网公司笔试比较少,但国企、央企还比较常见。
  • 一轮技术面试:这一轮的面试官,一般都是团队内比较资深的工程师,技术细节的问题偏多,最后,一般还会预留20分钟左右的时间,出一道算法题, 大概是 LeetCode Medium 级别。
  • 二轮技术面试:这一轮的面试官,一般是团队直属 Leader。具体的内容可能因人而异,有些面试官,喜欢在一个问题上持续深挖,试探你的「技术深度」;有些面试官,喜欢跟你聊行业动向,考察你的「知识广度」。当然,大部分情况来说,两者都会考察。
  • 三轮技术面试(终面):这一轮的面试官,一般是 Leader 的 Leader。从我的经验上来看,这一轮主要是考察候选人的「潜力」。那么,如何判断候选人的潜力大不大呢?答案就是:「基础」、「品性」。这一轮面试聊的内容,可能时而比较抽象,时而比较底层。
  • HR 面试:到了这一步,你的技术能力就已经得到认可了。剩下的,就是其他方面能力的考察了。通常来说,只要你没有诚信之类的问题,HR 是不会轻易拒你的。

那么,面试国内的大厂,我做了哪些准备呢?

面试准备

每个技术领域的知识,其实都是模块化的,我把它们分为以下几个部分:

算法数据结构:由于平时工作中用的并不多,所以,有必要在面试之前重新补一补算法和数据结构。

具体,我的做法是这样的:

  • 数据结构:关闭 IDE 的语法提示,用主力语言(我用的 Kotlin)实现一遍常见的数据结构:Array、List、Stack、Queue、Map 等等;
  • 算法:同样的,再把常见的算法自己手写一遍:常见的7种排序算法、3种字符串搜索算法、双指针、多指针、回溯,等等。
  • 刷题:对于国内公司的面试准备,掌握 LeetCode 上 Top 200 的高频题就已经可以轻松应对了。注意,这里我说的是“掌握”,单纯只是刷一遍是不太可能达到这种境界的。我喜欢用不同的思路,不同的编程思想,从不同的角度,去剖析同一道算法题。

除了数据结构与算法之外,还需要注意:计算机基础

是的,你没看错,社招同样需要花时间补一补计算机的基础知识。比如:计算机网络、操作系统、加密算法等等。对于大部分工程师而言,Http、Https、Linux 系统、编解码,都还是需要有一些基本认识的。

最后,也是最重要的:专业知识

比如,我是 Android 工程师,面试之前,我会花很长时间补专业知识,从基础的到高阶的。目前市面上对高级 Android 工程师的要求其实不低。

  • 基础知识:最基本的,四大组件、生命周期、启动模式、事件分发、自定义View,这些都要烂熟于心。
  • 性能优化:Android 性能优化,这个方向的水其实很深。但对于普通的 Android 工程师而言,掌握一些基础的排查工具,以及基本的性能优化套路,还是很有必要的。如果是大厂专门做性能优化方向的工程师,往往需要深入 Dalvik、ART 虚拟机去做优化。
  • Framework:这部分,也许很多人会把它当作八股文来看待,比如: App 启动流程、Binder 机制,等等。我自己在准备的过程中,并不会强迫自己记住 Framework 层的具体细节,更多的,是去理解它背后的设计思想。工作中遇到问题的时候,去网上查源码,具体情况具体分析即可。
  • 工程架构:在准备这个部分的时候,我主要是去读了一下主流的开源项目,并尝试自己手写实现出它们的 Kotlin 版本。在这个过程中,我不仅对项目本身有了更深的理解,对 Java 和 Kotlin 也有了更深的认识。
  • 新技术:每个技术领域,一定是持续发展的。比如说,Android 领域,就有:Kotlin、协程、KMM、Compose 等等。不过,有趣的是,几乎没有面试官问我这方面的知识,我猜他们都很相信我吧。

聊完国内公司了,我们再聊聊国外公司吧。

外企

由于我肉身在国内,所以聊的外企大致分两种:Base 中国地区、Base 亚洲地区。Base 欧美地区的职位我都没有去聊,一方面我没有打算跑这么远,另一方面欧美的职位一般也不会考虑亚洲地区的候选人,签证之类的问题还是比较麻烦的。

面试流程

外企的面试流程和国内并不同,一般来说会是这样的。

  • Recruiter 电话沟通(英语):这一轮,业内一般叫做Intro Call。外企的简历筛选标准还是比较高的,能接到 Recruiter 的沟通面试,就已经说明候选人有很不错的背景了。这个阶段,Recruiter 主要介绍岗位的信息。当然,Recruiter 也会考察候选人的英语「听」、「说」能力,还有计算机基础知识。对,你没看错,Recruiter 也会问一些计算机相关问题,如果你的回答不能令 TA 满意,可能就没有后续了。(额外说明:外企面试流程当中,Recruiter 会充当国内 HR 的角色,这一点外企分工会更明确一些,不同的阶段,也会有不同的 Recruiter 对接。)
  • 一轮技术面(英语):这一轮,业内一般叫做Phone Interview,也叫「电面」,是远程的。面试官一般会是和你有相同技术栈的工程师,考察内容基本上就是:半小时数据结构算法、半小时技术,难度不会太大。这轮面试的作用其实就相当于一轮初筛。
  • N轮技术面试(英语):从这一轮开始,业内一般叫做Onsite Interviews。在疫情出现之前,一般都会要求候选人到公司现场面试,用白板和马克笔进行面试,而且是:从早上面试到下午,车轮战。这样的面试一般有3~5轮,根据每个候选人的情况而定。面试内容,不仅涉及数据结构算法,还会有系统设计内容(System Design)、领导力(LeaderShip)等等。近几年,由于疫情原因 Onsite 也是线上视频面试了。经过前面的4~6轮面试以后,Recruiter 会收集面试官对你面试评价,提交给「技术委员会」(Hiring Committee)来统一评判。
  • Team Match:一般来说,到这个阶段就说明你已经通过「技术委员会」评审了。这时候就需要去匹配公司内部有 Head Count 的团队了。外企的工程师文化是相对开放的,比如:我是 Android 工程师,通过面试以后,我也是可以去做前端、后端的——只要我愿意,以及有人愿意要我。这一轮的面试官,一般是有空缺 Head Count 的团队 Leader,对方会介绍团队的状况,如果你加入会负责什么事情,这是个「双向选择」的过程。

其实,不同外企的面试流程还是会有一些差异的。比如说,我经历的外企面试当中,最多的有 8 轮,这不仅考验技术,更考验体能。

那么,我是如何准备外企面试的呢?

面试准备

外企的面试准备,跟国内公司的其实差不太多,但是侧重点不同,主要体现在下面两个方面。

  • 数据结构算法:外企面试的准备,需要掌握更多高阶的数据结构与算法:字符串搜索算法、图论算法、动态规划;并查集、单调队列、线段树、跳表,越多越好。
  • 系统设计:前端与后端的系统设计,会有较大的差别。比如:前端(客户端)的系统设计,可能会是设计一个 Twitter App;后端的系统设计则可能是整个 Twitter 的服务设计,负载均衡用什么、什么情况需要一致性哈希,数据库怎么设计、Feed 流用什么数据结构、消息推送用什么设计模式。由于我是 Android 工程师,因此我在准备的过程中,整体偏向前端的设计,去尝试设计了市面上主流的 App:微信、Twitter、TikTok等等。

结尾

这次面试准备,前前后后我花费了将近4个月,也总结、收集了一些文档资料,主要涵盖以下几个方面:

  • 英语口语资料;
  • 数据结构算法学习资料;
  • System Design 学习资料,国内基本没有客户端相关的系统设计资料,我主要收集的都是国外的文章与书籍;
  • 最后,就是 Android 进阶相关话题的博客、开源项目。比如:性能优化、插件化、Framework、Kotlin、协程、Compose等等;

如果你最近打算找工作,欢迎关注我。另外,我这里也有各个大厂的内推通道,我帮你内推的话,你的简历通过率也会更高一些。

转载:朱涛的自习室【公众号「朱涛的自习室」】

全部评论

相关推荐

11/20 火山引擎一面如何选择学习前端的学习前端过程中的感受学习过程中一些自己解决得比较有难度,比较有成就感的事页签为什么不用第三方库,和你自己做的区别是什么不同页签之间的 url 相同吗如何区分不同页签的(动态路由参数)说一下你对 websocket 的了解Websocket 如何拿到历史消息说一下文件在服务端被 ai 解析的大致流程,涉及到了哪些技术平时有用一些 ai 工具吗介绍一下双 token 无感刷新的原理请求出错时如何处理为什么不用单 token,直接延长 token 有效期不行吗为什么不全部存在 cookie 里Http 状态码有哪些500 系列一般代表什么如何处理跨域Cors 能设置哪些字段,能设置什么维度的跨域,除了域名还能设置什么什么是组合式 api,有什么好处虚拟 dom 是什么为什么一些框架的最新版在尝试去掉虚拟 dom实现一个 event 类Js 编码二叉树的实现与遍历Js 闭包应用手写11/27 火山引擎二面自我介绍接触前端时间,怎么学习的介绍一下项目,包含业务场景介绍一下技术难点介绍一下基于 websocket 的库的选择你提到了自己封装了 websocket 类,和这些库的区别是什么描述一下这个类主要的功能和 apiStomp 和 websocket 的区别是什么从网络协议七层模型上看的话,stmop 位于哪一层Tcp 和 udp 的区别Stomp 支持二进制数据传输吗还了解别的类似 stmop 的协议吗知识库用到了 rag 吗介绍第二个项目有用到微前端吗你提到了多页签功能,页签之间的隔离怎么做的权限控制的力度是怎么样的,做到了什么层级登陆怎么做的,基于 sso 还是 oauth介绍一下你了解的 oauth 的底层原理登陆态是如何保存的Jwt 的优势是什么Keep-alive 的底层原理是什么讲讲泛型判断一个变量的类型有多少种方法Promise 有多少种状态Promise all 和 race 的区别Race 的第一个失败了怎么办,会执行第二个吗,返回结果是什么前端的网络安全了解 csp 吗说一下对前端工程化的理解前端有哪些性能优化的手段了解 webpack 的 model federation 吗最小子数组和(不要求时间复杂度)实现一个 event 类12/02 字节火山三面自我介绍介绍部门业务,商业化逻辑自己的规划是什么样的介绍学生干部经历,比赛经历如何激励同学们参加学生活动的比赛中团队做了什么,自己做了什么事你觉得你们的比赛课题有实践前途吗复盘的话后续有哪些可以优化的点讨论比赛项目前端当中,做的那些事对个人成长帮助比较大说一下产品形态和技术方案这个项目是你从 0 到 1 去做的吗你刚开始的时候是如何设计代码框架的为了保证项目的扩展性,做了哪些抽象详细介绍业务拆分逻辑,一直往下拆分的话会到什么程度一个比较完整的技术方案需要包含哪些内容如何确保工程稳定性,怎么选择一个好的技术栈做业务的时候涉及到了哪些,技术栈当中有没有需要提前确定的部分什么时候开始学习的前端有什么快速学习的方法吗工作过程中,你喜欢和不喜欢和拥有什么特质的人合作针对不喜欢的人如何共处你会去做 final call 吗,强行做决定可能有哪些问题反问秋招最后的面试了,拖了好久的面经一直懒得写,但看起来有不少同学应该用得上,还是写出来了,字节的三面确实会更注重考察候选者的个人潜质和 leadership,和之前的其他的技术三面感觉很不一样
点赞 评论 收藏
分享
评论
3
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务