一些面試題收集

2021-07-16 17:06:45 字數 2183 閱讀 2741

1、const的實現機制

const修飾指標時,如果const位於』* 『的左側,則const就是用來修飾指標所指向的變數,即指標指向乙個常量;

如果const位於』* 『的右側,const就是修飾指標本身,即指標本身是常量,指標不能改變。

define巨集定義是在預處理階段直接展開的,不會有任何檢查機制。而const是在編譯期實現的,會進行編譯期檢查

const的實現機制:

1)const只會在編譯期進行檢查,而不會有執行期保護。

2)編譯器會檢查const變數有沒有被修改,如果有**嘗試修改乙個const變數,編譯器會報錯。

3)然後在使用了const變數的地方直接用初始值替換,類似巨集定義  

int main()  

2、在乙個檔案中有 10g 個整數,亂序排列,要求找出中位數。記憶體限制為 2g。

不妨假設10g個整數是64bit的。,2g記憶體可以存放256m個64bit整數。

我們可以將64bit的整數空間平均分成256m個取值範圍,即以最高位元組來進行分類統計,用2g的記憶體對每個取值範圍內出現整數個數進行統計。這樣遍歷一次10g整數後,我們便知道中數在哪個範圍內出現,以及這個範圍內總共出現了多少個整數。

如果中數所在範圍出現的整數比較少,我們就可以直接對這個範圍內的整數進行排序,找到中數。如果這個範圍內出現的整數比較多,我們還可以採用同樣的方法將此範圍再次分成多個更小的範圍。

3、有1到10w這10w個數,去除2個並打亂次序,如何找出那兩個數?

可以通過bitmap的方式統計。乙個位元組有8個bit,可以表示8個數,10w個數則需要(100 000 / 8 =12500)位元組,如果乙個整數是32bit = 4位元組,那麼最多需要12500 / 4 = 3125個整數。

因此申請3125個整數的陣列,將陣列置0,然後遍歷所有資料,並將對應bit位置1.再依次遍歷陣列中的每個數,如果對應bit位為0,則說明該數缺失

4、1024! 末尾有多少個0?

末尾0的個數取決於乘法中因子2和5的個數。顯然乘法中因子2的個數大於5的個數,所以我們只需統計因子5的個數。

是5的倍數的數有: 1024 / 5 = 204個

是25的倍數的數有:1024 / 25 = 40個

是125的倍數的數有:1024 / 125 = 8個

是625的倍數的數有:1024 / 625 = 1個

所以1024! 中總共有204+40+8+1=253個因子5,也就是說1024! 末尾有253個0。

5、判斷乙個數是不是2的n次冪

如果乙個數是2的整數次冪,那麼該數的二進位制中只有最高位為1,其它位都為0

6、設計乙個洗牌的演算法,並說出演算法的時間複雜度。

第一種: for i:=1 to n do swap(a[i], a[random(1,n)]); // 湊合,但不是真正隨機

第二種: for i:=1 to n do swap(a[i], a[random(i,n)]); // 真正的隨機演算法

其中,random(a,b)函式用於返回乙個從a到b(包括a和b)的隨機整數。演算法複雜度是o(n)

7、socket程式設計,如果client斷電了,伺服器如何快速知道?

使用定時器(適合有資料流動的情況);

使用socket選項so_keepalive(適合沒有資料流動的情況);

8、socket在什麼情況下可讀?

1. 接收緩衝區有資料,一定可讀

2. 對方正常關閉socket,也是可讀 (收到fin,但是如果呼叫read,讀到的資料為0,此時應該關閉socket)

3. 對於偵聽socket,有新連線到達也可讀(同樣可以讀到的資料為空,此時應該呼叫accept獲取連線)

9、 以下**輸出結果:

#include 

#include

int main(void)

本題考標準io緩衝,標準出錯是不帶緩衝的。如果是涉及終端裝置的其他流,則他們是行緩衝的;否則是全緩衝的。

printf是標準io的乙個,格式化列印到標準輸出,在這裡是行緩衝,那麼沒有遇到換行符也就是『\n』或者沒有強制flush, 則不會輸出。

execl是建立新的可執行程式映像,一旦成功就不會返回了,只有在出錯的情況會返回1.

所以以上的程式沒有列印printf的內容,直接執行/bin/sh,因此沒有輸出

收集整理的一些面試題

1free 函式 問 下面的程式會在使用者輸入 freeze 的時候出問題,而 zebra 則不會,為什麼?include int main int argc,char argv else if argc 1 else if ptr z free ptr return 0 答 這裡的問題在於,會 通...

一些面試題

q 您在什麼情況下會用到虛方法?它與介面有什麼不同?a 當在繼承類中想重寫某一方法時會用到虛方法 虛方法是類的成員函式,介面相當於抽象類.q override與過載有什麼區別?a override 就是覆蓋的意思,覆蓋父類的同名方法,而過載則是通過參數列來呼叫方法.q 值型別與引用型別有什麼區別?a...

一些面試題

1.如何檢視埠8080的程序 netstat anp grep 8080 lsof i 8080 2.在 tmp目錄下建立test.txt檔案,內容為 hello,world 用乙個命令寫出來。echo hello,world tmp test.txt 3.敘述下列服務的預設埠號。ftp 20,21...