hash演算法有還哪些用途? hash演算法得到的hash值不可逆的哦
1、安全加密
2、唯一性校驗
3、資料驗證
4、雜湊函式
5、負載均衡
6、資料分片
7、分布式儲存
問題
負載均衡:
在nginx中有負載均衡的演算法,有隨機、輪巡、加權、源位址hash法(通過hash演算法實現,得到機器編號)
資料分片:
主要用到了hash演算法
通過hash演算法得到乙個雜湊值,通過對某個值進行取模得到最終結果
的結果。
2、如何判斷乙個是否在相簿中?
假設現在我們的相簿中有 1 億張,很顯然,在單台機器上構建雜湊表是行不通的。因 為單台機器的記憶體有限,而 1 億張構建雜湊表顯然遠遠超過了單台機器的記憶體上限。
我們同樣可以對資料進行分片,然後採用多機處理。我們準備 n 臺機器,讓每台機器只維 護某一部分對應的雜湊表。我們每次從相簿中讀取乙個,計算唯一標識,然後與機 器個數 n 求餘取模,得到的值就對應要分配的機器編號,然後將這個的唯一標識和圖 片路徑發往對應的機器構建雜湊表。
當我們要判斷乙個是否在相簿中的時候,我們通過同樣的雜湊演算法,計算這個的唯 一標識,然後與機器個數 n 求餘取模。假設得到的值是 k,那就去編號 k 的機器構建的散 列表中查詢。
現在,我們來估算一下,給這 1 億張構建雜湊表大約需要多少臺機器。
雜湊表中每個資料單元包含兩個資訊,雜湊值和檔案的路徑。假設我們通過 md5 來計 算雜湊值,那長度就是 128 位元,也就是 16 位元組。檔案路徑長度的上限是 256 位元組,我 們可以假設平均長度是 128 位元組。如果我們用煉表法來解決衝突,那還需要儲存指標,指 針只占用 8 位元組。所以,雜湊表中每個資料單元就占用 152 位元組(這裡只是估算,並不准 確)。
假設一台機器的記憶體大小為 2gb,雜湊表的裝載因子為 0.75,那一台機器可以給大約 1000 萬(2gb*0.75/152)張構建雜湊表。所以,如果要對 1 億張構建索引,需 要大約十幾台機器。在工程中,這種估算還是很重要的,能讓我們事先對需要投入的資源、 資金有個大概的了解,能更好地評估解決方案的可行性。
實際上,針對這種海量資料的處理問題,我們都可以採用多機分布式處理。借助這種分片的 思路,可以突破單機記憶體、cpu 等資源的限制。
關鍵字搜尋查詢列表
從乙個我常用的面試題,也是真實需求開始聊起 你需要在前端展示 5000 條甚至更多的資料,每一條資料的資料結構是乙個物件,裡面有格式各樣的屬性。每個屬性的值又可以是基本型別,物件,甚至陣列。這裡的物件或者陣列內部的元素又可以繼續包含物件或者陣列並且允許無限巢狀下去。比如 age 23,roles d...
linux搜尋關鍵字檢視日誌
1 檢視日誌 前 n行 cat 檔名 head n 數量 demo cat test.log head n 200 檢視test.log前200行 2 檢視日誌 尾 n行 方法一 cat 檔名 tail n 數量 demo cat test.log tail n 200 檢視test.log倒數20...
Python查詢涉密關鍵字檔案
功能 remove 資料夾是刪除當前檔案下的檔案 要實現乙個查詢關鍵字或者涉密檔案,找到然後刪除它自己定義乙個關鍵字,並且刪除它 print os.remove aa.html 檢視當前檔案方法 getcmd print os.path print os.path.abspath print os....