重新加一个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,一经查实,立即删除!

相关文章

Maven项目编译工具的使用

Java项目中最常用的编译工具是Ant&#xff0c;Ant解析XML配置文件&#xff0c;即build.xml&#xff0c;执行Target来实现用户目标的编译工作。Maven也是一个非常好用的编译工具&#xff0c;Maven类似于Ant也是有一个配置文件来配置编译信息&#xff0c;即pom.xml. 本文简要描述…

排他网关(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…

10.static_extern

另一个文件声明 #include <iostream> using namespace std; int x 10;void show() {cout << "1234" << endl; } 本文件使用 1 #include <iostream>2 using namespace std;3 //引用外部全局变量4 extern int x;5 6 //只能在当前文件使用7 st…

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

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

基于智能的网络空间安全防御

在RSA2011中国大会上&#xff0c;赵粮博士发表了一个题为“Intelligence Based Cyber Defense”的演讲。 赵博士指出&#xff1a;传统的、围绕边界的城堡防御模式&#xff0c;已经越来越难以适应业务发展的需求&#xff0c;安全运维团队往往陷入到日常安全运营中&#xff0c;难…

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

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

mysql循环load data_TP5框架下MySQL通过LOAD DATA INFILE批量导入数据详细操作

LOAD DATA INFILE 语句用法 参考手册 本文语句参数使用默认值PHP: TP框架环境// 定义文件路径 $file_path LOAD_DATA_LOCAL_INFILE.txt; set_time_limit(1000); $fhandler fopen($file_path,w); if($fhandler false){ // 文件打开失败 } $id 7; $add_time time(); // 向文…

巧妙的有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…

java ee 学习目标

通过上学期软件工程的项目设计开发&#xff0c;我决定将来走java这条路&#xff0c;所以&#xff0c;java ee是我必须要学好的。需要学会使用JSP/Servlet(结合Tomcat、MySQL)技术&#xff1b;学习数据库开发技术&#xff1b;学习EJB。争取将自己的java技术深入&#xff0c;加强…

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…