海量資料面試題分析

2021-08-21 19:35:54 字數 3905 閱讀 6494

轉知乎,手敲一遍,加深記憶

箴言:無論是這些海量資料處理面試題也好,還是演算法也好,面試時,70~80%的人不是倒在這兩方面,而是倒在基礎之上(諸如語言,資料庫,作業系統,網路協議等等),所以,無論任何時候,基礎最重要,沒了基礎,便什麼都不是。

何謂海量資料處理?

無非就是基於海量資料上的儲存,處理,操作。海量就是資料量太大。導致要麼無法再較短時間解決,要麼是資料太大,無法一次性裝入記憶體。

解決方案:

針對空間:無非就是大而化小,分而治之(hash對映),不就是規模大嘛,我就化成小的,各個擊破。

關於單機和集群問題:

通過另一篇:big data processing,知道,處理海量資料無非就是:

分而治之/hash對映 + hash統計 + 堆/快速/歸併排序

雙層桶劃分

bloom filter/bitmap

trie樹/資料庫/倒排索引

外排序分布式處理之hadoop/mapreduce

本文第一部分:從set/map到hashtable/hash_map/hash_set,介紹set/map/multiset/multimap以及hash_set/hash_map。hash_mulitset/hash_multimap之間的區別,這是基礎,基礎才是根本!!!

第一部分:從set/map到hashtable/hash_map/hash_set

stl容器分為:

序列式容器

關聯式容器:

又分為set集合和map對映表兩大類。

以及這兩大類的衍生體:multiset多鍵集合和multimap多鍵對映表,這些容器在底層都是rb-tree完成。

此外還有三類關聯式容器,如hashtable雜湊表,以及以hashtable為底層機制完成的hash_set雜湊集合和hash_map雜湊對映表hash_multiset雜湊多鍵集合和hash_multimap雜湊多鍵對映表

總結:set/map/multiset/multimap都內含乙個rb-tree

hash_set/hash_map/hash_multiset/hash_multimap都內含乙個hashtable

所謂的關聯式容器,類似關聯式資料庫,每筆資料或者每個元素都有乙個key和乙個實值value,也就是key-value鍵值對。

當元素被插入到關聯式容器中,容器內部結構rb-tree、hashtable便按照其鍵值大小,以某種規則將這個元素置於適當的位置

set/map:

相同:所有元素都會根據元素的鍵值自動被排序,因為set/map兩者的所有各種操作,都只是轉而呼叫rb-tree的操作行為,不過,兩者都不允許兩個元素有相同的鍵值

不同::set的元素不像map那樣可以同時擁有實值(value)和鍵值(key),set元素的鍵值就是實值,實值就是鍵值,而map的所有元素都是pair,同時擁有實值(value)和鍵值(key),pair的第乙個元素被視為鍵值,第二個元素被視為實值。

multiset/multimap:

他們的特性及用法和set/map完全相同,唯一的差別就在於它們允許鍵值重複,即所有的插入操作基於rb-tree的insert_equal()而非insert_unique()。

hash_set/hash_map/hash_multiset/hash_multimap:

hash_set/hash_map,兩者的一切操作都是基於hashtable之上。不同的是,hash_set同set一樣,同時擁有實值和鍵值,且實質就是鍵值,鍵值就是實值,而hash_map同map一樣,每乙個元素同時擁有乙個實值(value)和乙個鍵值(key),所以其使用方式,和上面的map基本相同。但由於hash_set/hash_map都是基於hashtable之上,所以不具備自動排序功能。為什麼?因為hashtable沒有自動排序功能。

hash_multiset/hash_multimap的特性與上面的multiset/multimap完全相同,唯一的差別就是它們hash_multiset/hash_multimap的底層實現機制是hashtable(而multiset/multimap,上面說了,底層實現機制是rb-tree),所以它們的元素都不會被自動排序,不過也都允許鍵值重複。

