往期文章:

《00. 文章合集目录》

《10. 揭秘 Compose 原理》

《2 小时入门 Jetpack Compose》

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

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

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

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

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

咱们先聊聊国内公司。

国内公司

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

面试流程

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

  • HR 交流:顺带约下一轮的时刻;
  • 书面考试:关于社招而言,互联网公司书面考试比较少,但国企、央企还比较常见。
  • 一轮技能面试:这一轮的面试官,一般都是团队内比较资深的工程师,技能细节的问题偏多,最终,一般还会预留20分钟左右的时刻,出一道算法题, 大概是 LeetCode Medium 等级。
  • 二轮技能面试:这一轮的面试官,一般是团队直属 Leader。详细的内容或许因人而异,有些面试官,喜爱在一个问题上持续深挖,试探你的「技能深度」;有些面试官,喜爱跟你聊职业动向,调查你的「常识广度」。当然,大部分情况来说,两者都会调查。
  • 三轮技能面试(终面):这一轮的面试官,一般是 Leader 的 Leader。从我的经历上来看,这一轮首要是调查提名人的「潜力」。那么,如何判断提名人的潜力大不大呢?答案便是:「根底」、「性格」。这一轮面试聊的内容,或许时而比较抽象,时而比较底层。
  • HR 面试:到了这一步,你的技能才能就现已得到认可了。剩下的,便是其他方面才能的调查了。通常来说,只需你没有诚信之类的问题,HR 是不会轻易拒你的。

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

面试预备

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

算法数据结构:因为平时作业顶用的并不多,所以,有必要在面试之前从头补一补算法和数据结构。

详细,我的做法是这样的:

  • 数据结构:封闭 IDE 的语法提示,用主力语言(我用的 Kotlin)完成一遍常见的数据结构:Array、List、Stack、Queue、Map 等等;
  • 算法:相同的,再把常见的算法自己手写一遍:常见的7种排序算法、3种字符串搜索算法、双指针、多指针、回溯,等等。
  • 刷题:关于国内公司的面试预备,把握 LeetCode 上 Top 200 的高频题就现已可以轻松应对了。注意,这儿我说的是“把握”,单纯仅仅刷一遍是不太或许达到这种境界的。我喜爱用不同的思路,不同的编程思维,从不同的角度,去分析同一道算法题。比方,你可以去看看我的 GitHub:ZeroAndOne_8Solutions。

除了数据结构与算法之外,还需求注意:计算机根底

是的,你没看错,社招相同需求花时刻补一补计算机的根底常识。比方:计算机网络、操作体系、加密算法等等。关于大部分工程师而言,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等等;

假如你最近计划找作业,欢迎重视我的大众号「朱涛的自习室」然后加我为老友,我非常乐意将我的面试材料共享给你。别的,我这儿也有各个大厂的内推通道,我帮你内推的话,你的简历经过率也会更高一些。

当然,假如你地点的团队和公司急需客户端人才,也欢迎你联系我,我也很乐意帮你扩散、转发。

最终,也是最重要的一点:我现在地点的团队也正在招聘,假如你感兴趣,也欢迎你来咨询

等你!