重新加一个window_Activity、View、Window关系,进程间通信,责任链模式,Https,数据存储...
碼仔,今天就給大家?guī)砹?strong>《每日一道面試題》的第九期:
01
理解Activity View window的關(guān)系?
Activity像一個工匠(控制單元),Window像窗戶(承載模型),View像窗花(顯示視圖)LayoutInflater像剪刀,Xml配置像窗花圖紙。?
Activity構(gòu)造的時候會初始化一個Window,準確的說是PhoneWindow。?
這個PhoneWindow有一個“ViewRoot”,這個“ViewRoot”是一個View或者說ViewGroup,是最初始的根視圖。?
“ViewRoot”通過addView方法來一個個的添加View。比如TextView,Button等?
這些View的事件監(jiān)聽,是由WindowManagerService來接受消息,并且回調(diào)Activity函數(shù)。比如onClickListener,onKeyDown等
02
Android進程間通訊的幾種姿勢?
進程間通信即IPC,英文全稱Inter-Process Communication,是指進程間數(shù)據(jù)交互的過程. Android底層是基于Linux,而Linux基于安全考慮,是不允許兩個進程間直接操作對方的數(shù)據(jù),這就是進程隔離. 六種常用姿勢:
Bundle
文件共享
AIDL
Messenger
ContentProvider
Socket
03
談談對責任鏈模式的理解
使很多個對象都有機會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。
何時使用:
有許多對象可以處理用戶請求,希望程序在運行期間自動確定處理用戶的那個對象。
希望用戶不必明確指定接收者的情況下,想多個接受者的一個提交請求
程序希望動態(tài)的指定可處理用戶請求的對象集合
優(yōu)點:
低耦合
可以動態(tài)的添加刪除處理者或重新指派處理者的職責
可以動態(tài)改變處理者之間的先后順序
通常來說,一個純粹的責任鏈是先傳給第一個處理,如果處理過了,這個請求處理就此結(jié)束,如果沒有處理,再傳給下一個處理者。
比如我們有一個數(shù)學公式,有一個整數(shù)輸入,要求小于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));
}
}
此處責任鏈中的具體處理者的順序是不能重設(shè)的,否則可能會引發(fā)錯誤,但更多的情況是完全可以隨意更改他們的位置的,就上例中,只要把if中的條件重新設(shè)置(各自獨立,不相互依賴),就可以了。
我們使用責任鏈模式的時候,不一定非得某一處理者處理后就得終止請求的傳遞,如果有其他需求,我們依然可以繼續(xù)傳遞這個請求到下一個具體的處理者。
04
Https三次握手四次揮手?
三次握手:在TCP/IP協(xié)議中,TCP協(xié)議提供可靠的連接服務,采用三次握手建立一個連接。(1)第一次握手:建立連接時,客戶端發(fā)送syn包(syn=j)到服務器,并進入SYN_SEND狀態(tài),等待服務器確認;(2)第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發(fā)送一個SYN包(syn=k),即SYN+ACK包,此時服務器 進入SYN_RECV狀態(tài);(3)第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發(fā)送確認包ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務器進入 ESTABLISHED狀態(tài),完成三次握手。完成三次握手,客戶端與服務器開始傳送數(shù)據(jù).
四次分手:(1)客戶端A發(fā)送一個FIN,用來關(guān)閉客戶A到服務器B的數(shù)據(jù)傳送。(2)服務器B收到這個FIN,它發(fā)回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。(3)服務器B關(guān)閉與客戶端A的連接,發(fā)送一個FIN給客戶端A。(4)客戶端A發(fā)回ACK報文確認,并將確認序號設(shè)置為收到序號加1。
05
Android的存儲方式?
Android提供了5中存儲數(shù)據(jù)的方式,分別是以下幾種:
1、使用Shared Preferences存儲數(shù)據(jù),用來存儲key-value,pairs格式的數(shù)據(jù),它是一個輕量級的鍵值存儲機制,只可以存儲基本數(shù)據(jù)類型。
2、使用文件存儲數(shù)據(jù),通過FileInputStream和FileOutputStream對文件進行操作。在Android中,文件是一個應用程序私有的,一個應用程序無法讀寫其他應用程序的文件。
3、使用SQLite數(shù)據(jù)庫存儲數(shù)據(jù),Android提供的一個標準數(shù)據(jù)庫,支持SQL語句。
4、使用Content Provider存儲數(shù)據(jù),是所有應用程序之間數(shù)據(jù)存儲和檢索的一個橋梁,它的作用就是使得各個應用程序之間實現(xiàn)數(shù)據(jù)共享。它是一個特殊的存儲數(shù)據(jù)的類型,它提供了一套標準的接口用來獲取數(shù)據(jù),操作數(shù)據(jù)。系統(tǒng)也提供了音頻、視頻、圖像和個人信息等幾個常用的Content Provider。如果你想公開自己的私有數(shù)據(jù),可以創(chuàng)建自己的Content Provider類,或者當你對這些數(shù)據(jù)擁有控制寫入的權(quán)限時,將這些數(shù)據(jù)添加到Content Provider中實現(xiàn)共享。外部訪問通過Content Resolver去訪問并操作這些被暴露的數(shù)據(jù)。
5、使用網(wǎng)絡(luò)存儲數(shù)據(jù)
06
結(jié)束語?
如果你有好的答案可以提交至:
https://github.com/codeegginterviewgroup/CodeEggDailyInterview
往期文章:
? 《每日一道面試題》第一期
《每日一道面試題》 第二期
《每日一道面試題》 第三期
《每日一道面試題》第四期
? 《每日一道面試題》第五期
《每日一道面試題》 第六期
《每日一道面試題》 第七期
《每日一道面試題》 第八期
專屬社群:
《這件事情,我終于想明白了》?
今日問題:
大家想看什么類型的文章?
總結(jié)
以上是生活随笔為你收集整理的重新加一个window_Activity、View、Window关系,进程间通信,责任链模式,Https,数据存储...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个jdbc connection连接对
- 下一篇: postgresql主从备份_基于win