雜湊演算法:將任意長度的二進位制值串對映為固定長度的二進位制值串,這個對映的規則就是雜湊演算法,而通過原始資料對映之後得到的二進位制值串就是雜湊值。
hash演算法應用
安全加密、
md5(md5 message-digest algorithm,md5 訊息摘要演算法)
sha(secure hash algorithm,安全雜湊演算法)
des(data encryption standard,資料加密標準)
aes(advanced encryption standard,高階加密標準)
鴿巢原理(也叫抽屜原理)。這個原理本身很簡單,它是說,如果有 10 個鴿巢,有 11 只鴿子,那肯定有 1 個鴿巢中的鴿子數量多於 1 個,換句話說就是,肯定有 2 只鴿子在 1 個鴿巢內。這是hash衝突的原因。
唯一標識
給每乙個取乙個唯一標識,或者說資訊摘要。
從的二進位製碼串開頭取 100 個位元組,從中間取 100 個位元組,從最後再取 100 個位元組,然後將這 300 個位元組放到一塊,通過雜湊演算法(比如 md5),得到乙個雜湊字串,用它作為的唯一標識。
資料校驗雜湊函式
雜湊函式中用到的雜湊演算法,更加關注雜湊後的值是否能平均分布,也就是,一組資料是否能均勻地雜湊在各個槽中。
脫庫問題
維護乙個常用密碼的字典表,把字典中的每個密碼用雜湊演算法計算雜湊值,然後拿雜湊值跟脫庫後的密文比對。如果相同,基本上就可以認為,這個加密之後的密碼對應的明文就是字典中的這個密碼。
針對字典攻擊,我們可以引入乙個鹽(salt),跟使用者的密碼組合在一起,增加密碼的複雜度。
負載均衡
輪詢、隨機、加權輪詢
對客戶端 ip 位址或者會話 id 計算雜湊值,將取得的雜湊值與伺服器列表的大小進行取模運算,最終得到的值就是應該被路由到的伺服器編號。
(標籤寫,kvu聯合取md5,取模,選chan,接收者輪詢從dbpool取連線,乙個連線一次發一批請求)
資料分片分布式儲存
海量的資料快取到多台機器上。通過雜湊演算法對資料取雜湊值,然後對機器個數取模,這個最終值就是應該儲存的快取機器編號。
一致性雜湊演算法
假設我們有 k 個機器,資料的雜湊值的範圍是[0, max]。我們將整個範圍劃分成 m 個小區間(m 遠大於 k),每個機器負責 m/k 個小區間。當有新機器加入的時候,我們就將某幾個小區間的資料,從原來的機器中搬移到新的機器中。這樣,既不用全部重新雜湊、搬移資料,也保持了各個機器上資料數量的均衡。
每日演算法 day 25
那些你早出晚歸付出的刻苦努力,你不想訓練,當你覺的太累了但還是要咬牙堅持的時候,那就是在追逐夢想,不要在意終點有什麼,要享受路途的過程,或許你不能成就夢想,但一定會有更偉大的事情隨之而來。mamba out 2020.3.10 貪心問題注意策略得轉化 別要死於固定得暴力形式,雖然是貪心思想實現起來也...
day25 類的特殊成員
類後面 括號自動執行 init 方法,物件後面 括號自動執行 call 方法。class foo def init self print 123 def call self,args,kwargs print 234 obj foo obj 也可以這樣寫 class foo def init sel...
雜湊演算法(下) 雜湊演算法在分布式系統中有哪些應用?
本文是學習演算法的筆記,資料結構與演算法之美 極客時間的課程 這一節來說說雜湊演算法的另外三種應用 負載均衡 資料分片 分布式儲存。其實這三個應用都跟分布式系統有關。今天就看一下,雜湊演算法是如何解決這些分布式問題的。我們知道,負載均衡演算法很多,比如輪詢 隨機 加權輪詢等。那如何才能實現乙個會話粘...