1. 程式人生 > >java面試--基礎4

java面試--基礎4

流的分類

按方向來分:
	輸入流(硬碟--記憶體)
	輸出流(記憶體--硬碟)
按傳輸型別來分:
	位元組流,帶有inputStream或者outputStream字眼
	(常用除中文文字檔案以外的所有檔案的讀寫操作)       
	字元流 ,帶有Reader或者Writer字眼(常用於中文文字的傳輸)

序列化和反序列化

物件的讀寫又被叫做序列化和反序列化
序列化:將記憶體內容寫入檔案。Serialize  
反序列化:將檔案內容寫入記憶體。

檔案讀寫的基本類

File Reader 類和FileWriter類分別繼承自Reader類和Writer類。
FileReader類用於讀取檔案,File Writer類用於將資料寫入檔案,
這兩各類在使用前,都必須要呼叫其構造方法建立相應的物件,
然後呼叫相應的read()或 write()方法。

執行緒

執行緒和程序

程序:是執行中一段程式,即一旦程式被載入到記憶體中並準備執行,它就是一個程序。
執行緒:單個程序中執行中每個任務就是一個執行緒。執行緒是程序中執行運算的最小單位。

一個執行緒只能屬於一個程序,但是一個程序可以擁有多個執行緒。

實現多執行緒兩種方式

繼承Thread
實現Runnable介面

執行緒的狀態

在這裡插入圖片描述

新建:新執行緒start之後並不能馬上執行,而是進入就緒狀態。
就緒:系統排程,CPU有空了
執行:run方法執行裡面的內容
死亡(銷燬):執行緒執行結束。
睡眠:thread;sleep;join
等待:wait等待/notity喚醒   生產者與消費者(作業系統), 必須由他人喚醒。
阻塞:同步(鎖)關鍵字,銀行案例,一個賬號可以再不同的地方存錢和取錢。
	但是同一時刻只能有一個執行緒在操作這個賬戶。

sleep、yield和join的區別

sleep、yield:都會放棄CPU的使用權,並且時間到了自動喚醒
sleep:進入睡眠狀態後,不考慮優先順序都可以讓位
yield:進入睡眠狀態後,只會給和自己等級一樣或者更高的讓位
join:合併執行緒;變成一個執行緒從頭到尾執行(單執行緒)。專案中啟動了5個執行緒,有的時候比如電腦效率低

Wait和sleep的區別

Sleep():睡眠,是執行緒類的一種方法,一定時間後會自動被喚醒,
	會將執行機會讓給其他執行緒。
Wait():等待,是object類的方法,需要notify方法喚醒。

同步關鍵字

一個方法加了同步關鍵字synchronized,
	那麼同一時刻只能有一個執行緒進入這個方法的內部
如果一個類中有兩個方法加了同步關鍵字,那麼兩個方法不能同時執行(互斥)。

同步請求和非同步請求

同步:傳送一個請求,等待返回,然後再發送下一個請求 (電話)
非同步:傳送一個請求,不等待返回,隨時可以再發送下一個請求 (廣播)

同步方法和同步塊的區別

同步方法就是在方法前加關鍵字synchronized,然後被同步的方法一次只能有一個
	執行緒進入,其他執行緒等待
同步塊會有一個同步的”目標“,使得同步塊更加靈活一些(同步塊可以通過”目標“決
	定需要鎖定的物件)
同步塊比同步方法多了兩個指令(monitorenter和monitorexit)。因此同步方法
	是比同步塊要快一些

單例設計模式之:懶漢模式和餓漢模式

懶漢(飽漢)模式:初始化不建立,第一次有人使用的時候才建立。執行緒不安全
餓漢模式:初始化建立,第一個使用的人就不需要等待了。