next

Android消息传递机制Handler完全解析值面试问答

99封情书 提交于 2020-11-11 14:45:17
Android消息传递机制Handler完全解析值面试问答 本文对Handler面试的一些知识题进行总结归档,主要是以文字描述,不熟悉的可以基于某个点再进行深入研究。 面试问题: 1、说一下你对Handler的理解 答案示例: 2、Handler的实现过程你了解吗 答案示例: 3、Handler的延时消息是怎么实现的,会不会造成消息阻塞? 答案示例: 4、Handler是如何完成子线程和主线程通信的? 答案示例: 5、一个线程可以有几个Looper?几个Handler?几个MessageQueue? 答案示例: 6、Handler设计用到的什么设计模式 答案示例: 分析思路和解答示例 1、说一下你对Handler的理解 提示:这个问题是一个比较笼统的问题,一般要答出Handler的作用,主要的类和类的关系,最好是能说一些细节,比如关于子线程创建Handler,当时不要将太深入。 答案示例: Handler是消息通信工具,经常被我们用来在子线程接收数据后发送給主线程更新界面; Handler有三种发送消息方法,立即发送,延时发送和在某个时间发送。 Handler的相关类有Handler、Looper、MessageQueue、Message; Handler是发消息和接收消息的载体, Message是消息对象, MessageQueue是消息管理队列,负责管理消息对象

随机点名器

