JsonChao 的 2020 年终总结 | 掘金年度征文

15,476 阅读11分钟

前言

这一年,是动荡的一年,但也是逆风翻盘的一年。一颗种子要想成长为苍天大树,必须具备坚韧不拔的意志,这一点比学习本身更加重要。下面,我们就来回顾一下我的2020年主要做了哪些事情。

一、回顾我的2020年

第一季度(1-3月):

1、深入学习Android性能优化 & 开源 Awesome-Android-Performance

众所周知,性能优化是Android细分领域中最难且也是知识面涉及最深和最广的方向之一,但是如果你想要成为一名顶尖的Android工程师,性能优化细分领域则是非常好的实战与理论结合的场所。因此,为了将性能优化涉及的各个层面的知识成体系地融合到一起,笔者创建了Awesome-Android-Performance这个项目,希望能带领读者从Android系统架构中的应用层、Framework层、Native层、ART/Dalvik甚至Linux内核层这一垂直领域去深入探索与挖掘性能优化的极致技术。目前,除了IO优化与存储优化之前,其它的性能优化文章均已发布,内容如下:

一、稳定性优化

深入探索Android稳定性优化(已完成)

Android稳定性优化是一个需要长期投入,持续运营和维护的一个过程,上文中我们不仅深入探讨了Java Crash、Native Crash和ANR的解决流程及方案,还分析了其内部实现原理和监控流程。到这里,可以看到,要想做好稳定性优化,我们必须对虚拟机运行、Linux信号处理和内存分配有一定程度的了解,只有深入了解这些底层知识,我们才能比别人设计出更好的稳定性优化方案。

二、启动速度优化

深入探索Android启动优化(已完成)

想要极致地提升App的启动速度,我们需要有一定的广度,在文中引入了始于后端的AOP编程来实现无侵入式的函数插桩,也需要有一定的深度,从里面的探索之旅来看,我们先后涉及了Framework层、Native层、Dalvik虚拟机、甚至是Linux IO和文件系统相关的原理

三、内存优化

Android性能优化之内存优化(已完成)

内存优化可以说是性能优化中最重要的优化点之一,可以说,如果你没有掌握系统的内存优化方案,就不能说你对Android的性能优化有过多的研究与探索。

深入探索Android内存优化(已完成)

真正的将内存优化做到极致,还不点击去一探究竟?

四、绘制优化

Android性能优化之绘制优化(已完成)

首先,让我们从全局的角度去认识绘制优化,并为其打下良好的优化基础。

深入探索Android布局优化(上)(已完成)

深入探索Android布局优化(下)(已完成)

布局优化看似是Android性能优化中最简单的专项优化项,但是笔者却花费了整整三万字的篇幅才能比较完整地将其核心知识传授给大家。因此,不要小看每一个专项优化点,深入进去,必定满载而归。

深入探索Android卡顿优化(上)(已完成)

深入探索Android卡顿优化(下)(已完成)

卡顿优化可以说是Android性能优化中最复杂的环节,笔者从卡顿优化分析方法与工具、自动化卡顿检测方案及优化、ANR分析与实战、卡顿单点问题检测方案、界面秒开、优雅监控耗时盲区等多个维度来展开对App的卡顿优化进行深入讲解,相信读者必定有所收获。

五、包体积优化

深入探索Android包体积优化(已完成)

如果要想对包体积做更深入的优化,我们就必须对 APK 组成,Dex、So 动态库以及 Resource 文件格式,还有 APK 的编译流程 有深入地了解,这样我们才能有 足够的内功素养 去实现包体积的深度优化,而此文将会带我们深入其中。

六、网络优化

《深入探索 Android 网络优化(一、网络核心筑基篇)》(已完成)

《深入探索 Android 网络优化(二、网络优化筑基篇) 》(已完成)

《深入探索 Android 网络优化(三、网络优化篇) 》(已完成)

网络优化一直被认为是移动优化水最深的领域之一,因此,我们有必要对其进行深入学习。

七、耗电优化

深入探索 Android 耗电优化(已完成)

在 Android 应用开发中,我们需要考虑如何优化电量使用,让我们的 App 不会因为电量消耗过高被用户排斥,或者被其他安全应用报告,以此确保用户黏性。因此,电量优化也是需要去考虑的。

第二季度(4-6月):

1、深入探索编译插桩与 Gradle 自动化构建技术技术

现如今,Gradle + 编译插桩 的应用场景越来越多,无论是 各种性能优化中的插件工具制作,还是用来支持 插件化、热修复的各种插件,都会使用到这个组合,因此,掌握 Gradle + 编译插桩 技术能够大大提升我们的技术竞争力。内容如下:

编译插桩技术

深入探索编译插桩技术(一、编译基础)(已完成)

深入探索编译插桩技术(二、AspectJ)(已完成)

深入探索编译插桩技术(三、Class字节码)(已完成)

深入探索编译插桩技术(四、ASM)(已完成)

Gradle自动化构建

深入探索 Gradle 自动化构建技术(一、配置篇)(已完成)

深入探索 Gradle 自动化构建技术(二、Groovy 筑基篇)(已完成)

深入探索 Gradle 自动化构建技术(三、Gradle 核心解密)(已完成)

深入探索 Gradle 自动化构建技术(四、自定义 Gradle 插件)(已完成)

深入探索 Gradle 自动化构建技术(五、Gradle 核心源码剖析)(已完成)

深入探索 Gradle 自动化构建技术(六、Gradle 插件开发平台化框架 ByteX 解密)(已完成)

