百度的兩道筆試題

2021-09-30 08:32:23 字數 945 閱讀 9050

總結一些網上的回答:

第一題:

server pool: [ svr1, svr2, svr3, .....svrn]

用site和伺服器的數目做hash,比如

hash key(site)%n

然後url愛怎麼折騰都行。

如果需要, 可以把server pool的數目增大(pool中可以對server進行重用)

這就是slb

第二題:

一種回答

資料結構,請求的排程使用鍊錶陣列(陣列的每個節點指向鍊錶,陣列長度為16)來管理,操作結果使用雜湊表來快取(與請求的命令對應上)。

同一優先順序的請求放在鍊錶陣列的相應節點的鍊錶中,第乙個位元組改為存放請求次數(初始化為1),從前向後遍歷鍊錶,如果已經有同樣的請求在鍊錶中,則把這個請求的請求次數加1,並與它前面的節點比較,如果請求次數比前面的大,則向前移;如果沒有同樣的請求,則放在鍊錶末尾。

另一種回答

關鍵是實現乙個expiringmap,乙個會維護本身容積的hashmap,內部會有乙個執行緒定期檢查請求率最低的命令將會被刪除,以保證容器是在規定的大小內。expiringmap的key就是命令本身,值是包含命令請求數目和請求結果的物件,在每次返回結果後將會更新該map。

還有就是實現乙個priorityqueue,實現可以參考jdk的原始碼,如果用jdk的priorityqueue的話就只需要實現comparator介面,該介面可以根據比較先檢索expiringmap有無該命令,沒有的話在比較請求的第乙個位元組確定命令的優先順序。

所以會有乙個執行緒負責監聽請求,來了請求就放入到priorityqueue這個佇列中,插入的順序是按照comparator介面定義的順序。然後會有另乙個執行緒負責處理請求,每次從佇列中取走第乙個元素進行處理,如果在expiringmap中有該命令,直接取出結果返回。

乙個哥們的總結:

百度指令碼筆試題兩道

1 寫指令碼實現,可以用shell perl等。在目錄 tmp下找到100個以abc開頭的檔案,然後把這些檔案的第一行儲存到檔案new中。2 寫指令碼實現,可以用shell perl等。把檔案b中有的,但是檔案a中沒有的所有行,儲存為檔案c,並統計c的行數。解答思路 1 覺得用shell更好一些,如...

百度指令碼筆試題兩道

1 寫指令碼實現,可以用shell perl等。在目錄 tmp下找到100個以abc開頭的檔案,然後把這些檔案的第一行儲存到檔案new中。2 寫指令碼實現,可以用shell perl等。把檔案b中有的,但是檔案a中沒有的所有行,儲存為檔案c,並統計c的行數。解答思路 1 覺得用shell更好一些,如...

演算法 兩道百度筆試題

o n 和o 1 其實開始的時候我也是一頭霧水,在紙上畫畫之後發現,其實就是一道變形的插入排序。幸運的是這裡不需要比較大小,要比較大小的話時間複雜度是o n2 只用判斷正負,那時間複雜度就只要o n 了。如 3,1,2,1 3,4 其實就是把正數後面的第乙個負數 如 1 插到第乙個正數 1 的前面,...