1. 程式人生 > >C++面試經典總結

C++面試經典總結

1.    面向物件的程式設計思想是什麼?

答:把資料結構和對資料結構進行操作的方法封裝形成一個個的物件。

2.    什麼是類?
答:把一些具有共性的物件歸類後形成一個集合,也就是所謂的類。

3.    物件都具有的兩方面特徵是什麼?分別是什麼含義?
答:物件都具有的特徵是:靜態特徵和動態特徵。
靜態特徵是指能描述物件的一些屬性(成員變數),動態特徵是指物件表現出來的行為(成員函式)

4.    在標頭檔案中進行類的宣告,在對應的實現檔案中進行類的定義有什麼意義?
答:這樣可以提高編譯效率,因為分開的話只需要編譯一次生成對應的.obj檔案後,再次應用該類的地方,這個類就不會被再次編譯,從而大大的提高了編譯效率。

5.    在類的內部定義成員函式的函式體,這種函式會具備那種屬性?
答:這種函式會自動為行內函數,這種函式在函式呼叫的地方在編譯階段都會進行程式碼替換。

6.    成員函式通過什麼來區分不同物件的成員資料?為什麼它能夠區分?
答:通過this指標指向物件的首地址來區分的。

7.    C++編譯器自動為類產生的四個預設函式是什麼?
答:預設建構函式,拷貝建構函式,解構函式,賦值函式。

8.    拷貝建構函式在哪幾種情況下會被呼叫?
答:
1.當類的一個物件去初始化該類的另一個物件時;
2.如果函式的形參是類的物件,呼叫函式進行形參和實參結合時;
3.如果函式的返回值是類物件,函式呼叫完成返回時。

9.    建構函式與普通函式相比在形式上有什麼不同?(建構函式的作用,它的宣告形式來分析)
答:建構函式是類的一種特殊成員函式,一般情況下,它是專門用來初始化物件成員變數的。
建構函式的名字必須與類名相同,它不具有任何型別,不返回任何值。

10.  什麼時候必須重寫拷貝建構函式?
答:當建構函式涉及到動態儲存分配空間時,要自己寫拷貝建構函式,並且要深拷貝。

11.  建構函式的呼叫順序是什麼?
答: 1.先呼叫基類建構函式
2.按宣告順序初始化資料成員
3.最後呼叫自己的建構函式。

12.  哪幾種情況必須用到初始化成員列表?
答: 1.類的成員是常量成員初始化;
2.類的成員是物件成員初始化,而該物件沒有無參建構函式。
3.類的成員為引用時。

13.  什麼是常物件?
答:常物件是指在任何場合都不能對其成員的值進行修改的物件。

14.  靜態函式存在的意義?
答:靜態私有成員在類外不能被訪問,可通過類的靜態成員函式來訪問;
當類的建構函式是私有的時,不像普通類那樣例項化自己,只能通過靜態成員函式來呼叫建構函式。

15.  在類外有什麼辦法可以訪問類的非公有成員?
答:友元,繼承,公有成員函式。

16.  什麼叫抽象類?
答:不用來定義物件而只作為一種基本型別用作繼承的類。

17.  運算子過載的意義?
答:為了對使用者自定義資料型別的資料的操作與內定義的資料型別的資料的操作形式一致。

18.  不允許過載的5個運算子是哪些?
答:1.    .*(成員指標訪問運算子號)
2.    ::域運算子
3.    Sizeof 長度運算子號
4.    ?:條件運算子號
5.  .(成員訪問符)

19.  運算子過載的三種方式?
答:普通函式,友元函式,類成員函式。

20.  流運算子為什麼不能通過類的成員函式過載?一般怎麼解決?
答:因為通過類的成員函式過載必須是運算子的第一個是自己,而對流運算的過載要求第一個引數是流物件。所以一般通過友元來解決。
21.  賦值運算子和拷貝建構函式的區別與聯絡?
答: 相同點:都是將一個物件copy到另一箇中去。
不同點:拷貝建構函式涉及到要新建立一個物件。

22.  在哪種情況下要呼叫該類的解構函式?
答:物件生命週期結束時。

