学习路线

对自身有个较为全面的评估,找出自己的不足,然后有方向有针对性的去进行学习提升。

编程语言

  • 学习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 用户自定义的和系统的的执行顺序?以及如何区分是用户自定义的还是系统的呢?

算法

  • 各自排序算法,都是如何实现的并总结优缺点和不同适用场景,知道思想。最简单的快排要能手写出来。

  • 《漫画算法》、《算法小抄》阅读完

  • 基础的一些解法, 二叉树前序,中序,后序遍历的迭代写法。 二分用法,双指针解法,动态规划常用解法,滑动窗口常用解法,链表,数组的常用操作。

总结

  1. 不要去逃避,越是怕什么,越要去尝试它。执行力要加强,不要再拖了。、

  2. 想问题要多去问什么,还有看看能不能发散想到其他的问题,要提高技术深度。不要解决完这个问题就完了,因为不需要应付自己来让自己觉得自己很努力,没必要。

  3. 看东西,学习东西一定要总结输出,以文档的形式总结出来。只要是较为复杂,耗了蛮多时间的问题都记下来,可以不用很多,但一定要自己总结输出,这个非常重要,否则时间久了一定会忘记。

  4. 尽快学完这些知识,因为明天可能会有其他事情,越早越好,已经吃了很多亏了。

  5. 别人很努力,你很垃圾。

Search

    Table of Contents