1. 程式人生 > >海量數據處理面試題六大套路

海量數據處理面試題六大套路

無法 元素 分布式 com 種類 計算模型 數據庫索引 問題 結構

看了那麽多海量數據處理的文章,只有這篇對其套路進行了總結。

原文地址:https://www.cnblogs.com/ranjiewen/articles/6883723.html

內容不錯,就是排版差一點。於是轉載過來,略有修改。

所謂海量數據處理,無非就是基於海量數據上的存儲、處理、操作。
何謂海量,就是數據量太大,所以導致要麽是無法在較短時間內迅速解決,要麽是數據太大,導致無法一次性裝入內存。

那解決辦法呢?

針對時間,我們可以采用巧妙的算法搭配合適的數據結構,如Bloom filter/Hash/bit-map/堆/數據庫或倒排索引/trie樹。

針對空間,無非就一個辦法:大而化小,分而治之(hash映射),你不是說規模太大嘛,那簡單啊,就把規模大化為規模小的,各個擊破不就完了嘛。

至於所謂的單機及集群問題,通俗點來講,單機就是處理裝載數據的機器有限(只要考慮cpu,內存,硬盤的數據交互),而集群,機器有多輛,適合分布式處理,並行計算(更多考慮節點和節點間的數據交互)。

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

  • 分而治之/hash映射:針對數據太大,內存受限,只能把大文件化成(取模映射)小文件。
  • hash_map統計:當大文件轉化了小文件,那麽我們便可以采用常規的hash_map(key,value)來進行頻率統計。
  • 堆/快速排序:統計完了之後,便進行排序(可采取堆排序),得到次數最多的key。

多層劃分

多層劃分,其實本質上還是分而治之的思想,重在“分”的技巧上!

  • 適用範圍:第k大,中位數,不重復或重復的數字。
  • 基本原理及要點:因為元素範圍很大,不能利用直接尋址表,所以通過多次劃分,逐步確定範圍,然後最後在一個可以接受的範圍內進行。

Bloom filter/Bitmap

  • Bloom filter

    適用範圍:可以用來實現數據字典,進行數據的判重,或者集合求交集。

    基本原理:當一個元素被加入集合時,通過K個Hash函數將這個元素映射成一個位陣列(Bit array)中的K個點,把它們置為1。檢索時,我們只要看看這些點是不是都是1就(大約)知道集合中有沒有它了:如果這些點有任何一個0,則被檢索元素一定不在;如果都是1,則被檢索元素很可能在。

    Bloom Filter的這種高效是有一定代價的:在判斷一個元素是否屬於某個集合時,有可能會把不屬於這個集合的元素誤認為屬於這個集合(false positive)。因此,Bloom Filter不適合那些“零錯誤”的應用場合。而在能容忍低錯誤率的應用場合下,Bloom Filter通過極少的錯誤換取了存儲空間的極大節省。

  • Bitmap

    Bitmap就是用一個bit位來標記某個元素對應的Value, 而Key即是該元素。由於采用了Bit為單位來表示某個元素是否存在,因此在存儲空間方面,可以大大節省。

    Bitmap排序方法
    第一步,將所有的位都置為0,從而將集合初始化為空。
    第二步,通過讀入文件中的每個整數來建立集合,將每個對應的位都置為1。
    第三步,檢驗每一位,如果該位為1,就輸出對應的整數。

Bloom filter可以看做是對Bitmap的擴展。

Trie樹/數據庫/倒排索引

  • Trie樹
    適用範圍:數據量大,重復多,但是數據種類小可以放入內存。
    基本原理及要點:實現方式,節點孩子的表示方式。
    擴展:壓縮實現。
  • 數據庫索引
    適用範圍:大數據量的增刪改查。
    基本原理及要點:利用數據的設計實現方法,對海量數據的增刪改查進行處理。
  • 倒排索引(Inverted index)
    適用範圍:搜索引擎,關鍵字查詢。
    基本原理及要點:一種索引方法,被用來存儲在全文搜索下某個單詞在一個文檔或者一組文檔中的存儲位置的映射。

外排序

  • 適用範圍:大數據的排序,去重。
  • 基本原理及要點:外排序的歸並方法,置換選擇敗者樹原理,最優歸並樹。

Map Reduce

Map Reduce是一種計算模型,簡單的說就是將大批量的工作(數據)分解(MAP)執行,然後再將結果合並成最終結果(REDUCE)。這樣做的好處是可以在任務被分解後,可以通過大量機器進行並行計算,減少整個操作的時間。

  • 適用範圍:數據量大,但是數據種類小可以放入內存。
  • 基本原理及要點:將數據交給不同的機器去處理,數據劃分,結果歸約。

海量數據處理面試題六大套路