將任意長度的二進位制值對映為固定長度的二進位制串,這個對映的規則就是雜湊演算法,而通過原始資料對映之後得到的二進位制值串就是雜湊值.
hash演算法要求:
加密演算法 md5 (md5訊息摘要演算法) 和 sha(安全雜湊演算法) des(資料加密標準) aes(高階加密標準)
加密的目的就是防止原始資料洩漏,所以很難通過雜湊值反向推導原始資料
越複雜,越安全,相應的計算時間也就越長.
如果在海量的相簿中,搜尋一張圖是否存在
我們給每乙個取乙個唯一標識,或者說資訊摘要,從中取部分位元組,通過雜湊,用它作為唯一標識.
負載均衡演算法有很多,比如輪詢,隨機,加權輪詢等,如何實現會話沾滯的負載均衡演算法?
我們需要在乙個客戶端上,在一次繪畫中所有請求都路由在乙個伺服器上.
這樣表的內容是客戶端ip位址或者繪話id與伺服器編號的對映關係.客戶端發出的每次請求,都要先在對映表中查詢應該路由到伺服器編號,然後在請求編號對應的伺服器.
如果客戶端很多,對映表可能會很大,比較浪費記憶體空間
通過雜湊演算法,對客戶端ip位址或者繪畫id計算雜湊值,將取得的雜湊值域伺服器列表的大小進行去摸運算,最終得到的值就是應該被路由到的伺服器編號.
難點: 第乙個搜尋日誌很大,沒法放到一台及其的記憶體中
第二個難點是,如果只用一台機器來處理這麼巨大的資料,處理時間會很長
2.如何快速判斷是否在相簿中
假設現在我們的相簿中有 1 億張,很顯然,在單台機器上構建雜湊表是行不通的。因為單台機器的記憶體有限,而 1 億張構建雜湊表顯然遠遠超過了單台機器的記憶體上限
我們同樣可以對資料進行分片,然後採用多機處理。我們準備 n 臺機器,讓每台機器只維護某一部分對應的雜湊表。我們每次從相簿中讀取乙個,計算唯一標識,然後與機器個數 n 求餘取模,得到的值就對應要分配的機器編號,然後將這個的唯一標識和路徑發往對應的機器構建雜湊表。當我們要判斷乙個是否在相簿中的時候,我們通過同樣的雜湊演算法,計算這個的唯一標識,然後與機器個數 n 求餘取模。假設得到的值是 k,那就去編號 k 的機器構建的雜湊表中查詢。
現在網際網路那面對的都是海量的資料,和使用者,為了提高資料的讀取,寫入能力,一般都採用分布式的方法儲存資料,
比如分布式快取,所以乙個快取機器不夠,我們就需要將資料分布在多台機器,
所有的資料都要重新計算雜湊值,然後搬移到正確上,這樣就想相當於,快取中的資料一下子就都失效了.
假設我們有k個機器,資料的雜湊值的範圍是[0,max],我們將整個範圍劃分成m個小區間(m遠大於k)
每個機器負責m/k個小區間.當有新機器加入的時候,我們就將某幾個小區的資料,從原來的機器中搬移到新的機器中.
這樣,即不用全部重新雜湊,搬移資料.
KMP演算法入門 保證你會
下面開始簡單講解一下 模式串pattern abaabcac 我們該如何求它的next陣列呢?為了方便理解,我們陣列下標從1開始。相信你從網上其他很多資料對next陣列已經有一定的了解了,那麼我們直接上乾貨 首先,我們規定 next 1 0,next 2 1。即next第一位為0,next第二位為1...
SQL 包你會 如何計算字段?
7 建立計算字段 7.1 計算字段 儲存在資料庫表中的資料一般不是應用程式鎖需要的格式。我們需要從資料庫中檢索出的,經過轉換,計算,或者格式化過的資料。只有資料庫知道select語句中那些列是實際的表列,那些列是計算字段。確切的說,列指資料庫表中實際存在的列,不存在的返回列,經過計算,轉換格式化等形...
面試官在「逗」你系列 陣列去重你會幾種呀?
陣列去重是乙個老生常談的話題,也是前端童鞋在面試時的一道高頻題。本文將深入的探索陣列去重的原理及實現,為各位小夥伴提供多種可以反手 調戲 面試官的解決方案。話不多說,上去就來一梭子.一般我們都會建立臨時變數tmp,儲存不重複的元素 以陣列元素儲存或物件的鍵來儲存 遍歷待去重陣列arr,依次判斷tmp...