对于面试,尤其是高阶同学,有两个点始终是无法回避的:
- Gradle Transfrom 修改字节码实践;
- 重构与架构设计;
为什么说这两个点比较重要呢?
1. Gradle Transfrom 修改字节码实践
首先,对于Gradle Transfrom字节码修改,应用场景繁多:
- 前段时间大家聊的比较多的隐私 API 合规检测,因为很多系统 API 的调用处 都没有通过反射去拦截,于是字节码 hook 成为了最佳方案,因为你的任何代码都会在编译期间转为class 文件,通过 class 文件一定能够找到涉及到的方法调用的代码,在通过字节码修改中转到特定的方法,可谓之「无所不能的 hook」;
- 性能埋点,不管是做启动,还是流畅性优化,基本都无法绕开一个工具trace,trace 主要用于线下分析,那么线上怎么去发现耗时函数呢?给所有的函数插桩是个不错的选择,可以精准的定位到每个函数的耗时,辅助你解决问题;
- 一些实用场景,双击防抖等,编译期替换 OnClickListener 或者注入一些防抖逻辑,一次编写,终生受用;
- 甚至一些无痕埋点等黑科技,都离不开字节码的身影...
可以看到字节码修改场景之多,而在字节码修改上,必须要提到一个库,那就是 ASM,不过 ASM 并不是那么容易掌握。
如果说字节码是深度的体现,那么架构设计与重构就是广度与综合实力的体现。
2. 重构与架构设计
面试中,大家可能会被问到:
你在过往的开发过程中,有没有一些值得拿出来说的重构/架构设计经历?
大家可能觉得,天天“搬砖”,哪有什么机会搞什么架构设计...
很多时候,并不是我们没有机会接触架构设计,而是缺少经验和思考,毕竟好的设计肯定是经过思考以及充足的经验沉淀下来的。
举个例子,比如在引入三方图片库这件事情上,一般同学可能 github 上一顿引用,然后调用其 API 就可以了。
有架构思路的同学会怎么做呢?
他会在还没引入图片三方库之前,就会设计好业务方调用图片库的接口层,然后提供工厂方法创建空实现交给业务方使用,与此同时去调研多个图片库,然后每个图片库的能力作为图片能力接口的实现类。
你可能会问?这样做有啥好处?还多了一层调用。
首先,这一层调用,一般称之为「适配层」,恰恰是这个适配层,可以让架构设计的同学与业务同学并发开发。
其次,每个三方库对应的就是适配层的一个实现类,未来不管是换底层库,还是多个底层库同时上线做实验,都是非常轻松的事情,甚至通过配置文件+反射连一行代码都不用改,业务方完全不用接触到具体的三方库 API,这就是传说中的接口隔离。
在项目中,「适配层」的概念,大家可以举一反三,网络库是不是也可以这么搞?图片识别能力是不是也可以这么搞?登录能力是不是也可以这么搞?...
关于解耦,除了「适配层」,还有:
- 组件化必备的SPI 机制去做服务发现与注册;
- 利用Jetpack hilt去做组件间一些解耦;
- ...
为了帮助到大家更好的掌握好 Android 架构相关知识点,来面对往后的项目需求以及面试,在这为小伙伴们准备《最新版 Android 核心知识点汇总》及《Android 面试指南》学习文档等,里面不仅包含了 Android架构知识点还有更多Android 技术点记录,需要参考查阅的可以直接去小编 GitHub。
GitHub地址:
https://github.com/733gh/Android-T3
《最新版 Android 核心知识点汇总》
《Android 面试指南》
网友评论