在平时工作的过程中,不断总结与完善自己的技术体系时,现在初步把android的开发技术体系分为9大技术模块,并大致列表出每个技术模块涉及到的知识点。
相关知识点汇总:(不断更新)
模块一:8大硬件模块
模块二:Android系统模块
模块三:网络通信模块
模块四:APK生成模块
模块五:应用程序构建模块
模块六:源码分析模块
模块七:内存模块
模块八:数据结构与算法模块
模块九:程序优化模块
模块一:8大硬件模块
硬件一:屏幕
1、沉浸式与SystemUi的设置(systemBarTint开源)
2、ActionBar与ToolBar
3、触摸机制(责任链模式,motionEvent类的实现,自定义手势)
4、绘制原理
5、9种动画效果
6、UI与渲染优化
7、屏幕适配方案、全面屏,曲面屏,刘海屏适配。
8、自定义ViewGroup与View(自定义控件的分类和实现思路)
9、ListView与RecyclerView区别(原理,使用,优化)
10、LinearLayout,RelativeLayout和Constrainlayout的区别与之间的关系
11、Webview控件详解(通信,内存泄露,安全性,优化,缓存)
12、Activity,window,View的关系
13、屏幕适配的演进
14、Android刷新机制
15、OpenGl Es
硬件二:电池
1、电量检查工具(battery-historian,Energy Profilter)
2、电量优化的方式
硬件三:摄像头(待扩展)
硬件四:CPU
1、线程的生命周期
2、Handler机制
3、分时调度机制与抢占式调度机制
4、CPU的硬件结构(寄存器,ALU计算元等)
5、ApplicationThread、ActivityThread、main()函数详解
6、开启线程的方式有哪些与区别(runnable,future,futureTask,Callable)
7、线程池详解(创建线程池常用函数,同步线程池,异步线程池,OI密集型,CPU密集型,混合密集型,JDK自带线程池)
8、AsyncTask的优缺点
9、CPU执行文件的生成(字节码,机器码,CPU执行指令,指令重排,分配时间片)
10、Android的7种CPU架构与so文件的适配
硬件五:内存(后面会涉及)
硬件六:GPU
1、GPU的硬件结构
2、View,SurfaceView,GlSerfaceView的区别(双缓存机制,硬件加速)
3、硬件加速的原理。(矩阵运算,浮点运算,ALU计算元)
4、Open GL ES相关知识点详解
硬件七:内部存储
1、data/data(Cache,SharePreference,DataBase,File),data/app,dalvik_cache,package文件夹/package.xml文件夹分别存放什么类型数据
2、SharePreference相关知识点详解(SPUtils,线程安全,读取原理,Commit与Apply,MMKV解决什么问题)
3、ASimplyCache,DiskLruCache,RxCache的实现(最近最少使用原理,缓存超时的原理)
4、数据库常见知识点(增,删,查,改,遍历,数据库优化,数据库操作原理,常见开源框架,是否线程安全,是否进程安全)
5、普通文件操作是否支持多线程操作
6、Apk分包处理与插件化技术实现
7、Apk安装完生成oat文件的原理
硬件八:外部存储
1、私有目录与公有目录的区别
2、磁盘缓存的实现
3、不同版本的系统对外部磁盘操作限制(Android 7.0的存储权限改变,版本适配)
4、Android中存储常见的类和接口详解(Environment)
模块二:Android系统模块
第一层:Linux内核层
1、Binder驱动(Binder通信的原理,Binder通信的四个角色,Binder通信衍生的问题:Intent传输数据最大值,Binder传输池溢出等)
2、各种系统驱动
3、Linux底层用户权限机制
4、SandBox机制详解
5、Android的多版本适配与不同版本的特性
6、Android系统源码分析
第二层:系统运行库层
1、JVM的基础知识(类加载器,类加载的过程,垃圾回收器,垃圾回收算法,判断一个对象是否存活,内存结构与内存模型,对象的创建、内存分配、内存寻址,动态分派和静态分派)
2、DVM的功能详解(DVM虚拟机的运作流程与核心机制,对象的生命周期管理,内存管理,线程调度机制,垃圾回收机制,安全与异常管理)
3、JVM,DVM,ART虚拟机的区别(垃圾回收机制方面,安装Apk方面,安装文件方面)
4、JIT与AOT技术的区别
5、系统的五种进程级别(前端进程,可见进程,服务进程,后端进程,空进程,不同进程的优先级判断)
6、进程之间的通信(信号,信号量,管道,消息队列,共享内存,socket,binder机制)
7、死锁(死锁的四个必要条件,死锁的预防,死锁的避免,解除死锁)
8、拉活与保活实现
9、进程隔离与内存映射(用户空间,内核空间,内存映射,数据的复制操作)
10、Android系统中使用的开源C,C++系统项目(相关的so库的使用与引入)
11、JNI与NDK实现(Native函数,加载so动态库)
12、Media Service Process系统进程
13、进程的组成部分(PID,UID,Sandbox)
14、多进程应用详解(AIDL,Binder,原理,使用场景,优缺点)
15、Android进程优先级ADJ算法
16、Native层相关的Crash处理
17、Navive层相关的内存泄露
第三层:应用程序框架层
1、Init进程、zygote进程、serviceManager进程、systemService进程(引导服务,核心服务,其他服务)
2、AMS系统服务详解
3、PMS系统服务详解
4、WMS系统服务详解
5、IMS系统服务详解(InputManagerService的使用)
6、Binder进程之间的通信详解
7、Zygote进程fork进程的原理与共享资源模块
8、Android包含哪些守护进程和核心系统进程,及他们的作用(LowMemorykiller,ApkInstaller等等)
第四层:应用程序层
1、系统应用与普通应用的权限区别
2、系统内置不可见应用(ApkInstaller)
3、应用的启动过程详解
4、应用的安装,更新,卸载详解
5、Activity的启动原理详解
模块三:网络通信模块
1、手机与外界的通信方式(2g,3g,4g,wifi,NFC,蓝牙)
2、HTTP与HTTPS的区别详解
3、HTTP的不同版本区别(1.0,1.1,SPDY,2.0,3.0(QUIC))
4、不同的网络请求框架的区别与使用(Android_sync_httpClient,Volley,okhttp,retrofit)
5、HttpClient,HttpUrlConnection,Okhttp的区别
6、网络七层模型相关的协议,通信数据类型,设备等(TCP,UDP,IP协议,ARP,RARP,TTL)
7、TCP/IP协议族的相关知识点(三次握手,四次挥手,流量控制,拥塞控制)
8、基于TCP的Socket通信与基于UDP的Socket通信。
9、DNS服务器作用(域名解析服务器)
10、NAT网关作用、路由器,交换机,网桥,网关的作用
11、网络数据类型与处理--文字(json,Xml)
12、网络数据类型与处理--图片(UIL,Picasso,Glide,fresco原理,区别和使用场景)
13、网络数据类型与处理--实时音视频流(实时视频播放原理与具体流程,ffmpeg,GYS,jiaoziVideo,播放器控件的实现,软解码与硬解码)
14、网络数据类型与处理--下载大文件(多线程下载的原理)
15、Cookie,SessionId,Token区别
16、IP协议详解(包含各个字段的作用,TTL的作用)
17、数据指纹,数据签名,数据证书
18、对称加密算法(RSA),非对称加密算法(AES,DES,3DES,CRC),数据校验算法(MD5,SHA1,SHA256),数据转换算法(Base64)
19、微服务网关的作用(统一接入,安全防护,流量控制,协议转换)
模块四:APK生成模块
1、Android Studio开发工具使用与相关核心功能使用(配置JDK,SDK,NDK,Android studio插件版本,Gradle版本)
2、Android build文件夹的生成原理
3、Apk包的生成原理(生成图绘制,AIDL,AAPT,javac,dx,apkbuilder,jarSigner,Ziplige等工具)
4、Apk包的签名(签名原理与使用脚本,v1,v2和v3签名的区别与改进)
5、ProGuard与AndResGuard混淆(不混淆的文件集合,混淆的过程,原理与生成文件)
6、加固原理(加固的原理与作用,常见加固平台,加固可能导致的问题,class.dex与so文件的加固)
7、多渠道APK的打包原理及配合开源框架实现(美团walle)
8、Build.gradle的项目配置详解与grovvy语言学习(Gradle相关文件作用,Gradle生命周期,Gradle核心技术详解)
9、面向切面编程的思想与使用实例(AOP)
10、面向切面编程三剑客在Android中的使用(APT,AspectJ,JavaAssisit,动态生成代码,动态代理,字节码生成技术)
11、Android编译时生成代码原理
12、Git常见指令的使用与Git在Android studio中图形化的使用
13、一个Android studio点击build生成Apk所做的事情(准备依赖包,合并资源和处理清单,编译,后期处理,包装和发布)
14、Android studio常用的插件介绍
15、JDK相关语法深入了解(try,catch,finally语法,静态代码块的执行,常用系统注释,抽象类与接口的区别)
16、应用程序项目的组成,包含四种配置文件和十种代码文件
17、Adb常见指令的使用
18、Gradle常见指令的使用
19、Charles工具的使用
20、SwitchHosts工具的使用
21、AndroidX与support依赖库的区别
22、Proguard文件相关语法实现(-keep相关语法)
模块五:应用程序构建模块
一:项目常见知识点
1、反射
2、Crash
3、ANR
4、异常
5、静态代理,动态代理与Hook技术
6、动态生成代码技术(apt实现)
二:常见编程思想
1、命名规范与注解
2、JAVA与Android阿里开发手册的建议
3、理解高内聚,低耦合,易复用思想
4、理解封装,继承,多态思想
5、熟悉23种设计模块(创建型5种,结构型7种,行为型11种),并能汇总出UML图,理解demo代码,主要解决什么问题及项目中的实例(包含JDK,SDK与开源项目)
6、理解面向对象的七大设计原则,并在代码中有意识的实现(开闭原则,里式替换原则,接口隔离原则,最少知道原则,单一职责原则,合成聚合原则,依赖导致原则)
三:四大组件及相关核心类解析
1、Activity相关知识点详解(生命周期,重要函数理解与使用,配置文件的设置,主要使用场景及功能)
2、Service相关知识点详解(原理,使用场景,重要函数等等)
3、BroadcaseReceiver相关知识点详解
4、ContentProvider相关知识点详解
5、Application相关知识点详解
6、Intent知识点详解
7、Fragment知识点详解
8、Context知识点详解
四:Android应用开发的演进
1、MVC,MVP,MVVM程序架构的演进(解耦,中介者模式,单元测试,优缺点)
2、模块化(根据功能区分)
3、插件化(宿主包与插件包,主要主要解决什么技术问题,技术的演进及相关开源项目)
4、组件化(优缺点,需要解决什么问题,相关开源框架介绍)
5、多进程(主要解决什么问题,应用场景与实例)
7、跨平台技术开发模式(优缺点,选择原因,使用场景)
8、Jetpack与AAC架构详解
模块六:源码分析模块
一:JDK与SDK相关源码分析
1、Handler源码解析
2、Asynctask源码解析
3、List与RecyclerView源码解析(原理,使用场景,对比,优化)
4、LinearLayout,RelativeLayout,ContrainLayout的比较
5、Binder源码解析
6、ViewPager与ViewPager2的区别
二:开源项目分析
性能检测工具开源项目
1、LeakCanacary
2、BlockedCanaery
程序整体架构设置开源项目
1、MVPArms
2、ArmComponent
3、MvvmHabit
4、MVVMComponent
三:项目常见技术开源项目
1、EventBus的使用与源码分析
2、ARouter的使用与源码分析
3、glide的使用与源码分析
4、RxJava相关开源框架
5、Retrofit的使用与源码分析
UI相关的开源项目:(不断更新)
1、Loadsir
2、BaseRecyclerViewAdapterHelper
3、ProgressTimerBar
4、FlowLayout
模块七:内存模块
多线程并发相关
1、Synchronized(Monitor enter,Monitor exit)
2、Lock
3、Atomic
4、Volatile
5、threadLocal
6、常见并发集合(HashTable,Vector,concurrentHashMap,Collections.sync)
7、Wait,Notify,NotifyAll
8、Join
9、Synchronized与Lock的区别
10、Synchronized与Volatile的区别
Java内存模式相关
1、HappenBefore
2、指令重排(内存的指令重排,JVM虚拟机的指令重排,编译器的指令重排)
3、As if serial
4、内存屏蔽
5、原子性,可见性,有序性
Java主内存相关:
1、主内存的分区(新生区,老年区,永久区,伊甸一区,伊甸二区)
2、四种引用方式及相关引用的作用(强,软,弱,虚)
3、垃圾回收算法(标记清除算法,标记整理算法,复制算法,分代收集算法)
4、垃圾回收器
5、判断一个对象是否存活(引用计数算法,可达性分析算法)
6、内存模型
7、内存对象三种属性(原子性、可见性、一致性)
8、内存泄漏
9、内存抖动
10、内存溢出
11、内存优化手段与场景
12、Object对象的主要方法有哪些与相关知识点(equal,hashcode,toString,clone,finally,wait,notify,notifyAll)
13、内存中对象主要存放的数据有哪些与作用(数组,堆,栈,队列树,图,链表,散列表,字符串,二进制)
14、一个JAVA对象的组成与对象头相关字段的含义(对象头,实例数据,填充区域)
15、创建对象的方式(new,clone,放射,反序列化)
16、内存结构(虚拟机栈,本地方法栈,程序计数器,方法区,静态常量池,堆)
模块八:数据结构与算法模块
1、Java中的三个常见集合Set,List,Map的主要区别
2、常见的八种数据结构:数组(ArrayList)、堆(Heap)、栈(stack)、队列(queue)、树(Tree)、图、链表(LinkedList)、散列表(HashMap),它们的使用场景有哪些,使用它的理由
3、数组相关:
3.1、无序数组与有序数组的八种排序算法,分别的时间复杂度、空间复杂度和稳定性
3.2、二分查找的的实现与时间复杂度
4、堆相关:
4.1、大顶堆与小顶堆的实现(学校重点班案例)
4.2、堆的形象图(treeNode)
4.3、TopK算法的实现(处理海量数据)
4.4、树的深度优先遍历(前序,中序,后序,递归)
4.5、树的广度优先遍历(递归实现)
5、栈相关:
5.1、堆的pop()、push()、peek()、min()方法的实现
5.2、堆的形象图
5.3、堆与链表的组合实现相关功能
6、队列详解:
6.1、队列的形象图(queueNode)
6.2、队列的pop()、push()、peek()的方法实现
7、树详解:
7.1、二叉树与多叉树的区别
7.2、红黑树与平衡二叉树的区别
7.3、哈夫曼树的作用(最小生成树,做数据压缩)
7.4、二叉搜索树
7.5、23树,234树,B,B+树的区别与使用场景
7.6、树的深度优先遍历(前序,中序,后序,递归)
7.7、树的广度优先遍历
8、图详解:
8.1、无向图
8.2、有向图
8.3、权重图
8.4、最小生成树算法
9、散列表详解:
9.1、HashMap的存储结构分析
9.2、SparseArray与ArrayMap的存储结构与好处
9.3、LinkedHashMap(lruCache)的作用与好处
9.4、HashTable的作用与好处
9.5、ConcurrentHashMap的作用与好处(锁分段技术)
9.6、Collection.synchronized()做线程同步
9.7、treeMap的作用与好处
10、相关学习网址与书籍
10.1、剑指offer
10.2、编程之美
10.3、编程珠玑
10.4、牛客网
10.5、leetcode
11、算法相关的小知识点汇总
12、常见算法相关概念
12.1、递归
12.1、动态规划
12.1、回溯算法
12.1、斐波那契数列
12.1、约瑟夫环
12.1、贪婪算法
12.1、分治法
模块九:程序优化模块
1、UI与界面渲染方面检测工具与优化
2、界面流畅性与卡顿方面的检测工具与优化
3、手机电量的检测工具与优化
4、CPU与代码执行效率的检测工具与优化
5、内存相关的检测工具与优化
6、Apk包体大小(apk瘦身)检测工具与优化
7、应用启动速度的检测工具与优化
8、网络通信相关的检测工具与优化
9、程序优化的三部曲:
步骤一:使用优化相关的检查工具,并能看懂相关的输出信息(logcat,图形等输出信息)。
步骤二:通过分析检查工具的输出信息,找出相关性能问题。
步骤三:针对相关的性能问题,对症下药,解决问题。