23.  物件間是怎樣實現資料的共享的?
答:通過類的靜態成員變數來實現物件間的資料共享。靜態成員變數佔有自己獨立的空間不為某個物件所私有。

24.  友元關係有什麼特性?
答:單向的,非傳遞的,不能繼承的。

25.  對物件成員進行初始化的次序是什麼?
答:它的次序完全不受它們在初始化表中次序的影響,只有成員物件在類中宣告的次序來決定的。

26.  類和物件之間的關係是什麼?
答:類是物件的抽象,物件是類的例項。

27.  對類的成員的訪問屬性有什麼?
答:public,protected,private。

28.const char *p和char *  const p; 的區別
答: 如果const位於星號的左側,則const就是用來修飾指標所指向的變數,即指標指向為常量;
如果const位於星號的右側,const就是修飾指標本身,即指標本身是常量。

29.  是不是一個父類寫了一個virtual 函式,如果子類覆蓋它的函式不加virtual ,也能實現多型?
答: virtual修飾符會被隱形繼承的。
virtual可加可不加,子類覆蓋它的函式不加virtual ,也能實現多型。

30.  函式過載是什麼意思?它與虛擬函式的概念有什麼區別?
答:函式過載是一個同名函式完成不同的功能,編譯系統在編譯階段通過函式引數個數、引數型別不同,函式的返回值來區分該呼叫哪一個函式,即實現的是靜態的多型性。但是記住:不能僅僅通過函式返回值不同來實現函式過載。而虛擬函式實現的是在基類中通過使用關鍵字virtual來申明一個函式為虛擬函式,含義就是該函式的功能可能在將來的派生類中定義或者在基類的基礎之上進行擴充套件,系統只能在執行階段才能動態決定該呼叫哪一個函式,所以實現的是動態的多型性。它體現的是一個縱向的概念,也即在基類和派生類間實現。

31.  建構函式和解構函式是否可以被過載,為什麼?
答:建構函式可以被過載,解構函式不可以被過載。因為建構函式可以有多個且可以帶引數,而解構函式只能有一個,且不能帶引數。

32.  如何定義和實現一個類的成員函式為回撥函式?
答:所謂的回撥函式,就是預先在系統的對函式進行註冊,讓系統知道這個函式的存在,以後,當某個事件發生時,再呼叫這個函式對事件進行響應。
定義一個類的成員函式時在該函式前加CALLBACK即將其定義為回撥函式,函式的實現和普通成員函式沒有區別。

33.  虛擬函式是怎麼實現的?
答:簡單說來使用了虛擬函式表.

34.  抽象類不會產生例項,所以不需要有建構函式。 錯

35.  從一個模板類可以派生新的模板類,也可以派生非模板類。 對

36.  main 函式執行以前,還會執行什麼程式碼?
答案:全域性物件的建構函式會在main 函式之前執行。

37.  當一個類A 中沒有生命任何成員變數與成員函式,這時sizeof(A)的值是多少,如果不是零,請解釋一下編譯器為什麼沒有讓它為零。(Autodesk)
答案:肯定不是零。舉個反例,如果是零的話,宣告一個class A[10]物件陣列,而每一個物件佔用的空間是零,這時就沒辦法區分A[0],A[1]…了。

38.  delete與 delete []區別:
答:delete只會呼叫一次解構函式,而delete[]會呼叫每一個成員的解構函式。

39.子類析構時要呼叫父類的解構函式嗎?
答:會呼叫。解構函式呼叫的次序是先派生類的析構後基類的析構,也就是說在基類的的析構呼叫的時候,派生類的資訊已經全部銷燬了

40.  繼承的優缺點。

答:
1、類繼承是在編譯時刻靜態定義的,且可直接使用,
2、類繼承可以較方便地改變父類的實現。
缺點:
1、因為繼承在編譯時刻就定義了,所以無法在執行時刻改變從父類繼承的實現
2、父類通常至少定義了子類的部分行為,父類的任何改變都可能影響子類的行為
3、如果繼承下來的實現不適合解決新的問題,則父類必須重寫或被其他更適合的類替換。這種依賴關係限制了靈活性並最終限制了複用性。
41.  解釋堆和棧的區別。 
答:棧區(stack)— 由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。
堆(heap)一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由OS回收 。

