日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

网易资深Java架构师:java方法的定义和使用

發(fā)布時(shí)間:2023/11/30 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网易资深Java架构师:java方法的定义和使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

今年因?yàn)檫@個(gè)疫情,感覺這是從工作以來過的最久的一個(gè)年了,在家呆的時(shí)間不是一般的久,算一算有好幾個(gè)月呢!我大概是3月底快4月了才出門,投了超多的簡歷,天天面試面試面試面試面試面試面試…慶幸的是還是上岸了(嘻嘻開心開心)。但其實(shí)所謂的慶幸也是靠努力堆起來的,我記憶力還比較好,背一背,沒啥難的,背了1000道題。。。(注:關(guān)于我背的這1000題,文末有分享)

眼看著6月就過去了,再過兩天就7月份了,想著面試大軍可能也過不了幾天就要來了,所以這兩天整理了一些面經(jīng),今天給大家看的是“美團(tuán)+字節(jié)跳動(dòng)+騰訊”這三家的,每家一二三面,我想大家可以自己測試一下能堅(jiān)持到哪里。

2. ZooKeeper 介紹

2.1. ZooKeeper 由來

正式介紹 ZooKeeper 之前,我們先來看看 ZooKeeper 的由來,還挺有意思的。

下面這段內(nèi)容摘自《從 Paxos 到 ZooKeeper 》第四章第一節(jié),推薦大家閱讀一下:

ZooKeeper 最早起源于雅虎研究院的一個(gè)研究小組。在當(dāng)時(shí),研究人員發(fā)現(xiàn),在雅虎內(nèi)部很多大型系統(tǒng)基本都需要依賴一個(gè)類似的系統(tǒng)來進(jìn)行分布式協(xié)調(diào),但是這些系統(tǒng)往往都存在分布式單點(diǎn)問題。所以,雅虎的開發(fā)人員就試圖開發(fā)一個(gè)通用的無單點(diǎn)問題的分布式協(xié)調(diào)框架,以便讓開發(fā)人員將精力集中在處理業(yè)務(wù)邏輯上。

關(guān)于“ZooKeeper”這個(gè)項(xiàng)目的名字,其實(shí)也有一段趣聞。在立項(xiàng)初期,考慮到之前內(nèi)部很多項(xiàng)目都是使用動(dòng)物的名字來命名的(例如著名的 Pig 項(xiàng)目),雅虎的工程師希望給這個(gè)項(xiàng)目也取一個(gè)動(dòng)物的名字。時(shí)任研究院的首席科學(xué)家 RaghuRamakrishnan 開玩笑地說:“在這樣下去,我們這兒就變成動(dòng)物園了!”此話一出,大家紛紛表示就叫動(dòng)物園管理員吧一一一因?yàn)楦鱾€(gè)以動(dòng)物命名的分布式組件放在一起,雅虎的整個(gè)分布式系統(tǒng)看上去就像一個(gè)大型的動(dòng)物園了,而 ZooKeeper 正好要用來進(jìn)行分布式環(huán)境的協(xié)調(diào)一一于是,ZooKeeper 的名字也就由此誕生了。

2.2. ZooKeeper 概覽

ZooKeeper 是一個(gè)開源的分布式協(xié)調(diào)服務(wù),它的設(shè)計(jì)目標(biāo)是將那些復(fù)雜且容易出錯(cuò)的分布式一致性服務(wù)封裝起來,構(gòu)成一個(gè)高效可靠的原語集,并以一系列簡單易用的接口提供給用戶使用。

原語: 操作系統(tǒng)或計(jì)算機(jī)網(wǎng)絡(luò)用語范疇。是由若干條指令組成的,用于完成一定功能的一個(gè)過程。具有不可分割性·即原語的執(zhí)行必須是連續(xù)的,在執(zhí)行過程中不允許被中斷。

ZooKeeper 為我們提供了高可用、高性能、穩(wěn)定的分布式數(shù)據(jù)一致性解決方案,通常被用于實(shí)現(xiàn)諸如數(shù)據(jù)發(fā)布/訂閱、負(fù)載均衡、命名服務(wù)、分布式協(xié)調(diào)/通知、集群管理、Master 選舉、分布式鎖和分布式隊(duì)列等功能。

另外,ZooKeeper 將數(shù)據(jù)保存在內(nèi)存中,性能是非常棒的。 在“讀”多于“寫”的應(yīng)用程序中尤其地高性能,因?yàn)椤皩憽睍?dǎo)致所有的服務(wù)器間同步狀態(tài)。(“讀”多于“寫”是協(xié)調(diào)服務(wù)的典型場景)。

2.3. ZooKeeper 特點(diǎn)

  • 順序一致性: 從同一客戶端發(fā)起的事務(wù)請求,最終將會嚴(yán)格地按照順序被應(yīng)用到 ZooKeeper 中去。
  • 原子性: 所有事務(wù)請求的處理結(jié)果在整個(gè)集群中所有機(jī)器上的應(yīng)用情況是一致的,也就是說,要么整個(gè)集群中所有的機(jī)器都成功應(yīng)用了某一個(gè)事務(wù),要么都沒有應(yīng)用。
  • 單一系統(tǒng)映像 : 無論客戶端連到哪一個(gè) ZooKeeper 服務(wù)器上,其看到的服務(wù)端數(shù)據(jù)模型都是一致的。
  • 可靠性: 一旦一次更改請求被應(yīng)用,更改的結(jié)果就會被持久化,直到被下一次更改覆蓋。

2.4. ZooKeeper 典型應(yīng)用場景

ZooKeeper 概覽中,我們介紹到使用其通常被用于實(shí)現(xiàn)諸如數(shù)據(jù)發(fā)布/訂閱、負(fù)載均衡、命名服務(wù)、分布式協(xié)調(diào)/通知、集群管理、Master 選舉、分布式鎖和分布式隊(duì)列等功能。

