一份多執行緒面試題及參考答案

haimianjie2012發表於2019-02-21

一.概念性問答題
第一題:執行緒的基本概念、執行緒的基本狀態及狀態之間的關係?

 

第二題:執行緒與程式的區別?
這個題目問到的概率相當大,計算機專業考研中也常常考到。要想全部答出比較難。

 

第三題:多執行緒有幾種實現方法,都是什麼?

 

第四題:多執行緒同步和互斥有幾種實現方法,都是什麼?
       我在參加2011年迅雷校園招聘時的一面和二面都被問到這個題目,回答的好將會給面試成績加不少分。

 

第五題:多執行緒同步和互斥有何異同,在什麼情況下分別使用他們?舉例說明。

 

二.選擇題
第一題(百度筆試題):
以下多執行緒對int型變數x的操作,哪幾個不需要進行同步: 
A. x=y;      B. x++;    C. ++x;    D. x=1;

 

第二題(阿里巴巴筆試題)
多執行緒中棧與堆是公有的還是私有的
A:棧公有, 堆私有
B:棧公有,堆公有
C:棧私有, 堆公有
D:棧私有,堆私有

 三.綜合題
第一題(臺灣某防毒軟體公司面試題):
在Windows程式設計中互斥量與臨界區比較類似,請分析一下二者的主要區別。

 

第二題:
一個全域性變數tally,兩個執行緒併發執行(程式碼段都是ThreadProc),問兩個執行緒都結束後,tally取值範圍。
inttally = 0;//glable
voidThreadProc()
{
       for(inti = 1; i <= 50; i++)
              tally += 1;
}

第三題(某培訓機構的練習題):
子執行緒迴圈 10 次,接著主執行緒迴圈 100 次,接著又回到子執行緒迴圈 10 次,接著再回到主執行緒又迴圈 100 次,如此迴圈50次,試寫出程式碼。


第四題(迅雷筆試題):
編寫一個程式,開啟3個執行緒,這3個執行緒的ID分別為A、B、C,每個執行緒將自己的ID在螢幕上列印10遍,要求輸出結果必須按ABC的順序顯示;如:ABCABC….依次遞推。

第五題(Google面試題)
有四個執行緒1、2、3、4。執行緒1的功能就是輸出1,執行緒2的功能就是輸出2,以此類推.........現在有四個檔案ABCD。初始都為空。現要讓四個檔案呈如下格式:
A:1 2 3 4 1 2....
B:2 3 4 1 2 3....
C:3 4 1 2 3 4....
D:4 1 2 3 4 1....
請設計程式。

下面的第六題與第七題也是在考研中或是程式設計師和軟體設計師認證考試中的熱門試題。
第六題
生產者消費者問題
這是一個非常經典的多執行緒題目,題目大意如下:有一個生產者在生產產品,這些產品將提供給若干個消費者去消費,為了使生產者和消費者能併發執行,在兩者之間設定一個有多個緩衝區的緩衝池,生產者將它生產的產品放入一個緩衝區中,消費者可以從緩衝區中取走產品進行消費,所有生產者和消費者都是非同步方式執行的,但它們必須保持同步,即不允許消費者到一個空的緩衝區中取產品,也不允許生產者向一個已經裝滿產品且尚未被取走的緩衝區中投放產品。

 
第七題
讀者寫者問題
這也是一個非常經典的多執行緒題目,題目大意如下:有一個寫者很多讀者,多個讀者可以同時讀檔案,但寫者在寫檔案時不允許有讀者在讀檔案,同樣有讀者讀時寫者也不能寫。
 

相關文章