IT公司筆試題(四)

shuilaner_發表於2018-11-29

1.解釋堆和棧的區別。

在傳統的C中堆和棧實際是一塊實體記憶體,堆主要用來動態分配記憶體,從堆疊記憶體的低端向上分配;而棧主要用來傳遞函式引數、返回值和區域性引數記憶體分配,是從堆疊記憶體的高階向下分配,俗稱壓棧和出棧;堆是動態分配,比如用new,malloc分配,需要手工釋放,不然會導致memory leak,棧是靜態分配,比如函式呼叫是需要分配堆疊,但堆疊能自動釋放.
2.論述含引數的巨集與函式的優缺點。
巨集是編譯期的,函式是執行期的;巨集不是實體,而函式是一個可定址的實體;巨集只是編譯期替換,在程式裡每遇到S(a,b),就用a*b代替,a和b兩個實體並沒有由巨集實際產生,而函式S會在棧中定義兩個物件a和b。巨集沒有生存期、作用域之類的概念,而函式就有。

3.全域性變數和區域性變數有什麼區別?實怎麼實現的?作業系統和編譯器是怎麼知道的?
生命週期不同:全域性變數隨主程式建立和建立,隨主程式銷燬而銷燬。

 區域性變數在區域性函式內部,甚至區域性迴圈體等內部存在,退出就不存在;記憶體中分配在全域性資料區。
使用方式不同:通過宣告後全域性變數程式的各個部分都可以用到。 
 區域性變數只能在區域性使用;分配在棧區。
作業系統和編譯器通過記憶體分配的位置來知道的,全域性變數分配在全域性資料段並且在程式開始執行的時候被載入。區域性變數則分配在堆疊裡面。

4.MFC和SDK有什麼區別?
SDK是軟體開發包,是一系列的API函式;
MFC是微軟的類庫,一種特殊的架構。


 5.驅動程式的buffer能swap到硬碟上嗎?
能,因為驅動程式的buffer也是佔用記憶體的一部分,如果長期不使用,就會被放到swap上。

 6.簡述軟中斷、硬中斷、訊號的區別?應用?
(1)硬中斷是外部裝置對CPU的中斷;軟中斷通常是硬中斷服務程式對核心的中斷;訊號則是由核心(或其他程式)對某個程式的中斷。
區別:

①硬中斷是由外部事件引起的因此具有隨機性和突發性;軟中斷是執行中斷指令產生的,無面外部施加中斷請求訊號,因此中斷的發生不是隨機的而是由程式安排好的。
②硬中斷的中斷響應週期,CPU需要發中斷回合訊號(NMI不需要),軟中斷的中斷響應週期,CPU不需發中斷回合訊號。
③硬中斷的中斷號是由中斷控制器提供的(NMI硬中斷中斷號系統指定為02H);軟中斷的中斷號由指令直接給出,無需使用中斷控制器。
④硬中斷是可遮蔽的(NMI硬中斷不可遮蔽),軟中斷不可遮蔽。

應用:

軟中斷典型應用下半部,網路卡資料的處理;
硬中斷應用:磁碟中斷請求

7. 什麼是程式,執行緒?它們之間的區別和聯絡是什麼?

 

程式和執行緒的差別。

執行緒是指程式內的一個執行單元,也是程式內的可排程實體.

與程式的區別:

(1)排程:執行緒作為排程和分配的基本單位,程式作為擁有資源的基本單位

(2)併發性:不僅程式之間可以併發執行,同一個程式的多個執行緒之間也可併發執行

(3)擁有資源:程式是擁有資源的一個獨立單位,執行緒不擁有系統資源,但可以訪問隸屬於程式的資源.

(4)系統開銷:在建立或撤消程式時,由於系統都要為之分配和回收資源,導致系統的開銷明顯大於建立或撤消執行緒時的開銷。 

8. .描述實時系統的基本特性

在特定時間內完成特定的任務,實時性與可靠性

IT公司筆試題

相關文章