构建自己的Android知识体系

article/2025/10/9 7:36:02

0. 背景

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

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

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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§
  • Android10.0(Q)
  • Android11.0®

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并标上序号. 有兴趣的可以在这里看源码

参考资料

  • 刚哥
  • jsonchao
  • Omooo
  • Java 并发编程 78 讲
  • Flutter核心技术与实战

感谢以上几位大佬


http://chatgpt.dhexx.cn/article/4uUOlWUZ.shtml

相关文章

公司用的 MySQL 团队开发规范,太详细了,建议收藏!

点击上方“Java精选”,选择“设为星标” 别问别人为什么,多问自己凭什么! 下方留言必回,有问必答! 每天 08:35 更新文章,每天进步一点点... 数据库对象命名规范 数据库对象 数据库对象是数据库的组成部分&a…

电影信息爬取与聚类分析

电影信息爬取与聚类分析 要求:爬取电影相关数据,条数不小于1000,结构自定,要求包含情感信息,类别,评论关键词等,然后基于这些信息根据用户的喜好做相关性聚类。 一、总体设计 (1&…

算法推导 | 卷积神经网络(CNN)反向传播

作者丨南柯一梦宁沉沦知乎 编辑丨极市平台 来源丨https://zhuanlan.zhihu.com/p/61898234 多层感知机反向传播的数学推导,主要是用数学公式来进行表示的,在全连接神经网络中,它们并不复杂,即使是纯数学公式也比较好理解。而卷积神…

深入浅出学习Hive

本文是基于CentOS 7.9系统环境,进行hive的学习和使用 一、Hive的简介 1.1 Hive基本概念 (1) 什么是hive Hive是用于解决海量结构化日志的数据统计工具,是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供…

你知道豆瓣电影是怎么评分的吗?(实战篇—手把手教你分析豆瓣电影)

点赞再看,养成好习惯 Python版本3.8.0,开发工具:Pycharm 写在前面的话: 如果你是因为看到标题进来的,那恭喜你,又多了一个涨(入)知(坑)识的机会。 在这篇豆…

万字入门推荐系统!

最近一周我、强子、Y哥三人,根据自身如何入门推荐系统,再结合三人分别在腾讯做广告推荐、字节做视频推荐、百度做信息流推荐的经历,整理出了这份万字入门推荐系统。内容十分详细,涵盖了推荐系统基础、进阶、实战的全部知识点&…

【原创】LeetCode刷题-Python版

文章目录 LeetCode1、两数之和*2、两数相加3、无重复字符的最长子串**4、寻找两个正序数组的中位数**5、最长回文子串**动态规划思维导图6、Z 字形变换7、整数反转8、字符串转换整数 (atoi)9、回文数10、正则表达式匹配*11、盛最多水的容器*12、整数转罗马数字13、 罗马数字转整…

c语言 字符串切片重组成完整,bash脚本之一(变量+数组)

bash的变量与数组 变量:存储单个元素的内存空间; 也相当于是数组的0号索引。 数组:存储多个元素的连续的内存空间; 一、变量 1、介绍: 任何程序都需要变量。 变量是用来存储数据的。程序指令数据。 按照其变量是否需要…

最重要Python面试题,逻辑题,Python与数学之美

从数学归纳法谈起: 什么是数学归纳法? 从两个有趣的问题谈起: 1)怎么证明一堆人中所有人都是希腊人? 2)思考题:怎么证明所有人都是秃子? 什么是数学归纳法? 最简单和常…

OpenCV--Python

1、cv2.imread()读入图像;第一个参数为图像路径;第二个为cv2.IMREAD_COLOR:读入彩色图像;cv2.IMREAD_GRAYSCALE:读入灰度图像。 2、显示图像cv2.imshow() 3、保存图像cv2.imwrite() 4、获取视频先创建一个videocapture对象。参…

python - Pandas基础

pandas 简介 基于numpy的工具 高效提供了大量库和一些标准的数据模型 相当于Numpy的一维数组,但是与普通的一维数组不同,Series支持对数据的自定义标签也就是index(索引),通过索引可以访问Series的元素 Series 索引 简单的创建 import pandas as pd sel pd.…

【阿里内部教程】python初阶:基础语法 python全栈自动化测试系类

目录 很多小伙伴可能都没有看过凡哥的视频,所以大家可能对凡哥不是很了解这里先和大家来个自我介绍 凡哥我已经有着十二年互联网自动化测试和测试开发工程师,拥有丰富的自动化测试平台及测试开发经验,擅长接口测试、Python自动化全栈&#x…

opencv python 常用方法

点击:OpenCV--Python 基本使用 一、基本方法 1、cv2.imread() 读入图像;第一个参数为图像路径;第二个为cv2.IMREAD_COLOR:读入彩色图像;cv2.IMREAD_GRAYSCALE:读入灰度图像。 import cv2 import matplotlib.pyplot …

iOS开发通过微信学习WCDB(四)

最近打算将封装一个基于wcdb操作的数据库私有库,在封装使用的过程中遇到了一些问题,将问题整理了一下,分享给大家。 私有pod库依赖于WCDB 造成lint失败 最开始遇到这个问题的时没有眉目,后来看到打包方式都是静态库,后…

微信移动端数据库组件WCDB系列(二) — 数据库修复三板斧

前言 长久以来SQLite DB都有损坏问题,从Android、iOS等移动系统,到Windows、Linux 等桌面系统都会出现。由于微信所有消息都保存在DB,服务端不保留备份,一旦损坏将导致用户消息被清空,显然不能接受。 我们即将开源的移…

微信 WCDB for Android的接入

接入 WCDB Android 项目接入 WCDB,可以选择通过 Maven 接入或通过 AAR 包接入。 通过 Maven 接入 对于大部分开发者,推荐使用 Maven 接入 WCDB,在 APP 模块的 build.gradle 下添加 WCDB 依赖即可 dependencies {// 修改"1.0.0"…

关于WCDB Swift 的一些简易使用

wcdb 开源地址:https://github.com/Tencent/wcdb 一、wcdb介绍 引用官方说法:“WCDB Swift 是一个易用、高效、完整的移动数据库框架,它基于 SQLite 和 SQLCipher 开发。” 鹅厂出品的值得信赖。于是就打算在新的项目中使用它。 三大特性…

微信 WCDB 正式开源——高效易用的移动数据库框架

前沿介绍 腾讯开源微信数据库框架WCDB,他是一个高效、完整、易用的移动数据库框架,基于SQLCipher,支持iOS, macOS和Android。 便捷地定义表、索引、约束,并进行增删改查操作 项目演示效果如下: 微信 即时通讯软件 微信&#x…

Wcdb android 目录,WCDB漫谈

前言 移动端的数据库选型一直是一个难题,直到前段时间看到了WeMobileDev(微信前端团队)放出了第三个开源组件-WCDB WCDB(WeChat DataBase)是微信官方的移动端数据库组件,致力于提供一个高效、易用、完整的移动端存储方案 微信团队怎么说 基于SQLCipher W…

iOS开发-关于微信WCDB的使用 WCDB嵌套模型的使用

iOS开发-关于微信WCDB的使用 WCDB嵌套模型的使用 前言开发前准备开发关于生成WCDB文件 选择new file即可找到关于嵌套模型的生成 分两步 选择new file即可找到增删改查的封装使用 总结 前言 iOS开发中有需要数据库的存储,表的增删改查等,FMDB和最近流行…