Android题目笔记(五)

来源:互联网 发布:软件测试工资待遇2017 编辑:程序博客网 时间:2024/05/26 09:56

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

参考Java实现单链表翻转实例代码

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生命周期简述

参考:深入理解Activity的生命周期

8.Actvity启动模式简述

参考:Android Activity的4种启动模式详解(示例)

9.简绘观察者设计模式UML图

参考:Java设计模式六:观察者模式(Observer)
观察者设计模式UML图

10.算法,求公共子序列(或者是子串,记不清了)

参考:经典算法题每日演练——第四题 最长公共子序列


参考文章–>https://mp.weixin.qq.com/s/sN_i_IaLUpFBbX9UHIX4NA

原创粉丝点击