重新加一个window_Activity、View、Window关系,进程间通信,责任链模式,Https,数据存储...

f11d0b27a83a8c3e65f5aa5d296ecd03.gif

码仔,今天就给大家带来了《每日一道面试题》的第九期:

01

理解Activity View window的关系 

Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图)LayoutInflater像剪刀,Xml配置像窗花图纸。 

  1. Activity构造的时候会初始化一个Window,准确的说是PhoneWindow。 

  2. 这个PhoneWindow有一个“ViewRoot”,这个“ViewRoot”是一个View或者说ViewGroup,是最初始的根视图。 

  3. “ViewRoot”通过addView方法来一个个的添加View。比如TextView,Button等 

  4. 这些View的事件监听,是由WindowManagerService来接受消息,并且回调Activity函数。比如onClickListener,onKeyDown等

4e54beb9aa7442e34bd5216fc2f4a2af.gif

02

Android进程间通讯的几种姿势 

进程间通信即IPC,英文全称Inter-Process Communication,是指进程间数据交互的过程. Android底层是基于Linux,而Linux基于安全考虑,是不允许两个进程间直接操作对方的数据,这就是进程隔离. 六种常用姿势:

  1. Bundle

  2. 文件共享

  3. AIDL

  4. Messenger

  5. ContentProvider

  6. Socket

e2eb5a890f79b49efd742fb4e0f591d8.png

882a26e8e0cd081192d102797e30a68e.gif

03

谈谈对责任链模式的理解

使很多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

何时使用:

  1. 有许多对象可以处理用户请求,希望程序在运行期间自动确定处理用户的那个对象。

  2. 希望用户不必明确指定接收者的情况下,想多个接受者的一个提交请求

  3. 程序希望动态的指定可处理用户请求的对象集合

优点:

  1. 低耦合

  2. 可以动态的添加删除处理者或重新指派处理者的职责

  3. 可以动态改变处理者之间的先后顺序

通常来说,一个纯粹的责任链是先传给第一个处理,如果处理过了,这个请求处理就此结束,如果没有处理,再传给下一个处理者。

比如我们有一个数学公式,有一个整数输入,要求小于0时返回绝对值,其次,小于10的时候返回他的二次幂,否则,返回他本身:

首先我们要定义一个接口(处理者),来描述他们共有的行为:

public interface Handler {
int handleRequest(int n);
void setNextHandler(Handler next);
}

然后是具体的处理者

public class Handler1 implements Handler {
private Handler next;
@Override
public int handleRequest(int n) {
if(n<0) return -n;
else{
if(next==null)
throw new NullPointerException("next 不能为空");
return next.handleRequest(n);
}
}

@Override
public void setNextHandler(Handler next) {
this.next = next;
}
}
public class Handler2 implements Handler {
private Handler next;
@Override
public int handleRequest(int n) {
if(n<10) return n*n;
else{
if(next==null)
throw new NullPointerException("next 不能为空");
return next.handleRequest(n);
}
}

@Override
public void setNextHandler(Handler next) {
this.next = next;
}
}
public class Handler3 implements Handler {
private Handler next;
@Override
public int handleRequest(int n) {
if(n<=Integer.MAX_VALUE) return n;
else{
if(next==null)
throw new NullPointerException("next 不能为空");
return next.handleRequest(n);
}
}

@Override
public void setNextHandler(Handler next) {
this.next = next;
}
}
public class TestUse {
public static void main(String args[]){
Handler h1,h2,h3;
h1 = new Handler1();
h2 = new Handler2();
h3 = new Handler3();
h1.setNextHandler(h2);
h2.setNextHandler(h3);
System.out.println(h1.handleRequest(-1));
System.out.println(h1.handleRequest(5));
System.out.println(h1.handleRequest(9999));
}
}

此处责任链中的具体处理者的顺序是不能重设的,否则可能会引发错误,但更多的情况是完全可以随意更改他们的位置的,就上例中,只要把if中的条件重新设置(各自独立,不相互依赖),就可以了。

我们使用责任链模式的时候,不一定非得某一处理者处理后就得终止请求的传递,如果有其他需求,我们依然可以继续传递这个请求到下一个具体的处理者。

bb9040239c734d441f7bd7cf48cf1421.gif

04

Https三次握手四次挥手 

三次握手:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。(1)第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;(2)第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态;(3)第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据.

3adbdb65cfafd3241c1fbe0bb9a47941.png

