当前位置:   article > 正文

小米面试hr,AutoRegister框架分析,2024年上半年最接地气的Android面经

小米面试hr,AutoRegister框架分析,2024年上半年最接地气的Android面经

}




##### []( )管理和注册方法设置



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

codeInsertToClassName : (必须)字符串,类名(完整类名),通过编译时生成代码的方式将收集到的类注册到此类的codeInsertToMethodName方法中

codeInsertToMethodName: 字符串,方法名,注册代码将插入到此方法中。若未指定,则默认为static块,(方法名为:)

registerClassName: 无

registerMethodName : (必须)字符串,方法名,静态方法,方法的参数为 scanInterface




参数分为两组:**codeInsertToClassName** / **codeInsertToMethodName** 和 **registerMethodName** / **registerClassName**。



1.  第一组是管理类和管理方法:对应到示例中是 CategoryManager#initCategory

2.  第二组是注册类和注册方法:对应到示例中是 CategoryManager#register



示例中没有明确指定registerClassName,会默认赋值initClassName,也就是 **codeInsertToClassName**。所以,框架的设置中允许把管理类和注册类分开来写的。



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

// 代码有删减

void convertConfig() {

registerInfo.each { map ->

    RegisterInfo info = new RegisterInfo()

    info.initClassName = map.get('codeInsertToClassName')    //代码注入的类

    info.initMethodName = map.get('codeInsertToMethodName')  //代码注入的方法(默认为static块)

    info.registerMethodName = map.get('registerMethodName')  //生成的代码所调用的方法

    info.registerClassName = map.get('registerClassName')    //注册方法所在的类

    info.init()

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

}

void init() {

if (!registerClassName) {

    registerClassName = initClassName

}
  • 1
  • 2
  • 3
  • 4
  • 5

}




> 注释:从示例中可以看出 **codeInsertToMethodName** 和 **registerMethodName** 需要保持一致,同时为静态方法或者同时非静态方法;如果没有指定**codeInsertToMethodName**,默认是静态代码块,视为静态方法,此时 **registerMethodName** 需指定静态方法。



> 对于四个参数的解释,参考框架中的实现类,略有修改。从下面的代码可以看出,AutoRegister的主要作用是从不同的模块收集子类和实现类(CategoryA/CategoryB),生成注册函数(register)调用代码,插入到初始化入口函数 **initCategory()** 或 **static** 代码块。在此基础上,APP初始化时只需要调用 **initCategory()** 或者自动执行 **static** 代码块,就可以做到添加一系列实例对象到初始化列表(CATEGORIES)中,完成注册工作。



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

// codeInsertToClassName | registerClassName

public class CategoryManager {

private static final HashMap<String, ICategory> CATEGORIES = new HashMap<>();



// 不指定 codeInsertToMethodName 时生效

static {

    register(new CategoryA()); //scanInterface的实现类

    register(new CategoryB()); //scanSuperClass的子类

}



// codeInsertToMethodName

public static void initCategory() {

    register(new CategoryA()); //scanInterface的实现类

    register(new CategoryB()); //scanSuperClass的子类

}



// registerMethodName

static void register(ICategory category) {

    if (category != null) {

        CATEGORIES.put(category.getName(), category);

    }

}



public static Set<String> getCategoryNames() {

    return CATEGORIES.keySet();

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

}


  • 1

ory) {

    if (category != null) {

        CATEGORIES.put(category.getName(), category);

    }

}



public static Set<String> getCategoryNames() {

    return CATEGORIES.keySet();

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

}




[]( )最后

==================================================================



按照国际惯例,给大家分享一套十分好用的Android进阶资料:《全网最全Android开发笔记》。



整个笔记一共**8大模块、729个知识点,3382页,66万字**,可以说覆盖了当下Android开发最前沿的技术点,和阿里、腾讯、字节等等大厂面试看重的技术。



![图片](https://img-blog.csdnimg.cn/img_convert/0872bfe8f5701c0431f61d6b374a94c0.png)



![图片](https://img-blog.csdnimg.cn/img_convert/7f38838cd46c04d10069aab323c5c930.png)



因为所包含的内容足够多,所以,这份笔记不仅仅可以用来当学习资料,还可以当工具书用。



如果你需要了解某个知识点,不管是Shift+F 搜索,还是按目录进行检索,都能用最快的速度找到你要的内容。



相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照整个知识体系编排的。



### []( )(一)架构师必备Java基础



1、深入理解Java泛型



2、注解深入浅出



3、并发编程



4、数据传输与序列化



5、Java虚拟机原理



6、高效IO



……



![图片](https://img-blog.csdnimg.cn/img_convert/dae4ccad9bbebe5d74113c515bd0e4aa.png)



### []( )(二)设计思想解读开源框架



1、热修复设计



2、插件化框架设计



3、组件化框架设计



4、图片加载框架



5、网络访问框架设计



6、RXJava响应式编程框架设计



……



![图片](https://img-blog.csdnimg.cn/img_convert/624d8479d0f24bc734ca832987b4dab7.png)



### []( )(三)360°全方位性能优化



1、设计思想与代码质量优化



2、程序性能优化



*   启动速度与执行效率优化

*   布局检测与优化

*   内存优化

*   耗电优化

*   网络传输与数据储存优化

*   APK大小优化



3、开发效率优化



*   分布式版本控制系统Git

*   自动化构建系统Gradle



……





**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/c5640974d6a2d1d2cbc0beff45438830.png)
![img](https://img-blog.csdnimg.cn/img_convert/d8df6ac5bd68ccaeef8d754342805868.png)
![img](https://img-blog.csdnimg.cn/img_convert/ace3652e1e7060d3f9fe5f4afa77423a.png)
![img](https://img-blog.csdnimg.cn/img_convert/4047f25bc37291ce0504004291dc385f.png)
![img](https://img-blog.csdnimg.cn/img_convert/b7ce0274da340f44abb1d372a90f8f61.png)
![img](https://img-blog.csdnimg.cn/img_convert/022bb1fc0eabdb7cb775978eea13c096.png)
![img](https://img-blog.csdnimg.cn/13f2cb2e05a14868a3f0fd6ac81d625c.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)**
![img](https://img-blog.csdnimg.cn/img_convert/0af3e47b213bc26443dc2436f310cb96.png)



## 分享读者

> 作者2013年java转到Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。

> 被人面试过,也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!

我们整理了一份阿里P7级别的Android架构师全套学习资料,特别适合有3-5年以上经验的小伙伴深入学习提升。

主要包括腾讯,以及字节跳动,阿里,华为,小米,等一线互联网公司主流架构技术。

![腾讯T3架构师学习专题资料](https://img-blog.csdnimg.cn/img_convert/4a8a65c8a1aeee5d90cddb45455c6c54.webp?x-oss-process=image/format,png)

**如果你觉得自己学习效率低,缺乏正确的指导,可以一起学习交流!**

我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。

> **本文已被[CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》]( )收录**

[**一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)

**AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**

源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》]( )收录**

[**一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)

**AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/683619
推荐阅读
相关标签
  

闽ICP备14008679号