近一个月面试了诸多大厂的 Android 开发,被挂的理由竟无一例外...

投稿人:何同学

一、前言

我本来不是一个喜欢写博客的人,因为性格内向、不善言谈,也很少他人分享自己经历,以前也仅写过一些技术分享,转折点是上周阿里面试,面试官问我写过博客吗,想起简书上19年就停更的技术分享文章,我只能回答没有,面试官就推荐我多写一些博客,将自己面试遇到的技术问题公开分享。

考虑到写一些技术分享的博客,有助于自己是技术的加深和理解,所以最近开始在简书记录一些自己曾遇到Android面试的技术问题。

写这篇大厂面试总结是因为刷到另一个博主的面经总结有感而为,觉得自己也应该记录下这一段自己认真努力中的日子。

二、三月面试的完整流程

在2020年的下半年我就有了跳槽的想法,但是一直没有付出行动。因为我是一个比较懒散的人,而在以往的面试中又需要大量的知识堆积,不得不让我抽出大量工作之余的时间去复习,我明白这样的自律性我短时间内是达不到的。因此冒出跳槽想法的萌芽被我扼杀在了摇篮之中了。

但是天意难违,今年初我们公司事业部因为某个项目上的资金链断裂,面临着裁员紧缩的风险。这一次我选择了果断跳槽,虽然准备不足,但是不跳槽的话,我明白大概率会失业。

因此,在短暂而急促之中开启我三月的面试之旅;

面试期间投递BAT和很多大厂的一些开发岗位,其中腾讯和字节的速度还是最快的,一周内腾讯面了三轮(已挂),美团面了两轮(已挂)。这一周五场面试从周二面到周四,时间安排上还是很紧张的,倒霉的是周四突然扁桃体发炎,导致周四两场面试真的是很难受,不过幸好没有影响到说话能力和面试的发挥。

先说一说腾讯面试,腾讯三轮面试一周面完,相对来说还是很快的,虽然挂在了三面,但面试收获的知识和技能还是挺多的。

腾讯面试过程

总结一下,腾讯对于Android基础的考察面试题问的相对较少,关于项目中的问题问的也不是很多,反而是对实践能力、算法能力、安卓底层原理等方面比较注重。

尤其是二面,面试官问了五六个偏向安卓底层的问题,每个点都落在我的知识盲区,几个问题全军覆没,但幸好之前关于在爱奇艺做的项目让面试官觉得我的对于安卓上层实现的能力还不错,所以二面险过。

第三面是总监面,这一轮面试官大佬有两个。他们更注重我的实践能力,主要考察算法和数据结构方面的知识,我表现的也不是很好,但还是因为之前我对于工作期间项目的介绍,让面试官觉得我的能力还可以,但是没什么用他们讨论过后还是决定以岗位不匹配,挂掉了。

字节跳动面试流程

字节跳动的面试就和大部分公司的一样,一面面试官注重基础知识;二面更注重算法和数据结构,面试以一道实践题为引,问了很多相关的技术实现问题,这一面和腾讯三面十分类似,由于之前没有遇到这种面试形式,所以表现的不是很理想。已挂GG...

三、 面经分享

腾讯面经

一面

  • 性能优化

  • 有遇到过哪些比较难的问题

  • 讲一下MQTT协议

  • 注解和反射原理

  • HashMap内部实现原理 怎么hash的 怎么扩容 1.7、1.8什么区别 多线程会导致什么问题

  • 项目中人脸识别用到了哪些业务场景

二面

  • 介绍自己做过的项目 处理了什么问题

  • ListView和ScrollView的冲突怎么处理

  • Handler怎么处理延时消息的 消息队列中死循环在native层都做了什么处理

  • 为什么用单Activity多Fragment 怎么处理传参

  • 代码可能导致内存泄漏和ANR 在代码层面怎么避免

  • okhttp拦截器实现 连接池的复用策略 有实现http2.0吗

  • okhttp和volley的区别 从实现策略讲

  • 讲一下eventbus实现原理

  • glide的三级缓存是怎么执行的 最近使用和正在使用的缓存是怎么切换的 怎么处理bitmap复用的 如果自己实现一个该怎么处理

  • 模块化怎么通信 底层怎么实现

  • 泛型编译期信息怎么储存的 什么情况下泛型会擦除

  • MVP、MVVM优缺点

  • 与web是怎么交互通信的 这个模块怎么设计的

  • 接口 抽象类区别 可以new吗

  • JDK8的流有用过吗 解决了什么问题 写过接口的默认实现吗

  • 讲一下RN和Flutter的区别

  • 算法:查找数组中大小为x的两个数(只有一对)

