构建自己的Android知识体系

0. 背景

构建一个属于自己的知识体系,能够让我们学到的知识体系化.让自己清楚哪块是自己的知识盲区,哪块已经构建起根基.然后根据实际情况,有针对性的进行模块学习.让自己成为一个合格的Android工程师.

平时看博客或者学知识,学到的东西比较零散,没有独立的知识模块概念,而且学了之后很容易忘.于是我建立了一个自己的笔记仓库 (一个我长期维护的笔记仓库,感兴趣的可以点个star~你的star是我写作的巨大大大大的动力),将平时学到的东西都归类然后放里面,需要的时候呢也方便复习.过了段时间,我觉得这样还是不够好,于是我最近花了点时间,整理了一下Android中的常见知识,画了一张思维导图.更清晰地认识自己的知识边界到底在哪里,哪些东西还不足.

图片看不清楚朋友的可以访问图片源文件,或者查看幕布笔记链接: Android知识体系最新

1. 计算机基础.png
2. Java基础.png
3. Java并发.png
4. JVM虚拟机.png
5. 数据结构与算法.png
6. Android基础.png
7. Android进阶.png
8. 领域专家.png
9. 其他Android相关.png

此知识体系呢只是一个参考,大家可以根据自己的实际情况进行增删(先将笔记保存到幕布,然后就可以进行修改了).然后进行查漏补缺,提升自己~

1. 计算机基础

1.1 计算机网络

1.1.1 计算机网络概述

  • 网络七层协议
  • TCP/IP四层模型
  • 底层协议
  • 底层设备

1.1.2 应用层

  • HTTP协议(⭐⭐⭐)
  • DHCP协议(⭐⭐⭐)
  • NAT

1.1.3 传输层(⭐⭐⭐)

  • TCP协议
  • UDP协议

1.1.4 网络层

  • IP协议
  • ICMP协议

1.1.5 数据链路层

1.2 操作系统(⭐⭐⭐)

1.2.1 操作系统基本功能

  • 进程管理
  • 作业管理/文件管理
  • 存储管理/设备管理

1.2.2 Linux系统

  • 内存管理
  • 进程管理
  • 文件系统
  • 常见命令操作

1.2.3 补充

  • 自旋锁/互斥锁/读写锁/条件变量/共享文件
  • 消息队列/管道/信号量
  • 操作系统的用户态与内核态
  • 上下文切换成本
  • 进程,线程与协程

1.3 数据库(⭐)

2. Java基础(⭐⭐⭐)

2.1 面向对象

2.2 设计模式

2.3 集合原理

2.3.1 ArrayList

2.3.2 Vector

2.3.3 Stack

2.3.4 LinkedList

2.3.5 HashMap

2.3.6 Hashtable

2.3.7 TreeMap

2.3.8 LinkedHashMap

2.3.9 HashSet

2.3.10 TreeSet

2.3.11 CopyOnWriteArrayList

2.3.12 ConcurrentHashMap

2.3.13 LinkedBlockingQueue

2.3.14 SynchronousQueue

2.3.15 SparseArray

2.3.16 ArrayMap

2.4 反射

2.5 泛型

2.6 注解

2.7 其他

3. Java并发

3.1 线程基础

3.1.1 实现多线程

3.1.2 启动线程

3.1.3 停止线程

  • interrupt()正确停止线程的方法,不强制停止,而是通知协作.

3.1.4 线程的6种状态

  • New新创建
  • Runnable可运行
  • Blocked被阻塞
  • Waiting等待
  • TimedWaiting计时等待
  • Terminated被终止

3.1.5 wait/notify/sleep/join等重要方法

  • wait阻塞
  • notify释放
  • sleep睡眠
  • join线程没执行完之前,会一直阻塞在join方法处

3.1.6 守护线程,优先级等属性

3.1.7 线程安全

3.2 线程安全

3.2.1 各种各样的锁

  • 悲观锁和乐观锁
  • 共享锁和独占锁
  • 公平锁和非公平锁
  • 可重入锁和非可重入锁
  • 可中断锁和非可中断锁
  • 自旋锁和非自旋锁
  • 偏斜锁/轻量级锁/重量级锁
  • JVM对synchronized锁的优化

3.2.2 并发容器

  • Vector/Hashtable
  • ConcurrentHashMap
  • CopyOnWriteArrayList
  • 阻塞队列
  • 非阻塞队列
  • ConcurrentSkipListMap

3.2.3 atomic包,6种原子类

  • 分类
  • 原子类与锁
  • 原子类与volatile

3.2.4 ThreadLocal

  • 使用场景
  • 原理

3.3 管理线程,提高效率

3.3.1 线程池

  • 优点
  • 参数
  • 分类
  • 执行任务流程
  • 拒绝策略
  • 正确关闭线程池
  • 线程池复用原理