第三季度(7-9月):

1、算法地图构建 & 开源 Awesome-Algorithm-Study

这是一份从零构建算法核心知识的地图,它是以算法面试为根基而打造而成,里面涉及到的都是非常高频的算法面试题。因为算法非常重要,所以从今年7月份开始,我就开始系统从0开始学习了数据结构和算法,具体的学习路径如下:

  • 1、慕课网之《数据结构精讲》:手写各种核心的数据结构,例如动态数组、链表、堆、二叉树、AVL、红黑树等等。
  • 2、《剑指Offer》:有了比较扎实的数据结构功底后,再去学习如何练习算法,那么,《剑指Offer》是最适合不过了。
  • 3、慕课网之《玩转算法面试》:非常详细地对LeetCode上的高频面试算法题进行了系统讲解,能在短时间内快速提升我们的算法面试能力。
  • 4、《算法面试通关 40 讲》:这个是对《玩转算法面试》的补充。
  • 5、手写前面所有算法2遍以上(预估150道题左右)。

在系统学习算法的过程中,我逐步构建出了我的算法地图,内容简要如下:

2、计算机基础巩固路线

主要基于《编程必备基础 计算机组成原理+操作系统+计算机网络》系统学习了组成原理、操作系统、网络等核心的计算机基础知识,这对加深我们的内功是非常有帮助的。

3、NDK入门

NDK是深入Android必备的一项技术,因此,我开始了NDK的学习,主要完成的学习内容如下:

  • 1、C基础复习。
  • 2、C++基础复习。
  • 3、JNI、编译原理与语法、Linux基础系统学习。
  • 4、了解如何实现增量更新、高效加载Gif图、MMKV组件。

第四季度(10-12月):

1、深入学习和实践组件化、插件化、热修复技术

为了提升架构能力与加深对Android Framework层的理解,那么学习组件化、插件化、热修复技术是必不可少的。这里我就简单聊一聊如何去学习它们。对于组件化来说,关键点就在于掌握如何进行组件化重构,并深入了解如何进行跨组件通信。对于插件化来说,这里有一些问题我们可以去思考一下:

  • 如何规避 Android P 对访问私有 API 的限制?
  • 如何进行插件化重构?
  • 插件化的原理:如何动态加载类?四大组件如何实现插件化?资源如何插件化?So如何插件化?对目前各个热门插件化框架实现的了解?(例如VirtualApk、Replugin、Shadow)
  • 对插件化这一整套技术的理解?

对于热修复来说,我们可以先自己手写一个简单的热更新框架,然后再去深入学习某一个热修复框架的使用和实现,例如Tinker。对于热修复的原理来说,也同样包括代码修复、资源修复、So的修复,这些我们都应该去深入了解。

2、Android Framework层深入学习

主要基于 剖析Framework面试 冲击Android高级职位 课程 将Framework的设计思想与实现细节、总体流程融合起来,追求真正的融会贯通。

3、知识体系系统复习

故而知新,可以为师矣。学习不是看你学了多少,而是看你真正掌握了多少,一味地追求学习的速度反而会让我们掉入一个黑洞:花费了大量的时间学习,但是真正理解的东西却很少。这让我想起了在读书时代的一位朋友,他非常努力,一天到晚都在学习。有时他甚至在就寝灯熄灭之后还约我一起去厕所看书(因为厕所有灯),但是我坚持了两天就不行了。由于他的努力,我一直以为他未来的成就不可限量,但是我和他偶然的一次联系才知道事情并非如此。为什么努力却得不到好的结果?可能最核心的问题就在于我们没能真正地把知识融会贯通,如何融合贯通?唯有不断的练习与复习,请无论如何都要记住:学会只是第一步,真正的掌握需要很多次的重复练习,这样你第一步的努力才不会白费。因此,从11月份开始,我就开始系统整理与复习当前我所掌握的知识,并将它转化了为思维导图的形式,如下所示:

计算机基础

编程语言

Android基础

稳定性优化

基础架构

Framework

NDK

二、展望我的2021年

随着对性能优化与基础架构技术的研究逐渐深入,我发现目前所处的环境很难提供一个足够体量的APP去让我深入实践。因此,由于不确定性较大,下面我就简要列一下明年的主要目标:

  • 1、能够有机会去开发、优化一个复杂的APP
  • 2、以实践为主,继续深入性能优化领域的学习
  • 3、每天坚持练习算法,以培养开阔的算法思维
  • 4、能够有机会深入学习Flutter,甚至造一些Flutter的轮子
  • 5、继续深入学习Framework,以加深对Framework层的理解
  • 6、能够有机会深入实践Google的JetPack组件

三、总结

这一年,我的确做出了一些努力,也得到了一些收获与掌声。但仅仅靠单纯的努力是不够的,学会如何学习(温故而知新非常重要),学会如何管控好自己的精力与时间,也许会让我们的努力更加高效,从而让我们的内心更加充实。2021年,我们一起加油,希望这是一场真正的蜕变!

公钟号同名,欢迎关注,关注后回复 Framework,我将分享给你一份我这两年持续总结、细化、沉淀出来的 Framework 体系化精品面试题,里面很多的核心题答案在面试的压力下,经过了反复的校正与升华,含金量极高~

我的2019年终总结(浴火重生)| 掘金年度征文

我的2018年终总结(进阶之路)| 掘金年度征文

掘金年度征文 | 2020 与我的技术之路 征文活动正在进行中......