【Android面试宝典】2021年,腾讯等大厂Android高级开发面试完全攻略手册!

前言

笔者是前腾讯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面试全套真题解析

实用建议

面试这件事,功夫在平时,临场时最重要的是心态。下面给大家几点实用性建议。

  • 充分准备
    珍惜每次的面试机会,做好充分的准备。刷题什么的不要懈怠。上面的资料多看几遍,力扣的题目最好都刷一下。(尤其是算法题,千万不要偷懒,算法是决定工资水平的一个分水岭,想拿高薪的千万不能放弃算法题)。

  • 不抛弃 不放弃
    失败是成功之母。要有失败的心理准备,不要因为一次的不顺利就灰心。简历会被放回到人才库,其他部门仍可以让你去继续面试,不过是从头再面(就当做积累经验吧)。

  • 猥琐发育,别浪
    在准备跳槽的朋友尤其要注意,很多时候,你觉得你很有价值,其实那只是一个幻觉,其实是平台的价值。离开了平台,你什么也不是(并不是贬低和打击你的信心,只是希望你不要盲目自信)。希望大家能有谦虚学习的态度,猥琐发育,别浪。

Android技术学习推荐(B站免费资源)

猜你喜欢

转载自blog.csdn.net/BUGgogogo/article/details/113446168