1、== 和 equals:
-
在没有重写时,== 和equal是一样的,但是在string中对equals进行了重写:将每个字符取出来进行比较(比较内容是否相同)
2、抽象类和接口的区别:
- 抽象类是对子类的共性进行抽取为一个父类,为了代码的复用
- 接口是对类的行为进行约束,指定类可以有哪些行为
- 抽象类的设计目的,是代码复用。当不同的类具有某些相同的行为(记为行为集合A),且其中一部分行为的实现方式一致时(A的非真子集,记为B),可以让这些类都派生于一个抽象类。在这个抽象类中实现了B,避免让所有的子类来实现B,这就达到了代码复用的目的。而A减B的部分,留给各个子类自己实现。正是因为A-B在这里没有实现,所以抽象类不允许实例化出来(否则当调用到A-B时,无法执行)。
- 当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。
- 抽象类是对子类的共性就行提取,进而复用代码;而接口是对实现它的类的行为进行约束,要求该子类实现它的方法
- 属于同一类可以用抽象类,不属于同一类,用接口
3、ArrayList:
- ArrayList:基于动态数组,连续内存存储,适合下标访问
随机访问),扩容机制:因为数组长度固定,超出长度时需要新建数组,然后将老数组的数据拷贝到新数组,如果不是尾部插入数据还会涉及到元素的移动(往后移动一份,插入新元素),使用尾插法并指定初始容量可以极大提升性能、甚至超过linkedList(需要创建大量的node对象)
4、HashMap和HashTable:
-
hashTable是在hashmap的基础上加synchronize锁实现的
currentHashMap
6、垃圾回收:
- 可以作为GC Roots的对象有:
虚拟机栈(栈帧中的本地变量表)中引用的对象
方法区中类静态属性引用的对象
方法区中常量引用的对象
本地方法栈中JNI(即一般说的Native方法)引用的对象
-
可达性算法中的不可达对象并不是立即死亡的,对象拥有一次自我拯救的机会。对象被系统宣告死亡至少要经历两次标记过程:第一次是经过可达性分析发现其没有与GC Roots相连接的引用链,第二次是在由虚拟机自动建立的Finalizer队列中判断是否需要执行finalize()方法。
当对象变成(GC Roots)不可达时,GC会判断该对象是否覆盖了finalize方法,若未覆盖,则直接将其回收。否则,若对象未执行过finalize方法,将其放入F-Queue队列,由一低优先级线程执行该队列中对象的finalize方法。执行finalize方法完平后,GC会再次判断该对象是否可达,若不可达,则进行回收,否则,对象"复活”每个对象只能触发一次finalize()方法由于finalize()方法运行代价高昂,不确定性大,无法保证各个对象的调用顺序,不推荐大家使用,建议遗忘它。
sleep、wait区别
- 线程不安全:多线程的执行结果跟单线程的执行结果不一样
- thread类是实现了runable这个接口的
- 守护线程:为所有非守护线程提供服务的线程;任何一个守护线程都是整个JVM中所有非守护线程的保姆
应用场景:(1)为其它线程提供服务支持的情况;(2)在任何情况下,程序结束时,这个线程必须正常且立刻关闭,就可以作为守护线程来使用;反之,如果一个正在执行某个操作的线程必须要正确地关闭掉否则就会出现不好的后果的话,那么这个线程就不能是守护线程,而是用户线程。通常都是些关键的事务,比方说
数据库录入或者更新,这些操作都是不能中断的。
threadLocal
threadLocal应用情景
强引用
并发
- 并发同一时间点还是只有一个任务执行
- 并发的三大特性:原子性、可见性、有序性
-
软引用:内存不足时,释放;弱引用:内存够不够都会被释放
- oom:
内存泄漏、频繁申请内存得不到急时的回收
-
可达性分析:从以上的可以作为GC Root的对象出发,可以遍历到的对象都不会被回收,遍历不到的会被回收
ANR
用到binder的地方 -
多进程:可以增大APP的内存、可以隔离风险(把风险大的任务放在一个线程,如下载)
-
linux 原生的进程通信机制:管道,文件共享,socket,信号量
-
数据拷贝到内核空间后,clent方通过mmap映射找到该服务: 内核空间的虚拟内存和接收方的用户空间的虚拟内存同时映射在同一块物理空间
-
正常情况下,用户只能将数据交给系统内核,由系统内核拷贝到磁盘。但mmap走了一个捷径:将自己的用户数据直接映射到系统内存空间,用户空间和内核空间映射到同一块物理内存(将自己的虚拟内存和一段物理内存进行了关联)。
-
安卓中怎么使用Binder? ? ---_ aidl
-
aidl工具---》安卓接口定义语言---通过接口语言生成java代码
-
四大组件的底层也是通过binder实现跨进程通信的
一共夸6次进程
简版 -
intent最多可以彻底1m - 8 k 的数据(intent不能传递大数据)
网友评论