優酷土豆2012 9 12校園招聘會筆試題
阿新 • • 發佈:2018-12-21
二、優酷是中國第一的視訊網站,每天有上億的視訊被觀看,現在公司請研發人員找出最熱門的視訊。該問題的輸入可以簡化為一個字串檔案,每一行都表示一個視訊id,然後要找出出現次數最多的前100個視訊id,將其輸出,同時輸出該視訊的出現次數。1、假設每天的視訊播放次數為3億次,被觀看的視訊數量為一百萬個,每個視訊ID的長度為20個位元組,限定使用的記憶體為1G。請先描述做法,再寫程式碼。2、假設每個月的視訊播放次數為100億次,被觀看的視訊數量為1億個,每個視訊ID的長度為20個位元組,一臺機器被限定使用的記憶體為1G。那麼想找這個月被播放次數最多的前100個視訊,應該怎麼做?請描述清楚可能的辦法。解析:海量資料的處理。無法一次性裝入記憶體,可先hash之分為多個檔案處理,堆或者Trie樹統計次數,求出每個檔案中的Top 100。歸併之求出總的top 100。 對於第二問:還可以hadoop mapReduce處理之。 首先統計每個視訊被觀看次數,得到<id, cnt>鍵值對,其中id為視訊id,cnt為視訊被觀看次數。 以cnt作為關鍵字建立最小堆。遍歷所有鍵值對,若堆的size小於100,則將鍵值對直接插入堆,否則比較鍵值對和堆頂元素大小,若cnt大於堆頂元素的cnt,則彈 出堆頂元素並將鍵值對插入堆。 對於第一問,由於id個數較少,統計部分可直接使用stl的map容器。 對於第二問,由於id個數太大,直接hash記憶體不夠,需要mapReduce。三、給你一個由n-1個整陣列成的未排序的序列,其元素都是1到n中的不同的整數。請寫出一個尋找序列中缺失整數的線性時間演算法。