对自身有个较为全面的评估,找出自己的不足,然后有方向有针对性的去进行学习提升。
编程语言
- 学习Kotlin。完成《Kotlin实战》的阅读后,通过 Side Project 进行实践练习。
- Kotlin 协程很重要,可在初步熟悉 Kotlin 基本语法之后再进行学习。(有Kotlin协程的专门书)
框架架构
-
学习JetPack组件以及MVVM。了解如何构造开发框架,同样通过使用 Side Project 进行练手。 同时多看网上关于JetPack的文章,搞清楚为什么使用它,能解决哪些问题
-
多看开源框架而且一定要进行总结(技术选型等,框架有什么优缺点,适用场景等),比如 MKVM 项目中如何使用 mmap 来进行 IO优化。 OKHTTP 中的流程(例如,虚引用的实际应用场景)
项目技术要点 (粒度更细)
-
Apk 打包流程有哪些步骤,各自用到了什么工具。(想想每一步都做了什么,平常碰到的有哪些东西是在某个时机执行的,死背没用)
-
Apk 解压之后有哪些文件,具体作用都是什么
-
Drawable 和 mipmap 有什么区别
-
静态匿名内部类为什么要使用final?
-
SharedPreference 有哪些优缺点? 如何优化? 能否使用 mmap 进行优化?
-
i++ 具有原子性吗?为什么?
-
ExecutorService 与初始化(线程池)
-
ReadWriteLock与常用算法。 (ReteentrantLock,以及和Synchronized区别)
-
AtomicBoolean 原理。(了解CAS工作原理,以及如何确保异步安全的)
-
为什么 Android 中依赖不能循环引用? (组件化的本质是什么?)
-
ButterKnife 是如何实现动态代理的? 动态代理和静态代理有什么区别? 动态代码的使用场景是什么,能解决什么问题? (技术深度要深)
-
String 的长度为多少?(会受虚拟机规范限制)
-
ConcurrentHashMap 一定线程安全吗? (在什么场景下可能出现线程不安全的情况)
-
compileOnly 和 runtimeOnly 区别
-
apt 和 transform 区别,以及各自使用场景,都可以解决什么问题
-
transform 用户自定义的和系统的的执行顺序?以及如何区分是用户自定义的还是系统的呢?
算法
-
各自排序算法,都是如何实现的并总结优缺点和不同适用场景,知道思想。最简单的快排要能手写出来。
-
《漫画算法》、《算法小抄》阅读完
-
基础的一些解法, 二叉树前序,中序,后序遍历的迭代写法。 二分用法,双指针解法,动态规划常用解法,滑动窗口常用解法,链表,数组的常用操作。
总结
-
不要去逃避,越是怕什么,越要去尝试它。执行力要加强,不要再拖了。、
-
想问题要多去问什么,还有看看能不能发散想到其他的问题,要提高技术深度。不要解决完这个问题就完了,因为不需要应付自己来让自己觉得自己很努力,没必要。
-
看东西,学习东西一定要总结输出,以文档的形式总结出来。只要是较为复杂,耗了蛮多时间的问题都记下来,可以不用很多,但一定要自己总结输出,这个非常重要,否则时间久了一定会忘记。
-
尽快学完这些知识,因为明天可能会有其他事情,越早越好,已经吃了很多亏了。
-
别人很努力,你很垃圾。