一致性hash演算法

2021-06-22 18:11:11 字數 2108 閱讀 4026

## july部落格16章開始

# 第一題:全排列,輸入乙個字串,列印出該字串中字元的所有排列

1. 個人思路:

- 回溯法建立的排序樹

2. july部落格:

- 遞迴實現,依次固定第乙個字母,後面的交換,和上面描述的使用回溯法相似

- c++ stl 演算法 next_permutation的思想,關於next_permutation函式的解釋,鏈結裡的例項和july的解釋一起看會更好。

3. 拓展

- 求組合而不是求排列,個人思路:乙個乙個刪除

# 第二題:乙個台階有n級,一次可以跳一級,也可以跳二級,有多少種跳法,給出複雜度

1. 個人思路:

- 無2. july思路:

- 遞迴,寫出遞推公式,轉化為fibonacci數列問題

- 此問題的兩個拓展問題:1. 遞迴方法計算複雜度過大,嘗試用遞推方法解決,參見遞迴與遞推的區別

- 上面的遞推可以在 o(n)時間複雜度內解決fibonacci數列,事實上從個人角度,遞推是最適合解法。

- 2. 在 o(logn)時間複雜度內解決fibonacci數列問題

# 第三題:奇偶排序,調整陣列順序使得奇數在偶數前面,要求時間複雜度o(n)

1. 個人思路:

- 無2. july思路:

- 要求時間複雜度是o(n),考慮一下快排,可以set兩個指標,想快排一樣將找到奇數和偶數對調。時間複雜度符合

3. 拓展問題:乙個未排序陣列,有正負數,重新排序使得負數在正數前面,並且要求不改變原來的正負數之間相對順序

要求時間複雜度o(n),空間複雜度o(1),未有滿意答案

- 個人思路:像完美洗牌那樣?

# 第四題:在乙個字串中找到第乙個只出現一次的字元,abaccdeff,輸出b

1. 個人思路:

- 先找到只出現一次,然後找出第乙個,建立伴隨陣列,每個字元乙個伴隨陣列,記錄出現次數,出現次數為1,而且第乙個    出現,畢。

2. july部落格:

- 思路和個人思路相同。

# 第五題:一致性hash演算法,手機朋友網有n個伺服器,為了方便使用者會快取資料,具體描述劍二十章。

1. 個人思路:

- 無2. july部落格:

- 模餘方法:實在看出穩定性在**。。。

- 一致性hash演算法,重頭戲來了:

- 伺服器負載均衡演算法:

- 輪循演算法(round robin)

- 雜湊演算法(hash)(最常用)

- 最少連線演算法(least connection)

- 響應速度演算法(response time)

- 加權法(weighted)

- hash演算法使用場景

- n臺伺服器提供快取服務,需要對伺服器進行負載均衡,將請求平均發到每台伺服器上,每台伺服器負責1/n

- 對hash結果取餘數:hash() mod n

- 致命問題:一台機器宕機, 會有 (n-1)/n 的伺服器快取資料需要重新計算,新增一台機器會有n/(n+1)的伺服器的緩               存資料需要進行重新計算。

- 在memcached , key-value store, bittorrent dht, lvs中都採用了consistent hashing 演算法,

- 這是分布式系統負載均衡的首選演算法。

- 描述:

1. consistent hashing

2. 基本場景:和上面的宕機問題基本一致

3. hash演算法,單調性以及平衡性

4. consistent hashing 演算法的原理

- 環形hash空間:

- 將物件對映到hash空間

- 把cache對映到hash空間

- 把物件對映到cache

- 考察cache的變動

1. 移除cache

2. 新增cache

5. 虛擬節點

- 平衡性:平衡性是指盡量是所有結果平均分布到所有的cache中,使所有的緩衝空間得到利用

- 新增虛擬節點:virtual node,是實際節點在hash空間的複製品(replica)

- 物件對映到虛擬節點

- 虛擬節點對映到節點

## 後記

一致性hash演算法 面試必備 一致性hash演算法

最近公司在招人,我們準備的問題中有一道是關於一致性hash演算法的問題,只有一些面試者能夠回答上來,而且答的也不是很全面,有的面試者只是聽說過,有的連聽都沒聽過,下面我把一致性hash演算法整理一下分享給大家 一致性雜湊演算法在1997年由麻省理工學院的karger等人在解決分布式cache中提出的...

一致性hash演算法虛擬節點 一致性hash演算法

hash 演算法也叫做雜湊演算法,他可以讓任意長度的資料m對映成為長度固定的值h。hash演算法的第乙個作用就是資料的快速儲存與查詢。寫過程式的人都知道,基本上主流的程式語言裡面都有個資料結構叫做map dictionary或者 hash table 它是根據key來直接訪問結果的資料結構。key的...

一致性hash演算法

一致性雜湊演算法在1997年由麻省理工學院提出的一種分布式雜湊 dht 實現演算法,設計目標是為了解決網際網路中的熱點 hot spot 問題,初衷和carp十分類似。一致性雜湊修正了carp使用的簡 單雜湊演算法帶來的問題,使得分布式雜湊 dht 可以在p2p環境中真正得到應用。一致性hash演算...