42.  一個類的建構函式和解構函式什麼時候被呼叫,是否需要手工呼叫?
答:建構函式在建立類物件的時候被自動呼叫,解構函式在類物件生命期結束時,由系統自動呼叫。

43.  何時需要預編譯:
答:總是使用不經常改動的大型程式碼體。
程式由多個模組組成,所有模組都使用一組標準的包含檔案和相同的編譯選項。在這種情況下,可以將所有包含檔案預編譯為一個預編譯頭。

44.  多型的作用?
答:主要是兩個:
1. 隱藏實現細節,使得程式碼能夠模組化;擴充套件程式碼模組,實現程式碼重用;
2. 介面重用:為了類在繼承和派生的時候,保證使用家族中任一類的例項的某一屬性時的正確呼叫

45.  虛擬函式與普通成員函式的區別?行內函數和建構函式能否為虛擬函式?
答案:區別:虛擬函式有virtual關鍵字,有虛擬指標和虛擬函式表,虛擬指標就是虛擬函式的介面,而普通成員函式沒有。行內函數和建構函式不能為虛擬函式。

46.  建構函式和解構函式的呼叫順序? 解構函式為什麼要虛擬?
答案:建構函式的呼叫順序:基類建構函式—物件成員建構函式—派生類建構函式;解構函式的呼叫順序與建構函式相反。解構函式虛擬是為了防止析構不徹底,造成記憶體的洩漏。

47. C++中型別為private的成員變數可以由哪些函式訪問?
答:只可以由本類中的成員函式和友元函式訪問

48.  請說出類中private,protect,public三種訪問限制類型的區別
答:private是私有型別,只有本類中的成員函式訪問;protect是保護型的,本類和繼承類可以訪問;public是公有型別,任何類都可以訪問.

49.  類中成員變數怎麼進行初始化?
答:可以通過建構函式的初始化列表或建構函式的函式體實現。

50.  在什麼時候需要使用“常引用”? 
答:如果既要利用引用提高程式的效率,又要保護傳遞給函式的資料不在函式中被改變,就應使用常引用。

51.  引用與指標有什麼區別?
答 、1) 引用必須被初始化,指標不必。
2) 引用初始化以後不能被改變,指標可以改變所指的物件。
3) 不存在指向空值的引用,但是存在指向空值的指標。

52.  描述實時系統的基本特性
答 、在特定時間內完成特定的任務,實時性與可靠性。

54.  全域性變數和區域性變數在記憶體中是否有區別?如果有,是什麼區別?
答 、全域性變數儲存在靜態資料區,區域性變數在堆疊中。

55.  堆疊溢位一般是由什麼原因導致的?
答 、沒有回收垃圾資源

56.  什麼函式不能宣告為虛擬函式?
答:建構函式(constructor)

57.  IP地址的編碼分為哪倆部分?
答 IP地址由兩部分組成,網路號和主機號。

58.  不能做switch()的引數型別是:
答 、switch的引數不能為實型。

59.  如何引用一個已經定義過的全域性變數?
答 、可以用引用標頭檔案的方式,也可以用extern關鍵字,如果用引用標頭檔案方式來引用某個在標頭檔案中宣告的全域性變理,假定你將那個變寫錯了,那麼在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那麼在編譯期間不會報錯,而在連線期間報錯

60.  對於一個頻繁使用的短小函式,在C語言中應用什麼實現,在C++中應用什麼實現?
答 、c用巨集定義,c++用inline

61.  C++是不是型別安全的?
答案:不是。兩個不同型別的指標之間可以強制轉換(用reinterpret cast)

62.  當一個類A 中沒有生命任何成員變數與成員函式,這時sizeof(A)的值是多少,請解釋一下編譯器為什麼沒有讓它為零。
答案:為1。舉個反例,如果是零的話,宣告一個class A[10]物件陣列,而每一個物件佔用的空間是零,這時就沒辦法區分A[0],A[1]…了。

