1. 程式人生 > >關於c++面試問題的一些總結

關於c++面試問題的一些總結

前天去參加了cocos2d開發工程師的筆試和麵試,發現自己的基礎還是很薄弱的,下面是自己回憶的筆試和麵試問的問題

1.c++的三個基本特性
封裝、多型、繼承

2.建構函式可不可以是虛擬函式
建構函式不能是虛擬函式,虛擬函式的作用在於通過父類的指標或者引用來呼叫它的時候能夠變成呼叫子類的那個成員函式。而建構函式是在建立物件時自動呼叫的,不可能通過父類的指標或者引用去呼叫,因此也就規定建構函式不能是虛擬函式

3.c++中容器的使用場景,可以快速儲存資料的容器有哪些,可以快速刪除資料的容器有哪些?
容器分為順序容器和關聯容器兩大類
順序容器提供快速順序訪問元素的能力
vector 在尾部之外的位置插入或刪除元素可能很慢,支援快速隨機訪問
deque 在頭尾部插入和刪除元素速度很快,支援快速隨機訪問
list 在任何位置插入和刪除速度很快,只支援雙向順序訪問

4.關於c和c++的區別
c面向過程,c++面向物件。C是一個結構化語言,它的重點在於演算法和資料結構;對於C++,首要考慮的是如何構造一個物件模型,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取物件的狀態資訊得到輸出或實現過程(事務)控制

5.什麼是記憶體洩露以及處理的經驗
用動態儲存分配函式動態開闢的空間,在使用完畢後未釋放,結果導致一直佔據該記憶體單元。直到程式結束。(其實說白了就是該記憶體空間使用完畢之後未回收)即所謂記憶體洩漏。
記憶體洩漏和物件的引用計數有很大的關係,再加上c/c++都沒有自動的垃圾回收機制,如果沒有手動釋放記憶體,問題就會出現。如果要避免這個問題,還是要從程式碼上入手,良好的編碼習慣和規範,是避免錯誤的不二法門。
一般我們常說的記憶體洩漏是指堆記憶體的洩漏。
堆記憶體是指程式從堆中分配的,大小任意的(記憶體塊的大小可以在程式執行期決定),使用完後必須顯式釋放的記憶體。
應用程式一般使用malloc,realloc,new等函式從堆中分配到一塊記憶體,使用完後,程式必須負責相應的呼叫free或delete釋放該記憶體塊,否則,這塊記憶體就不能被再次使用,我們就說這塊記憶體洩漏了。

6.是否瞭解過vector內部的函式實現
vector動態增加大小時,並不是在原空間之後持續新空間(因為無法保證原空間之後尚有可供配置的空間),而是以原大小的兩倍另外配置一塊較大的空間,然後將原內容拷貝過來,然後才開始在原內容之後構造新元素,並釋放原空間。因此, 對vector的任何操作,一旦引起空間重新配置,指向原vector的所有迭代器就都失效了 。這是程式設計師易犯的一個錯誤,務需小心。

7.什麼時候使用多執行緒
(1)耗時或大量佔用處理器的任務阻塞使用者介面操作;
(2)各個任務必須等待外部資源 (如遠端檔案或 Internet連線)。