Java网络方面
最近在面試 有些概念懂 但是需要梳理一下 借著面試看看自己會多少.
1.網絡編程的同步 異步 阻塞 非阻塞?
同步:函數調用在沒有得到結果之前,不返回任何結果;
異步:函數調用在沒有得到結果之前,不返回任何結果,返回狀態值;
阻塞:函數調用在沒有得到結果之前,線程掛起,得到結果之后返回值。
非阻塞:函數調用在沒有得到結果之前,當前線程不會掛起,立即返回結果。
2.Java如何實現無阻塞方式的Socket編程?
NIO可以有效解決多線程服務器存在的線程開銷問題,NIO的多線程不是為了應對客戶端請求而獨立分配線程,
而是通過多線程充分利用CPU的處理能力和處理的時間,達到提高服務效果。
3.什么是Java序列化
為了保存內存中各種對象的狀態(也就是實例變量,而不是方法),并且可以把對象可以讀取出來,雖然可以通過方法保存對象狀態,java提供了對象
序列化機制更好的保存對象狀態(具體的對象序列化可以參照Hibernate二級緩存)
4.什么情況下需要序列化?序列化需要注意什么事情,如何實現Java序列化(串行化)?
Java對象序列化到文件或者數據庫中;
使用套接字在網絡上傳輸對象時需要進行序列化;
當希望RMI傳輸對象的時候;
序列化注意事情:
1).如果子類實現了序列化接口Sericalizable而父類未實現,父類必須提供一個無參構造函數,否則會拋出InvalidClassException異常。
2).類的靜態變量不會被序列化,因為這個靜態變量是類變量,而不是對象的。串行化保存的是是對象屬性,即非靜態的變量。
3.)Java序列化是為了節約磁盤空間,具有特定規則。
4).序列化到同一文件,如果修改了相同對象的屬性再次保存時,因此只保存第二次的引用,讀取第一次的存儲。
?
5.Java有那幾種流?JDK提供哪些接口可以繼承?
Java提供的流對象
InputStram 字節輸入流 OutputStream 字節輸出流 Reader 字符輸入流 Writer 字符輸出流
按流向劃分:
輸出: 輸出字節流 OutputStraam 輸出字符流 Writer
輸入: 輸入字節流InputStream 輸入字符流 Reder
按照傳輸單位劃分:
字節流:8位 一個比特 一般情況下圖片 等是二進制文件
字節流:16位 兩個比特
6.用Java Socket編程
比較典型的Java Socket編程,發送請求后,等待服務器響應。 (這個過程存在阻塞方法)
大概過程
1.創建一個Socket實例,構造函數先遠處服務器域名和端口 簡歷TCP連接
2.通過IO流與服務器建立連接(這個地方存在阻塞方法)
3.IO流中讀取數據 并且 Socket關閉連接;
?
服務器的構建模型
1.創建一個ServerSocket端口監聽,設置監聽端口,用于獲取TCP連接
2.重復執行(whlie(true))監聽狀態一直持續
3.調用ServerSocket 的accept()方法,返回一個客戶端連接實例
4.為返回的Socket創建一個新的線程,用于進行線程的服務。
5.通訊完成,關閉Socket的close()
7.TCP有連接時候有三次握手?斷開連接有幾次握手?
? ? ? ? ? ? ?客戶端? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?服務器
? ? ? ? ? ? ? | (發送請求 i)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? ?--------------->? (i)? ? ? ? ? ? ? ? ?|(創建j,并且i+1)
? ? ? ? ? ? ?|? ? ? ? ? ? ? ? ? <---------------(j,i+1)? ? ? ? ? ? ? ?|
? ? ? ? ? ? ?| (獲取 j,i+1) 并且(j+1,i+)? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
? ? ? ? ? ? ?|? ? ? ? ? ? ? ? ? ? -------------->(j+1,i+1)? ? ? ? ? |(獲取j+1,i+1) 完成握手
seq 是包本身的序列號 ack是確認連接
一次釋放 斷開連接請求 確認斷開連接
轉載于:https://www.cnblogs.com/ad-zhou/p/9823121.html
總結
- 上一篇: onsubmit校验表单时利用ajax的
- 下一篇: MSSQL · 最佳实践 · 使用混合密