3.3.2 Future获取运行结果

3.3.3 Fork/Join模式

3.4 线程配合

3.4.1 CountDownLatch

3.4.2 CyclicBarrier

3.4.3 Semaphore

3.4.4 Condition

3.4.5 Phaser

3.5 底层原理

3.5.1 Java内存模型

  • 重排序
  • 原子性
  • 内存可见性

3.5.2 CAS原理

3.5.3 AQS框架

  • 存在意义
  • 内部关键原理

4. JVM虚拟机

4.1 内存区域

4.2 内存模型

4.3 内存分配回收策略

4.4 Java对象的创建、内存布局和访问定位

4.5 GC

4.5.1 引用计数及可达性分析

4.5.2 垃圾回收算法

4.5.3 G1及ZGC

4.6 类加载机制

4.7 双亲委派模型

4.8 编译器优化

4.8.1 方法内联

4.8.2 逃逸分析

4.9 虚拟机相关

4.9.1 HotSpot及JIT

4.9.2 Dalvik

4.9.3 ART及AOT

4.10 JVM执行方法

4.11 JVM实现反射

4.12 JVM实现泛型

4.13 JVM实现异常

4.14 JVM实现注解

5. 数据结构与算法

5.1 数据结构

5.1.1 栈

5.1.2 队列

5.1.3 数组

5.1.4 链表

5.1.5 Hash表

5.1.6 二叉树

5.1.7 基础排序算法

5.1.8 字符串操作

5.2 算法

5.2.1 分治算法

5.2.2 动态规划

5.2.3 贪心算法

5.2.4 分支限界法

5.3 刷题

5.3.1 CS-Notes剑指Offer题解

5.3.2 CS-NotesLeetCode题解

5.3.3 JsonChao高频题集

6. Android基础

6.1 核心知识点

6.1.1 四大组件

  • Activity
  • Service
  • BroadcastReceiver
  • ContentProvider

6.1.2 布局和控件

  • RelativeLayout
  • FrameLayout
  • LinearLayout
  • ConstraintLayout
  • Button
  • TextView
  • RecyclerView
  • ......

6.1.3 自定义View/ViewGroup

  • onMeasure
  • onLayout
  • onDraw
  • onTouchEvent
  • dispatchTouchEvent
  • 自定义属性

6.1.4 动画和手势

  • View动画
  • 属性动画
  • layoutAnimation视图动画
  • 手势检测(GestureDetector)
  • 缩放手势检测(ScaleGestureDecetor)

6.1.5 网络

  • 请求网络
  • 解析数据

6.1.6 图片加载

  • 本地图片
  • 网络图片
  • 压缩图片
  • 多图列表
  • DiskLruCache

6.1.7 文件和数据库

6.1.8 Handler

  • Looper
  • Message
  • MessageQueue
  • 内存泄漏
  • ThreadLocal

6.1.9 异步线程池

6.1.10 Resources

6.1.11 Android各版本新特性

  • Android5.0
  • Android6.0
  • Android7.0
  • Android8.0(O)
  • Android9.0(P)
  • Android10.0(Q)
  • Android11.0(R)

6.1.12 adb常用命令

6.2 开源库使用

6.2.1 Retrofit/OKhttp

6.2.2 RxJava

6.2.3 Glide

6.2.4 注解框架

6.2.5 Jetpack

6.3 代码管理

6.3.1 Git

6.3.2 Codereview

6.3.3 代码风格

6.3.4 单元测试

6.4 性能优化

6.4.1 快-流畅的体验

  • 布局优化
  • 绘制优化
  • 内存优化
  • 启动优化
  • 其他

6.4.2 稳-稳定

  • 避免内存泄露
  • 避免崩溃

6.4.3 省-省电/流量

  • 使用JobScheduler调度任务
  • 使用懒惰法则

6.4.4 小-安装包小

  • apk构成
  • 包体优化

7. Android进阶

7.1 核心知识点

7.1.1 多进程

  • Binder
  • AIDL
  • Messenger

7.1.2 View绘制

7.1.3 事件分发

7.1.4 消息队列

7.1.5 Activity难点

  • onSaveInstanceState()和onRestoreInstanceState()
  • intent-filter匹配规则
  • 生命周期
  • 启动模式
  • Activity启动过程
  • App启动过程

7.1.6 Service难点

  • startService流程
  • bindService流程

7.1.7 BroadcastReceiver难点

  • 注册/发送/接收工作原理

7.1.8 ContentProvider难点

  • ContentProvider启动过程

7.1.9 AsyncTask原理

7.1.10 RemoteViews

7.1.11 Window和ViewRootImpl

