一些面試題

2021-08-09 07:56:11 字數 1155 閱讀 7688

1.  給你乙個長度為n的鍊錶。n很大,但你不知道n有多大。你的任務是從這n個元素中隨機取出k個元素。你只能遍歷這個鍊錶一次。你的演算法必須保證取出的元素恰好有k個,且它們是完全隨機的(出現概率均等)。

解:先選中前k個, 從第k+1個元素到最後乙個元素為止, 以k/i (i=k+1, k+2,...,n) 的概率選中第i個元素,並且隨機替換掉乙個原先選中的元素, 這樣遍歷一次得到k個元素, 可以保證完全隨機選取。這個演算法叫做蓄水池抽樣,在某門課上聽到的,證明起來也不是很複雜。

證:最後乙個元素選中概率=k/n,倒數第2個元素選中概率=(k/n-1)*(1-(k/n)*(1/k))=k/n,以此類推……

2.  如何從n個排序的物件中選擇乙個,但實現不知道n的大小

解:總是選擇第乙個物件,並使用1/2的概率選擇第二個物件替換,使用1/3的概率選擇第三個物件去替換,以此類推。在過程結束時,每個對像被選中的概率都是1/n。

3.  給你乙個陣列a[1..n],請你在o(n)的時間裡構造乙個新的陣列b[1..n],使得b[i]=a[1]*a[2]*...*a[n]/a[i]。你不能使用除法運算。

解:從前往後掃一遍,然後從後往前再掃一遍。也就是說,線性時間構造兩個新陣列,p[i]=a[1]*a[2]*...*a[i],q[i]=a[n]*a[n-1]*...*a[i]。於是,b[i]=p[i-1]*q[i+1]。

4.linux的基本命令:

在終端,輸入ps命令來檢視程序及對應的pid。

ps命令極為常用,用於顯示程序資訊,引數可省略:

-aux    以bsd風格顯示程序 常用

-efh    以system v風格顯示程序

-e , -a 顯示所有程序

a         顯示終端上所有使用者的程序

x         顯示無終端程序

u         顯示詳細資訊

f          樹狀顯示

w        完整顯示資訊

l          顯示長列表

kill 

通過前面的內容,先檢視要關閉的程序及對應的pid。然後在終端輸入sudo kill pid即可。kill命令有很多引數選項,其中:

kill -9  pid    #用來強制終止指定pid

程序(推薦使用此方法)

kill -9 -1 #終止你擁有的全部程序

一些面試題

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...

一些面試題

1,乙個整數數列,元素取值可能是1 n n是乙個較大的正整數 中的任意乙個數,相同數值不會重複出現。設計乙個演算法,找出數列中符合條件的數對的個數,滿足數對中兩數的和等於n 1。最直接也最清晰的做法就是排序然後兩邊往中間同步走,o nlogn o n 不過既然相同數值不重複出現,還對空間沒啥說的,那...