63.  簡述陣列與指標的區別?
答:陣列要麼在靜態儲存區被建立(如全域性陣列),要麼在棧上被建立。指標可以隨時指向任意型別的記憶體塊。
(1)修改內容上的區別
char a[] = “hello”;
a[0] = ‘X’;
char *p = “world”; // 注意p 指向常量字串
p[0] = ‘X’; // 編譯器不能發現該錯誤,執行時錯誤
(2) 用運算子sizeof 可以計算出陣列的容量(位元組數)。sizeof(p),p 為指標得到的是一個指標變數的位元組數,而不是p 所指的記憶體容量。

64.  C++函式中值的傳遞方式
答:有三種方式:值傳遞、指標傳遞、引用傳遞

65.  記憶體的分配方式
答:分配方式有三種,
1、 靜態儲存區,是在程式編譯時就已經分配好的,在整個執行期間都存在,如全域性變數、常量。
2、 棧上分配,函式內的區域性變數就是從這分配的,但分配的記憶體容易有限。
3、 堆上分配,也稱動態分配,如我們用new,malloc分配記憶體,用delete,free來釋放的記憶體。

66.  extern“C”有什麼作用?
答:Extern “C”是由C++提供的一個連線交換指定符號,用於告訴C++這段程式碼是C函式。這是因為C++編譯後庫中函式名會變得很長,與C生成的不一致,造成C++不能直接呼叫C函式,加上extren “c”後,C++就能直接呼叫C函數了。
Extern “C”主要使用正規DLL函式的引用和匯出 和 在C++包含C函式或C標頭檔案時使用。使用時在前面加上extern “c” 關鍵字即可。可以用一句話概括extern “C”這個宣告的真實目的:實現C++與C及其它語言的混合程式設計。

67.  用什麼函式開啟新程序、執行緒。
答案:
執行緒:CreateThread/AfxBeginThread等
程序:CreateProcess等

68.  SendMessage和PostMessage有什麼區別
答案:SendMessage是阻塞的,等訊息被處理後,程式碼才能走到SendMessage的下一行。PostMessage是非阻塞的,不管訊息是否已被處理,程式碼馬上走到PostMessage的下一行。

69.  CMemoryState主要功能是什麼
答案:檢視記憶體使用情況,解決記憶體洩露問題。

70.  #include <filename.h>和 #include “filename.h” 有什麼區別?
答:對於#include <filename.h> ,編譯器從標準庫路徑開始搜尋 filename.h
對於#include “filename.h” ,編譯器從使用者的工作路徑開始搜尋 filename.h

71.  處理器標識#error的目的是什麼?
答:編譯時輸出一條錯誤資訊,並中止繼續編譯。

72.  #if!defined(AFX_…_HADE_H)
 #define(AFX_…_HADE_H)

#endif作用?
答:防止該標頭檔案被重複引用。

73. 在定義一個巨集的時候要注意什麼?
答:定義部分的每個形參和整個表示式都必須用括號括起來,以避免不可預料的錯誤發生

74.  陣列在做函式實參的時候會轉變為什麼型別?
答:陣列在做實參時會變成指標型別。

75.  系統會自動開啟和關閉的3個標準的檔案是?
(1)   標準輸入—-鍵盤—stdin
(2)   標準輸出—-顯示器—stdout
(3)   標準出錯輸出—-顯示器—stderr

76.  .在Win32下 char, int, float, double各佔多少位?
(1)   Char       佔用8位
(2)   Int      佔用32位
(3)   Float    佔用32位
(4)   Double   佔用64位

77.  strcpy()和memcpy()的區別?
答:strcpy()和memcpy()都可以用來拷貝字串,strcpy()拷貝以’\0’結束,但memcpy()必須指定拷貝的長度。

78.  說明define和const在語法和含義上有什麼不同?
答:(1)   #define是C語法中定義符號變數的方法,符號常量只是用來表達一個值,在編譯階段符號就被值替換了,它沒有型別;
(2)   Const是C++語法中定義常變數的方法,常變數具有變數特性,它具有型別,記憶體中存在以它命名的儲存單元,可以用sizeof測出長度。

79.  說出字元常量和字串常量的區別,並使用運算子sizeof計算有什麼不用?
答:字元常量是指單個字元,字串常量以‘\0’結束,使用運算子sizeof計算多佔一位元組的儲存空間。

