JAVA網絡編程遇到的問題分析及解決方式

1.網絡編程時的同步、異步、阻塞、非阻塞?

同步:函數調用在沒得到結果之前,沒有調用結果,不返回任何結果。

異步:函數調用在沒得到結果之前,沒有調用結果,返回狀態信息。

阻塞:函數調用在沒得到結果之前,當前線程掛起。得到結果後才返回。

非阻塞:函數調用在沒得到結果之前,當前線程不會掛起,立即返回結果。

2.Java如何實現無阻塞方式的Socket編程?

NIO有效解決了多線程服務器存在的線程開銷問題。

在NIO中使用多線程主要目的不是為了應對每個客戶端請求而分配獨立的服務線程,

而是通過多線程充分利用多個CPU的處理能力和處理中的等待時間,達到提高服務能力的目的。

3.什麼是java的序列化(串行化)?

簡單說就是為了保存在內存中的各種對象的狀態(也就是實例變量,不是方法),

並且可以把保存的對象狀態再讀出來。雖然你可以用你自己的各種各樣的方法來保存object states,但是Java給你提供一種應該比你自己好的保存對象狀態的機制,那就是序列化。

4.什麼情況下需要序列化?序列化的注意事項,如何實現java序列化(串行化)?

·當你想把的內存中的對象狀態保存到一個文件中或者數據庫中時候;

·當你想用套接字在網絡上傳送對象的時候;

·當你想通過RMI傳輸對象的時候;

序列化注意事項

1、如果子類實現Serializable接口而父類未實現時,父類不會被序列化,但此時父類必須有個無參構造方法,否則會拋InvalidClassException異常。

2、靜態變量不會被序列化,那是類的“菜”,不是對象的。串行化保存的是對象的狀態,即非靜態的屬性,即實例變量。不能保存類變量。

3、transient關鍵字修飾變量可以限制序列化。對於不需要或不應該保存的屬性,應加上transient修飾符。要串行化的對象的類必須是公開的(public)。

4、虛擬機是否允許反序列化,不僅取決於類路徑和功能代碼是否一致,一個非常重要的一點是兩個類的序列化ID是否一致,就是private static final long serialVersionUID = 1L。

5、Java序列化機制為了節省磁盤空間,具有特定的存儲規則,當寫入文件的為同一對象時,並不會再將對象的內容進行存儲,而只是再次存儲一份引用。反序列化時,恢復引用關係。

6、序列化到同一個文件時,如第二次修改了相同對象屬性值再次保存時候,虛擬機根據引用關係知道已經有一個相同對象已經寫入文件,因此只保存第二次寫的引用,所以讀取時,都是第一次保存的對象。

5.java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?

JDK提供的流繼承了四大類:

InputStream(字節輸入流),OutputStream(字節輸出流),Reader(字符輸入流),Writer(字符輸出流)。

按流向分類:

輸入流:程序可以從中讀取數據的流。

輸出流:程序能向其中寫入數據的流。

按數據傳輸單位分類:

字節流:以字節(8位二進制)為單位進行處理。主要用於讀寫諸如圖像或聲音的二進制數據。

字符流:以字符(16位二進制)為單位進行處理。

都是通過字節流的方式實現的。字符流是對字節流進行了封裝,方便操作。在最底層,所有的輸入輸出都是字節形式的。

後綴是Stream是字節流,而後綴是Reader,Writer是字符流。

按功能分類:

節點流:從特定的地方讀寫的流類,如磁盤或者一塊內存區域。

過濾流:使用節點流作為輸入或輸出。過濾流是使用一個已經存在的輸入流或者輸出流連接創建的。

6.用JAVA SOCKET編程,讀服務器幾個 字符,再寫入本地顯示。

客戶端向服務器端發送連接請求後,就被動地等待服務器的響應。

典型的TCP客戶端要經過下面三步操作:

1、創建一個Socket實例:構造函數向指定的遠程主機和端口建立一個TCP連接;

2、通過套接字的I/O流與服務端通信;

3、使用Socket類的close方法關閉連接。

服務端的工作是建立一個通信終端,並被動地等待客戶端的連接。

典型的TCP服務端執行如下兩步操作:

1、創建一個ServerSocket實例並指定本地端口,用來監聽客戶端在該端口發送的TCP連接請求;

2、重複執行:

1)調用ServerSocket的accept()方法以獲取客戶端連接,並通過其返回值創建一個Socket實例;

2)為返回的Socket實例開啟新的線程,並使用返回的Socket實例的I/O流與客戶端通信;

3)通信完成後,使用Socket類的close()方法關閉該客戶端的套接字連接。

7.TCP/IP在連接時有幾次握手?釋放時有幾次握手?

TCP三次握手連接的建立過程:

JAVA網絡編程遇到的問題分析及解決方式

TCP四次揮手的釋放過程:

JAVA網絡編程遇到的問題分析及解決方式


分享到:


相關文章: