zoukankan      html  css  js  c++  java
  • 【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站免费资源)

  • 相关阅读:
    两条斜线
    Cantor表
    城市网络
    一起来数二叉树吧
    牛客网音乐研究(枚举)
    删括号
    合并回文子串
    寻找道路
    EXTJS 4.0.2 XML数据
    extjs4.0.2a gridpanel看不到横向滚动条的一种原因
  • 原文地址:https://www.cnblogs.com/chengsisi/p/14350710.html
Copyright © 2011-2022 走看看