C++求職者人手必備的20道技術面試題

面試題有難有易,不能因為容易,我們就輕視,更不能因為難,我們就放棄。我們面對高薪就業的態度永遠不變,那就是堅持、堅持、再堅持。出現問題,找原因;遇到困難,想辦法。我們一直堅信只有在堅持中才能看到希望,而不是看到希望才去堅持。

OK,進入正題,下面就是《必須掌握的20道技術面試題》,請大家認真學,反覆練。

C/C++求職者人手必備的20道技術面試題

1:請用簡單的語言告訴我C++ 是什麼?

答:C++是在C語言的基礎上開發的一種面向對象編程語言,應用廣泛。C++支持多種編程範式 --面向對象編程、泛型編程和過程化編程。 其編程領域眾廣,常用於系統開發,引擎開發等應用領域,是最受廣大程序員受用的最強大編程語言之一,支持類:類、封裝、重載等特性!

2:C和C++的區別?

答:c++在c的基礎上增添類,C是一個結構化語言,它的重點在於算法和數據結構。C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制),而對於C++,首要考慮的是如何構造一個對象模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取對象的狀態信息得到輸出或實現過程(事務)控制。

3:什麼是面向對象(OOP)?

答:面向對象是一種對現實世界理解和抽象的方法、思想,通過將需求要素轉化為對象進行問題處理的一種思想。

4:什麼是多態?

答:多態是指相同的操作或函數、過程可作用於多種類型的對象上並獲得不同的結果。不同的對象,收到同一消息可以產生不同的結果,這種現象稱為多態。

5:設計模式懂嘛,簡單舉個例子?

答:設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。

比如單例模式,保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。

適用於:當類只能有一個實例而且客戶可以從一個眾所周知的訪問點訪問它時;當這個唯一實例應該是通過子類化可擴展的,並且客戶應該無需更改代碼就能使用一個擴展的實例時。

比如工廠模式,定義一個用於創建對象的接口,讓子類決定實例化哪一個類。Factory Method 使一個類的實例化延遲到其子類。

適用於:當一個類不知道它所必須創建的對象的類的時候;當一個類希望由它的子類來指定它所創建的對象的時候;當類將創建對象的職責委託給多個幫助子類中的某一個,並且你希望將哪一個幫助子類是代理者這一信息局部化的時候。

6:數據結構會嗎?項目開發過程中主要用到那些?

答:數據結構中主要會用到數組,鏈表,樹(較少),也會用到棧和隊列的思想。

7:類的static變量在什麼時候初始化?函數的static變量在什麼時候初始化?

答:類的靜態成員變量在類實例化之前就已經存在了,並且分配了內存。函數的static變量在執行此函數時進行初始化。

8:堆和棧的區別?堆和棧的生命週期?

答:一、堆棧空間分配區別:

  1、棧(操作系統):由操作系統自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似於數據結構中的棧;

  2、堆(操作系統): 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收,分配方式倒是類似於鏈表。

  二、堆棧緩存方式區別:

  1、棧使用的是一級緩存, 他們通常都是被調用時處於存儲空間中,調用完畢立即釋放;

  2、堆是存放在二級緩存中,生命週期由虛擬機的垃圾回收算法來決定(並不是一旦成為孤兒對象就能被回收)。所以調用這些對象的速度要相對來得低一些。

  三、堆棧數據結構區別:

  堆(數據結構):堆可以被看成是一棵樹,如:堆排序;

  棧(數據結構):一種先進後出的數據結構。

9:C和C++的區別?

答:C++在C的基礎上增添類

C是一個結構化語言,它的重點在於算法和數據結構。

C程序的設計首要考慮的是如何通過一個過程,對輸入(或環境條件)進行運算處理得到輸出(或實現過程(事務)控制),而對於C++,首要考慮的是如何構造一個對象模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取對象的狀態信息得到輸出或實現過程(事務)控制。

10:new和malloc的區別?

答:1,malloc與free是C++/C語言的標準庫函數,new/delete是C++的運算符。它們都可用於申請動態內存和釋放內存。

2,對於非內部數據類型的對象而言,光用maloc/free無法滿足動態對象的要求。對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函數。

3,由於malloc/free是庫函數而不是運算符,不在編譯器控制權限之內,不能夠把執行構造函數和析構函數的任務強加於malloc/free。因此C++語言需要一個能完成動態內存分配和初始化工作的運算符new,以一個能完成清理與釋放內存工作的運算符delete。注意new/delete不是庫函數。

4,C++程序經常要調用C函數,而C程序只能用malloc/free管理動態內存。

5,new可以認為是malloc加構造函數的執行。new出來的指針是直接帶類型信息的。而malloc返回的都是void指針。


分享到:


相關文章: