新聞中心
文章目錄哈嘍!大家好,我是小奇,一位不靠譜的程序員
小奇打算以輕松幽默的對(duì)話方式來(lái)分享一些技術(shù),如果你覺(jué)得通過(guò)小奇的文章學(xué)到了東西,那就給小奇一個(gè)贊吧
文章持續(xù)更新,可以微信搜索【小奇JAVA面試】第一時(shí)間閱讀,回復(fù)【資料】更有我為大家準(zhǔn)備的福利喲!創(chuàng)新互聯(lián)建站專業(yè)做網(wǎng)站、成都網(wǎng)站建設(shè),集網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營(yíng)銷、軟文發(fā)稿等專業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計(jì),讓網(wǎng)站在運(yùn)行后,在搜索中有好的表現(xiàn),專業(yè)設(shè)計(jì)制作為您帶來(lái)效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。
- 一、前言
- 二、面試
- 三、Zookeeper是什么
- 四、Zookeeper有哪些數(shù)據(jù)結(jié)構(gòu)
- 五、Zookeeper有哪些核心功能
- 六、Zookeeper有哪些權(quán)限控制
- 七、Zookeeper數(shù)據(jù)持久化
- 八、總結(jié)
作為一名Java程序員,Zookeeper底層的一些原理是我們不必學(xué)會(huì)就可以搬磚工作的一種技能點(diǎn),但是小奇為什么還要講一下呢?難道就是為了浪費(fèi)大家1分鐘的寶貴時(shí)間,一個(gè)人1分鐘,50萬(wàn)人就是1年,5000萬(wàn)人就是100年,賺了,小奇以一己之力成功搞掛一個(gè)人(血賺)。
當(dāng)然不是,并且小奇的文章也沒(méi)有那么多人看,最多也就浪費(fèi)個(gè)腎吧。
學(xué)習(xí)Zookeeper底層原理是因?yàn)槊嬖嚬僖獑?wèn)??!,所以我們就要學(xué),什么?不實(shí)用的你不學(xué)?那鄰居小奇可要使勁學(xué)啦,到時(shí)候面試官只要小奇不要你。
至于你問(wèn)為什么面試官要問(wèn)Zookeeper底層原理呢,這個(gè)。。。我把這次機(jī)會(huì)留給你,下次你面試的時(shí)候面試官問(wèn):“講一下Zookeeper底層原理”。你:“面試官你好,請(qǐng)問(wèn)為什么你要問(wèn)Zookeeper底層原理呢,你給我臺(tái)電腦,我五分鐘給你搭建好圖書管理系統(tǒng)他不香嗎,咱們鍵盤上見(jiàn)真章”。這時(shí)面試官就會(huì)告訴你答案,你就可以把答案打在評(píng)論區(qū),讓小奇以及眾多小伙伴一起知道一下到底為什么要問(wèn)?
在一個(gè)晴朗的周日,我來(lái)到了一個(gè)陌生的園區(qū)(別問(wèn)為什么是周日,問(wèn)就是997,不過(guò)為了填飽肚子的打工人,只能明知山有虎、偏向虎山行),坐在陌生的會(huì)議室,等待HR小姐姐去叫面試官,此時(shí)我的心情和各位小伙伴一樣五味雜陳,擔(dān)心面試官問(wèn)的會(huì)不會(huì)很難?問(wèn)到我的知識(shí)盲區(qū)我該怎么辦?一會(huì)自我介紹的時(shí)候要不要吹一下我和小奇的關(guān)系?
一位英俊瀟灑,眼神犀利的面試官走了進(jìn)來(lái),看到他那犀利、仿佛能看穿一切的眼神 ,我在想要不然一會(huì)就不要20k了,要8k得了,這個(gè)面試官一看就不好糊弄啊,但是我想起來(lái)我來(lái)之前剛看了小奇的趣學(xué)編程系列,我已經(jīng)完全學(xué)會(huì)了小奇的精髓,我頓時(shí)就來(lái)了底氣,決定一會(huì)要30k,不給就學(xué)小奇賴著不走(哈哈)
面試官:小奇是吧,帶簡(jiǎn)歷了嗎?
我:沒(méi)帶,現(xiàn)在彩印兩塊一張,我簡(jiǎn)歷五張,每次面試都要花費(fèi)十塊,我朋友說(shuō)了還沒(méi)工作就先讓你掏錢的工作不要去。
面試官:。。。那你靠什么來(lái)征服我,讓我錄用你
我:氣質(zhì)?
(此時(shí)面試官并沒(méi)有叫保安,而是從門后拿出了恭候我多時(shí)的棍子,我瞬間慫了)
三、Zookeeper是什么我只好從我的雙肩包中拿出了我上午從其他公司面試官手中要回的簡(jiǎn)歷,上午的情形是這樣的。
上午的面試官:今天的面試就到這吧,回去等通知吧!
我:面試官你好,如果貴公司不打算錄取我的話,能不能把我的紙質(zhì)簡(jiǎn)歷還給我,我下午還有一家面試。
上午的面試官:我說(shuō)你的簡(jiǎn)歷怎么皺皺巴巴,原來(lái)你一直在循環(huán)利用??!這個(gè)癥狀出現(xiàn)多久了?
我:半拉月了。。。
(當(dāng)我把皺皺巴巴的簡(jiǎn)歷交給面試官后,這場(chǎng)面試才得以繼續(xù)進(jìn)行。。。)
面試官:我看你簡(jiǎn)歷上寫的精通Zookeeper?(哼,面試官輕蔑的一笑)
我:本來(lái)不想寫精通的,但是同行們抬愛(ài),非逼著寫,但是也無(wú)可厚非,雖說(shuō)沒(méi)有到達(dá)爐火純青,但是也差不多登峰造極了吧。
面試官:呵呵、那你先說(shuō)一說(shuō)Zookeeper是什么吧
我:ZooKeeper是一個(gè)分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),主要為了解決分布式架構(gòu)下數(shù)據(jù)一致性問(wèn)題,典型的應(yīng)用場(chǎng)景有分布式配置中心、分布式注冊(cè)中心、分布式鎖、分布式隊(duì)列、集群選舉、分布式屏障、發(fā)布/訂閱等場(chǎng)景。
面試官:嗯,Zookeeper是怎樣的一個(gè)數(shù)據(jù)結(jié)構(gòu)呢?
四、Zookeeper有哪些數(shù)據(jù)結(jié)構(gòu)我:Zookeeper是一個(gè)類似于文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu),最外層我們可以想象成一個(gè)大的文件夾,里面都是一些小的文件夾。
面試官:嗯,Zookeeper有幾種常用的數(shù)據(jù)格式呢?
五、Zookeeper有哪些核心功能我:Zookeeper中每一個(gè)子目錄項(xiàng)都是一個(gè)znode(目錄節(jié)點(diǎn)),這些目錄節(jié)點(diǎn)和我們普通的目錄一樣可以新建、刪除、修改,我們常用的主要有四種類型的znode。
1、持久化目錄節(jié)點(diǎn):
客戶端與zookeeper斷開連接后,該節(jié)點(diǎn)依舊存在,只要不手動(dòng)刪除該節(jié)點(diǎn),他將永遠(yuǎn)存在。
2、持久化順序編號(hào)目錄節(jié)點(diǎn):
客戶端與zookeeper斷開連接后,該節(jié)點(diǎn)依舊存在,只是zookeeper給該節(jié)點(diǎn)名稱進(jìn)行順序編號(hào)。
3、臨時(shí)目錄節(jié)點(diǎn):
客戶端與zookeeper斷開連接后,該節(jié)點(diǎn)被刪除。
4、臨時(shí)順序編號(hào)目錄節(jié)點(diǎn):
客戶端與zookeeper斷開連接后,該節(jié)點(diǎn)被刪除,只是zookeeper給該節(jié)點(diǎn)名稱進(jìn)行順序編號(hào)。
面試官:嗯,Zookeeper有哪些核心的功能呢?
我:zookeeper有監(jiān)聽通知機(jī)制,如果對(duì)某個(gè)節(jié)點(diǎn)進(jìn)行監(jiān)聽,當(dāng)這個(gè)節(jié)點(diǎn)被刪除,或者被修改時(shí),監(jiān)聽方會(huì)感知到修改消息。
面試官:嗯,既然zookeeper有監(jiān)聽機(jī)制,那么可以監(jiān)聽到幾種類型的變化呢?
我:可以監(jiān)聽到七種類型變化:
1、None:連接建立事件
2、NodeCreated:節(jié)點(diǎn)創(chuàng)建
3、NodeDeleted:節(jié)點(diǎn)刪除
4、NodeDataChanged:節(jié)點(diǎn)數(shù)據(jù)變化
5、NodeChildrenChanged:子節(jié)點(diǎn)列表變化
6、DataWatchRemoved:節(jié)點(diǎn)監(jiān)聽被移除
7、ChildWatchRemoved:子節(jié)點(diǎn)監(jiān)聽被移除
面試官:我們?cè)陂_發(fā)中使用Synchronized就可以保證線程安全了,為什么還需要使用zookeeper來(lái)實(shí)現(xiàn)分布式鎖呢?
我:如果我們是單機(jī)情況下也就是只有一個(gè)進(jìn)程的情況下使用Synchronized是可以保證線程安全的。但是分布式情況下是多個(gè)不同的進(jìn)程,而不是一個(gè)進(jìn)程里面不同的線程,所以Synchronized是無(wú)法保證多個(gè)進(jìn)程安全的。
面試官:zookeeper節(jié)點(diǎn)有哪些重要信息呢,怎么進(jìn)行查看?
我:zookeeper節(jié)點(diǎn)可以通過(guò)stat命令來(lái)查看主要信息,其中信息有:
1、cZxid:創(chuàng)建znode的事務(wù)id(Zxid的值)。
2、mZxid:最后修改znode的事務(wù)id。
3、pZxid:最后添加或刪除子節(jié)點(diǎn)的事務(wù)id(子節(jié)點(diǎn)列表發(fā)生變化才會(huì)發(fā)生改變)。
4、ctime:znode創(chuàng)建時(shí)間。
5、mtime:znode最近修改時(shí)間。
6、dataVersion:znode的當(dāng)前數(shù)據(jù)版本。
7、cversion:znode的子節(jié)點(diǎn)結(jié)果集版本(一個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)增加、刪除都會(huì)影響這個(gè)版本)。
8、aclVersion:表示對(duì)此znode的acl版本。
9、ephemeralOwner:znode是臨時(shí)znode時(shí),表示znode所有者的sessionid,如果znode不是臨時(shí)節(jié)點(diǎn),則該字段設(shè)置為零。
10、dataLength:znode數(shù)據(jù)字段的長(zhǎng)度。
面試官:zookeeper創(chuàng)建節(jié)點(diǎn),和監(jiān)聽節(jié)點(diǎn)有哪些命令?
六、Zookeeper有哪些權(quán)限控制我:
1、創(chuàng)建持久節(jié)點(diǎn):create /節(jié)點(diǎn)名稱
2、創(chuàng)建持久順序節(jié)點(diǎn):create -s /節(jié)點(diǎn)名稱
3、創(chuàng)建臨時(shí)節(jié)點(diǎn):create -e /節(jié)點(diǎn)名稱
4、創(chuàng)建臨時(shí)順序節(jié)點(diǎn):create -e -s /節(jié)點(diǎn)名稱
5、監(jiān)聽節(jié)點(diǎn):get -w /節(jié)點(diǎn)名稱
面試官:zookeeper有哪些權(quán)限控制呢?
我:應(yīng)該是按照大小個(gè)吧,誰(shuí)個(gè)高誰(shuí)說(shuō)了算。
面試官:你特么找打是吧,數(shù)據(jù)那特么有大小個(gè)。。。
我:zookeeper有ACL( Access Control List )權(quán)限控制,可以控制節(jié)點(diǎn)的讀寫操作,保證數(shù)據(jù)的安全性,不然的話誰(shuí)都可以創(chuàng)建和刪除節(jié)點(diǎn),那不就亂了套了。
面試官:ACL權(quán)限設(shè)置有幾部分組成呢?
我:有三部分組成,分別是權(quán)限模式、授權(quán)對(duì)象、權(quán)限信息。
面試官:能具體說(shuō)一說(shuō)這三部分都代表什么嗎?
我:權(quán)限模式: 就是zookeeper服務(wù)器進(jìn)行權(quán)限驗(yàn)證的方式,比如手機(jī)解鎖是用指紋還是用密碼呢,如果用密碼,知道密碼的都可以解鎖你的手機(jī),如果用指紋,只有你自己的手指頭可以解鎖。所以權(quán)限模式大體分為兩種類型:
1、范圍驗(yàn)證: 范圍就是zookeeper可以針對(duì)一個(gè)ip或者一段ip地址授予權(quán)限,相當(dāng)于指紋解鎖,我給我一個(gè)手指頭,或者所有的腳指頭都授予權(quán)限。
2、口令驗(yàn)證: 可以理解為用戶名密碼的方式,這種就相當(dāng)于密碼解鎖了,知道了用戶名密碼后所有的人都相當(dāng)于授予了權(quán)限。
授權(quán)對(duì)象: 授權(quán)對(duì)象就是把權(quán)限授予給誰(shuí),如果是范圍驗(yàn)證方式,那么授權(quán)對(duì)象就是ip地址,如果是口令驗(yàn)證,授權(quán)對(duì)象就是用戶名。
授權(quán)信息: 授權(quán)信息就是指我們具體的權(quán)力是什么,比如我們解鎖手機(jī)后可以打游戲還是可以聽歌,還是可以用手機(jī)砸核桃呢。
zookeeper中定義好的權(quán)限有5種:
1、數(shù)據(jù)節(jié)點(diǎn)(c:create)創(chuàng)建權(quán)限,授予權(quán)限的對(duì)象可以在數(shù)據(jù)節(jié)點(diǎn)下創(chuàng)建子節(jié)點(diǎn)。
2、數(shù)據(jù)節(jié)點(diǎn)(w:wirte)更新權(quán)限,授予權(quán)限的對(duì)象可以更新該數(shù)據(jù)節(jié)點(diǎn)。
3、數(shù)據(jù)節(jié)點(diǎn)(r:read)讀取權(quán)限,授予權(quán)限的對(duì)象可以讀取該節(jié)點(diǎn)的內(nèi)容以及子節(jié)點(diǎn)的列表信息。
4、數(shù)據(jù)節(jié)點(diǎn)(d:delete)刪除權(quán)限,授予權(quán)限的對(duì)象可以刪除該數(shù)據(jù)節(jié)點(diǎn)的子節(jié)點(diǎn)。
5、數(shù)據(jù)節(jié)點(diǎn)(a:admin)管理者權(quán)限,授予權(quán)限的對(duì)象可以對(duì)該數(shù)據(jù)節(jié)點(diǎn)體進(jìn)行ACL權(quán)限設(shè)置。
面試官:我們?cè)趺床榭春驮O(shè)置某個(gè)節(jié)點(diǎn)的ACL權(quán)限信息呢
七、Zookeeper數(shù)據(jù)持久化我:可以通過(guò)getAcl來(lái)獲取某個(gè)節(jié)點(diǎn)的權(quán)限信息,通過(guò)setAcl來(lái)設(shè)置某個(gè)節(jié)點(diǎn)的權(quán)限信息。
面試官:zookeeper的數(shù)據(jù)是存儲(chǔ)在內(nèi)存中的嗎,怎么進(jìn)行持久化操作呢?
我:zookeeper和redis很像,數(shù)據(jù)都是在內(nèi)存中的,持久化也是兩種方式,一種是記錄事務(wù)日志,一種是快照方式。
記錄事務(wù)日志磁盤會(huì)進(jìn)行IO操作,事務(wù)日志的不斷增多會(huì)觸發(fā)磁盤為文件開辟新的磁盤塊,所以為了提升磁盤的效率,可以在創(chuàng)建文件的時(shí)候就向操作系統(tǒng)申請(qǐng)一塊大一點(diǎn)的磁盤塊,通過(guò)參數(shù)zookeeper.preAllocSize配置。
事務(wù)日志的存放地址通過(guò)zoo.cfg配置文件中的dataDir來(lái)指定。
面試官:小伙子真厲害啊,我這邊沒(méi)有什么要問(wèn)的了,你還有什么問(wèn)題要問(wèn)(面試官兩眼放光)
我:額。。。面試官這個(gè)我的紙質(zhì)簡(jiǎn)歷可以給我嗎,可以不往我的簡(jiǎn)歷上寫寫畫畫嗎,我明天的面試還要用。
面試官:還面啥別的公司啊,就來(lái)我這吧,條件隨便開
我:那就100k吧(此時(shí)面試官又拿起了他準(zhǔn)備好的棍子)
面試官:你要是不來(lái)就給我推薦一下,讓別人來(lái)我這面試一下
八、總結(jié)我:你先好好學(xué)習(xí)一下zookeeper吧,今天幸虧只是我來(lái)了,如果是小奇的忠實(shí)讀者來(lái)了,你將會(huì)被虐的很慘的。(我將我的博客地址留給了面試官,轉(zhuǎn)身留下了帥氣的背影,而面試官落寞無(wú)神的呆呆的坐在那里,仿佛一個(gè)億離他而去。。。)
這里關(guān)于zookeeper還沒(méi)有整理完畢,文章后面持續(xù)更新,建議收藏。
文章中涉及到的命令大家一定要像我一樣每個(gè)都敲幾遍,只有在敲的過(guò)程中才能發(fā)現(xiàn)自己對(duì)命令是否真正的掌握了。
如果覺(jué)得我的文章還不錯(cuò)的話就點(diǎn)個(gè)贊吧,另外可以微信搜索【小奇JAVA面試】閱讀更多的好文章,獲取我為大家準(zhǔn)備的資料。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁(yè)名稱:面試官:Zookeeper是什么,它有什么特性與使用場(chǎng)景?-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)路徑:http://fisionsoft.com.cn/article/djdsie.html