当前位置:网站首页>Android 高阶面试必问:全局业务和项目的架构设计与重构
Android 高阶面试必问:全局业务和项目的架构设计与重构
2022-04-23 02:41:00 【码中之牛】
对于面试,尤其是高阶同学,有两个点始终是无法回避的:
- 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
版权声明
本文为[码中之牛]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_61845324/article/details/124348385
边栏推荐
- hack the box optimum靶机
- JVM类加载器
- How big the program development of single chip microcomputer project can be, it represents your level of knocking code
- Halo open source project learning (I): project launch
- Renesas electronic MCU RT thread development and Design Competition
- TypeScript(1)
- SQL server2019无法下载所需文件,这可能表示安装程序的版本不再受支持,怎么办了
- 字符串去掉空格问题
- 机器学习(周志华) 第十四章概率图模型
- 接口请求时间太长,jstack观察锁持有情况
猜你喜欢
认识进程(多线程_初阶)
1215_ Hello world used by scons
This is how the power circuit is designed
[wechat applet] set the bottom menu (tabbar) for the applet
工业互联网+危化安全生产综合管理平台怎样建
Machine learning (Zhou Zhihua) Chapter 14 probability graph model
Target narak
每日一题冲刺大厂第十六天 NOIP普及组 三国游戏
Understanding process (multithreading primary)
一个国产图像分割项目重磅开源!
随机推荐
win查看端口占用 命令行
期中汇总(概论+应用层+运输层)
Devil cold rice 𞓜 078 devil answers the market in Shanghai and Nanjing; Communication and guidance; Winning the country and killing and screening; The purpose of making money; Change other people's op
Deploying sbert model based on torchserve < semantic similarity task >
This is how the power circuit is designed
Interim summary (Introduction + application layer + transportation layer)
Efficient music format conversion tool Music Converter Pro
php+mysql对下拉框搜索的内容修改
Lighting LED of IAR embedded development stm32f103c8t6
Looking for a job, writing a resume to an interview, this set of information is enough!
C language 171 Number of recent palindromes
Web learning record (medium)
【2019-CVPR-3D人体姿态估计】Fast and Robust Multi-Person 3D Pose Estimation from Multiple Views
C语言中*与&的用法与区别 以及关键字static和volatile 的含义
双亲委派模型【理解】
数仓建表111111
The usage and difference of * and & in C language and the meaning of keywords static and volatile
windows MySQL8 zip安装
下载正版Origin Pro 2022 教程 及 如何 激 活
国产轻量级看板式Scrum敏捷项目管理工具