知识星球
2023-05-11 09:16:37 1 举报
AI智能生成
知识流程图
作者其他创作
大纲/内容
网络
网络接口层
物理层
数据链路层
网络层
传输层
TCP
三次握手
四次挥手
UDP
TCP与UDP区别
应用层
会话层
DNS
表示层
应用层
http
请求方式
get和post区别
返回码
http1.0、1.1、2.0、3.0
https
http与https区别
数据结构
数组
队列
栈
链表
哈希表(散列表)
哈希冲突解决方法
开放寻址法
链表法
再Hash法
建立公共溢出区
树
二叉树
平衡二叉树
完全二叉树
满二叉树
红黑树
堆
图
算法
数组
排序
选择排序
冒泡排序
插入排序
快速排序
二分查找
求两个数组的交集
链表
反转链表
回文链表
判断链表是否有环
输出倒数第N个节点
树
二叉树的遍历
前序遍历
中序遍历
后序遍历
层序遍历
求二叉树的最大最小深度
判断是否为平衡二叉树
设计模式
6大原则
单一职责原则(SRP)
开放封闭原则(ASD)
里氏替换原则(LSP)
依赖倒置原则(DIP)
迪米特原则(LOD)
接口隔离原则(ISP)
创建型设计模式
单例模式
工厂模式
简单工厂模式
工厂方法模式
抽象工厂模式
Builder模式
结构型设计模式
代理模式
享元模式
外观模式
装饰模式
适配器模式
行为型设计模式
观察者模式
策略模式
模板方法模式
责任链模式
命令模式
子主题
Android
四大组件
Activity
生命周期
横竖屏切换时的生命周期
ActivityA启动ActivityB时生命周期变化
启动模式
Standard
SingleTop
SingleTask
TaskAffinity应用场景
SingleInstance
onSaveInstanceState和onRestoreInstanceState
Service
生命周期
启动方式
IntentService
BroadcastReceiver
注册方式
动态注册
静态Manifest注册
有序广播、无序广播、本地广播
ContentProvider
UI
常用布局
约束布局(ConstraintLayout)
线性布局(LinearLayout)
帧布局(FrameLayout)
相对布局(RelativeLayout)
View事件分发
事件冲突处理
自定义View
自定义步骤
自定义View需要注意的点
MeasureSpec
view/viewGroup的绘制流程
Window
Activity、Window、PhoneWindow、DecorView以及ViewRootImpl间的关系
SurfaceView
View和SurfaceView的区别
SurfaceView为什么可以直接子线程绘制
其他
View.post和Handler.post的区别
requestLayout,invalidate,postInvalidate的区别
RecyclerView
RecyclerView和ListView的区别
Recycleview的四级缓存,缓存过程?
RecyclerView的性能优化
Fragment
生命周期
Fragment与Activity通信
Fragment与Fragment通信
懒加载
网络
断点续传下载原理
Okhtttp
内置拦截器
使用的设计模式
Retrofit
图片
Bitmap
Bitmap 内存占用的计算
如何加载超大图
LruCache原理
DiskLruCache原理
如何设计一个图片加载库
Glide使用和原理
Jetpack
Lifecycle
LiveData
ViewModel
DataBinding
Compose
动画
帧动画
补间动画
属性动画
补间动画和属性动画的区别
属性动画原理
多进程
进程优先级
Binder
为什么Intent不能传递大数据
进程间通信方式
Intent
广播
Socket
AIDL
文件
Sqlite
GreenDao
架构
MVC、MVP、MVVM、MVI的演变
组件化
Arouter
插件化
模块化
Gradle
FrameWork
Handler
为什么不能在子线程更新UI ?
Looper.loop方法是死循环为什么不会造成卡死(ANR)
Handler内存泄露的原因以及处理
子线程使用Handler
Handler的同步屏障机制
IdealHandler
HandlerThread
Android版本差异
Android系统启动流程
Activity的启动流程
Android系统架构
ART和Dalvik的区别
Apk打包流程
性能
内存溢出与内存泄漏
内存泄漏常见原因
内存泄漏监控
Leakcanary
为什么LeakCanary不能用于线上
线上监控
ANR
产生原因
检测方式
解决方案
Crash监控
性能优化
缩包优化
启动优化
卡顿优化
其他
Gson使用和原理
SparseArray与ArrayMap
显式Intent与隐式Intent区别
Serilaizable和Parcelable序列化的区别
APP换肤方案
EventBus源码
Java
基本类型
boolean(1字节)
byte(1字节)
char(2字节)
short(2字节)
int(4字节)
float(4字节)
double(8字节)
long(8字节)
String
String、StringBuilder、StringBuffer的区别
String为啥设计成不可变
异常处理
try-catch-finnally中return返回值
面向对象
三大特性
封装
继承
多态
抽象类与接口区别
重写和重载的区别
equals和hashCode重写规则
集合
Collection接口
List接口
ArrayList
遍历删除的方式
LinkedList
Vector
Stack
CopyOnWriteArrayList
Set接口
HashSet
TreeSet
LinkedHashSet
CopyOnWriteArraySet
Queue接口
ArrayDequeue
Map接口
HashMap
TreeMap
HashTable
LinkedHashMap
ConcurrentHashMap
线程
创建方式
继承Thread类
实现Runnable接口
实现Callable接口
生命周期(6种状态)
锁
乐观锁与悲观锁
死锁
公平锁与非公平锁
Syncronized锁升级
偏向锁
轻量级锁
重量级锁
wait和sleep的区别
线程同步
Syncronized
volatile
Lock
Syncronized与Lock锁的区别
CAS理解
原子变量操作
AtomicBoolean
AtomicInteager
AtomicLong
阻塞队列
LinkedBlockingQueue
线程终止
运行结束自动终止
退出标志位
interrupt()
线程池(ThreadPoolExecutor)
newCachedThreadPool
newFixedThreadPool
newScheduledThreadPool
newSingleThreadExecutor
其他
线程与进程的区别
并发与并行的区别
JVM
内存模型
程序计数器
Java虚拟机栈
本地方法栈
堆
年轻代
Eden区(8)
Survivor区(1)
Survivor区(1)
老年代
方法区
类加载
类加载器
启动类加载器(Bootstrap ClassLoader)
扩展类加载器(Extensions ClassLoader)
应用程序类加载器(Application ClassLoader)
用户自定义类加载器
类加载过程
双亲委派模型机制
垃圾标记算法
引用计数算法
可达性分析(根搜索)算法
垃圾回收算法
标记-清除算法
复制算法
标记-压缩算法
分代收集算法
泛型
泛型擦除
泛型上下界
反射
注解
其他
四种引用
强引用
软引用
弱引用
虚引用
深拷贝与浅拷贝
引用队列(ReferenceQueue)
final、finally、finalize区别
Kotlin
基本类型
高阶函数
let、with、run、apply、also
协程
Flutter
0 条评论
下一页