80.  簡述全域性變數的優缺點?
答:全域性變數也稱為外部變數,它是在函式外部定義的變數,它屬於一個源程式檔案,它儲存上一次被修改後的值,便於資料共享,但不方便管理,易引起意想不到的錯誤。

81.  總結static的應用和作用?
答:(1)函式體內static變數的作用範圍為該函式體,不同於auto變數,該變數的記憶體只被分配一次,因此其值在下次呼叫時仍維持上次的值;
(2)在模組內的static全域性變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問;
(3)在模組內的static函式只可被這一模組內的其它函式呼叫,這個函式的使用範圍被限制在宣告它的模組內;
(4)在類中的static成員變數屬於整個類所擁有,對類的所有物件只有一份拷貝;
(5)在類中的static成員函式屬於整個類所擁有,這個函式不接收this指標,因而只能訪問類的static成員變數。

82.  總結const的應用和作用?
答: (1)欲阻止一個變數被改變,可以使用const關鍵字。在定義該const變數時,通常需要對它進行初始化,因為以後就沒有機會再去改變它了;
(2)對指標來說,可以指定指標本身為const,也可以指定指標所指的資料為const,或二者同時指定為const;
(3)在一個函式宣告中,const可以修飾形參,表明它是一個輸入引數,在函式內部不能改變其值;
(4)對於類的成員函式,若指定其為const型別,則表明其是一個常函式,不能修改類的成員變數;
(5)對於類的成員函式,有時候必須指定其返回值為const型別,以使得其返回值不為“左值”

83.  什麼是指標?談談你對指標的理解?
答:指標是一個變數,該變數專門存放記憶體地址;
指標變數的型別取決於其指向的資料型別,在所指資料型別前加*
指標變數的特點是它可以訪問所指向的記憶體。

84.  什麼是常指標,什麼是指向常變數的指標?
答:常指標的含義是該指標所指向的地址不能變,但該地址所指向的內容可以變化,使用常指標可以保證我們的指標不能指向其它的變數,
指向常變數的指標是指該指標的變數本身的地址可以變化,可以指向其它的變數,但是它所指的內容不可以被修改。指向長變數的指標定義,

85.  函式指標和指標函式的區別?
答:函式指標是指向一個函式入口的指標;指標函式是函式的返回值是一個指標型別。

87.  簡述Debug版本和Release版本的區別?
答:Debug版本是除錯版本,Release版本是釋出給使用者的最終非除錯的版本,

88.  指標的幾種典型應用情況?
答:
int *p[n];—–指標陣列,每個元素均為指向整型資料的指標。
int (*)p[n];—p為指向一維陣列的指標,這個一維陣列有n個整型資料。
int *p();——函式帶回指標,指標指向返回的值。
int (*)p();—-p為指向函式的指標。

89.  static函式與普通函式有什麼區別?
答:static函式在記憶體中只有一份,普通函式在每個被呼叫中維持一份拷貝

90.  struct(結構) 和 union(聯合)的區別?
答:1. 結構和聯合都是由多個不同的資料型別成員組成, 但在任何同一時刻, 聯合中只存放了一個被選中的成員(所有成員共用一塊地址空間), 而結構的所有成員都存在(不同成員的存放地址不同)。
2. 對於聯合的不同成員賦值, 將會對其它成員重寫,  原來成員的值就不存在了, 而對於結構的不同成員賦值是互不影響的。

91.  class 和 struct 的區別?
答:struct 的成員預設是公有的,而類的成員預設是私有的。

92.  簡述列舉型別?
答:列舉方便一次定義一組常量,使用起來很方便;

93.  assert()的作用?
答:ASSERT()是一個除錯程式時經常使用的巨集,在程式執行時它計算括號內的表示式,如果表示式為FALSE (0), 程式將報告錯誤,並終止執行。如果表示式不為0,則繼續執行後面的語句。這個巨集通常原來判斷程式中是否出現了明顯非法的資料,如果出現了終止程式以免導致嚴重後果,同時也便於查詢錯誤。

94.  區域性變數和全域性變數是否可以同名?
答:能。區域性會遮蔽全域性。要用全域性變數,需要使用”::”(域運算子)。

95.  程式的區域性變數存在於(堆疊)中,全域性變數存在於(靜態區 )中,動態申請資料存在於( 堆)中。

