1. 對象流

(1) 為什麼需要序列化?

序列化以後的對象可以保存到磁碟上,也可以在網路上傳輸,使得不同的計算機可以共享對象(序列化的位元組序列是平台無關的)

(2) 對象的序列化有哪些條件?

只有實現了Serializable介面的類的對象才可以被序列化。Serializable介面中沒有任何的方法,實現該介面的類不需要實現額外的方法。

2. 序列化和反列序列化

(1) 簡述序列化與反序列化的內容?

序列化:將對象的內存狀態以位元組的形式存儲到磁碟的文件上;

反序列化:將磁碟上的位元組形式的數據還原成對象的內存狀態。

(2) 對象序列化的注意事項有哪些?

1. 對一個對象多次序列化處理

2. 所有保存到磁碟中的對象都要一個序列化編號

3. 如果不希望某些屬性(敏感)序列化,或不希望出現遞歸序列(為屬性添加transient關鍵詞完成排除在序列化之外)

4. 序列號版本不兼容(修改了實例屬性後,會影響版本號,導致序列號失敗)

5. 解決方案:為java對象指定序列號版本號(servialVersionUID)

3. 文件夾的複製

(1) 文件夾的複製會使用到哪些流?

1. FileInputStream.FileOUtputStream

2. BufferedStream,BufferedStream

(2) 簡述文件夾複製的過程?

1. 就是把數據讀出來再寫到另一個地方

2. 是文件就複製,不是文件就調用遞歸繼續打開目錄

4. 位元組數組流

(1) 位元組數組流的作用?

1.可以將各種數據類型轉換為byte類型

5. 設計模式_裝飾器模式

(1) 什麼是裝飾設計模式?舉例描述

1.裝飾模式是一種用來代替繼承的技術,無需通過繼承增加子類就能擴展對象的新功能。使用對象的關聯關係來代替繼承關係,更加靈活,同時避免類型體系的快速膨脹

實現細節

1. 抽象構件角色Icar

2. 具體構件角色car

3. 裝飾器角色 SuperCar

4. 具體的裝飾器角色 FlyCar,WaterCar,AICat

(2) 裝飾模式的實現細節及優缺點?

優點

1. 擴展對象功能,比繼承靈活。不會導致類個數急劇增加

2. 可以對一個對象進行多次裝飾,創建出不同行為的組合,得到更強大的對象

3. 具體構建類和具體裝飾類可以獨立變化,用戶可以根據需要自己增加新的具體構件條件和具體裝飾條件

缺點:

1. 產生很多小對象,大量小對象佔據內存,一定程序上影響性能

2. 裝飾模式易出錯,調試排查比較麻煩

(2) 請你例舉出IO流中的處理流和節點流?

1. 節點流 FileInputStream FileOutputStream FileInputReader FileOutputStream FileReader FileWriter

2.處理流 InputStream ObjectInputStream ObjectOutputStream outputStream BufferedInputStream BufferedOutInputStream DataInputStream

7. Apache IOUtils的使用_Apache FileUtils的使用

(1) Commons IO的的作用是什麼?

1.使用Commons IO可以很方便的讀寫文件

(2) IOUtils和FileUtils中有哪些常用的方法?分別代表什麼意思?

1. tostring 給他一個文件地址,把內容讀出來

2. Writer 文件複製

8. 多線程基本概念_程序_進程_線程

(1) 什麼是程序、進程和線程?

1. 程序是一個指令的集合

2. 進程(正在執行中的程序)是一個靜態的概念,進程是程序的一次靜態執行過程,佔用特定的地址空間,每個進程都是獨立的,由三部分組成cpu,data,code

3. 線程:是進程中一個「單一的完整的連續控制流程」、

線程又被稱為輕量級進程

(2) 進程與線程之間區別?

1. 根本區別,進程是資源分配的,進行一個進程就分配內存空間

2. 線程是調度和執行的單位(CPU調用的就是線程)

3. 進程切換消耗內存大,(因為是內存地址的切換)

4. 線程切換小,(因為是在同一地址中切換的)

5. 進程是在操作系統中運行的可以運行多個

6. 線程是在同一應用程序下進行的

7. 系統會在運行時給每個進程分配內存

8. 除了CPU之外,不會給線程分配內存

9. 通過繼承Thread類實現多線程

(1) 簡述通過繼承Thread類實現多線程的步驟?

1.繼承Thread重寫run方法就ok

(2) 繼承Thread類實現多線程的缺點是什麼?

1.java採用的是單繼承的方式,一旦繼承了thread類就不能繼承其他的類了

10. 通過實現介面Runnable實現多線程

(1) 簡述使用Runnable介面實現多線程的步驟?

1. 編寫類實現Runnable介面

2. 實現run()方法

3. 通過Thread類的start()方法啟動線程

(2) 簡述代理設計模式?

1. 靜態代理模式

Thread --》代理角色

MyRunnable --》真實角色

11. 線程狀態

(1) 線程有哪幾種狀態?

1. 新生狀態(new創建線程類的對象·)

2. 就緒狀態(線程已經準備好,只是cpu沒選中他)

3. 運行狀態(執行run方法之後)

4. 阻塞狀態(有資源,沒資格,所以cpu就跑了)

5. 死亡狀態(1.執行完了run()方法中的代碼

6. 調用stop方法中斷

7. 拋出了未捕獲的異常)

總結:1.不知道什麼時候會被選中執行

2. 遇到等待IO輸入或其他耗時的操作,由運行狀態進入阻塞狀態

3. 造成阻塞的事件結果,就緒狀態,等待CPU再次選中

4. 運行狀態時,如果規定時間內沒有執行完Run()方法,那CPU就去找別的線程了,等他再次選中後,會從上次斷掉的地方繼續執行

(2) 請你畫出線程的生命周期圖


推薦閱讀:
相关文章