前言
笔者是前腾讯Android高工,曾经多次担任面试官,现在在字节code。
从毕业到现在,被别人面试过,也面试过别人,大大小小的面试,一两百次,也算久经沙场。
现在,我以腾讯非在职员工的身份来和大家分享一下腾讯、字节等大厂Android岗面试的流程、攻略以及一些建议,希望能帮到看见这篇文章的有缘人。
都是干货,赶紧收藏,三连走起。
提笔初衷
写这篇文的初衷是有很多朋友都在问我腾讯面试相关的问题(嗯哼,不少都是来打探面试真题的)。通过交流得知,不管是老猿还是新手,大家或多或少都有些害怕面试,尤其是大厂的面试。所以,在这里详细的讲一下。
PS:本文涉及的范围很广,对多数面试腾讯的人来说都有参考价值,即便是准备面试其他公司,也有很多相通的地方。相信大家看完本文之后,一定会有所收获。
本文主要分为三个部分:
- 疑问解答
- 面试流程
- 面试攻略
- 实用建议
- 学习干货
2021年,大家一起报团取暖,一起牛掰!
关于工作的Q&A
应届生的话,这里就不多说了,只有一个建议:去大厂(大厂都可以,都能学到东西,薪资条件什么的自己看着选)。
这里主要给已经有3~5年的Android开发经验的朋友心中的一些疑惑做一些解答。
我现在到底该不该跳槽?
-
首先你需要想清楚,你想要的待遇薪资、公司平台、团队氛围、老板实力是什么样子。这些因素在综合影响着你的工作和发展,如果只是厌烦当下的工作,没有目标就跳槽的话成本太高了。
-
第二个需要思考的问题就是:你为面试做好准备了吗?
简历优化好了吗?面试前要准备的技能知识复习好了吗?算法题刷的怎么样了?项目准备好如何去说了吗?如果你的回答是NO,八成会成为炮灰。
腾讯(大厂)面试要怎么准备?
设个问题涉及的内容很多,下面的版块会展开进行详细讲解。
面试流程
大厂的部门一般比较多,岗位类型多,职级差异也大,所以大家的面试流程都是不一样的。
一般来说,针对高开,大部分的大厂面试都会经历2轮技术面,1轮领导面,1轮HR面,如果面试情况有争议(或者面的特别好的情况)会有一轮加面,总体来讲总共会有4轮面试。
以字节为例,基本上所有面试都会在线上进行,一面2轮技术面,2面领导面(也会有一些技术的考察),3面就是HR面谈薪资和定级了。
这里图解说一下普适性的面试流程。
(PS:面试如打怪升级,大家要先通关前面才能进入后面。大家可以通过这张图来看自己打到了那里。)
面试攻略
编码面试
算法
在开篇准备阶段我们就已经提过算法相关的准备工作,对于字节来说,算法面试 是每轮技术面试都会有的“饭后甜点”(也有可能考察多线程)
从字节的面试规则来看,这一面是流程的必然要求;
从考察点来看,这个环节主要考察面试者的编码能力,思考能力,算法能力等等
虽然只有短短10分钟的编程时间,却可以让你把缺点暴露的淋漓尽致,比如边界条件的判断,临界值的定义,指针(或者说引用)的定义和维护等等,而这些只有你真的在练习算法的时候真正去思考,去关注,才能得到一个比较好的编程习惯
从这个角度来看,面试管如果问“快排”这样思维固定,代码固定的题目,反而是比较简单的,所以“快排”的考察一般出现在一面最后的环节
比较能考察以上所提到的各种能力的,最常考察的就是链表,比如链表反转,两个链表相加,找到链表的倒数第n的节点等;链表相关的题目,说难不难,说简单却涉及很多细节,这里我们就不贴具体的代码了,小伙伴们上Leetcode
可以找到很多优秀的代码示范
如果想练习高频面试题目,笔者推荐牛客网
的高频面试题 >>> https://www.nowcoder.com/activity/oj
当然,如果要通过刷高频通过算法面试,每道题至少刷3遍,加强自己的算法手感,才能在面试中不卡壳
多线程
最后算法面试部分,有可能也会对多线程相关题目进行考察,这部分一般不会很难,主要考察编码能力,以及对多线程的理解,如线程之间是如何进行协作的,如何保证线程安全及线程的等待通知等
比较常考的就是“四个线程abcd,启动顺序不定,a线程打印a, b线程打印b,按顺序输出abcd”,这也是笔者在字节面试中遇到的一道题
这个问题主要考察线程的等待通知机制,在实现上并不难,笔者也写过一篇文章来分析相关的代码及内部原理,可以点击 >>>找我获取《线程手册》PDF
相信看完这个线程手册,基本上 90% 的多线程问题都难不倒你了(剩下的10%是AQS实现原理相关问题,就更深入一些了)
技术面试
这里笔者指除了编码之外的技术能力面试,针对Android面试来说,通常会对两大块进行考察,一部分是语言相关,一部分是Android相关
语言部分
语言来讲,通常是Java,其他的也有Koltin, Groovy, Kotlin, C++ 等方面的考察,除java外其他的都会根据简历的情况进行一定考察
Java面试题就很多了,一般 warm up
的 题目就是以面向对象相关问题进行展开,再进行深度提问,比如笔者就遇到过提问“对多态有什么理解,多态是如何实现的”这样的问题(于是有了笔者最近整理的一份PDF手册 >>> 到底什么是多态?(找我领取多态手册))
其他高频的还有Hashmap相关源码,线程并发问题,等等,笔者在这里想要强调的是,针对Android 高工
的面试,一定是要挖一些有深度的东西的
比如面试管问题Hashmap源码,你要能讲出来Hashmap源码的实现细节,并且能拓展到如何实现线程安全的Hashmap,CurrentHashmap是怎么实现的,又有哪些其他的线程安全容器,他们内部又是如何实现的线程安全等等,具体细节请参考 >>> 找我获取《线程高并发手册》PDF
当然,看源码不是一件轻松的事情,这又是另外一个话题了,如果你暂时读源码比较吃力,可以先参考笔者的相关文章,再去自己读源码捋思路,进一步内化为自己的知识
Android部分
针对高开面试,Android部分自然也避不开源码相关内容,比较常问的就是“Activity的启动流程”,“系统启动流程”之类,这些笔者也都做了输出,可以点击 >>> Android11源码分析(找我获取) 查看相关系列文章
另外插件化,组件化,热更新,性能优化这些相对“进阶”一些的技术点也会着重进行考察
拿字节面试来讲,就对插件化相关问题进行了考察,尤其是对代码细节考察的比较仔细,比如插件Activity是在哪里做的Hook,如何“欺上瞒下”进行替换的
这样考察的目的一来是先检验面试者是不是真的做过或者研究过,二来也是对代码的深度理解进行考察
笔者的建议是,抓住一两个跟项目相关的有深度的点进行深挖,再结合源码去做一些研究工作,把这些技术点作为自己在面试中的核心竞争力和卖点,展示给面试管
比如笔者的核心竞争力就是Android源码和插件化,只要问这两个问题相关的,笔者基本上都不在话下
打造自己的核心竞争力,是高开面试必须要做的一步
附录:1307页字节跳动等大厂Android面试全套真题解析
实用建议
面试这件事,功夫在平时,临场时最重要的是心态。下面给大家几点实用性建议。
-
充分准备
珍惜每次的面试机会,做好充分的准备。刷题什么的不要懈怠。上面的资料多看几遍,力扣的题目最好都刷一下。(尤其是算法题,千万不要偷懒,算法是决定工资水平的一个分水岭,想拿高薪的千万不能放弃算法题)。 -
不抛弃 不放弃
失败是成功之母。要有失败的心理准备,不要因为一次的不顺利就灰心。简历会被放回到人才库,其他部门仍可以让你去继续面试,不过是从头再面(就当做积累经验吧)。 -
猥琐发育,别浪
在准备跳槽的朋友尤其要注意,很多时候,你觉得你很有价值,其实那只是一个幻觉,其实是平台的价值。离开了平台,你什么也不是(并不是贬低和打击你的信心,只是希望你不要盲目自信)。希望大家能有谦虚学习的态度,猥琐发育,别浪。