这是来自一位粉丝朋友的面经分享,他在 「Android 开发行业」 摸爬滚打5年多的开发,呆过的互联网公司有三家,均从事的Android 开发的工作。最后离职的一家公司也是做的最久的一家,工作了将近3年多时光。
废话不多说了,直接进入主题。
其实这个问题一直都不是一个单一性的问题,它是一多元化多维度的问题。对我来说主要是体现在以下几个方面:
当时我的面试大厂目标并不是单一的,大家看下图就知道了:
「因为这次面的都是大厂,所以面试的准备周期有点长,准备了2个多月的时间,进行复习学习、刷题等操作。」
面试是一个漫长的过程,这个过程不单纯只是面试这么简单,它也是一个 「自我考察」 的过程,在这个过程中也是 「讲究方式方法」。下面我从 「自我考察和方式方法」 两个方面来进行简单的阐述。
技术实力是面试的大前提,你需要非常清晰的了解自己,了解自己所要面试岗位,这是决定面试是否成功的先决条件。
比如我工作时间4年多,我要面试的岗位是高级Android工程师,那我这个自身素质是否能满足面试岗位所要求的条件?
其实这一点在我刚刚面试的时候也是拿不准的,因为在公司已经3年,这段时间对外界的发展其实是不了解的,所以我做了以下几件事:
- 把自己负责的项目业务进行整体总结。
- 把项目中用到的所有技术进行整体总结。
- 复习常用 框架/系统 源码,比如Glide,Okhttp,Reteofit,Activity启动流程,Hander,HashMap,锁等等常用的源码原理。
- 查看BOSS,拉勾对应岗位所要求的技能。
面试环节中即便你技术很好,项目经验很丰富,你也不乏有知识盲区,也有未能顾及的技术点,当这些点集中出现的时候你面试的成功率也会大大降低。所以针对面试我总结了以下几个流程:
「1.面试分为3个阶段(初期,中期,高offer期)。」
「初期」: 主要通过(BOSS,拉勾投递即可),初期主要投递小公司,这部分公司有两个目的。第一是相互交流技术点,不断完善自己的技术覆盖度。第二是了解当前市场的需求点。
「中期」: 主要通过猎头去投递,这个阶段主要投递中场,这类公司要求技术深度会比初期公司要深一些,算法的考察会加重,同时面试官的技术水平也会偏高一些,甚至有的中场面试难度会达到大场的水平,这个中期尽可能的持续长一些,非常有利于后续的面试经验总结。
「高offer期」: 这个阶段主要投递你的目标企业,切记面试优先级从最不意向的公司开始投递。投递的方式也是通过猎头,这样可以加快面试流程。以上的初中期更多的是完善你的技术覆盖度,以及你的面试感。为了是让你以最好的姿态去挑战你最想去的企业,这样一路走来你面试的成功率会大大提高。
**「2.沟通能力」**面试除了考察你的技术实力以外,还有一点是比较重要的,那就是沟通能力,你面试的岗位越高,对你沟通能力的要求也就越高。
沟通是特别重要的一个点,这决定你是否能非常清晰的把你所知所想完整的阐述出来。
我们面试的过程就是自我营销的一个过程,所以当你觉得自己沟通能力不是很强的时候,那么你就需要定向的去总结几个点:
比如一个出色的自我介绍, 项目中遇到的最难解决的一个问题,如果让你设计一个架构你应该怎么设计,简单的介绍一下你负责的业务 等…
**「3.面试频率」**面试周期我建议15-30天。
「初期」:小公司,我建议一天面试3个,如果有精力的话可以4个,这里需要注意一点,小公司有很多不靠谱的,比如还用Eclipse的,比如上来还没问技术就先打击你的,这种可以找机会离开,不要浪费时间。面试时长建议控制在60分钟以内,不要太抠细节。有条件的可以打开录音器,方便结束后晚上复盘。你复盘3-4天的时候你会发现面试内容开始大批量重复了。
「中期」:这个时期我建议一天最多2个公司,因为中场一般都是3轮或者以上的面试,有一部分是一路走完的。所以你需要给二面三面留出时间以方便充分沟通。千万不要一面完就打算走,因为一二三面所考察的完全不同,一面主要是基础,二面主要是框架/源码/简历里的技术,三面一般会聊项目,方案或者思路。
「高offer期」: 这个环节需要你按实际情况伺机而动,因为有的大厂是一条龙面完,有的是每一次面试都单独约,但是大厂一般的流程都比较慢,都在1周以上才能完成整场面试。一般都在4-6面之间。但是建议一天最多安排2场面试,这个面试时长不确定性因素会比较多。如果面试官不是很讨厌你,一般都会在60分钟以上。
我先后面试了差不多20几家公司,最后到手的OFFER有8个左右,最后选择的是自己想去的 「阿里」,面试内容我下面会简单总结一些,共分为两部分。一个是面试中出现的频率比较高的问题,二就是面试的这些公司的一些体验分享。
- java引用,以及引用队列,以及使用场景;
- 拆装箱
- LeakCanary
- map
- 线上性能监控
- SharedPrefrence 遇到的问题
- 手写算法
- Handler
- 进程间通信
- 序列化
- 动画,
- native崩溃捕获原理
- 结合项目提问
- Recyclerview的点击事件原理
- 启动一个空的apk,回启动几个线程
- 手写算法
- 跳槽原因
- 原来公司规模
- 预期薪资
- 个人优势
- 简历上写的一定要了解,并且知道原理
- 多熟悉项目,找出一些能聊得功能点
- 崩溃捕获,以及解决(java ,native)
- 优化需要知道(大厂都会问)
- 了解由点到面,需要把知识连贯起来
- MediaCodec连环炮:MediaCodec报错,只有错误码,没有任何其它信息,如何解决?使用MediaCodec遇到了哪些问题?同步使用和异步使用有什么区别?
- 如何计算音频帧,一帧音频帧有多大
- YUV基础知识,相比于RGB减少了多少空间,YUV 各个分量都是0实际渲染出来是什么颜色的,NV21和NV12有什么区别
- MP4是如何存储音视频文件的,它是什么结构
- OpenSL 相关的问题,如何使用。可以干什么不可以干什么
- 结合项目问题
- SurfaceView和TextureView区别
- OpenGL ES相关问题,MVP矩阵左乘和右乘有什么区别,什么是外部纹理,为什么叫外部
- OpenGL如何渲染一个View
- VBO是用来干嘛的解决什么问题
- 结合项目问问题
- 项目是什么架构,如何设计的,为什么这么设计
- 算法题:字符串反转
- 平时如何学习的
其实还有几家小型公司的面试,我就不在此一一的说明了,因为文章篇幅长度有限,所以就挑选了几个自己觉得面的还不错的公司进行跟大家分享。庆幸的是等到了自己想要的 「阿里 OFFER」,看了自己前期的2个多月的面试准备没有白费。
他之前在做面试准备的时候,从网上查找收集整理了一些 Android 开发相关的学习文档、面试题、Android 核心笔记等等文档,进行刷题复习 Android 相关的知识,通过这次的面试效果检测,也体验出了结果。这次面试能通过一半原因是自己的技术还过的去,另一半的原因就是吸收了这些学习文档精华。
Android 性能优化篇:https://qr18.cn/FVlo89
Android 车载篇:https://qr18.cn/F05ZCM
Android 逆向安全学习笔记:https://qr18.cn/CQ5TcL
Android Framework底层原理篇:https://qr18.cn/AQpN4J
Android 音视频篇:https://qr18.cn/Ei3VPD
Jetpack全家桶篇(内含Compose):https://qr18.cn/A0gajp
Kotlin 篇:https://qr18.cn/CdjtAF
Gradle 篇:https://qr18.cn/DzrmMB
OkHttp 源码解析笔记:https://qr18.cn/Cw0pBD
Flutter 篇:https://qr18.cn/DIvKma
Android 八大知识体:https://qr18.cn/CyxarU
Android 核心笔记:https://qr21.cn/CaZQLo
Android 往年面试题锦:https://qr18.cn/CKV8OZ
2023年最新Android 面试题集:https://qr18.cn/CgxrRy
Android 车载开发岗位面试习题:https://qr18.cn/FTlyCJ
音视频面试题锦:https://qr18.cn/AcV6Ap