Android题目笔记(五)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我来给你提供一些关于Android Studio的笔记。 1. Android Studio的介绍: - Android Studio是由Google推出的官方Android开发集成开发环境(IDE),用于开发Android应用程序。 - 它基于IntelliJ IDEA开发,提供了丰富的功能和工具,方便开发者进行Android应用程序的开发、调试和测试。 2. Android Studio的安装: - 在官方网站(https://developer.android.com/studio)上下载最新版本的Android Studio。 - 执行安装程序,并按照安装向导的指示进行操作。 - 安装完成后,启动Android Studio并进行必要的配置。 3. Android Studio的主要功能: - 提供了强大的代码编辑器,支持代码补全、语法高亮、代码重构等功能。 - 可以通过布局编辑器(Layout Editor)创建和编辑Android应用程序的用户界面。 - 集成了Android SDK工具,可以方便地管理安卓设备、模拟器以及APK包等。 - 提供了丰富的调试工具,如代码调试器、内存分析器、性能分析器等。 - 支持版本控制系统(如Git)的集成,方便团队协作开发。 4. Android Studio常用操作: - 创建一个新项目:选择"File" -> "New" -> "New Project",按照向导填写项目信息,即可创建一个新的Android项目。 - 打开现有项目:选择"File" -> "Open" -> 选择项目文件夹,即可打开一个已存在的Android项目。 - 运行应用程序:选择"Run" -> "Run 'app'",选择目标设备后即可在设备上运行应用程序。 - 调试应用程序:在代码中设置断点,选择"Debug" -> "Debug 'app'",即可启动调试模式并在代码中进行调试。 - 通过布局编辑器创建UI界面:在res目录下的layout文件夹中选择一个布局文件,然后使用布局编辑器进行UI界面的设计和编辑。 这些是Android Studio的一些基本信息和常用操作。希望对你有帮助!如果你还有其他问题,可以继续问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值