1、IO的執行狀態
- 硬盤——>內核
- 內核——>用戶進程
2、BIO、NIO、AIO區別
- BIO:同步阻塞IO;NIO:同步非阻塞IO;AIO:異步非阻塞IO
- BIO:JDK1.4之前就有;NIO:JDK1.4出的;AIO:JDK1.7出的
- BIO:兩階段都阻塞,面向channel通道;NIO:第一階段不阻塞,第二階段阻塞,面向緩衝區;AIO:兩階段都不阻塞
3、BIO、NIO、AIO適用場景
- BIO:適用於連接數目較小,並且一次發送大數據的場景,這種方式對服務器資源要求較高,併發侷限於應用中
- NIO:適用於連接數目多且連接比較短(輕操作)的架構,併發侷限於應用中。比如聊天服務器
- AIO:適用於連接數目多且連接比較長(重操作)的架構。比如相冊服務器
4、Exception和Error的區別
- Exception和Error都繼承自Throwable,在Java中只有Throwable類型的實例纔可以被拋出或捕獲
- Exception是程序正常運行中才可以預料的意外情況,可以捕獲並處理
- Error指正常情況下不太可能出現的情況,絕大部分的Error或導致程序崩潰,處於非正常的不可恢復狀態,是程序中不應該捕獲的嚴重問題,如:OOM
5、運行時異常和一般異常的區別
- 運行時異常(受檢查異常):在編譯時被強制檢查的異常,在方法生命中聲明的異常
- 一般異常(不受檢查異常):不受檢查異常是在編碼中可以避免的邏輯錯誤,根據需求來判斷如何處理,不需要在編譯期強制要求
6、實現線程的幾種方式
- 繼承Thread類,重寫run方法
- 實現Runnable接口,重寫run方法。可以避免由於Java的單繼承特性而帶來的侷限,適合多個線程類處理同一資源的情況
- 實現Callable接口,重寫call方法,有返回值,允許拋出異常
- 使用線程池,減少創建線程的時間,重複利用線程池中線程,降低資源消耗,可有返回值