目录
1、操作系统
- 概念
操作系统(Operating System, OS):是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源分配,以提供给用户和其他软件方便的接口和环境的软件集合。
- 内存管理
逻辑地址(虚拟地址)、物理地址、分页、分段、页置换算法
- 线程与进程
进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位
https://blog.csdn.net/kuangsonghan/article/details/80674777
- 进程间通信
管道、信号量、共享内存、消息队列、信号、套接字
https://www.cnblogs.com/liugh-wait/p/8533003.html
2、计算机网络
- TCP/UDP区别
- TCP三次握手四次挥手
- TCP如何保证数据不出错
- Http/Https区别
- Https详解
- Token
- 计算机网络模型、TCP/IP协议五层模型
- DNS解析
- Url是如何转换成网页的
3、数据结构
- 数组与链表在内存中的区别
- 数组与链表的区别
- 队列与栈的区别
- 二叉树详解
- 二叉树的遍历-前序/中序/后序
- 红黑树详解
- 深度优先/广度优先算法
4、算法
- 动态规划
- 贪心算法
- 排序算法
- Manacher
- 判断链表有环
- 链表反序
5、Java
- 基本数据类型
1 整型 byte(1字节) short (2个字节) int(4个字节) long (8个字节)
2 浮点型 float(4个字节) double(8个字节)
3 逻辑性 boolean(八分之一个字节)
4 字符型 char(2个字节,一个字符能存储下一个中文汉字)
- int与float区别
int为二进制存储(-2^31 ~ 2^31),float为指数存储
https://blog.csdn.net/C2681595858/article/details/84865920
- float与double区别
float是单精度类型,精度是8位有效数字,取值范围是10的-38次方到10的38次方,float占用4个字节的存储空间
double是双精度类型,精度是17位有效数字,取值范围是10的-308次方到10的308次方,double占用8个字节的存储空间
当你不声明的时候,默认小数都用double来表示,所以如果要用float的话,则应该在其后加上f
例如:float a=1.3;
则会提示不能将double转化成float 这成为窄型转化
如果要用float来修饰的话,则应该使用float a=1.3f
注意float是8位有效数字,第7位数字将会产生四舍五入
所以如果一个float变量 这样定义: float a=1.32344435; 则第7位将产生四舍五入(5及5以下的都将舍去)
- int和Integer的区别
int是基本数据类型,Integer是封装类,是对象。
注意 -128~127
https://blog.csdn.net/Teacher_Lee_ZZSXT/article/details/79230501
- 自动装箱拆箱(ArrayList不能使用基本数据类型)
Integer total = 99; //自动装箱
int totalprim = total; //自动拆箱
https://www.cnblogs.com/wang-yaz/p/8516151.html
https://www.cnblogs.com/libinhong/p/10988945.html
- 原子性
- 单继承/单根继承
- 双亲委派模型
- 深拷贝/浅拷贝
- 线程同步/线程安全-Volatile/Synchronized/Lock
- 两者区别-(abstract/interface)(Override/Overload)(wait/sleep)(JDK/JRE)(start/run)
- 三者区别-(String/StringBuilder/StringBuffer)(final/finally/finallize)(== 、equals、===)
- 内部类使用外部类局部变量为什么要声明为final
- GC详解
- 四种引用(软引用与弱引用的区别)以及软引用实现高速缓存
强引用、软引用、弱引用、虚引用,高速缓存的实际应用
https://blog.csdn.net/he_world/article/details/50543793
- Java 反射
- 泛型与泛型擦除
- HashMap详解
- 设计模式
- 生产者消费者模式
手写!!!
https://blog.csdn.net/u011109589/article/details/80519863
6、Android
- Android四大组件(ABCS)
Activity、BroadCast Receiver、ContentProvider、Service
- Activity生命周期,横竖屏切换,配置信息更改
onCreate-onStart-onResume-onPause-onStop-onDestroy onRestart
onConfigurationChanged
https://www.cnblogs.com/chenxibobo/p/9646608.html
- Fragment生命周期
onAttach、onCreate、onCreateView、onActivityCreated、onStart、onResume、onPause、onStop、onDestroyView、onDestroy、onDetach
fragment之间使用不同的切换方式时,生命周期的变化 ↓
https://www.jianshu.com/p/c8f34229b6dc←—————
- Activity与Fragment通信
https://blog.csdn.net/qq_36982160/article/details/82802544
.
https://blog.csdn.net/carson_ho/article/details/75453770
- Fragment懒加载
setUserVisibleHint方法
onHiddenChanged方法
https://www.jianshu.com/p/0e2d746e3a3d
- Activity启动模式,taskAffinity
standard(标准),singleTop(生命周期变化,新闻推送)
singleTask(首页),singleInstance(微信小程序)
taskAffinity:指定Activity所处的活动栈
- 广播的两种注册方式
静态注册/动态注册
静态注册:在Manifest中注册,随系统启动而启动,一直在运行
动态注册:在代码中注册,随应用启动而启动,应用结束则销毁广播
Android8.0以后,大部分广播不再支持静态注册,官方说为了省电。
- Service启动模式,生命周期,与Thread的区别
startService启动:启动之后便于启动者(如Activity)无关了,不进行通信,一般用来在后台执行任务,通过调用stopService来停止服务。
生命周期:onCreate(只执行一次),onStartCommond(可能 执行多次,通过调用startService),onBind(虽然用不到,但是需要重写),onDestroy。
·········································································································
bindService启动:service生命周期与启动者(如Activity)关联,启动者被销毁后,service也会被销毁,双方可以通过IBinder来进行通信,通过unBinderService来停止服务。
生命周期:onBind,onUnbind
·········································································································
startService和bindService启动,需要调用stopService和unBinderService来停止服务。
·········································································································
·········································································································
service是运行在主进程里的main线程中,在无响应超过20S后会触发ANR
(BroadCast10S,Activity5S),或者运行在独立的进程里的main线程中,不同于线程,线程是程序执行的最小单元。通常是在Service中开启线程来处理一些后台任务。
https://www.jianshu.com/p/4c798c91a613
- IntentService
封装好的Service,为我们在内部创建了线程(使用HandlerThread),并处理好了线程的开启和销毁,可以在service中处理耗时任务。
第一行代码中的说法是:在Service中开启线程执行耗时任务时,为了防止程序员忘记在任务执行完毕后关闭服务,所以封装了一个类来为程序员做这些工作,这个类就是IntentService。
https://www.jianshu.com/p/8c4181049564
- Android消息机制(ThreadLocal)
1.为什么一个线程只有一个Looper、只有一个MessageQueue?
2.如何获取当前线程的Looper?是怎么实现的?(理解ThreadLocal)
3.是不是任何线程都可以实例化Handler?有没有什么约束条件?
4.Looper.loop是一个死循环,拿不到需要处理的Message就会阻塞,那在UI线程中为什么不会导致ANR?
5.Handler.sendMessageDelayed()怎么实现延迟的?结合Looper.loop()循环中,Message=messageQueue.next()和MessageQueue.enqueueMessage()分析。
https://blog.csdn.net/feather_wch/article/details/81136078
https://blog.csdn.net/feather_wch/article/details/79263855
- HandlerThread
- 线程间通信
- 进程间通信
- AsycnTask
- Android事件分发机制
- Android解决滑动冲突
- Android动画(帧动画、补间动画、属性动画)
- View绘制原理(难点)
- Android屏幕刷新机制(难点)
- 自定义View
- Android框架(Framework)
- Android开机过程(源码)(难点)
- 点击应用图标到启动完成,整个执行过程是怎样的(难点)
- Android Application与Context
- SharedPreferences
- MVC – MVP – MVVM
- RecyclerView缓存机制
- ListView&RecyclerView的item复用机制,ListView与RecyclerView的区别
- 内存泄漏、内存抖动、内存溢出、ANR
- Android布局、布局优化(include/merge/viewstub)
- 网络请求注解
- 序列化
- SparseArray等
- Android优化工具