-
Java类加载机制: 双亲委派模型 通过代理 将需要加载的类从顶层classloader开始查找并加载 后续的classloader是无法覆盖已经加载的类的 bootstrap classloader external classloader application classloader 双亲委派实际上就是 如果调用子类继承的父类static参数 不会初始化子类
-
公平锁 就是 谁先到谁先执行 会产生穷等,非公平锁就是谁抢到了谁先执行
-
可重入锁 sychronize or Lock 不至于循环调用产生死锁 但是sychronize如果是多线程情况下会产生b穷等,Lock可以解决这个问题
-
sychronize是关键字 Lock是对象 且可中断。sychronize自动释放 Lock手动释放。sychronize是函数和代码段都可以 Lock只针对代码段。
-
volital 关键字的目的就是原子更新数据,避免脏读现象发生。 再就是代码不重排序 也是解决多线程的赋值问题。
-
抽象类的内部类 由于抽象类是不能被实例化的,所以静态内部类可以通过new 外部类.内部类()来创建内部类的实例。而非静态的内部类则无法被实例化。
-
内部抽象类 普通内部类需要先实例化外部类,然后在实例化内部类。抽象内部类也是通过此方法实现,只是需要在实例化的时候重写抽象方法。 7.android 11新特性: 每个app的外部存储的权限控制死了,不能访问别的app的文件
-
webview漏洞攻击: 构造intent调取其他app的webview并加载html 由于文件协议 这个html
-
hashmap初始化数组大小是16, 底层数据结构是数组+链表, 为啥hashmap的查找是o1,是因为数组指针 直接用下标访问数组之后访问
-
有序数组合并的时间复杂度是om+n 空间复杂度是o1
-
hashtable是线程安全的 全局锁 sychornize
-
自旋锁:while穷等,互斥锁:单一线程 读写锁:多读,写只能有一个
-
公平锁非公平锁:公平锁会在线程刚进来的时候先判断是否有等待
-
不用重启的xposed: 不把xposed加载到zygote进程中,而是在XposedBridge里判断 fork出来的进程是目标进程再进行加载
-
工厂模式,观察者模式,代理模式 工厂模式:适合不经常修改的业务: 接口 继承之后 有需求就得增加。使用抽象工厂模式替代 abstract class 可以不完全实现
-
Xposed为啥能hook? before和after的本质:把原来的java方法指向了nativemethod 在native中before+调用原javamethod+after实现的前后hook
-
为啥主线程/ui线程looper不能导致anr?因为looper本身就是没有就阻塞在那,只有ui操作超时了才会发生anr。主线程消息堆积了就会产生异常 而阻塞在那其实就是pipe机制,没有消息就休眠 有就唤醒执行。
-
applicationThread与ActivityThread的区别?applicationThread是binder 是activityThread 的子类,ActivityThread 就是ui线程,
-
virtualapp多开的解决方式:堆栈是其中一个 再就是能执行shell 那就是万能 再就是通常来看va之后 本身只能获取到自己一个app
-
android5 以后aygote就是两个进程了 一个是32位的 一个是64位的
-
xposed其实就是 dalvik中反射method变量 获取directmethod/nativemethod 找到目标函数 修改为native函数 这个函数就会先调before处理 之后hook 的函数 之后是after 是在过程中dalvik
-
application启动过程 ui线程先向ams请求bindapplication 在这期间是用的binder binder需要经过 servicemanager获取ams的binder信息和对象 之后再进行访问ams的attachapplication 之后就告诉app说application准备好了,用handler loop到主线程中让主线程准备instrumentation 之后通过类加载传参new Application 之后调oncreate就行了 其实开activity就是把activity类名给ams之后调oncreate
-
平衡二叉查找树的时间复杂度是ologn, 快排的时间复杂度是不固定的 ologn-on
-
c++ 中 >>相当于除以2取整
-
b 跳转 bl 带返回跳转 blx 带返回状态切换跳转 bx 状态切换跳转 bxxx实现的是短跳转 32m内存的
--lr寄存器的值直接给pc 实现长跳转 4g内存中随便跳转-- 长跳转是直接给pc寄存器赋值 但在跳转之前保存现场需要把当前pc寄存器值赋给lr寄存器 -
arrayMap为按键值大小进行排序的map,而lmk(low memory killer)用的就是这个map进行kill的 所以进程的排序会对其杀进程顺序有影响
-
锁(轻锁,重锁,可重入,不可重入,公平,非公平)
-
exception
-
单例 优势
-
hashmap,hashtable
-
queue
- IOU就是(检测框与真实框的交集除以并集)
- 这个IOU的评价指标是有个阈值的(threshold)进而引入评价体系TP,FP,TN,FN
- TP: True Positive 即IOU > threshold 检测框与真实框的交集大于阈值
- FP: False Positive 即IOU < threshold 检测框与真实框交集小于阈值
- TN: True Nagative 即IOU = 0 有真实框没有检测框
- FN:False Nagative 没有检测框 有真实框 (计算的时候算的是所有的真实框)
- AP就是平均精度(Average Precision)
- Precision = TP/(TP+FP)
- Recall = TP(TP+FN)
- AP的原始定义是p(r)函数(横坐标为recall,纵坐标为precision)在0到1上的积分
- https://blog.csdn.net/beizhengren/article/details/120980881
- NMS(非极大值抑制) 就是在选取bounding box的时候选择IOU最大的 其余的一律不算即直接将IOU置0
- 虚函数
- stl
- 智能指针
- 模版类
- 多态
- 熟悉现代c++,c99, c11,c14要能区分
- 字符串指针
- char* a = "123"; //其中123是常量字符串 不可更改, 指针指向的地址内容不可变
- char a[10] = "asdqw"; // 这里的a变量是可以更改的 末尾是\0,指针指向的地址内容是可变的
- char a = (char)malloce(10*(char)); // 这里分配了10个字符的内存空间在堆上 是可变的