19 Feb 12 百度2012校招筆試題分析

2021-06-06 05:24:33 字數 3005 閱讀 9789

暑假的時候老大突然說讓我出一套筆試題,我本來還以為是給組內用的,所以我也沒花太多時間,憑印象簡單拼湊了幾個題,圓內隨機點和日誌那個應該算是比較經典的題目了,其他的都是我現想的。

1.  請寫出c++ stl中vector的相關問題。(20分)

(1)在呼叫成員函式push_back時,其內部的記憶體分配是如何進行的。(5分)

(2)呼叫成員函式clear時,內部是如何具體實現的,如果想將其記憶體釋放,該如何操作。(15分)

答題要點:

1、當vector發現預先分配的記憶體不夠用時,會申請乙個大小為當前記憶體更大的位址,並把資料拷貝到新位址中。

2、在呼叫clear時,vector並不釋放記憶體,只是在內部做乙個「空」的標記。如果想釋放記憶體可以參考如下方法:

vectorver(n,0);//需要釋放掉的vector

vector().swap(ver);(這樣便可釋放ver的記憶體)

2. 請指出下面c語言中foo函式的問題,此函式想統計字串中的字母a-z分別出現的個數。(10分)

12

3

4

5

6

7

8

9

10

11

12

13

14

15

16

void foo(char a[100],int cnt[256])

for(char c='a'; c<='z';++c)

}

intmain()

1. 假設我們有rand(s, t)函式,可以返回[s,t]之間的隨機小數。請問如何利用該函式在乙個半徑為r的圓內隨機n個點,並給出相應的時間複雜度分析。(15分)

假設乙個邊長為2r的正方形把圓包住,那麼可以呼叫rand(s, t)函式兩次得到正方形內的隨機點(x, y)。留下在圓內的隨機點即可,這樣可以保證隨即概率相等。時間複雜度可以按照圓和正方形的面積比得到:

o(n*(πr^2)/4r^2 )=o(n* π/4)

也可在極座標下通過線性隨機θ得到角度,隨機r*sqrt(rand(0,r))得到r。不過概率分析會略微複雜一些,關於此類問題,我準備近期專門寫乙個blog記錄,包括在圓內隨機點,在簡單多邊形內隨機點等等。

2.  為了分析使用者的行為,系統往往需要儲存使用者的一些query,但是因為query非常多,所以系統不能夠存下每一條。假設我們的系統每天只能夠儲存m個query,現在需要設計乙個演算法,對使用者時時請求的query進行隨機選擇m個,請給出乙個方案,使得每乙個query被抽中的概率盡量相等,也請附加相應的分析。需要注意的是,不到最後一刻你並不知道使用者的總請求量是多少。(25分)

參***:

假設每天總共有n個query,那麼目標是使得每乙個query被抽中的概率為m/n。

系統設計如下:

1.  開乙個大小為m的陣列k,前m個query分別依次放入陣列k[0..m-1]中。

2.  假設當前的query為第p個(p>m),隨機乙個[0-p)的整數i,如果i概率分析:

首先分析最後乙個,也就是第n個query。其被抽中的概率=其隨機數i小於m的概率,也就是m/n。再分析第n-1個query的概率。該query放入陣列的概率為m/(n-1)。其沒有被最後乙個query替換的概率為(n-1)/n。所以第n-1個query被抽中的概率為m/(n-1)*(n-1)/n=m/n。

依次類推,第n-2個query被抽中的概率為m/(n-2)*(n-2)/(n-1)*(n-1)/n=m/n。

即:每乙個query被抽中的概率均為m/n。

現在有乙個「伺服器-客戶端」的實際系統。正常的客戶端每1分鐘最多傳送一條請求到伺服器,伺服器需要做乙個異常客戶端行為的過濾系統。假設伺服器在某乙個時刻收到了客戶端a的一條請求,那麼1分鐘內的客戶端的任何其他請求都需要被過濾。現在知道每乙個客戶端都有乙個ipv6的位址可以作為其id。客戶端個數太多,以至於無法全部放到單台伺服器的記憶體hash表中。現在需要簡單設計一套系統,使得支援高效的過濾,可以使用多台機器,但要求使用的機器越少越好。請把關鍵的設計和思想用圖表和**的方式表現出來。

雖然客戶端的id太多,無法放入到記憶體中,但是1分鐘內請求伺服器的id卻不會太多。可以根據這個條件進行設計。

申請佇列q, hash表h。h記錄了每乙個請求的到達時間。伺服器收到請求之後:

while (隊首的id請求到達時間超過1分鐘)

出隊,並且清空hash表h中的相關記錄

if     客戶端id存在於h中then

過濾此請求。

else

將此id放入q隊尾

記錄時間到h中,即h[id]=now()。

另外還有一些開放的設計方法比如簡單分布式設計、檔案索引、等等

filed in

iprogramming

美團校招,百度校招經歷

美團 國慶剛過完後差不多10.11號美團宣講然後下午4 30筆試,整個宣講會非常枯燥,是由一位經理在上面講,非常枯燥。卷子除了附加題以外主要是8道演算法程式設計題,乙個半小時,我大概做了5題就交了。題目現在記的不是很清楚,第一題用到二分法,第二題是陣列資料分成三段,還有多執行緒一題,還有奇偶排序等等...

美團校招,百度校招經歷

美團 國慶剛過完後差不多10.11號美團宣講然後下午4 30筆試,整個宣講會非常枯燥,是由一位經理在上面講,非常枯燥。卷子除了附加題以外主要是8道演算法程式設計題,乙個半小時,我大概做了5題就交了。題目現在記的不是很清楚,第一題用到二分法,第二題是陣列資料分成三段,還有多執行緒一題,還有奇偶排序等等...

百度校招 等待百度的那些日子裡

2013年10月11日下午5 00 天津晉濱國際大酒店 2013年10月13日上午11 00 天津晉濱國際大酒店 總結下吧 一方面,從技術準備上來講,自己準備得可能不足,尤其是關於linux中程序操作的一些指令 如ps,jobs,awk 了解不夠深入,以及資料庫主從機的同步啊等。另一方面,自己處事不...