背景
小程序从首次发布至今,经过了几十个版本的迭代。随着业务发展,页面功能内容的不断增多,相关性能数据不断变差,核心性能数据 FMP 长期处在 2000ms 以上。
在该项目之前,我们团队也对小程序做了一定的性能调优工作,内容包括:
- 包体积优化,去除了不少引用在项目中的图片素材文件,将包体积优化至 500kb 以下;
- 联合后端对耗时较高的业务接口做优化,单个接口返回速度需要控制在 100ms 左右;
- 优化了部分业务逻辑,小程序启动时减少了一些不必要的操作逻辑;
- 使用了小程序框架提供的最新生命周期 onInit ,可提前 100ms 左右发起业务网络请求;
- 使用 prelink 预连接网络,提升数据接口的请求效率。
经过上述手段之后,FMP 降到了 1900ms 左右,后续再也无法产生优化效果。
以上优化手段,基本排除了网络连接,包体积优化不到位引起的性能不佳。那么我们就只有一个问题需要仔细排查 —— 内容的渲染效率。
真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读Android系统源码,还包括各种优秀的开源库。
由于整个文档比较全面,内容比较多,篇幅不允许,下面以截图方式展示 。
深入解析微信 MMKV 源码
- 初始化
- 获取
- 修改
- 删除
- 读取
- 文件回写
- Protobuf 处理
- 跨进程锁实现
深入解析阿里巴巴路由框架ARouter 源码
- 初始化
- 路由跳转
- Service 的获取
- 拦截器机制
- 注解处理
深入解析AsyncTask 源码(一款 Android 内置的异步任务执行库)
- 功能概述
- 创建
- 执行
- 取消
- 线程池
- 不足之处
深入解析Volley 源码(一款 Google 推出的网络请求框架)
- Volley
- RequestQueue
- ExecutorDelivery
- NetworkDispatcher
- CacheDispatcher
- Request
- Response
- Network
- HttpStack
- 缓存机制
深入解析 Retrofit源码
- Retrofit简介
- 与其他网络请求开源库对比
- Retrofit 的具体使用
- 源码分析
- 创建网络请求接口的实例
- 外观模式
- 代理模式
深入解析OkHttp 源码
- OkHttp 3.7源码分析(一)——整体架构
- 简单使用
- 总体架构
- OkHttp 3.7源码分析(二)——拦截器&一个实际网络请求的实现
- OkHttp 3.7源码分析(三)——任务队列
- OkHttp 3.7源码分析(四)——缓存策略
- OkHttp 3.7源码分析(五)——连接池
深入解析ButterKnife 源码
深入解析Okio源码(一
套简洁高效的 I/O 库)
- Sink
- Source
- Buffer
- BufferedSource
- BufferedSink
- Timeout 超时机制
深入解析SharedPreferences源码
- 获取SharedPreferences
- 根据名称获取 SP
- 获取 SP 名称对应的 File 对象
- 缓存机制
- SharedPreferencesImpl
- 从 Disk 加载数据
- 编辑 SharedPreferences
- 提交 SharedPreferences
深入解析EventBus 源码
- getDefault 方法
- register 方法
- post 方法
- unregister 方法
- Poster
Android 自定义注解初探
- 什么是注解
- 元注解
- 自定义注解
- 在Android中使用自定义注解
- ButterKnife的流程
View 的工作机制源码分析、Android 触摸事件分发机制源码分析、Android 按键事件分发机制源码分析
深入解析?Handler 源码
- 发送消息
- 消息入队
- 消息循环
- 消息遍历
- 消息的处理
- 同步屏障机制
- 阻塞唤醒机制
深入解析Binder源码
- 设计架构整体图
- 数据结构鸟瞰
- Binder设计基础
- ioctl(): 内核/用户空间调用
- mmap(): 内核/用户空间内存映射
- Binder中的ONEWAY与非ONEWAY调用
- Binder中的生产者与消费者
- Binder代理对象的handle句柄
- Binder内核中的红黑树
深入解析JNI源码
- 架构图
- 在JAVA中调用Native方法
- 在Native中调用JAVA方法
- 开机JNI初始化
- System.loadLibrary()原理
深入解析Glide源码
- 功能介绍
- 代码结构
- ModelLoader
- DataFetcher
- Target
- Resource
- ResourceTransformation
- Pool
- Cache
- Decoder
- Encoder
- 执行流程
最后
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
上面分享的百度、腾讯、网易、字节跳动、阿里等公司2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
【Android高级架构视频学习资源】
Android部分精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!