如果讓你來設計乙個最基本的web crawler,該如何設計?需要考慮的因素有哪些?
沒有標準答案。需要盡可能的回答出多一點的考慮因素。
這個問題是面試中常見的設計類問題。實際上如果你沒有做過相關的設計,想要回答出乙個讓面試官滿意的結果其實並不是很容易。該問題並不侷限於你在去面試搜尋引擎公司時可能會問到。這裡,我們從junior level和senior level兩個角度來解答這個問題。
1. 如何抽象整個網際網路
junior: 抽象為乙個無向圖,網頁為節點,網頁中的鏈結為有向邊。
senior: 同上。
2. 抓取演算法
junior: 採用bfs的方法,維護乙個佇列,抓取到乙個網頁以後,分析網頁的鏈結,扔到佇列裡。
senior: 採用優先佇列排程,區別於單純的bfs,對於每個網頁設定一定的抓取權重,優先抓取權重較高的網頁。對於權重的設定,考慮的因素有:1. 是否屬於乙個比較熱門的** 2. 鏈結長度 3. link到該網頁的網頁的權重 4. 該網頁被指向的次數 等等。進一步考慮,對於熱門的**,不能無限制的抓取,所以需要進行二級排程。首先排程抓取哪個**,然後選中了要抓取的**之後,排程在該**中抓取哪些網頁。這樣做的好處是,非常禮貌的對單個**的抓取有一定的限制,也給其他**的網頁抓取一些機會。
九章演算法 Google面試題 內積
描述 給定長度為n的a陣列,長度為k的b陣列 你可以從a陣列裡取k個數 規則如下 即每次可以從a陣列的最左邊或者最右邊取走乙個數,取走的數從陣列中移除 將取出的ai按取出的順序組成c陣列 求b與c的內積最大值 b與c內積為 i 0k 1bi ci 解釋1 a 1,4,3,2,5 b 1,2,3,4 ...
九章演算法面試題32 小球排序
有紅黃藍三色的小球若干排成一列,這些小球進行排序,請使用盡量少的空間和時間。假設順序為紅色黃色藍色。用兩根指標從頭開始遍歷,第一根指標遇到非紅色時停下,如果第二根指標找到第一根指標之後的第乙個紅色停下,交換兩根指標所指顏色。重複上述過程。直到第二根指標找不到任何紅色。此時第一根指標到最後都是黃色或藍...
九章演算法面試題33 陣列波峰
乙個陣列a 1.n 假設陣列中沒有任何相鄰兩數相等,滿足a 1 n。a i 被稱為波峰,當且僅當a i a i 1 並且a i a i 1 請找到陣列中的乙個波峰。假設陣列中存在相鄰相等的數,該怎麼做?根據條件a 1 a n 可知a中一定存在波峰。用二分法,選擇中點mid,如果a mid 是波峰,則...