綜上,說白了,什麼樣的結構決定其什麼樣的性質,因為set/map/multiset/multimap都是基於rb-tree之上,所以有自動排序功能,而hash_set/hash_map/hash_multiset/hash_multimap都是基於hashtable之上,所以不含有自動排序功能,至於加個字首multi_無非就是允許鍵值重複而已。

第二部分、處理海量資料問題之六把密匙

2、尋找熱門查詢,300萬個查詢字串中統計最熱門的10個查詢

3、有乙個1g大小的乙個檔案,裡面每一行是乙個詞,詞的大小不超過16位元組,記憶體限制大小是1m。返回頻數最高的100個詞。

4、海量資料分布在100臺電腦中,想個辦法高效統計出這批資料的top10。

5、有10個檔案,每個檔案1g,每個檔案的每一行存放使用者的query,每個檔案的query都可能重複。要求你按照query的頻度排序。

6、 給定a、b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4g,讓你找出a、b檔案共同的url?

7、怎麼在海量資料中找出重複次數最多的乙個?

9、乙個文字檔案,大約有一萬行,每行乙個詞,要求統計出其中最頻繁出現的前10個詞,請給出思想,給出時間複雜度分析。

10. 1000萬字串,其中有些是重複的,需要把重複的全部去掉,保留沒有重複的字串。請怎麼設計和實現?

11. 乙個文字檔案,找出前10個經常出現的詞,但這次檔案比較長,說是上億行或十億行,總之無法一次讀入記憶體,問最優解。

12. 100w個數中找出最大的100個數。

多層劃分:

其實本質上還是分而治之的思想,重在「分」的技巧上!

適用範圍:

第k大,中位數,不重複或重複的數字

基本原理及要點:

因為元素範圍很大,不能利用直接定址表,所以通過多次劃分,逐步確定範圍,然後最後在乙個可以接受的範圍內進行。

13、2.5億個整數中找出不重複的整數的個數,記憶體空間不足以容納這2.5億個整數。

14、5億個int找它們的中位數。

mapreduce是一種計算模型,簡單的說就是將大批量的工作(資料)分解(map)執行,然後再將結果合併成最終結果(reduce)。這樣做的好處是可以在任務被分解後,可以通過大量機器進行平行計算,減少整個操作的時間。但如果你要我再通俗點介紹,那麼,說白了,mapreduce的原理就是乙個歸併排序

經過上面這麼多海量資料處理面試題的轟炸,我們依然可以看出這類問題是有一定的解決方案/模式的,所以,不必將其神化。然這類面試題所包含的問題還是比較簡單的.

無論是這些海量資料處理面試題也好,還是演算法也好,面試時,70~80%的人不是倒在這兩方面,而是倒在基礎之上(諸如語言,資料庫,作業系統,網路協議等等),所以,無論任何時候,基礎最重要,沒了基礎,便什麼都不是。

海量資料面試題

海量資料面試題 1 給個超過100g的logfile,log中存著ip位址,設計演算法找到出現次數最多的ip位址?第一題 首先我們的思路就是利用雜湊進行檔案的切分,我們把100g大小的logfile分為1000份,那麼下來差不多沒乙個檔案就是100m左右,然後再利用雜湊函式除留餘數的方法分配到對應的...

海量資料面試題

給乙個超過100g大小的log le,log中存著ip位址,設計演算法找到出現次數最多的ip位址?思路 1 使用雜湊切割 將100g大小的檔案分成1000分小檔案 2 使用 hashstr ip 1000 將每個檔案上的ip位址對映到雜湊表中 然後將ip位址轉化成整數形式 3 使用key value...

海量資料面試題

方案1 可以估計每個檔案安的大小為50g 64 320g,遠遠大於記憶體限制的4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。s 遍歷檔案a,對每個url求取clip image002,然後根據所取得的值將url分別儲存到1000個小檔案 記為clip image004 中。這樣...