四次分手:(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

cdc85b71b6b889aa1038939436fc996c.png

8c2974d9d81c512cb0903689c460300c.gif

05

Android的存储方式 

Android提供了5中存储数据的方式,分别是以下几种:

1、使用Shared Preferences存储数据,用来存储key-value,pairs格式的数据,它是一个轻量级的键值存储机制,只可以存储基本数据类型。

2、使用文件存储数据,通过FileInputStream和FileOutputStream对文件进行操作。在Android中,文件是一个应用程序私有的,一个应用程序无法读写其他应用程序的文件。

3、使用SQLite数据库存储数据,Android提供的一个标准数据库,支持SQL语句。

4、使用Content Provider存储数据,是所有应用程序之间数据存储和检索的一个桥梁,它的作用就是使得各个应用程序之间实现数据共享。它是一个特殊的存储数据的类型,它提供了一套标准的接口用来获取数据,操作数据。系统也提供了音频、视频、图像和个人信息等几个常用的Content Provider。如果你想公开自己的私有数据,可以创建自己的Content Provider类,或者当你对这些数据拥有控制写入的权限时,将这些数据添加到Content Provider中实现共享。外部访问通过Content Resolver去访问并操作这些被暴露的数据。

5、使用网络存储数据

06

结束语 

如果你有好的答案可以提交至:

https://github.com/codeegginterviewgroup/CodeEggDailyInterview

a5f3f2d63f7e71b2b8df91de0c07b7b0.gif

往期文章:

  •   《每日一道面试题》第一期

  • 《每日一道面试题》 第二期

  • 《每日一道面试题》 第三期

  • 《每日一道面试题》第四期

  •   《每日一道面试题》第五期

  • 《每日一道面试题》 第六期

  • 《每日一道面试题》 第七期

  • 《每日一道面试题》 第八期

专属社群:

《这件事情,我终于想明白了》 

今日问题:

大家想看什么类型的文章?41cd44f697b72db1736e6ddc3f75fa0b.png

ad7f7ed9c73221cb283dbcaf97a198c6.png

54d4513f12183c52f1b036f781cc75c0.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排他网关(ExclusiveGateWay)

网关&#xff08;ExclusiveGateWay&#xff09; 作者&#xff1a;邓家海2018年3月11日 00:13:25 情景:某一家公司最近在给一个单位做一个财务审批的OA。具体需求是这样的&#xff1a;当部门申请的金额小于一万块的时候&#xff0c;财务部可以直接决策。当部分申请的金额大于一万…

离线安装宝塔lnmp_宝塔LNMP环境 Nginx安装EduSoho教程说明

[toc]宝塔下使用LNMP Nginx安装EduSoho创建站点 宝塔后台 > 网站 > 添加站点 > 输入信息 > 提交填写信息创建完成设置运行目录 宝塔后台 > 网站 > 管理运行目录选择web目录后保存 网站目录 > 运行目录 > 保存修改配置文件 配置文件 > 修改参数 >…

NHibernate初学者指南(10):一级和二级缓存

一级缓存 为了获得更好的性能&#xff0c;NHibernate智能地缓存数据。NHibernate有不同的缓存机制起作用&#xff0c;最重要的就是一级缓存。每个session对象维持一个一级缓存&#xff0c;session对象创建时缓存创建&#xff0c;session对象释放时缓存销毁。 缓存只不过是一个哈…

Freemarker模板引擎

模板引擎的实质就是将页面结构提前写好&#xff0c;然后将数据渲染到模板上生成一个静态页面&#xff0c;这样一来&#xff0c;下次就可以 直接访问静态文件&#xff0c;不用进行额外的获取数据的操作&#xff08;例如&#xff1a;访问数据库&#xff09;&#xff0c;这样大大提…

postgresql主从备份_基于windows平台的postgresql主从数据库流备份配置

基于windows平台的postgresql主从数据库流备份配置因工作需要&#xff0c;需要搞pg数据库的主从备份&#xff0c;领导给了个方向使用流备份&#xff0c;于是开始朝着这个方向进发。鸣谢大佬A_ccelerator的博客一、配置主从库1.环境准备对于 pg 的主从库配置&#xff0c;建议是使…

msvcrt.lib和LIBCD.lib链接冲突

今天在移植一个开源代码到windows的VC6工程&#xff0c;编译时出现了这些奇怪的LINK错误。 msvcrt.lib(MSVCRT.dll) : error LNK2005: _toupper already defined in LIBCD.lib(toupper.obj)msvcrt.lib(MSVCRT.dll) : error LNK2005: _tolower already defined in LIBCD.lib(to…

jq获取最后一个子节点_如何选择jQuery中的最后一个子元素?

牧羊人nacy如果要选择最后一个子元素&#xff0c;并且需要具体说明元素类型&#xff0c;则可以使用选择器last-of-type这是一个例子&#xff1a;$("div p:last-of-type").css("border", "3px solid red");$("div span:last-of-type").…

面向对象 - 继承/组合 - 总结

面向对象 - 继承:1.继承: 类与类之间的关系 什么是什么的关系 eg:人是动物 狗是动物 功能: 解决代码重用问题, 创建新类的方式, 类: 可继承一个或多个父类: 父类 基类/超类 类 派生类/子类 类: 对象之间相似的特征 父类:…

巧妙的有css合并图片解决tab切换的背景图片

巧妙的有css合并图片解决tab切换的背景图片 有时候做tab切换的时候 会碰到下面的这种情况 我截个图过来看看 tab切换 打开页面时候 茶庄介绍 及鼠标移上去时候 是上面这样的效果 当鼠标移下来的时候 是下面这样的 茶庄介绍 就变成这样的背景 一刚开始做这样的 我就想到用j…

XUPT_STA2018(部分题解)

A - 一方通行和最大公约数I CodeForces - 664A 作为学园都市最强的lv5&#xff0c;一方通行必须解决一道数学题才能接触last order身上植入的病毒&#xff0c;请你帮他解决这个问题。给出两个整数a,b 求出[a,b]区间中所有整数的最大公约数。输入输入包括一行&#xff0c;一…

java mongodb drivers 2升级到3_JAVA从头开始一基础梳理(3-2)

本章为大家介绍类的特性。首先&#xff0c;第一个特性----封装。在这个类别中&#xff0c;属性id 与属性 color 是可以被外部直接访问和修改的&#xff0c;比如可以看到&#xff0c;事实上这样的内容是错误的&#xff0c;我们需要在定义属性值时需要加入验证等等操作&#xff0…

C 语言第6节课

我上课C语言的第6节的笔记 &#xff1a;C语言真的需要多做多练多理解&#xff0c;不然真的学不懂.记不住呀。第一题&#xff1a;睇图片解题。main(){int x,y;scanf("%d",&x);if(x<0)printf("y%d",0);if(x>0&&x<5)printf("y%d&qu…

activiti idea 请假流程_IDEA开发流程Activiti需要注意的一些坑

1、慎用IDEA2020最新版本IDEA2020最新版本迎来了重大升级&#xff0c;对java和spring有了更好更强大的开发支持&#xff0c;但是对于Activiti流程开发却不再支持&#xff0c;可能是因为actiBPM插件太老&#xff0c;或者IDEA2020对插件支持做了规范要求等等&#xff0c;请各位喜…

VIPCA无法运行

本文转自ITPUB上一兄弟总结&#xff0c;以备查询。 今天一早来&#xff0c;同事说他周末在安装 rac 出问题了&#xff0c;始终无法使用vipca 创建 vip资源 &#xff0c; 叫我帮忙看看。 他用的是 vmware server 2.0 搭建 虚拟 rac 。 一. 环境如下  OS: Red Hat Enterprise …

python加权最小二乘_【Python】统计科学之加权最小二乘法

首页专栏python文章详情0统计科学之加权最小二乘法张俊红发布于 今天 10:03今天这篇来讲讲加权最小二乘法(WLS)&#xff0c;加权最小二乘是在普通的最小二乘回归(OLS)的基础上进行改造的&#xff0c;主要是用来解决异方差问题的。OLS的常规形式如下&#xff1a;我们在前面讲过O…

删除电脑中的mysql数据库吗_【数据库】怎么彻底删除mysql服务?

彻底删除mysql服务的步骤&#xff1a;1、关闭mysql服务在cmd命令行输入以下命令net stop mysql或者 我的电脑右键->管理->服务&#xff0c;进入后手动关闭。2、删除MySQL服务在cmd中&#xff0c;输入sc delete mysql&#xff0c;删除服务。但是MYSQL服务只是显示禁用状态…

mysql主从配置 简书_Mysql主从配置,实现读写分离-Go语言中文社区

转载&#xff1a;https://www.cnblogs.com/alvin_xp/p/4162249.html大型网站为了软解大量的并发访问&#xff0c;除了在网站实现分布式负载均衡&#xff0c;远远不够。到了数据业务层、数据访问层&#xff0c;如果还是传统的数据结构&#xff0c;或者只是单单靠一台服务器扛&am…

continue 的用户及实例

continue 跳出本次循环&#xff0c;继续下一次循环 “break”是跳出整个循环 实例1&#xff1a; for i in range(10): if i <5: continue    #这里条件是小于5&#xff0c;满足条件的就跳出了本次循环&#xff0c;不在执行print&#xff0c;所以最终打印的是5…

mysql报错注入实战_MySQL手工注入实战

实战记录&#xff0c;日本某站注入点 and 语句测试and11 返回正常&#xff0c;and2跳回首页&#xff0c;可能过滤了用 ’ 测试返回错误页面判断为注入点order by语句查询字段数测试字段数为9and 12 UNION SELECT 1,2,3,4,5,6,7,8,9报错联合查询语句&#xff0c;查询显示位2、3为…

20个简约风格网站设计作品欣赏

这篇文章收集了20个简洁清爽的网站设计作品案例&#xff0c;设计师们能够通过这些优秀的网页设计作品获得灵感&#xff0c;进而设计出更精美&#xff0c;更具有创意的网站作品&#xff0c;一起欣赏。vnsagaPure – Minimal WordPress themeAssemblydeladeeus design studioHocu…