云計算崗位面試其實并沒有很多人想的那么復(fù)雜,主要是電話面試,估計是面試的人比較少,簡單的問了一些技術(shù)問題,在問了有一些商務(wù)對接方面的問題第一輪,技術(shù)面的時候,問了云計算的3個層面,云計算現(xiàn)在發(fā)展情況,商務(wù)面的時候,問了商務(wù)對接如何有效進(jìn)行;第二輪,主要問做過什么項目,如何做項目,下面給大家分享幾個實用的云計算面試題知識。
創(chuàng)新互聯(lián)是一家專業(yè)提供興海企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計制作、做網(wǎng)站、html5、小程序制作等業(yè)務(wù)。10年已為興海眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
1、海量日志數(shù)據(jù),提取出某日訪問百度次數(shù)最多的那個IP。
IP是32位的,最多有個2^32個IP。同樣可以采用映射的方法,比如模1000,把整個大文件映射為1000個小文件,再找出每個小文中出現(xiàn)頻率最大的IP(可以采用hash_map進(jìn)行頻率統(tǒng)計,然后再找出頻率最大的幾個)及相應(yīng)的頻率。然后再在這1000個最大的IP中,找出那個頻率最大的IP,即為所求。
2、搜索引擎會通過日志文件把用戶每次檢索使用的所有檢索串都記錄下來,每個查詢串的長度為1-255字節(jié)。
假設(shè)目前有一千萬個記錄(這些查詢串的重復(fù)度比較高,雖然總數(shù)是1千萬,但如果除去重復(fù)后,不超過3百萬個。一個查詢串的重復(fù)度越高,說明查詢它的用戶越多,也就是越熱門。),請你統(tǒng)計最熱門的10個查詢串,要求使用的內(nèi)存不能超過1G。
第一步借用hash統(tǒng)計進(jìn)行預(yù)處理: 先對這批海量數(shù)據(jù)預(yù)處理(維護(hù)一個Key為Query字串,Value為該Query出現(xiàn)次數(shù),即Hashmap(Query,Value),每次讀取一個Query,如果該字串不在Table中,那么加入該字串,并且將Value值設(shè)為1;如果該字串在Table中,那么將該字串的計數(shù)加一即可。最終我們在O(N)(N為1千萬,因為要遍歷整個數(shù)組一遍才能統(tǒng)計處每個query出現(xiàn)的次數(shù))的時間復(fù)雜度內(nèi)用Hash表完成了統(tǒng)計;
第二步借用堆排序找出最熱門的10個查詢串:時間復(fù)雜度為N'*logK。維護(hù)一個K(該題目中是10)大小的小根堆,然后遍歷3百萬個Query,分別和根元素進(jìn)行對比(對比value的值),找出10個value值最大的query
最終的時間復(fù)雜度是:O(N) + N'*O(logK),(N為1000萬,N’為300萬)
或者:采用trie樹,關(guān)鍵字域存該查詢串出現(xiàn)的次數(shù),沒有出現(xiàn)為0。最后用10個元素的最小推來對出現(xiàn)頻率進(jìn)行排序。
3、有一個1G大小的一個文件,里面每一行是一個詞,詞的大小不超過16字節(jié),內(nèi)存限制大小是1M。返回頻數(shù)最高的100個詞。
第一步分而治之/hash映射到順序讀文件中,對于每個詞x,取hash(x)%5000,然后按照該值存到5000個小文件(記為x0,x1,...x4999)中。這樣每個文件大概是200k左右。如果其中的有的文件超過了1M大小,還可以按照類似的方法繼續(xù)往下分,直到分解得到的小文件的大小都不超過1M。
第二步hash統(tǒng)計對每個小文件,統(tǒng)計每個文件中出現(xiàn)的詞以及相應(yīng)的頻率(可以采用trie樹/hash_map等),并取出出現(xiàn)頻率最大的100個詞(可以用含100個結(jié)點的最小堆),并把100個詞及相應(yīng)的頻率存入文件,這樣又得到了5000個文件。
第三步堆/歸并排序就是把這5000個文件進(jìn)行歸并(也可以采用堆排序)的過程了。(如果內(nèi)存允許可以將這5000個文件中的所有元素合并起來,利用堆獲得top 100)
4、 給定a、b兩個文件,各存放50億個url,每個url各占64字節(jié),內(nèi)存限制是4G,讓你找出a、b文件共同的url?
可以估計每個文件安的大小為5G×64=320G,遠(yuǎn)遠(yuǎn)大于內(nèi)存限制的4G。所以不可能將其完全加載到內(nèi)存中處理。考慮采取分而治之的方法。
遍歷文件a,對每個url求取hash(url)%1000,然后根據(jù)所取得的值將url分別存儲到1000個小文件(記為a0,a1,...,a999)中。這樣每個小文件的大約為300M。
遍歷文件b,采取和a相同的方式將url分別存儲到1000小文件(記為b0,b1,...,b999)。這樣處理后,所有可能相同的url都在對應(yīng)的小文件(a0vsb0,a1vsb1,...,a999vsb999)中,不對應(yīng)的小文件不可能有相同的url。然后我們只要求出1000對小文件中相同的url即可。
求每對小文件中相同的url時,可以把其中一個小文件的url存儲到hash_set中。然后遍歷另一個小文件的每個url,看其是否在剛才構(gòu)建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。
5. 騰訊面試題:給40億個不重復(fù)的unsigned int的整數(shù),沒排過序的,然后再給一個數(shù),如何快速判斷這個數(shù)是否在那40億個數(shù)當(dāng)中?
方案1:申請512M的內(nèi)存(2^32/8=512MB),一個bit位代表一個unsigned int值。讀入40億個數(shù),設(shè)置相應(yīng)的bit位,讀入要查詢的數(shù),查看相應(yīng)bit位是否為1,為1表示存在,為0表示不存在。
方案2:因為2^32為40億多,所以給定一個數(shù)可能在,也可能不在其中;這里我們把40億個數(shù)中的每一個用32位的二進(jìn)制來表示假設(shè)這40億個數(shù)開始放在一個文件中。
然后將這40億個數(shù)分成兩類: 1. 最高位為0 2. 最高位為1
并將這兩類分別寫入到兩個文件中,其中一個文件中數(shù)的個數(shù)<=20億,而另一個>=20億(這相當(dāng)于折半了);與要查找的數(shù)的最高位比較并接著進(jìn)入相應(yīng)的文件再查找
再然后把這個文件為又分成兩類: 1.次最高位為0 2.次最高位為1
并將這兩類分別寫入到兩個文件中,其中一個文件中數(shù)的個數(shù)<=10億,而另一個>=10億(這相當(dāng)于折半了); 與要查找的數(shù)的次最高位比較并接著進(jìn)入相應(yīng)的文件再查找。 ....... 以此類推,就可以找到了,而且時間復(fù)雜度為O(logn)。