標籤:應用程式 eof 高效 執行 用法 分布 拋出異常 聲明 支援
1.解釋 RuntimeException。例舉它的1-2個之類,並用一個小程式驗證捕獲並處理異常的過程。
錯運行時異常都是 RuntimeException 類及其子類異常。這些異常是不檢查異常,程式中可以選擇捕獲處理,也可以不處理,但 程式應該從邏輯角度儘可能避免這類異常的發生。
如NullPointerException 、 IndexOutOfBoundsException 等
2.在生產實踐中,每個業務模組都會定義一個異常基類,例如 Account 模組定義 AccountException 繼承 Exception,然後在定義各種業務異常 如 OutOfMoneyException 繼承 AccountException。請使用 UML 繪圖工具 UMLet 繪製這些類及其關係。
3.類的方法中,如果拋出一個異常類型,方法聲明中能否不申明?例如 public void transfer(double amount) throws OutOfMoney 去掉 throws OutOfMoney。去掉的後果是什嗎?
不行,在方法聲明時throws的意思時將異常的拋出交給方法來做,若想要在類的方法中拋出異常就必須聲明,若去掉則會報錯。
4.Socket是兩個進程聯絡的虛擬通道。如果伺服器程式不啟動,僅運行用戶端,用戶端會阻塞還是出錯?在那條語句?
會出錯。
在new Socket(args[0], Integer.parseInt(args[1]))處出錯。
5.如果程式運行到一半,服務端意外退出,用戶端會表現出什麼行為?
沒有任何錶現。通訊無反應。
6.(!)BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream())); 語句是典型的設計模式“裝飾模式”,請檢索自學“Decorator Pattern”,請使用 UML 繪圖工具 UMLet 繪製涉及的類及其關係。
7.案例中 ServerSocket 能否支援兩個或以上用戶端?為什嗎?
不能。
因為Socket是由機器地址和連接埠號碼來區分/識別的,那麼在一個特定的電腦網 絡上,每一個Socket都是以此方式被唯一識別的。這就使得應用程式可以唯一地去定位網路上的另外一個位置的Socket。只能連一個用戶端。
8.線程與進程的區別?
進程是一個具有獨立功能的程式關於某個資料集合的一次運行活動。它可以申請和擁有系統資源。
通常在一個進程中可以包含若干個線程,它們可以利用進程所擁有的資源。在引入線程的作業系統中,通常都是把進程作為分配資源的基本單位,而把線程作為獨立運行和獨立調度的基本單位。
由於線程比進程更小,基本上不擁有系統資源,故對它的調度所付出的開銷就會小得多,能更高效的提高系統內多個程式間並發執行的程度。
線程和進程的區別在於,子進程和父進程有不同的代碼和資料空間,而多個線程則共用資料空間,每個線程有自己的執行堆棧和程式計數器為其執行內容。
9.Java 兩個啟動線程方法各有哪些優點、缺點?
優點:繼承Thread類和實現Runnable介面。
缺點:繼承是單繼承,實現介面可以多繼承,如果用繼承Thread類的方式,就不可以繼承其他類了,而實現介面的方式編程複雜,若訪問當前線程,必須使用Thread。currentThread()方法。
10.(!)簡述 Java 中 synchronized 的用法。
線程阻塞是實現線程之間通訊與同步的基礎,Java 語言為線程提供了多種阻塞機制,其中 由 synchronized 標識的同步程式碼片段與 wait()/notify()機制是最重要的兩類線程阻塞形式。
同步模組:
同步對象:
同步方法:
11.對象序列化二進位流中能否存在指標值(記憶體位址引用)?為什嗎?
可以存在指標值,但是一般序列化資料,因為序列化一般用於檔案的讀寫以及資料的傳輸,而儲存指標值在關閉程式後指標值就失效了沒有意義。
12.(!)為了使序列化和還原序列化變得易於理解,人們提出了使用 Json,XML,Yaml等格式的文本表示對象。請寫一個小程式,選擇其中一種格式,在控制台輸出Account對象
13.instanceof 很好用,為什麼需要反射技術呢?請結合案例簡述反射的必要性。
Instanceof 用於判斷對象是否為某一類或介面的執行個體,避免轉換異常,但是放射技術可以用來傳遞類型,比如說遠程方法的調用,伺服器不知道用戶端傳過來的參數的類型,利用反射技術就可以通過字串的形式告訴用戶端參數類型。
14.代理模式(proxy pattern)的特徵是代理類與委託類有同樣的介面。請使用 UML 繪圖工具 UMLet 繪製案例代理模式的 UML 圖(圖8),並用自然語言簡單描述靜態代理類 StaticServiceProxy 的工作過程。
StaticServiceProxy 初始化時傳入用於串連的主機號以及連接埠,當調用getAccount方法並傳入需要發送的資料時,開始串連伺服器,串連成功則將資料打包並調用connector中的方法來進行遠程調用。
15.簡述靜態代理和動態代理的區別。
靜態代理所要調用的遠程方法是已經確定的使用者無法自訂的,而動態代理需要使用者提供他們所想要調用的方法名稱。
分散式運算(一)——Java進階與Socket通訊