這算是一個系列吧,記錄一下在準備秋招期間,所準備的C++面試題,望秋招順利。所有的面試題均來源於各大論壇,網路 ...
這算是一個系列吧,記錄一下在準備秋招期間,所準備的C++面試題,望秋招順利。所有的面試題均來源於各大論壇,網路。
C/C++常考面試題(一)
- 常用的C++數據結構有哪些?
- vector,序列式容器,相當於數組,順序表;
- list, 雙向鏈表
- deque,雙端隊列,queue,隊列,stack,棧,priority_queue,優先順序隊列
- map,set,multimap,multiset
- hashtable,散列表
- 圖,樹等等
- 什麼是虛函數,多繼承有什麼問題
- 被virtual關鍵字修飾的成員函數,就是虛函數
- 多繼承可能會發生重覆繼承的情況,從不同途徑繼承來的同名的數據成員在記憶體中有不同的拷貝造成數據不一致的問題,二義性的問題。解決辦法虛繼承
- 為什麼要用虛析構函數,什麼是多態
- 在多態中,當用基類操作派生類,在析構時防止只析構基類而不析構派生類的狀況發生
- 多態可以簡單地概括為“一個介面,多種方法”,在程式運行的過程中才決定調用的函數。多態性是面向對象編程領域的核心概念。多態性是允許你將父對象設置成為和它的一個或更多的子對象相等的技術,賦值之後,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作。簡單地說就是一句話,允許將子類類型的指針賦值給父類類型的指針。多態性在C++中都是通過虛函數(Virtual Function)實現的。
- 進程和線程的區別和聯繫
- 定義
- 進程是程式的一次執行,是程式在一個數據集合上運行的過程,是一個動態概念,是系統進行資源分配和管理的基本單位。
- 線程是進程的一個實體,是CPU調度和分派的基本單位,是比進程更小的能獨立運行的基本單位,也稱為輕型進程,是可執行的實體單元。
- 區別
- 地址空間和其他資源:進程間相互獨立,同一進程的各線程間共用。某進程的線程在其他進程中不可見。
- 每一個進程都有一個自己的地址空間,即進程空間。進程空間的大小隻與機器位數有關。一個進程崩潰後,在保護模式下不會對其他進程產生影響。而線程只是一個進程中的不同執行路徑,每一個線程有自己的堆棧和局部變數,但是沒有自己獨立的地址空間,每個線程共用其所屬進程的資源。一個線程死掉等於整個進程死掉,所以多進程的程式要比多線程的程式健壯。
- 通信:進程間通信IPC,線程間可以直接讀寫進程數據段(如全局變數)來進行通信,但是需要相關同步和互斥手段的輔助,以保證數據的一致性。
- 調度和切換:線程的上下文切換比進程的上下文切換快得多。
- 一個程式至少有一個進程,一個進程至少有一個線程
- 從邏輯角度來看,多線程的意義在於一個應用程式中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
- 地址空間和其他資源:進程間相互獨立,同一進程的各線程間共用。某進程的線程在其他進程中不可見。
- 定義