测试树状图
├── README.md
├── package.json
└── src
├── common
│ └── XInput.vue
├── index.js
└── utils
├── auto-require.js
├── index.js
└── types.js
专业技能梳理
android
基础
- 四大组件及生命周期
- 应用启动流程
- 消息机制、handler + Message
- AMS
- PMS
- WMS
多线程编程
-
线程池
-
基本概念
- 核心数
- 线程数
- 时间片轮转机制
-
线程共享和协作
- Callbale
- Future
- FutureTask
- Lock
- Synchronized
- volitile
-
各类线程池区别
-
底层实现分析
-
任务排队机制
-
-
AsyncTask
-
ThreadLocal
IPC
-
AIDL
-
Binder
-
数据参数和序列化
- Serilizable
- Parcelable
- Json
高级UI
-
Touch事件分发机制
-
View的绘制流程及原理
- RecyclerView
- TabView
- ConstraintLayout
- RemoteView
-
Paint/Cavans高级绘制
- Paint画笔高级应用
- Paint-滤镜、XFERMode
- Cavans高级技巧 - 变换/状态保存/粒子特效等
- Cavans其他案例
- 贝塞尔曲线及计算规则
- 基于PathMeasure源码Path测量问题
-
属性动画
-
高级UI实战
-
MaterialDesign
- MaterialDesign 交互设计
- 自定义RecycelrView
- CoodinatorLayout原理应用 + NestedScrolling组合完成下拉特效
- 沉浸式设计 cardView源码分析和兼容原理
-
自定义Veiw
- 自定义控件
- 手写RecyclerView
- SVG矢量图形打造不规则的控件
- PathMeature高级使用
-
本地存储
- SP、数据库、文件
安全&权限
JNI和NDK
-
JNI开发
- JNI基本概念
- SO动态库介绍
- JNI动态注册与静态注册
- JNI类型与数据结构
-
DNK开发
- 基本概念
- Build工具
- Cmake工具
- JNI.h介绍
- Logging
- JNI Env介绍
-
实战
- 图片高斯模糊算法
- 图片Base64编解码
- JPG图片压缩算法
单元测试
Java
动态代理
注解相关
- 注解
- APT 编译时注解处理器
- 插桩
- 运行时动态获取注解信息-反射
反射
- 三种获取Class对象的方式
- 获取构造器实例化和属性信息、包信息和方法
- Hook技术动态编程
ClassLoader
- PathClassLoader
- DexClassLoader
- BootClassLoacder
内存模型
GC原理&调优
内存分配策略
Dvlik
数据结构
- List
- HashMap
- ConcurrentHashMap
IO
性能优化
启动、流畅度、内存、功耗、APK瘦身、ANR
网络深度优化
常用工具
网络编程
http、https、DNS、证书
TCP/IP协议
常用算法
完整项目
架构设计
统计模块
线上版本监控体系
- Bugly
- 功能异常上报系统
日志打捞系统
PUSH
保活
自升级
热修复
动态UI
云配置
网络模块
重试机制
技术视野
Jetpack
- 组件库概览
- ConstraintLayout约束布局
- dataBinding
- Lifecycle
- LiveData
- Navigation
- Paging
- Room
- ViewModel
- WorkManager
- StartUp
混合开发,web
Flutter
Kotlin
- 语句基础
- 泛型编程
- 协程Coroutines并发编程
热修复&Webp
- 子主题 1
架构设计
UML建模
设计模式
模块化
组件化
插件化
开源框架
事件总线
- EventBus
网络框架
- OKHttp
- Vollery
- Retrofit
图片框架
- Glide
- Frescp
- Picasso
视频
- ExoPlayer
数据库框架
- ROOM
- GreenDao
- Realm
IOC框架设计
- Java文件结构化文本详解
- ButterKnife
- Dagger2
插件化框架
安全加固方案
响应式编程
- RX系列
- Agera
性能优化
- LeakCanary
XMind - Trial Version