當前位置:首頁 » 編程軟體 » 編程題匯總

編程題匯總

發布時間: 2024-07-01 11:50:34

❶ C++面試題匯總

某個文件中定義的靜態全局變數(或稱靜態局部變數)作用域是------本文件內

①:默認繼承許可權:

class的繼承按照private繼承處理,struct的繼承按照public繼承處理

②:成員的默認訪問許可權

class的成員默認是private許可權, struct默認是public許可權


註:C++有內置的宏__cplusplus -------有個習慣帶「__」表示內部變數,只供內部使用;不帶雙下劃線的,表示外部介面的變數(標識符)


C++函數的三種傳遞方式為:值傳遞。指針傳遞 和 引用傳遞

註:值傳遞和指針傳遞,本質上就是指針傳遞。

在A類中fun1是虛函數;B類中fun2是虛函數。

①:機制上:c是面向過程的(c也可以是面向對象發的程序); C++是面向對象,提供了類。C++的面向對象的程序比c容易。

②:使用方向:c適合代碼體積小的,效率高的場合,如嵌入式;C++更適合上層的,復雜的;Linux核心大部分是c寫的,因為他是系統軟體,效率要求極高

③:C++是c的超集;

④:c語言是結構化編程語言,C++是面向對象編程語言。

⑤:C++側重於對象而不是過程,側重於類的設計而不是邏輯設計。


C中struct主要提供的是自定義類型,和構造一種新的類型出來;

一致的地方:

不一致的地方:

C語言: 無Protection行為; 不能定義函數,但可以有函數指針;

C++: 有Procetion行為,默認是private; 可以定義函數。

註: 就是訪問許可權,struct對於外部是完全訪問的,C++是有訪問 許可權 設置的;



正確, sizeof編譯時運算符,編譯時就確定了 可以看成是和及其有關的常量

註:定義數組的時候,數組的長度必須是一個確定的常量;



形參:是在定義函數時指定的參數,在未調用時他們並不佔用內存中的存儲單元。只有在調用的時候才會被分配內存,調用結束後,形參所佔用的內存單元會被釋放

實參:即你調用函數時傳遞的參數;



重載: 同一個名字空間--- -函數名相同,參數列表不同 ; 注釋:理解成一個類裡面的多個同名函數

重寫/覆蓋: 不同名字空間-----用於繼承,子類重新定義父類中 函數名相同,參數列表也相同 虛函數 的方法

重定義/隱藏:重定義(隱藏)是指派生類的函數屏蔽了與其同名的基類函數,規則如下:

a 如果派生類的函數和基類的 函數同名,但是參數不同 ,此時,不管有無virtual,基類的函數被隱藏。

b 如果派生類的函數與基類 的函數同名,並且參數也相同 ,但是基類函數沒有vitual關鍵字,此時,基類的函數被隱藏。


①: 隱藏 實現 細節 ,使得代碼能夠模塊化;擴展代碼模塊, 實現代碼重寫

②: 介面重用 :為了使用多個派生類中某個派生類的屬性正確調用


用sizeof的方法:

定義一個指針P,列印出sizeof(P),如果結果是4,怎麼標識改操作系統是32位,如果列印結果是2,則標識是16位、。


虛函數 ,是在 編譯 期就建立了。各個虛函數被組織成一個虛函數的入口地址的數組(簡而言之,就是組成了一個存放虛函數地址的數組)

虛函數表 指針 是在 運行 時建立的,也就是構造函數被調用時進行初始化的。


封裝,繼承,多態 是什麼?怎那麼用?為什麼使用它?

封裝:將客觀事物抽象成類,每個類對自身的 數據 方法 實行 protection ; 注釋 : 保護內部成員

繼承:廣義的繼承有三種實現形式:

實現繼承:指使用基類的屬性和方法,而無需額外編碼的能力;

可視繼承:子窗體使用父窗體的外觀和實現代碼

介面繼承:僅使用屬性和方法,實現之後到子類實現

前兩種和後一種構成了功能復用的兩種方法

多態: 主要是為了抽象


只要是函數都會做類型檢查。

這是內聯函數跟宏觀比的優勢。


①:靜態存儲區域分配; 內存在編譯的時候就已經分配好了,這塊內存在程序的整個運行期間都存在。例如全局變數。

②:在展區創建;在執行函數時,函數內局部變數的存儲單元都可以在棧上創建,函數執行結束時,自動被釋放。效率高,但是內存容量有限。

③:從堆上分配:或者叫:動態內存分配。程序員自己負責在何時用free或delete釋放內存。


C語言中用帶參數的宏定義,C++中用inline



生命周期不同 空間 周期

局部變數 函數調用時創建,結束時銷毀。static除外