96.  在什麼時候使用常引用?
答:如果既要利用引用提高程式的效率,又要保護傳遞給函式的資料不在函式中被改變,就應使用常引用。

97.  類的宣告和實現的分開的好處?
答:1.    起保護作用;
2.    提高編譯的效率。

98.  windows訊息系統由哪幾部分構成?
答:由一下3部分組成:
1.    訊息佇列:作業系統負責為程序維護一個訊息佇列,程式執行時不斷從該訊息佇列中獲取訊息、處理訊息;
2.    訊息迴圈:應用程式通過訊息迴圈不斷獲取訊息、處理訊息。
3.    訊息處理:訊息迴圈負責將訊息派發到相關的視窗上使用關聯的視窗過程函式進行處理。

99.  什麼是訊息對映?
答:訊息對映就是讓程式設計師指定MFC類(有訊息處理能力的類)處理某個訊息。然後由程式設計師完成對該處理函式的編寫,以實現訊息處理功能。

100. 什麼是UDP和TCP的區別是什麼?
答:TCP的全稱為傳輸控制協議。這種協議可以提供面向連線的、可靠的、點到點的通訊。
UDP全稱為使用者報文協議,它可以提供非連線的不可靠的點到多點的通訊。用TCP還是UDP,那要看你的程式注重哪一個方面?可靠還是快速?

相關推薦

C++面試經典總結

1.    面向物件的程式設計思想是什麼? 答:把資料結構和對資料結構進行操作的方法封裝形成一個個的物件。 2.    什麼是類? 答:把一些具有共性的物件歸類後形成一個集合,也就是所謂的類。 3.    物件都具有的兩方面特徵是什麼?分別是什麼含義? 答:物件都具有

c++面試經典問題-四種強制型別轉換

Static_cast和Dynamic_cast放在一起比較容易記,一動一靜 Static_cast是靜態轉換,也就是編譯時轉換,可以完成基礎型別的轉換,然後任意型別指標與void指標的轉換,還可以完成同一個繼承體系中型別的轉換。 Dynamic_cast是執行時

C++面試知識總結

C/C++ const 作用 修飾變數,說明該變數不可以被改變; 修飾指標,分為指向常量的指標和指標常量; 常量引用,經常用於形參型別,即避免了拷貝,又避免了函式對值的修改; 修飾成員函式,說明該成員函式內不能修改成員變數。 使用 const 使用 // 類

2017iOS面試經典總結(1)--- iOS 代理,通知,Block

作為我們這個行業,面試對於我們並不陌生,而且作為技術工種,技術面試是面試中的重要環節,我最近會總結一些比較基礎但是平時總結較少的面試經典的題。也是全面的學習,也可以讓面試的朋友們相互分享交流。 1.三者的傳值對應關係。 我們說通知是”一對多”的關係。 而代理和Block通常是”一對

C/C++面試知識點總結(一)

目錄: 一、基礎知識     1.C/C++     2.STL     6.資料庫 一、基礎知識 1.C/C++ (1).struct大小的確定 由於記憶體對齊的原則,在32位機器上,記憶體是4位元組對齊,也就是說,不

c++面試經典程式設計試題

1. 二分查詢 二分查詢也是比較經典的面試題 條件: 1)資料是按從小到大或者是從大到小排序的 2)給定一組資料,在所給的排序資料中找出與資料相等的值,並返回它的下

C/C++面試經典

這裡彙總一下面試的時候經常會被問到的一些問題。 1.const 有什麼用途      1:定義只讀變數,即常量      2:修飾函式的引數和函式的返回值      3: 修飾函式的定義體,這裡的函式為類的成員函式,被const修飾的成員函式代表不修改成員變數的值 2.

C++面試 2017總結

 C++常考面試題 : (1)(2)   1、儘可能說出static關鍵字的作用?   (1) static修飾函式區域性變數(包括main函式裡的),該變數不會隨著函式作用域的退出而銷燬,而是隻分配一次記憶體,下次呼叫時為上次呼叫值。   (2) static修

C++ 面試知識點總結

