java基礎面試題

面試題

1.     線程和進程之間的區別?

簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.

線程的劃分尺度小於進程,使得多線程程序的併發性高。

另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。

線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能   夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。

從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。

例子1:

例子2:


1.       導致死鎖的原因?

死鎖是指多個進程因競爭資源而造成的一種僵局,若無外力作用,這些進程都將永遠不能再向前推進。原因有如下三個:

(1)因爲系統資源不足。

(2)進程運行推進的順序不合適。

(3)資源分配不當等。

 

java 死鎖產生的四個必要條件:

1、互斥使用,即當資源被一個線程使用(佔有)時,別的線程不能使用

2、不可搶佔,資源請求者不能強制從資源佔有者手中奪取資源,資源只能由資源佔有者主動釋放。

3、請求和保持,即當資源請求者在請求其他的資源的同時保持對原有資源的佔有。

4、循環等待,即存在一個等待隊列:P1佔有P2的資源,P2佔有P3的資源,P3佔有P1的資源。這樣就形成了一個等待環路。

 

 

2.       解決死鎖的方法?

1. 撤消陷於死鎖的全部進程。

2.逐個撤消陷於死鎖的進程,直到死鎖不存在。

3.從陷於死鎖的進程中逐個強迫放棄所佔用的資源,直到死鎖消失。

4.從另外一些進程那裏強行剝奪足夠數量的資源分配給死鎖的進程,以解除死鎖狀態。

 

3.       什麼是同步?什麼是異步?

 

答:同步:發送一個請求,等待返回,然後再發送下一個請求 。

 

異步:發送一個請求,不等待返回,隨時可以再發送下一個請求 。

 

同步可以避免出現死鎖,讀髒數據的發生,一般共享某一資源的時候用,如果每個人都有修改權限,同時修改一個文件,有可能使一個人讀取另一個人已經刪除的內容,就會出錯,同步就會按順序來修改。

異步則是可以提高效率了,現在cpu都是雙核,四核,異步處理的話可以同時做多項工作,當然必須保證是可以併發處理的。

這些都是對的。

 

同步和異步最大的區別就在於。一個需要等待,一個不需要等待。

比如廣播,就是一個異步例子。發起者不關心接收者的狀態。不需要等待接收者的返回信息。電話,就是一個同步例子。發起者需要等待接收者,接通電話後,通信纔開始。需要等待接收者的返回信息。

下面這個例子:


髒數據:髒數據在臨時更新(髒讀)中產生,事物A更新了某個數據項X,但是由於某種原因,事物A出現了問題,於是要把A回滾,但是在回滾之前,另一事物B讀取了數據項X的值(A更新後),A回滾了事物,數據項恢復了原值,事物B讀取的就是數據項X的就是一個"臨時"的值,就是髒數據

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章