Android题目笔记(五)

本文涵盖了点击事件处理、Java并发机制(volatile与synchronize)、链表操作、字符串转换为整数、活动生命周期及启动模式等内容,并提供了相关代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值