W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
1.什么是阻塞和非阻塞?什么是同步和異步?
阻塞和非阻塞:
從線程的角度考慮 ,線程掛起 不在搶奪CPU 則稱為線程被阻塞 同步和異步:
任務的執(zhí)行需要相互等待、相互協(xié)調為同步;各執(zhí)行各的,不管其他人,是異步。
2.解釋一下什么是NIO?
是jdk1.4出現同步非阻塞式IO,它可以實現面向通道操作緩沖區(qū),雙向的傳遞數據,它適合在高并發(fā)的情況下使用,可以實現少量的線程為多個客戶端服務。
3.NIO和IO有什么區(qū)別?
1) BIO: 面向流,操作字節(jié)字符,具有方向性,同步阻塞式IO 比喻:水管 InputStream OutputStream Reader Writer
2)NIO: 面向通道,操作緩沖區(qū),可以雙向傳輸數據,同步非阻塞式IO 比喻:地下通道 Channel Buffer Selector
4.NIO的常用API?
要實現NIO,主要就是操作它的三個API;
1)Channel 通道 可以實現雙向傳輸數據
既能讀,又能寫,在使用的時候需要調用方法將其設置為false,即非阻塞模式;它有很多的實現類:
2)Buffer 緩沖區(qū)
在內存中開辟一段連續(xù)的空間,用于存儲臨時的數據。
常用的ByteBuffer,和CharBuffer,還有其它的用于不同的數據類型
所有的buffer都是抽象類,無法被直接實例化;
緩沖區(qū)的數據存放在內存中,能提高讀寫效率;
緩沖區(qū)有指針記錄,能改變讀寫數據的起始點,處理靈活;
Buffer有幾個基本的屬性:capacity、Position、Limit、Mark
緩沖區(qū)常用的方法:清除/反轉/環(huán)繞/存放/取/存
3)Selector 選擇器
多個客戶端在Selector中注冊自己,多個通道注冊到Selector中,通過選擇操作選出就緒的鍵,通道線程來實現少量線程的為多個客戶端服務
用到的一些方法:
5.什么是網絡數據傳輸的粘包問題?
數據包之間發(fā)生的粘連問題,網絡分為7層,每層負責每層的任務, TCP不理解應用層傳輸過來的數據
由于TCP傳輸是一種可靠的連續(xù)的數據傳輸,如果兩次傳輸的數據時間間隔比較短,數據的接收方可能很難判斷出兩次數據的邊界在哪里,感覺就好像兩個數據黏著在了一次,無法區(qū)分。
粘包問題常用的解決辦法:
1)每次傳輸固定大小的數據,存在資源浪費,缺乏靈活性
2)約定分隔符,如果符號相同,轉義一下,需要解析,不是很好
3)使用協(xié)議,雙方約定好
使用公開協(xié)議,或者私有的協(xié)議
在傳輸的過程中,先傳遞長度信息,在根據長度信息獲取數據
6.IO圖1
7.IO圖2
推薦一篇好文章https://www.cnblogs.com/xiaoxi/p/6576588.html
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯系方式:
更多建議: