您現在的位置是:首頁 > 網路遊戲首頁網路遊戲
「Java面試」大廠面試真題你真的會了嗎?簡述雪花演算法的實現原理
- 2022-11-29
時間毫秒怎麼表示
一個工作了4年的粉絲,去京東面試,遇到了這樣一個問題
”請你簡述雪花演算法的實現原理”
螢幕前的小夥伴,如果你遇到這個問題,知道怎麼回答嗎?
大家好,我是Mic,咕泡科技聯合創始人
下面來分析一下面試官的考察意圖。
考察目的
雪花演算法是一個全域性唯一演算法,它主要出現在像分庫分表場景中作為業務主鍵或者作為一些像訂單號這類的id生成器。
這個問題就是考察求職者對於雪花演算法的瞭解。
而且面試官問的是實現原理,那麼意味著要至少要說明雪花演算法的整體設計、以及實現方式。
問題分析
雪花演算法一般用來實現全域性唯一的業務主鍵,解決分庫分表之後主鍵id的唯一性問題。
所以單純就全域性唯一性質來說,有很多的實現方式,比如
UUID
Redis的原子遞增
資料庫全域性表的自增id
等等
但是在實際應用中,還需要滿足有序遞增、高效能、帶時間戳等。
而雪花演算法就是一個比較符合這類特徵的全域性唯一演算法,在美團的Leaf元件中也有用到。
它是由一個64位的long型別數字組成,分為四個部分。
第一部分,用1個bit表示符號位,一般情況下是0
第二部分,用41個bit來表示時間戳,使用系統時間的毫秒數
第三部分,用10個bit來記錄工作機器id,這樣就可以保證在多個伺服器上生成的id的唯一性。
如果存在跨機房部署,我們還可以把它分成兩個5bit,前面5個bit可以表示機房id,後面5個bit可以表示機器id。
第四個部分,用12個bit表示序列號,表示一個遞增序列,用來記錄同毫秒內產生的不同id
雪花演算法,就是根據這四個部分的規則,生成對應的bit位資料,然後組裝在一起形成一個全域性唯一id。
高手:
雪花演算法是一種生成分散式全域性唯一ID的演算法,它會得到一個64位長度的long型別資料。
其中這64位的資料,由4個部分組成
第一個bit位是符號位,因為id不會是負數,所以它一般是0
接著用41個bit位來表示毫秒單位的時間戳
再用10個bit位來表示工作機器id
最後12個bit位表示遞增的序列號
把這64個bit位拼接成一個long型別的數字,就是雪花演算法的實現。
總結
大家知道怎麼回答了嗎?
如果你喜歡我的作品,記得點贊收藏加關注哦!!!
需要高手面試文件合集(附贈大廠內部十萬字面試文件)或者有不懂的技術面試題想諮詢的小夥伴可以後臺私信傳送【Mic】或者評論區留言。