1. 程式人生 > >2015百度校招筆試杭州站

2015百度校招筆試杭州站

1:請描述資料結構中棧和佇列的區別。並說出3個操作。

答:棧先進後出。佇列先進先出。例如(pop() push() empty() back() front());

2:請描述一下C++中多型。舉個例子:

我學java的。但我記得多型應該是過載和重寫。

過載
Class A
{
    int foo(int a){...}
    int foo(int a,int b){...}
}

重寫
Class A
{
    int foo(int a){ return a}
}
Class B:A
{
    int foo(int a){return -a}
}

3:請描述下TCP四次揮手。並說下Time_wait的作用。

四次揮手的圖我畫對了。但發的包名稱亂說了。。。Time_wait我以為是等待時間。時間到了就預設關閉的樣子。。。

網上答案:
1。防止上一次連線中的包,迷路後重新出現,影響新連線
  (經過2MSL,上一次連線中所有的重複包都會消失)
2。可靠的關閉TCP連線
  在主動關閉方傳送的最後一個ack(fin) ,有可能丟失,這時被動方會重新發
  fin, 如果這時主動方處於CLOSED 狀態 ,就會響應rst 而不是ack。所以
  主動方要處於TIME_WAIT 狀態,而不能是CLOSED 。
TIME_WAIT 並不會佔用很大資源的,除非受到攻擊。
還有,如果一方send 或recv 超時,就會直接進入CLOSED 狀態

二程式設計題

1:寫個能將整篇文章單詞翻轉的程式。不允許使用任何函式。這個ACM題庫裡有不說了。

2:最長遞增子序列:

這道題當場傻逼了。不過印象裡是dp用LCS做的。後來一直傻逼。暴力做了。。。

其實是把源串排序用排序後的串和源串求LCS。傻逼了


3:寫個有限狀態機。獲得C++程式碼中所有的註解。


三:系統設計:設計一個同時線上使用者量為1億時。程式要隨時能夠更新遊戲的排名、使用者要能查到自己排名。

我設計:

1:根據使用者排名設計雜湊演算法。把1億使用者的資料對映到1W個檔案中。這樣每個檔案有1W的使用者。檔案加上排名索引。

2:讀寫分離。即存系統和讀系統分離成兩部分。

3:使用者讀取資料時先按索引查到使用者當前分數大致的排名檔案。再在檔案中進行查詢。

4:存,因為存不是特別好控制。插入檔案後更新所有檔案的索引。但可能某個檔案會變得特別大。當1個檔案的使用者量到達2W時候分裂檔案。

後記:以上東西不一定正確。但我覺得我一個渣渣大學的本科生。能與這麼多研究生在一個考場裡筆試還是蠻爽的。繼續找工作ing....