1. C++基礎知識點 1.1 有符號型別和無符號型別 當我們賦給無符號型別一個超出它表示範圍的值時,結果是初始值對無符號型別表示數值總數取模之後的餘數。當我們賦給帶符號型別一個超出它表示範圍的值時,結果是未定義的;此時,程式可能繼續工作、可能崩潰。也可能生成垃圾資料。

C++面試 演算法總結

非線性時間排序 比較排序 氣泡排序 快速排序 插入排序 插入排序 希爾排序 選擇排序 選擇排序 堆排序 歸併排序 二路歸併排序 多路歸併排序 線性時間排序 計數排序 堆排序 基數排序 連結串列: https://www.

C++面試問題總結 3

/* 使用者態與核心態之間如何切換? */ 系統為了限制不同程式的訪問能力,防止它們獲取別的記憶體資料,劃分了兩個等級  核心態與使用者態 核心態:CPU可以訪問記憶體所有資料, 包括外圍裝置, 例如硬碟, 網絡卡. CPU也可以將自己從一個程式切換到另一個程式 使用

常用C++面試總結

pac 占用 .cn 類型 ++ http 內存 ack 總結 指定對齊值:#pragma pack(n),n=1,2,4,8,16改變系統的對齊系數struct和union都是由多個不同的數據類型成員組成, 但在任何同一時刻, union中只存放了一個被選中的成員, 而s

C# .Net經典面試題目及答案

數字 空類 相同 面向連接 tab session cnblogs 一個 all 1, 請你說說.NET中類和結構的區別? 答:   結構和類具有大體的語法,但是結構受到的限制比類要多。結構不能申明有默認的構造函數,為結構的副本是又編譯器創建和銷毀的,所以不需要默認的構造函

C++的MFC軟體介面轉Python,面試了幾家企業的面試題型總結

  先介紹下我的情況 通訊背景,工作一年多不到兩年。之前一直在做C++的MFC軟體介面開發工作。 當然在學習Python的道路上肯定會困難,沒有好的學習資料,怎麼去學習呢? 學習Python中有不明白推薦加入交流群      

C++面試總結(五)雜記

1.malloc、free與new、delete的區別?  1)malloc是函式,而new是操作符  2)malloc申請記憶體時,需要我們指定申請的空間大小,且返回的型別為void*,需要將其強制轉換為所需型別指標;new申請記憶體時,會根據所申請的型別自動計算申請空間的大小

C++面試總結(五)C++ 11/14新特性

C++11是自C++98十餘年來發布的一個新特性,擴充了很多C++的功能和特性,而C++14是對C++11的又一次補充和優化,這些新特性使得C++更貼近於一種現代化的變成語言。gcc版本大於5(clang版本大於3.8)已經全面支援C++14。 1.Lambda 表示式 Lambda表示式,

C++面試總結(四)標準庫

1.什麼是標準庫(STL)? C++ STL(標準模板庫)是一套功能強大的 C++ 模板類,提供了通用的模板類和函式,這些模板類和函式可以實現多種流行和常用的演算法和資料結構,如向量、連結串列、佇列、棧。 2.C++ 標準模板庫的核心三個元件組成? 3.string C++ 從

C++面試總結(三)模板與泛型程式設計

1.什麼是模板?    泛型程式設計是指獨立與任何型別的方式編寫程式碼。泛型程式設計和麵向物件程式設計,都依賴與某種形式的多型。面向物件程式設計的多型性在執行時應用於存在繼承關係的類,一段程式碼可以可以忽略基類和派生類之間的差異。在泛型程式設計中,編寫的程式碼可以用作多種型別

C++面試總結(二)類

1.struct和class的區別 C++中的struct對C中的struct進行了擴充,它已經不再是一個包含不同資料型別的資料結構了。 struct與class 的區別是預設的訪問控制。 預設的繼承訪問許可權,struct是public的,class是private的。  &

C++面試總結(一)常用關鍵字

1.簡述volatile的用法    有些變數是用volatile關鍵字宣告的。當兩個執行緒都要用到某一個變數且該變數的值會被改變時,應該用volatile宣告,該關鍵字的作用是防止優化編譯器把變數從記憶體裝入cpu暫存器中。volatile的意思是讓編譯器每次操作該變數時一