三面

  • http2.0什么特性 有哪些问题

  • 设计模式了解多少 讲一下装饰模式

  • MQTT协议解决了哪些问题 为什么

  • flutter了解多少

  • 平时都通过哪些方式学习和了解技术的

  • 都有了解其他哪方面的技术

  • 在最近的项目中学到了什么

  • 职业发展方向

  • 对于这项工作你有什么优势

字节跳动面经

一面

  • 项目经历 自己做过哪些核心的模块

  • MVP、MVVM优缺点

  • http状态码讲一下常用的

  • 从ViewRootImpl开始 事件分发流程 onClick和onLongClick怎么执行的

  • TextView的绘制流程 怎么处理换行

  • 性能优化都做了哪些

  • Shareperference实现机制

  • 插件化原理

  • ViewRootImpl都做了哪些事情

  • 都有哪些window类型 内部是怎么处理window不同权限的

  • 算法:给定一个数N 如23121 给定一组数字A如{2,4,9}; 求由A中元素组成的、小于N的最大数,如小于23121的最大数为22999

二面

  • 讲一下Handler消息机制

  • 项目中都做了哪些性能优化

  • 讲一下绘制流程 View和ViewGroup的区别

  • 事件分发流程是怎么执行的

  • http的请求过程

  • HashMap原理 put过程、扩容 1.7 1.8区别 ConcurrentHashMap原理

  • MQTT协议的特点 底层原理

  • Activity启动流程 为什么zygote使用socket通信

  • 插件化原理 遇到过什么问题 怎么解决的

  • classLoader双亲机制

  • 模块化通信 自己设计一套怎么实现

  • tcp协议请求过程

前几日,我把面试中所涉及到面试知识点、面试题及答案已整理成PDF模板格式,分成了网络面试部分、数据结构与算法面试部分、Java面试部分、Android基础面试部分、Android进阶核心面试部分、Kotlin /flutter面试部分,共计326页。需要这份PDF的朋友可以【加入此处即可打包获取】,希望大家在面试中能多多避坑。

四、 面试总结

这一月面试下来,最大的总结就是,要主动展现自己的项目经验,一个好的项目经历,是很好的加分项。我在前司期间参与新项目的开发,做的两个项目都是从零开始,可以很好的展现安卓技术能力,所以在面试的时候,会花大量时间介绍工作中研发的项目,面试官也会很耐心的听,同时也会围绕项目问一些问题。

还有很关键的一点,如果有视频或者成品可以展示出来,推荐面试的时候一边展示一边讲解,面试官更喜欢可视化的成品展示,可以更好更准确的了解你的技术水平,毕竟“空口无凭”。腾讯二面的时候,我本来是空口介绍自己的项目,面试官就问有没有可以展示的Demo或者成品,我才想起来之前在自己电脑上做过两个Demo,面试官直言以后面试讲解项目的同时把项目成品展示出来,面试官的这个建议对我帮助很大,之后的面试,我介绍项目都是一边展示Demo一边讲解,这样更容易引导面试官跟着我的节奏走,面试官询问的技术问题更有概率是我了解的,一个很明显的表现就是腾讯和美团的面试官在听完我的项目讲解后,都询问了一个类似的问题:“你可以讲讲在项目中遇到的能够体现你技术思考的点吗?”

总之,面试是自我提升最快的学习方式之一,一个月忙碌的面试之后收获颇丰,在不断的被面、总结、再被面的过程中,可以很快的了解自己的知识盲区,并不断补足自己的能力。所以我十分感谢每一位认真对待面试的面试官。

如需参考Android完整版的面试知识点,也可以去我的【Github】阅览,建议给了Star哦!

推荐阅读更多精彩内容