巧了我就是萌 提交于 2020-11-11 07:24:05
---恢复内容开始--- 1.1 案例介绍 随机点名器,即在全班同学中随机的找出一名同学,打印这名同学的个人信息。 此案例在我们昨天课程学习中,已经介绍,现在我们要做的是对原有的案例进行升级,使用新的技术来实现。 我们来完成随机点名器,它具备以下3个内容: l 存储所有同学姓名 l 总览全班同学姓名 l 随机点名其中一人,打印到控制台 1.2 案例需求分析 全班同学中随机的找出一名同学,打印这名同学的个人信息。 我们对本案例进行分析,得出如下分析结果: 1.存储全班同学信息(姓名、年龄) 2.打印全班同学每一个人的信息(姓名、年龄) 3.在班级总人数范围内,随机产生一个随机数,查找该随机数所对应的同学信息(姓名、年龄) 随机点名器明确地分为了三个功能。如果将多个独立功能的代码写到一起,则代码相对冗长,我们可以针对不同的功能可以将其封装到一个方法中,将完整独立的功能分离出来。 而在存储同学姓名时,如果对每一个同学都定义一个变量进行姓名存储,则会出现过多孤立的变量,很难一次性将全部数据持有。此时,我们采用ArrayList集合来解决多个学生信息的存储问题。 1.3 实现代码步骤 每名学生都拥有多项个人信息,为了方便管理每个人的信息,我们对学生信息进行封装,编写Student.java文件 /** * 学生信息类 */ public class Student { String name

树链剖分(附带LCA和换根)——基于dfs序的树上优化

这一生的挚爱 提交于 2020-11-11 06:25:19
。。。。 有点懒; 需要先理解几个概念: 1. LCA 2. 线段树(熟练,要不代码能调一天) 3. 图论的基本知识(dfs序的性质) 这大概就好了; 定义 :   1.重儿子:一个点所连点树size最大的,这个son被称为这个点的重儿子;   2.轻儿子:一个点所连点除重儿子以外的都是轻儿子;   3.重链:从一个轻儿子或根节点开始沿重儿子走所成的链; 步骤 :   在代码里,结合代码更清晰。。。 (其实是太懒了)  有重点需要注意的东西在code中有提到,仔细看。。。。 #include<bits/stdc++.h> #define maxn 100007 #define le(x) x<<1 #define re(x) x<<1|1 using namespace std; int n,m,root,mod,a[maxn],head[maxn],fa[maxn],son[maxn],cnt,tag[maxn<< 2 ]; // a:原始点值,fa:父亲节点,son:重儿子,tag:懒标记 int top[maxn],sz[maxn],id[maxn],dep[maxn],w[maxn],cent,tr[maxn<< 2 ]; // top:所在重链的头结点,sz:子树大小,id:dfs序,dep:深度 // w:dfs序所对应的值(建线段树),tr:线段树 struct

IETF和W3C的区别

人盡茶涼 提交于 2020-11-11 03:24:35
国际互联网协会ISOC和万维网联盟W3C是互联网领域内两大国际协会组织,ISOC旗下IETF机构与W3C是互联网行业内两大标准组织。不可否认「IETF和W3C都是优秀的组织,它们从事着一种使事情按程序运作的令人兴奋的工作」,「它们是计算机工业的伟大贡献者,它们就是开放的标准」。   W3C是全球互联网最具权威的技术标准化组织,之所以被业界所推崇,离不开其创始人、被业界公认为「互联网之父」的伯纳斯·李。如果伯纳斯·李当初为自己发明的「WWW」申请专利,他现在可以在金钱上与盖茨一比高低,但是他选择了无偿的向全世界开放,让所有人都有机会接触到互联网。    伯纳斯·李获得的荣誉   1997年他获得不列颠帝国官佐勋章(不列颠帝国勋章是英国授勋及嘉奖制度中的一种骑士勋章),2001年英国皇家学会院士,2002年获日本国际奖(日本国际科学技术财团所颁发的奖项,奖励那些对科学技术的发展、人类的和平与繁荣做出了重大贡献的在世人物)。   1999年《时代》将他列入20世纪最有影响的100名英国人之一。   2002年他与劳伦斯·罗伯茨、鲍伯·卡恩和文顿·瑟夫分享阿斯图里亚斯亲王奖(这个奖原是西班牙本国最高等级的学院奖,现已面向全世界)。   2004年4月15日伯纳斯-李因发明万维网被提名为芬兰的首届千禧技术奖(全球单项奖励金额最高的科技奖项)第一名得奖者。6月15日芬兰总统塔里娅

Ubuntu下使用可视化调试前端软件KDBG和VScode

被刻印的时光 ゝ 提交于 2020-11-10 17:55:00
文章目录 一、可视化前端 Kdbg 二、基于跨平台多类型代码编辑器VScode 三、总结 四、参考资料 本文使用Ubuntu20.04 一、可视化前端 Kdbg 安装Kdbg过程 git clone - b maint https : / / github . com / j6t / kdbg . git 当git clone使用不了 解决语句: sudo apt install git 解决语句: sudo apt - get install update 解决方法: sudo nano / etc / resolv . conf 修改DNS nameserver 8.8.8.8 nameserver 8.8.4.4 sudo etc / init . d / networking restart 然后重新执行(不出意外,安装会成功) sudo apt - get install update sudo apt - get install git git clone - b maint https : / / github . com / j6t / kdbg . git 进入kdbg目录下 cmake . cmake不成功,通过查看CMakeList.txt内容,发现应该是缺少一个QT程序和一个KF5 安装QT程序始终不成功,发现是虚拟机的磁盘空间不够,已经放不了QT程序

java并发编程(八) CAS & Unsafe & atomic

人盡茶涼 提交于 2020-11-10 07:38:01
参考文档: https://www.cnblogs.com/xrq730/p/4976007.html CAS(Compare and Swap) 一个CAS方法包含三个参数CAS(V,E,N)。V表示要更新的变量,E表示预期的值,N表示新值。只有当V的值等于E时,才会将V的值修改为N。如果V的值不等于E,说明已经被其他线程修改了,当前线程可以放弃此操作,也可以再次尝试次操作直至修改成功。基于这样的算法,CAS操作即使没有锁,也可以发现其他线程对当前线程的干扰(临界区值的修改),并进行恰当的处理 CAS的实现原理 CAS是通过 Unsafe 实现的,看下Unsafe下的三个方法: public final native boolean compareAndSwapObject(Object paramObject1, long paramLong, Object paramObject2, Object paramObject3); public final native boolean compareAndSwapInt(Object paramObject, long paramLong, int paramInt1, int paramInt2); public final native boolean compareAndSwapLong(Object

数据结构与算法 —— 链表linked list(03)

时光怂恿深爱的人放手 提交于 2020-11-10 07:35:01
继续关于linked list的算法题: 删除排序链表中的重复元素 给定一个排序链表,删除所有重复的元素使得每个元素只留下一个。 案例: 给定 1->1->2 ,返回 1->2 给定 1->1->2->3->3 ,返回 1->2->3 解题思路: 这道题很简单,只需要比较当前节点和下一个节点,相同,则当前节点的指针指向下一节点的下一节点,不相同,递归下一节点。还是要注意同样的问题,单向链表是只能向后不能向前的,所以,要保留首节点。 # Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution(object): def deleteDuplicates(self, head): """ :type head: ListNode :rtype: ListNode """ if not head: return None pre = head while pre.next: if pre.val == pre.next.val: pre.next = pre.next.next else: pre = pre.next return head 我们继续来看另外一道题目

第二十五篇 玩转数据结构——链表(Linked List)

萝らか妹 提交于 2020-11-10 07:18:18
1.. 链表的重要性 我们之前实现的动态数组、栈、队列,底层都是依托静态数组,靠resize来解决固定容量的问题,而"链表"则是一种真正的动态数据结构,不需要处理固定容量的问题; 链表是最简单的动态数据结构; 学习链表有助于更深入的理解"引用"(或指针); 学习链表有助于更深入的理解"递归"; 链表可以用来辅助组成其他数据结构; 2.. 链表基础 数据存储在"节点"(Node)中; 链表的形象化解释如下图: 链表的优点在于,它是一种真正的动态数据结构,不需要处理固定容量问题; 链表的缺点在于,相较于数组,失去了随机访问的能力; 数组和链表的对比如下图所示: 3.. 链表的实现 实现链表的业务逻辑如下: public class LinkedList<E> { private class Node { public E e; public Node next; // 构造函数 public Node(E e, Node next) { this .e = e; this .next = next; } // 只传了参数e的构造函数 public Node(E e) { this (e, null ); } // 不传递参数的构造函数 public Node() { this ( null , null ); } // 方便打印测试 @Override public String

[leetcode-753-Open the Lock]

此生再无相见时 提交于 2020-11-10 07:14:01
You have a lock in front of you with 4 circular wheels. Each wheel has 10 slots: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' . The wheels can rotate freely and wrap around: for example we can turn '9' to be '0' , or '0' to be '9' . Each move consists of turning one wheel one slot. The lock initially starts at '0000' , a string representing the state of the 4 wheels. You are given a list of deadends dead ends, meaning if the lock displays any of these codes, the wheels of the lock will stop turning and you will be unable to open it. Given a target representing the value of the wheels that

Java DAO 模式

荒凉一梦 提交于 2020-11-10 05:57:06
转载自 https://www.runoob.com/note/27029 DAO 模式 DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。通俗来讲,就是将数据库操作都封装起来。 对外提供相应的接口 在面向对象设计过程中,有一些"套路”用于解决特定问题称为模式。 DAO 模式提供了访问关系型数据库系统所需操作的接口,将数据访问和业务逻辑分离对上层提供面向对象的数据访问接口。 从以上 DAO 模式使用可以看出,DAO 模式的优势就在于它实现了两次隔离。 1、隔离了数据访问代码和业务逻辑代码。业务逻辑代码直接调用DAO方法即可,完全感觉不到数据库表的存在。分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低了藕合性,提高了可复用性。 2、隔离了不同数据库实现。采用面向接口编程,如果底层数据库变化,如由 MySQL 变成 Oracle 只要增加 DAO 接口的新实现类即可,原有 MySQ 实现不用修改。这符合 "开-闭" 原则。该原则降低了代码的藕合性,提高了代码扩展性和系统的可移植性。 一个典型的DAO 模式主要由以下几部分组成。 1、DAO接口: 把对数据库的所有操作定义成抽象方法,可以提供多种实现。 2、DAO 实现类: 针对不同数据库给出DAO接口定义方法的具体实现。 3、实体类