局部變數不具有外部鏈接,全局變數

全局變數 靜態數據區

局部變數: 放在棧區


malloc、free是C++/C語言標准庫,new、delete是C++運算符。

注意:new、delete不是庫函數;

malloc/free 無法 滿足 對象在創建的時候要自動 執行 構造函 數,對象消亡之前要自動執行 析構函數 。他們是庫函數,而不是運算符,不在編譯器的控制許可權內,。

new、delete 能完成內存的分配和釋放,已經初始化和清理工作。


判斷指針是否為空,如果空,則列印錯誤log,並且return,終止本函數。


不是,兩個不同類型的指針可以強制轉換。


動態申請;

知道運行時才知道一個對象需要多少存儲空間,不需要知道對象的生存周期有多長。



Debug調試版本,它包含調試信息,比如assert的適用,並且不作任何優化,便於程序員調試程序。

Release稱為發布版本,他往往時進行了各種優化,


析構函數時特殊的類成員函數,沒有返回類型,沒有參數,不能隨意調用,也沒有重載,只有在類對象的生命周期結束時,有系統自己調用。優勢方內存空間的作用。

虛函數是C++多態的一種表現,使用虛函數,我們可以靈活的進行動態綁定,當然是以一定的開銷為代價

(這里虛函數的適用還是不太懂,需要進一步學習,比如怎麼調用子類的一切啊)



導致文件描述符結構中指針指向的內存背重復釋放,進而導致一些不可預期的異常。


比如全局變數的初始化,就不是有main函數引起的。例如:


全局對象的構造函數,會在main函數之前執行。


多態,純虛函數,抽象類

內聯函數


虛函數的特點:如果希望派生類能夠重新定義基類的方法,則在基類中將該方法定義為虛方法,這樣可以啟用動態聯編。

內聯函數的特點:使用內聯函數的目的屎我了提高函數的運行俠侶。內聯函數的代碼不能過長,因為內聯函數省去調用函數的時間是以代碼膨脹為代價的。內聯函數不能包含循環語句。因為執行循環語句要比調用函數的開銷大。



函數模板的實例化是由編譯程序在處理函數嗲用時自動完成的,

類模板的實例化必須由程序員在程序中顯示的指定


函數名和參數列表


不能被重載的運算符:

①:不能改變C++內部數據類型(如int float 等)的運算符

②:不能重載「.」,因為.在類中對任何成員都有意義,已經成為標准用法

③:不能重載目前C++運算符集合中沒有的符號,如:@, 等。願意:一是難以理解,二是無法確定優先順序

④:對已經存在的運算符重載不能改變優先順序規則,否則將引起混亂。


有可能是派生類無法調用析構函數


模板可以說比較古老了,但是當前的泛型編程實質上就是模板編程。他體現了一種通用和泛化的思想。


STL有7中容器:

vector(零食進行存儲數據的訪問),list(經常進行數據的增刪改查),deque(隊列結構),map,multimap,set(構造棧形的數據使用),multiset.

容器是一種特定用途的類;


淺拷貝 知識拷貝了指針沒有拷貝資源

深拷貝進行了資源的拷貝




三元表達式「?:」問好後面的兩個操作數必須為同一個類型。否則會出問題。




總的來說,堆是C語言和操作系統的術語,是操作系統維護的一塊動態分配內存;自由存儲是C++中通過 new與delete動態分配和釋放對象的抽象概念。 他們並不是完全一樣。

從技術上來說,堆(heap)是C語言和操作系統的術語。堆是操作系統所維護的一塊特殊內存,它提供了動態分配的功能,當運行程序調用malloc()時就會從中分配,稍後調用free可把內存交還。而自由存儲是C++中通過new和delete動態分配和釋放對象的抽象概念,通過new來申請的內存區域可稱為自由存儲區。基本上,所有的C++編譯器默認使用堆來實現自由存儲,也即是預設的全局運算符new和delete也許會按照malloc和free的方式來被實現,這時藉由new運算符分配的對象,說它在堆上也對,說它在自由存儲區上也正確。

程序編譯的過程中就是將用戶的文本形式的源代碼(c/c++)轉化成計算機可以直接執行的機器代碼的過程。主要經過四個過程:預處理、編譯、匯編和鏈接。具體示例如下。

一個hello.c的c語言程序如下。

其編譯過程如下:

❷ Java面試題,常見面試題及答案匯總

Java最新面試題附贈答案

Q1: Java內部類和子類之間有什麼區別?

答案:內部類是指在一個外部類的內部再定義一個類,內部類對外部類有訪問許可權,可以訪問類中定義的所有變數和方法。子類是從父類(superclass)中繼承的類,子類可以訪問父類所有public和protected的欄位和方法。

