C/C++常考面試題(一)


這算是一個系列吧,記錄一下在准備秋招期間,所准備的C++面試題,望秋招順利。所有的面試題均來源於各大論壇,網絡。

C/C++常考面試題(一)

  1. 常用的C++數據結構有哪些?

    • vector,序列式容器,相當於數組,順序表;
    • list, 雙向鏈表
    • deque,雙端隊列,queue,隊列,stack,棧,priority_queue,優先級隊列
    • map,set,multimap,multiset
    • hashtable,散列表
    • 圖,樹等等
  2. 什么是虛函數,多繼承有什么問題

    • 被virtual關鍵字修飾的成員函數,就是虛函數
    • 多繼承可能會發生重復繼承的情況,從不同途徑繼承來的同名的數據成員在內存中有不同的拷貝造成數據不一致的問題,二義性的問題。解決辦法虛繼承
  3. 為什么要用虛析構函數,什么是多態

    • 在多態中,當用基類操作派生類,在析構時防止只析構基類而不析構派生類的狀況發生
    • 多態可以簡單地概括為“一個接口,多種方法”,在程序運行的過程中才決定調用的函數。多態性是面向對象編程領域的核心概念。多態性是允許你將父對象設置成為和它的一個或更多的子對象相等的技術,賦值之后,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作。簡單地說就是一句話,允許將子類類型的指針賦值給父類類型的指針。多態性在C++中都是通過虛函數(Virtual Function)實現的。
  4. 進程和線程的區別和聯系

    • 定義

      • 進程是程序的一次執行,是程序在一個數據集合上運行的過程,是一個動態概念,是系統進行資源分配和管理的基本單位。
      • 線程是進程的一個實體,是CPU調度和分派的基本單位,是比進程更小的能獨立運行的基本單位,也稱為輕型進程,是可執行的實體單元。
    • 區別

      • 地址空間和其他資源:進程間相互獨立,同一進程的各線程間共享。某進程的線程在其他進程中不可見。
        • 每一個進程都有一個自己的地址空間,即進程空間。進程空間的大小只與機器位數有關。一個進程崩潰后,在保護模式下不會對其他進程產生影響。而線程只是一個進程中的不同執行路徑,每一個線程有自己的堆棧和局部變量,但是沒有自己獨立的地址空間,每個線程共享其所屬進程的資源。一個線程死掉等於整個進程死掉,所以多進程的程序要比多線程的程序健壯。
      • 通信:進程間通信IPC,線程間可以直接讀寫進程數據段(如全局變量)來進行通信,但是需要相關同步和互斥手段的輔助,以保證數據的一致性。
      • 調度和切換:線程的上下文切換比進程的上下文切換快得多。
      • 一個程序至少有一個進程,一個進程至少有一個線程
      • 從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM