这篇文章来源于去年和一位读者朋友(下文以小欧代称)的模拟面试,把面试问题记录一下,看看是否能给大家带来一些启发
读者介绍
涉及到个人隐私,这里不把简历放出来,对小欧做一些大致介绍
工作情况
小欧 19 年本科毕业,目前已入职百度
专业技能
小欧简历里写的专业技能比较全面,包括这些:
Java 的知识(反射、泛型、注解、List 等集合源码、并发、JVM 相关)
Android 知识(四大组件、View、Binder、Handler、SP、Activity 启动、插件化等)
性能优化(包体积、布局、内存优化)
Gradle(Task、打包流程、自定义 Plugin、编译优化等)
计算机基础知识(计算机网络、设计模式等等)
项目经验
小欧在上家公司做过组件化和 MVP,写过 Gradle Plugin,做过 Gradle 编译优化,做过包体积优化
简历评价 & 问题导向
从专业技能来看,对于毕业一年的 Android 开发者来说,Java、Android、计算机基础知识是必备技能,性能优化、Gradle 算加分项了
从项目经验来看,小欧毕业一年做了不少事情,算是比较难得了,其中的 Gradle 编译优化、包体积优化就是亮点了
所以总体上来看,这份简历可以体现出小欧比较出色的能力(学习能力和做事能力),所以面试问题路线大概是两点:
- 先确认项目是否真实做过,做的多深,对项目中用到的知识、工具掌握有多深
- 考察专业技能的深度和广度
面试题目及考察点
下面是面试的题目和考察点,对于一些比较敏感的问题,没有展示出来(以下观点仅代表个人,不代表任何组织和公司)
1. 组件化如何实现?和 Arouter 的区别?优势?(考察项目中对组件化的参与程度,以及对组件化的一些思考)
此类问题其实和项目关联度很大,需要对所做的项目有详细的了解,同时也需要对已有方案的了解
2. 组件间如何通信?(考察对组件化的了解程度)
3. MVC、MVP、MVVM 区别?MVP 的缺点?(考察对 MVP 以及相近的架构的理解)
对于 MVC、MVP、MVVM 的分析其实有很多文章,如果在回答的时候有一些自己不一样的思考就更好了
4. 包体积如何优化?(考察项目具体的实现)
关于包体积优化,网上其实有很多通用方案,如果自己真的做过,有一些自己不一样的思考就更好了
5. png 和 webp 的区别?(考察细节点)
知识类问题,知道即可
6. arsc 是怎么用的?(考察细节点)
知识类问题,知道即可
7. Gradle 构建优化做了什么事情?(考察 Gradle 构建优化做的事情)
网上有关的文章其实也很多,如果能答上来,会往更深层次问下去,需要有一些准备
8. Gradle 6.5.1 相比 4.4.1 的变化?(考察细节)
9. Gradle 的生命周期?分为哪些阶段?(考察对 Gradle 的掌握程度)
网上有关的文章其实也很多,如果能答上来,会往更深层次问下去,需要有一些准备
10. Android 打包流程?(考察基础知识)
网上有关的文章其实也很多,如果能答上来,会往更深层次问下去,需要有一些准备,下面的几个问题都属于打包流程引申出来的深入问题了
11. AAPT2 和 AAPT 和 有什么区别 (考察细节点)
12. Class 和 Dex 文件的区别?(考察细节点)
13. V1 V2签名?(考察细节点)
14. 为什么要分 Dex?(考察细节点)
15. 多 dex 怎么加载?(考察细节点)
16. View 的绘制流程?(基础知识考察)
关于 View 的绘制流程,网上讲解的文章也比较多,如何区分是看文章还是看源码了解的知识呢?本质上还是根据对细节的了解程度来区分的
17. 如何重绘?requestLayout 和 invalidate 的区别?(基础知识考察)
18. View 事件分发 cancel 事件什么时候触发?(基础知识考察)
19. 事件如何从点击屏幕传递到 View 的?(基础知识考察)
20. Java 内部类如何访问外部类方法?(基础知识考察)
21. 如何访问 private 方法(基础知识考察)
22. 如何检测线上 ANR?(知识广度考察)
23. 如何检测 crash?(知识广度考察)
总结
但是整体问下来,可以看出来小欧的知识还是比较扎实的,深度和广度都有的,项目中的内容了解也比较好,作为刚毕业一年的同学来说还是很优秀的
上面的问题其实更多的局限在知识掌握的层面,对工作经验更多的面试者来说,考察点可能又会不一样了,可能重点就在项目和对项目的思考上了
因为时间关系,还有很多问题其实是没有考察的,比如 Java 集合、多线程、四大组件等等
面试的过程其实就是抽样检测,各个公司、面试官考察的重点也不一样,但不变的目标都是考察面试者的工作、学习能力,挖掘潜力,以及和岗位的匹配程度
另外对于一些基础知识,面试之前还是要复习一下的,不然可能出现的情况是知识点就在口中,但是说不出来
最后,一个小目标
自从在网上更新一些安卓知识文章以后,收到了很多读者朋友们不错的反馈,我也很高兴能给大家带来帮助和启发,至少说明这些文章还是有一些价值的
在新的一年里,我想给大家提供一些更实质的帮助,希望能 2021 年能 【帮助 100 位安卓开发者入职大厂】
我觉得这件事,在一定程度上是有意义的
可能对于一些大佬来说,在大厂之间游走是很随意的事情,但是还有更多的是希望能进入大厂的开发者,他们可能缺少一些机会,可能缺少一些方法,可能缺少一些指导,而且进入大厂这件事可能会给后面的人生带来不一样的可能性
而且这件事其实是互利互惠的,对开发者来说,获得进入大厂的机会,对公司来说,也有更多的选择范围,对我来说当然是有发文的话题了,另外也是一个提升的机会,对其他读者来说,从面试题目中应该也能得到一些启发
所以我想来尝试做这件事
具体怎么做呢?
- 尽可能提供大厂内推的机会(当然目前内推可能比较少,不过我相信后面会多起来的)
- 提供简历修改建议
- 提供模拟面试以及面试建议
- 大厂面试过程中遇到的问题讨论
后面应该还会有更多的想法
为什么是 100 位呢?
先定一个小目标吧