7.1.12 刁钻问题汇总

  • 子线程更新UI
  • Android中为什么主线程不会因为Looper.loop()里的死循环卡死?

7.2 开源库原理

7.2.1 OkHttp

7.2.2 Retrofit

7.2.3 RxJava

7.2.4 Glide

7.2.5 LeakCanary

7.2.6 GreenDao

7.2.7 ARouter

7.3 Gradle

7.3.1 前置知识

  • 编译
  • 混淆
  • 签名

7.3.2 Groovy

7.3.3 Gradle构建流程

7.3.4 GradlePlugin

7.3.5 Gradle构建优化

7.3.6 App构建过程

7.3.7 差异化打包

7.4 初级架构

7.4.1 设计模式

7.4.2 MVC,MVP,MVVM

7.5 JNI

7.5.1 JNI基础

7.5.2 NDK基础

7.6 安全

7.6.1 dalvik沙盒机制

7.6.2 逆向工具:dex2jar,jadx,jd-gui

7.6.3 smail&apktool

7.7 动态化

7.7.1 前置知识

  • Android打包流程
  • Java字节码
  • GradlePlugin
  • TransformAPI
  • ASM

7.7.2 热修复:nuwa&Tinker

  • 经典-64k问题
  • dex分包
  • MultiDex优化
  • findClass原理
  • QQ空间热补丁方案
  • Nuwa应用层实现
  • NuwaGradle

7.7.3 插件化:VirtualAPK

  • 加载类
  • 资源访问
  • 生命周期管理

7.8 组件化

7.8.1 好处

7.8.2 跨组件通信

7.9 编译插桩

7.9.1 AOP

7.9.2 ASM

7.10 Framework

7.10.1 系统服务

  • Zygote启动
  • Android系统启动
  • ServiceManager启动及工作原理

7.10.2 应用进程

  • 启动流程
  • 启用Binder机制
  • Application初始化流程
  • Context

7.10.3 四大组件启动原理

7.10.4 UI体系

  • 显示原理
  • UI线程启动
  • 屏幕刷新机制
  • surface
  • vsync

7.10.5 进程通信

  • Binder
  • IPC通信流程
  • Binder对象跨进程传递
  • OneWay机制

7.10.6 线程通信

  • 消息队列
  • 消息传递机制
  • Handler消息延迟实现
  • IdleHandler原理
  • 消息屏障
  • ThreadLocal原理

7.10.7 其他

  • 跨进程传递大图片

8. 领域专家

8.1 性能优化方向

8.1.1 1.稳定性优化

8.1.2 2.启动速度优化

8.1.3 3.绘制优化

8.1.4 4.内存优化

8.1.5 5.包体积优化

8.1.6 6.网络优化

8.1.7 7.IO优化

8.1.8 8.存储优化

8.1.9 9.耗电优化

8.2 基础架构方向

8.2.1 Android工程实践

8.2.2 Gradle自动化构建

8.2.3 编译插桩技术

8.2.4 Android架构

8.2.5 Android热修复

8.2.6 Android插件化

8.2.7 Android核心源码

8.3 NDK、音视频

8.3.1 C

8.3.2 C++

8.3.3 NDK基础

  • JNI基础
  • 编译原理与语法基础
  • Linux基础

8.3.4 顶级公司核心技术

  • 热修复
  • Gif图实现

8.3.5 Android音视频

  • 音视频基础
  • ffmpeg
  • WebRTC

8.3.6 图像处理技术

  • opengl
  • vulkan

8.3.7 计算机视觉处理技术

  • opencv

8.4 大前端

8.4.1 前端基础

  • HTML
  • CSS
  • JavaScript

8.4.2 Flutter(⭐⭐)

  • Dart入门
  • Flutter入门
  • 开发
  • 工程管理
  • 线上运维
  • 发布
  • 测试调试

8.4.3 ReactNative

8.4.4 小程序

8.4.5 性能优化

9. 其他Android相关

9.1 Koltin(⭐⭐)

9.1.1 基础部分

  • 内置类型
  • 类型初步
  • 表达算式
  • 函数进阶
  • 类型进阶

9.1.2 高级部分

  • 泛型
  • 反射
  • 注解
  • 协程

9.2 Python(⭐)

9.2.1 基础

9.2.2 函数

9.2.3 高级特性

9.2.4 函数式编程

9.2.5 模块

9.2.6 面向对象编程

9.2.7 错误,调试,测试

9.2.8 IO编程

9.2.9 进程和线程常用内建模块

9.2.10 常用第三方模块

9.2.11 网络编程

9.2.12 数据库

9.2.13 异步IO

写了个python脚本,将幕布思维导图转成markdown并标上序号. 有兴趣的可以在这里看源码

参考资料

感谢以上几位大佬

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容