1.点击事件被拦截,但是相传到下面的view,如何操作?
getParent().requestDisallowInterceptTouchEvent(true);
2.volatile的原理
参考Java并发编程:volatile关键字解析
一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。
①保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
②禁止进行指令重排序。
3.synchronize的原理 ,lock原理
参考:
JAVA CAS原理深度分析
死磕Java并发:深入分析synchronized的实现原理
Java并发包中Lock的实现原理
Lock与synchronized的区别
①Lock的加锁和解锁都是由java代码配合native方法(调用操作系统的相关方法)实现的,而synchronize的加锁和解锁的过程是由JVM管理的
②当一个线程使用synchronize获取锁时,若锁被其他线程占用着,那么当前只能被阻塞,直到成功获取锁。而Lock则提供超时锁和可中断等更加灵活的方式,在未能获取锁的 条件下提供一种退出的机制。
③一个锁内部可以有多个Condition实例,即有多路条件队列,而synchronize只有一路条件队列;同样Condition也提供灵活的阻塞方式,在未获得通知之前可以通过中断线程以 及设置等待时限等方式退出条件队列。
④synchronize对线程的同步仅提供独占模式,而Lock即可以提供独占模式,也可以提供共享模式
4.翻转一个单项链表 1->2->3->4->5->null =====> 5->4->3->2->1->null
public static Node reverseList(Node head) {
if (head == null || head.next == null) {
return head;
}
Node reHead = null;// 定义新链表头结点
while (head != null) {
Node cur = head.next;// 记录下一个节点
head.next = reHead;// 将rehead节点连接到head节点上
reHead = head;// 让rehead指向head
head = cur;// 将head指向下一个节点
}
return reHead;
}
5.string to integer
参考:
c实现:String to Integer (atoi)
java:
public static int atoi(String string) {
if (string == null) {
return 0;
}
char[] str = string.toCharArray();
long cur = 0;// 初始化老是忘记
int num = 0;
int i = 0;
int flag1 = 0;
while (str[i] != '\0' && str[i] == ' ')
i++;// 开头空格舍弃
if (str[i] == '-') {
flag1++;
i++;
} else if (str[i] == '+') {
i++;
}
for (; i < str.length; i++) {
if (str[i] >= '0' && str[i] <= '9') {
if (flag1 == 2) {
cur = cur * 10 - (str[i] - '0');// 这里是减法,因为cur符号是负号了
if (cur < -2147483648)
return -2147483648;
} else if (flag1 == 1) {
cur = -str[i] + '0';
flag1++;// 将负数的符号记录到cur里
} else {
cur = cur * 10 + (str[i] - '0');
if (cur > 2147483647)
return 2147483647;
}
} else {
break;
}
}
num = (int) cur;
return num;
}
6.合并多个单有序链表(假设都是递增的)
7.Activity生命周期简述
8.Actvity启动模式简述
参考:Android Activity的4种启动模式详解(示例)