下面選 3 個(gè)典型的應(yīng)用場景來專門說說:

  • 分布式鎖 : 通過創(chuàng)建唯一節(jié)點(diǎn)獲得分布式鎖,當(dāng)獲得鎖的一方執(zhí)行完相關(guān)代碼或者是掛掉之后就釋放鎖。
  • 命名服務(wù) :可以通過 ZooKeeper 的順序節(jié)點(diǎn)生成全局唯一 ID
  • 數(shù)據(jù)發(fā)布/訂閱 :通過 Watcher 機(jī)制 可以很方便地實(shí)現(xiàn)數(shù)據(jù)發(fā)布/訂閱。當(dāng)你將數(shù)據(jù)發(fā)布到 ZooKeeper 被監(jiān)聽的節(jié)點(diǎn)上,其他機(jī)器可通過監(jiān)聽 ZooKeeper 上節(jié)點(diǎn)的變化來實(shí)現(xiàn)配置的動(dòng)態(tài)更新。
  • 實(shí)際上,這些功能的實(shí)現(xiàn)基本都得益于 ZooKeeper 可以保存數(shù)據(jù)的功能,但是 ZooKeeper 不適合保存大量數(shù)據(jù),這一點(diǎn)需要注意。

    2.5. 有哪些著名的開源項(xiàng)目用到了 ZooKeeper?

  • Kafka : ZooKeeper 主要為 Kafka 提供 Broker 和 Topic 的注冊以及多個(gè) Partition 的負(fù)載均衡等功能。
  • Hbase : ZooKeeper 為 Hbase 提供確保整個(gè)集群只有一個(gè) Master 以及保存和提供 regionserver 狀態(tài)信息(是否在線)等功能。
  • Hadoop : ZooKeeper 為 Namenode 提供高可用支持。
  • 3. ZooKeeper 重要概念解讀

    破音:拿出小本本,下面的內(nèi)容非常重要哦!

    3.1. Data model(數(shù)據(jù)模型)

    ZooKeeper 數(shù)據(jù)模型采用層次化的多叉樹形結(jié)構(gòu),每個(gè)節(jié)點(diǎn)上都可以存儲數(shù)據(jù),這些數(shù)據(jù)可以是數(shù)字、字符串或者是二級制序列。并且。每個(gè)節(jié)點(diǎn)還可以擁有 N 個(gè)子節(jié)點(diǎn),最上層是根節(jié)點(diǎn)以“/”來代表。每個(gè)數(shù)據(jù)節(jié)點(diǎn)在 ZooKeeper 中被稱為 znode,它是 ZooKeeper 中數(shù)據(jù)的最小單元。并且,每個(gè) znode 都一個(gè)唯一的路徑標(biāo)識。

    強(qiáng)調(diào)一句:ZooKeeper 主要是用來協(xié)調(diào)服務(wù)的,而不是用來存儲業(yè)務(wù)數(shù)據(jù)的,所以不要放比較大的數(shù)據(jù)在 znode 上,ZooKeeper 給出的上限是每個(gè)結(jié)點(diǎn)的數(shù)據(jù)大小最大是 1M。

    從下圖可以更直觀地看出:ZooKeeper 節(jié)點(diǎn)路徑標(biāo)識方式和 Unix 文件系統(tǒng)路徑非常相似,都是由一系列使用斜杠"/"進(jìn)行分割的路徑表示,開發(fā)人員可以向這個(gè)節(jié)點(diǎn)中寫人數(shù)據(jù),也可以在節(jié)點(diǎn)下面創(chuàng)建子節(jié)點(diǎn)。這些操作我們后面都會介紹到。

    3.2. znode(數(shù)據(jù)節(jié)點(diǎn))

    介紹了 ZooKeeper 樹形數(shù)據(jù)模型之后,我們知道每個(gè)數(shù)據(jù)節(jié)點(diǎn)在 ZooKeeper 中被稱為 znode,它是 ZooKeeper 中數(shù)據(jù)的最小單元。你要存放的數(shù)據(jù)就放在上面,是你使用 ZooKeeper 過程中經(jīng)常需要接觸到的一個(gè)概念。

    3.2.1. znode 4種類型

    我們通常是將 znode 分為 4 大類:

    • 持久(PERSISTENT)節(jié)點(diǎn) :一旦創(chuàng)建就一直存在即使 ZooKeeper 集群宕機(jī),直到將其刪除。
    • 臨時(shí)(EPHEMERAL)節(jié)點(diǎn) :臨時(shí)節(jié)點(diǎn)的生命周期是與 客戶端會話(session) 綁定的,會話消失則節(jié)點(diǎn)消失 。并且,臨時(shí)節(jié)點(diǎn)只能做葉子節(jié)點(diǎn) ,不能創(chuàng)建子節(jié)點(diǎn)。
    • 持久順序(PERSISTENT_SEQUENTIAL)節(jié)點(diǎn) :除了具有持久(PERSISTENT)節(jié)點(diǎn)的特性之外, 子節(jié)點(diǎn)的名稱還具有順序性。比如 /node1/app0000000001 、/node1/app0000000002 。
    • 臨時(shí)順序(EPHEMERAL_SEQUENTIAL)節(jié)點(diǎn) :除了具備臨時(shí)(EPHEMERAL)節(jié)點(diǎn)的特性之外,子節(jié)點(diǎn)的名稱還具有順序性。

    3.2.2. znode 數(shù)據(jù)結(jié)構(gòu)

    每個(gè) znode 由 2 部分組成:

    • stat :狀態(tài)信息
    • data : 節(jié)點(diǎn)存放的數(shù)據(jù)的具體內(nèi)容

    言盡于此,完結(jié)

    無論是一個(gè)初級的 coder,高級的程序員,還是頂級的系統(tǒng)架構(gòu)師,應(yīng)該都有深刻的領(lǐng)會到設(shè)計(jì)模式的重要性。

    • 第一,設(shè)計(jì)模式能讓專業(yè)人之間交流方便,如下:

    程序員A:這里我用了XXX設(shè)計(jì)模式

    程序員B:那我大致了解你程序的設(shè)計(jì)思路了

    • 第二,易維護(hù)

    項(xiàng)目經(jīng)理:今天客戶有這樣一個(gè)需求…

    程序員:明白了,這里我使用了XXX設(shè)計(jì)模式,所以改起來很快

    • 第三,設(shè)計(jì)模式是編程經(jīng)驗(yàn)的總結(jié)

    程序員A:B,你怎么想到要這樣去構(gòu)建你的代碼

    程序員B:在我學(xué)習(xí)了XXX設(shè)計(jì)模式之后,好像自然而然就感覺這樣寫能避免一些問題

    • 第四,學(xué)習(xí)設(shè)計(jì)模式并不是必須的

    程序員A:B,你這段代碼使用的是XXX設(shè)計(jì)模式對嗎?

    程序員B:不好意思,我沒有學(xué)習(xí)過設(shè)計(jì)模式,但是我的經(jīng)驗(yàn)告訴我是這樣寫的

    從設(shè)計(jì)思想解讀開源框架,一步一步到Spring、Spring5、SpringMVC、MyBatis等源碼解讀,我都已收集整理全套,篇幅有限,這塊只是詳細(xì)的解說了23種設(shè)計(jì)模式,整理的文件如下圖一覽無余!

    資料領(lǐng)取方式:點(diǎn)擊這里下載

    式,整理的文件如下圖一覽無余!

    資料領(lǐng)取方式:點(diǎn)擊這里下載

    [外鏈圖片轉(zhuǎn)存中…(img-mtlMurhw-1622454514723)]

    搜集費(fèi)時(shí)費(fèi)力,能看到此處的都是真愛!

    總結(jié)

    以上是生活随笔為你收集整理的网易资深Java架构师:java方法的定义和使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。