美文网首页Android开发经验谈
Android 高阶面试必问:全局业务和项目的架构设计与重构

Android 高阶面试必问:全局业务和项目的架构设计与重构

作者: 刨坑 | 来源:发表于2022-04-22 16:06 被阅读0次

    对于面试,尤其是高阶同学,有两个点始终是无法回避的:

    1. Gradle Transfrom 修改字节码实践;
    2. 重构与架构设计;

    为什么说这两个点比较重要呢?

    1. Gradle Transfrom 修改字节码实践

    首先,对于Gradle Transfrom字节码修改,应用场景繁多:

    1. 前段时间大家聊的比较多的隐私 API 合规检测,因为很多系统 API 的调用处 都没有通过反射去拦截,于是字节码 hook 成为了最佳方案,因为你的任何代码都会在编译期间转为class 文件,通过 class 文件一定能够找到涉及到的方法调用的代码,在通过字节码修改中转到特定的方法,可谓之「无所不能的 hook」
    2. 性能埋点,不管是做启动,还是流畅性优化,基本都无法绕开一个工具trace,trace 主要用于线下分析,那么线上怎么去发现耗时函数呢?给所有的函数插桩是个不错的选择,可以精准的定位到每个函数的耗时,辅助你解决问题;
    3. 一些实用场景,双击防抖等,编译期替换 OnClickListener 或者注入一些防抖逻辑,一次编写,终生受用;
    4. 甚至一些无痕埋点等黑科技,都离不开字节码的身影...

    可以看到字节码修改场景之多,而在字节码修改上,必须要提到一个库,那就是 ASM,不过 ASM 并不是那么容易掌握

    如果说字节码是深度的体现,那么架构设计与重构就是广度与综合实力的体现

    2. 重构与架构设计

    面试中,大家可能会被问到:

    你在过往的开发过程中,有没有一些值得拿出来说的重构/架构设计经历

    大家可能觉得,天天“搬砖”,哪有什么机会搞什么架构设计...

    很多时候,并不是我们没有机会接触架构设计,而是缺少经验和思考,毕竟好的设计肯定是经过思考以及充足的经验沉淀下来的。

    举个例子,比如在引入三方图片库这件事情上,一般同学可能 github 上一顿引用,然后调用其 API 就可以了。

    有架构思路的同学会怎么做呢

    他会在还没引入图片三方库之前,就会设计好业务方调用图片库的接口层,然后提供工厂方法创建空实现交给业务方使用,与此同时去调研多个图片库,然后每个图片库的能力作为图片能力接口的实现类。

    你可能会问?这样做有啥好处?还多了一层调用。

    首先,这一层调用,一般称之为「适配层」,恰恰是这个适配层,可以让架构设计的同学与业务同学并发开发。

    其次,每个三方库对应的就是适配层的一个实现类,未来不管是换底层库,还是多个底层库同时上线做实验,都是非常轻松的事情,甚至通过配置文件+反射连一行代码都不用改,业务方完全不用接触到具体的三方库 API,这就是传说中的接口隔离。

    在项目中,「适配层」的概念,大家可以举一反三,网络库是不是也可以这么搞?图片识别能力是不是也可以这么搞?登录能力是不是也可以这么搞?...

    关于解耦,除了「适配层」,还有

    1. 组件化必备的SPI 机制去做服务发现与注册;
    2. 利用Jetpack hilt去做组件间一些解耦;
    3. ...

    为了帮助到大家更好的掌握好 Android 架构相关知识点,来面对往后的项目需求以及面试,在这为小伙伴们准备《最新版 Android 核心知识点汇总》及《Android 面试指南》学习文档等,里面不仅包含了 Android架构知识点还有更多Android 技术点记录,需要参考查阅的可以直接去小编 GitHub

    GitHub地址:
    https://github.com/733gh/Android-T3
    
    《最新版 Android 核心知识点汇总》 《Android 面试指南》

    相关文章

      网友评论

        本文标题:Android 高阶面试必问:全局业务和项目的架构设计与重构

        本文链接:https://www.haomeiwen.com/subject/uodnertx.html