Q2: 靜態方法和靜態變數的目的是什麼?

答案:靜態變數被類的所有實例共用,靜態類只能訪問類的靜態變數,或調用類的靜態方法。

Q3: Java語言中有哪些常見的訪問說明符,有什麼意義?

答案:Java中的訪問說明符是放在類名之前,用於定義訪問范圍的關鍵字,常見的訪問說明符有以下幾類:

Public:公共,能被項目中的任何一個Class、Method、Field訪問。

Protected:受保護,能被同類或子類訪問,不能從外部訪問。

Default:默認,只能被同一個包的ClassMethod、Field訪問。

Private:私有,只能被本類訪問。

Q4: 什麼是數據封裝及其意義?

答案:封裝是面向對象編程中用於在單個單元中組合屬性和方法。封裝可以幫助程序員遵循模塊化方法進行軟體開發,每個對象都有自己的一組方法和變數,並且可以獨立干其他對象來執行其功能。另外,封裝也有數據隱藏的目的。

Q5: 什麼是 singleton class(單例類)? 並給出其用法的實際例子。

答案:單例類只能有一個實例,必須自己創建自己的唯一實例,必須給所有其他對象提供這一實例。單例做差枯使用場景的最佳實踐是由於某些驅動程序限制,或由於許可問題的限制只能連接資料庫

Q6: 什麼是循環? Java中有哪些循環?

答案:循環用於編程中重復執行語句,Java中的循環有三類:

1、for循環

for循環用於執行指定重復次數的語句,當程序員明確知道循環次數可以使用for循環。

2、While循環

當語句滿足條件時開始進行重復執行,直到語句不再滿足條件退出循環。While循環中在執行語句之前先檢查是否滿足條件。

3、do while循環

Do while 和while循環基本類似,唯一不同的是do while是先執行語句再檢查條件,也就是說dowhile循環至少會執行一次語句。

Q7: 什麼是無限循環? 如何聲明無限循環?

答案:無限循環是指無條件執行,無限運行。無限循環可以由定義中斷語句塊來結束。

Q8: Java中的double和float變數有什麼區別?

答案: float是單精度浮點數,內存中佔用4位元組double是雙精慶冊度浮點數,內存中佔用8位元組。

Q9: Java中的Final關鍵字是什麼意思純洞? 請舉例說明。

答案: final是Java中的關鍵字,有「無法改變」、「終態」的含義,final類不能被繼承,沒有子類,final類中的方法默認是final的,且不能被子類的方法覆蓋,但可以被繼承。final成員變數表示常量,只能被賦值一次,賦值後值不再改變。final不能用於修飾構造方法。下面的例子中,const_val被聲明且賦值為常量100:Private Final int const_val=100而當一個方法被聲明為final之後,它不能被子類覆蓋,而且會比其他方法都快。

Q10: 舉例說明什麼是三元運算符?

答案:三元運算符,也稱為條件運算符,根據布爾值來決定將哪個值分配給變數,它被表示為...? ...:...

在下面的示例中,如果rank為1,status=Done,否則status=Pending。

Q11: 什麼是Java Packages? 其意義是什麼?

答案:為了更好地組織類,Java 提供了包機制,用於區別類名的命名空間。

包的作用:

1、把功能相似或相關的類或介面組織在同一個包中,方便類的查找和使用。

2、如同文件夾一樣,包也採用了樹形目錄的存儲方式。同一個包中的類名字是不同的,不同的包中的類的名字是可以相同的,當同時調用兩個不同包中相同類名的類時,應該加上包名加以區別。因此,包可以避免名字沖突。3、包也限定了訪問許可權,擁有包訪問許可權的類才能訪問某個包中的類。

熱點內容
伺服器CTO包括哪些配置 發布:2024-07-03 08:15:07 瀏覽:741
快手怎麼上傳錄制游戲 發布:2024-07-03 08:05:38 瀏覽:407
牡蠣壓縮片 發布:2024-07-03 07:49:29 瀏覽:384
什麼存儲卡好 發布:2024-07-03 07:36:47 瀏覽:621
造夢西遊ol蘋果怎麼用安卓玩 發布:2024-07-03 07:34:22 瀏覽:682
怎麼更改貓密碼 發布:2024-07-03 07:29:35 瀏覽:169
安卓如何下載pubg日韓 發布:2024-07-03 07:17:35 瀏覽:168
pdf加密復制 發布:2024-07-03 07:17:34 瀏覽:516
st存儲器 發布:2024-07-03 07:12:52 瀏覽:802
make多線程編譯 發布:2024-07-03 07:12:48 瀏覽:108