IT公司筆試面試題系列(三)

2021-06-05 21:23:16 字數 2492 閱讀 2648

1.三個float:a,b,c。 問值 (a+b)+c==(b+a)+c 

(a+b)+c==(a+c)+b

兩者都不行。在比較float或double時,不能簡單地比較。由於計算誤差,相等的概率很低。應判斷兩數之差是否落在區間(-e,e)內。這個e應比浮點數的精度大乙個數量級。

2.請講一講析構函式和虛函式的用法和作用?

析構函式是特殊的類成員函式,它沒有返回型別,沒有引數,不能隨意呼叫,也沒有過載,只有在類物件的生命期結束的時候,由系統自動呼叫。 有適放記憶體空間的做用。

虛函式是c++多型的一種表現, 使用虛函式,我們可以靈活的進行動態繫結,當然是以一定的開銷為代價。

3.全域性變數和區域性變數有什麼區別?實怎麼實現的?作業系統和編譯器是怎麼知道的?

生命週期不同:全域性變數隨主程式建立和建立,隨主程式銷毀而銷毀。

區域性變數在區域性函式內部,甚至區域性迴圈體等內部存在,退出就不存在;記憶體中分配在全域性資料區。

使用方式不同:通過宣告後全域性變數程式的各個部分都可以用到。 

區域性變數只能在區域性使用;分配在棧區。

作業系統和編譯器通過記憶體分配的位置來知道的,全域性變數分配在全域性資料段並且在程式開始執行的時候被載入。區域性變數則分配在堆疊裡面。

4.多型。overload 和 override的區別。

overload是過載,過載是一種引數多型機制,即**通過引數的型別或個數不同而實現的多型機制。 是一種靜態的繫結機制(在編譯時已經知道具體執行的是哪個**段)。 

override是覆蓋。覆蓋是一種動態繫結的多型機制。即在父類和子類中同名元素(如成員函式)有不同的實現**。執行的是哪個**是根據執行時實際情況而定的。

過載overload特點

public bool withdraw(double amt, string name)

public double withdraw(double amt)

1、方法名必須相同2、引數列表必須不相同3、返回值型別可以不相同

注意:override存在於繼繼承的關係類中。

覆寫override特點(三相同):

public override bool withdraw(...)

1、方法名相同2、引數列表相同3、返回值型別相同

注意:存在於同一類中,但是只有虛方法和抽象方法才能被覆寫.

5.解釋堆和棧的區別。

在傳統的c中堆和棧實際是一塊物理記憶體,堆主要用來動態分配記憶體,從堆疊記憶體的低端向上分配;而棧主要用來傳遞函式引數、返回值和區域性引數記憶體分配,是從堆疊記憶體的高階向下分配,俗稱壓棧和出棧;堆是動態分配,比如用new,malloc分配,需要手工釋放,不然會導致memory leak,棧是靜態分配,比如函式呼叫是需要分配堆疊,但堆疊能自動釋放.

6.論述含引數的巨集與函式的優缺點。

巨集是編譯期的,函式是執行期的;巨集不是實體,而函式是乙個可定址的實體;巨集只是編譯期替換,在程式裡每遇到s(a,b),就用a*b代替,a和b兩個實體並沒有由巨集實際產生,而函式s會在棧中定義兩個物件a和b。巨集沒有生存期、作用域之類的概念,而函式就有。

7.非c++內建型別 a 和 b,在哪幾種情況下b能隱式轉化為a?

答:a. class b : public a // b公有繼承自a,可以是間接繼承的

b. class b // b實現了隱式轉化為a的轉化

c. class a // a實現了non-explicit的引數為b(可以有其他帶預設值的引數)建構函式

d. a& operator= ( const a& ); // 賦值操作,雖不是正宗的隱式型別轉換,但也可以勉強算乙個

8.c++中的空類,預設產生哪些類成員函式?

答:class empty

;9.標頭檔案的作用是什麼?

答:一、通過標頭檔案來呼叫庫功能。在很多場合,源**不便(或不准)向使用者公布,只要向使用者提供標頭檔案和二進位制的庫即可。使用者只需要按照標頭檔案中的介面宣告來呼叫庫功能,而不必關心介面怎麼實現的。編譯器會從庫中提取相應的**。

二、標頭檔案能加強型別安全檢查。如果某個介面被實現或被使用時,其方式與標頭檔案中的宣告不一致,編譯器就會指出錯誤,這一簡單的規則能大大減輕程式設計師除錯、改錯的負擔。

10.記憶體的分配方式的分配方式有幾種?

答:一、從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數。

二、在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。

三、從堆上分配,亦稱動態記憶體分配。程式在執行的時候用malloc或new申請任意多少的記憶體,程式設計師自己負責在何時用free或delete釋放記憶體。動態記憶體的生存期由我們決定,使用非常靈活,但問題也最多。

IT公司筆試面試題系列(一)

c 筆試題 答案 虛函式表是在編譯期就建立了,各個虛函式這時被組織成了乙個虛函式的入口位址的陣列.而物件的隱藏成員 虛函式表指標是在執行期 也就是建構函式被呼叫時進行初始化的,這是實現多型的關鍵.答案 只要基類在定義成員函式時已經宣告了virtue關鍵字,在派生類實現的時候覆蓋該函式時,virtue...

IT公司筆試面試題系列(四)

1.請你分別畫出osi的七層網路結構圖和tcp ip的五層結構圖。7 應用層 5應用層 6 表示層 4傳輸層 5 會話層 3 網路層 4 傳輸層 2 資料鏈路層 3 網路層 1物理層 2 資料鏈路層 1 物理層 2.請你詳細地解釋一下ip協議的定義,在哪個層上面?主要有什麼作用?tcp與udp呢?i...

筆試面試題

1 昨天參加一公司筆試,給幾道演算法題整懵了,其實也不難,但好久沒有碰演算法,只是有思路,要讓我在這麼短的時間內寫出程式來還是不行。2 這裡將其中一道稍微複雜一點的演算法題寫下來,以此小結。3 4 題目描述 5 將n個雞蛋放入到m個籃子中去 n m 保證每個籃子中至少乙個雞蛋,然後指定乙個數x,要求...