網易資深Java架構師:java方法的定義和使用

前言

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

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

2. ZooKeeper 介紹

2.1. ZooKeeper 由來

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

下面這段內容摘自《從 Paxos 到 ZooKeeper 》第四章第一節,推薦大家閱讀一下:

ZooKeeper 最早起源于雅虎研究院的一個研究小組。在當時,研究人員發現,在雅虎內部很多大型系統基本都需要依賴一個類似的系統來進行分布式協調,但是這些系統往往都存在分布式單點問題。所以,雅虎的開發人員就試圖開發一個通用的無單點問題的分布式協調框架,以便讓開發人員將精力集中在處理業務邏輯上。

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

2.2. ZooKeeper 概覽

ZooKeeper 是一個開源的分布式協調服務,它的設計目標是將那些復雜且容易出錯的分布式一致性服務封裝起來,構成一個高效可靠的原語集,并以一系列簡單易用的接口提供給用戶使用。

原語: 操作系統或計算機網絡用語范疇。是由若干條指令組成的,用于完成一定功能的一個過程。具有不可分割性·即原語的執行必須是連續的,在執行過程中不允許被中斷。

ZooKeeper 為我們提供了高可用、高性能、穩定的分布式數據一致性解決方案,通常被用于實現諸如數據發布/訂閱、負載均衡、命名服務、分布式協調/通知、集群管理、Master 選舉、分布式鎖和分布式隊列等功能。

另外,ZooKeeper 將數據保存在內存中,性能是非常棒的。 在“讀”多于“寫”的應用程序中尤其地高性能,因為“寫”會導致所有的服務器間同步狀態。(“讀”多于“寫”是協調服務的典型場景)。

2.3. ZooKeeper 特點

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

2.4. ZooKeeper 典型應用場景

ZooKeeper 概覽中,我們介紹到使用其通常被用于實現諸如數據發布/訂閱、負載均衡、命名服務、分布式協調/通知、集群管理、Master 選舉、分布式鎖和分布式隊列等功能。

下面選 3 個典型的應用場景來專門說說:

  1. 分布式鎖 : 通過創建唯一節點獲得分布式鎖,當獲得鎖的一方執行完相關代碼或者是掛掉之后就釋放鎖。
  2. 命名服務 :可以通過 ZooKeeper 的順序節點生成全局唯一 ID
  3. 數據發布/訂閱 :通過 Watcher 機制 可以很方便地實現數據發布/訂閱。當你將數據發布到 ZooKeeper 被監聽的節點上,其他機器可通過監聽 ZooKeeper 上節點的變化來實現配置的動態更新。

實際上,這些功能的實現基本都得益于 ZooKeeper 可以保存數據的功能,但是 ZooKeeper 不適合保存大量數據,這一點需要注意。

2.5. 有哪些著名的開源項目用到了 ZooKeeper?

  1. Kafka : ZooKeeper 主要為 Kafka 提供 Broker 和 Topic 的注冊以及多個 Partition 的負載均衡等功能。
  2. Hbase : ZooKeeper 為 Hbase 提供確保整個集群只有一個 Master 以及保存和提供 regionserver 狀態信息(是否在線)等功能。
  3. Hadoop : ZooKeeper 為 Namenode 提供高可用支持。

3. ZooKeeper 重要概念解讀

破音:拿出小本本,下面的內容非常重要哦!

3.1. Data model(數據模型)

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

強調一句:ZooKeeper 主要是用來協調服務的,而不是用來存儲業務數據的,所以不要放比較大的數據在 znode 上,ZooKeeper 給出的上限是每個結點的數據大小最大是 1M。

從下圖可以更直觀地看出:ZooKeeper 節點路徑標識方式和 Unix 文件系統路徑非常相似,都是由一系列使用斜杠"/"進行分割的路徑表示,開發人員可以向這個節點中寫人數據,也可以在節點下面創建子節點。這些操作我們后面都會介紹到。

ZooKeeper 數據模型

3.2. znode(數據節點)

介紹了 ZooKeeper 樹形數據模型之后,我們知道每個數據節點在 ZooKeeper 中被稱為 znode,它是 ZooKeeper 中數據的最小單元。你要存放的數據就放在上面,是你使用 ZooKeeper 過程中經常需要接觸到的一個概念。

3.2.1. znode 4種類型

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

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

3.2.2. znode 數據結構

每個 znode 由 2 部分組成:

  • stat :狀態信息
  • data : 節點存放的數據的具體內容

言盡于此,完結

無論是一個初級的 coder,高級的程序員,還是頂級的系統架構師,應該都有深刻的領會到設計模式的重要性。

  • 第一,設計模式能讓專業人之間交流方便,如下:

程序員A:這里我用了XXX設計模式

程序員B:那我大致了解你程序的設計思路了

  • 第二,易維護

項目經理:今天客戶有這樣一個需求…

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

  • 第三,設計模式是編程經驗的總結

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

程序員B:在我學習了XXX設計模式之后,好像自然而然就感覺這樣寫能避免一些問題

  • 第四,學習設計模式并不是必須的

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

程序員B:不好意思,我沒有學習過設計模式,但是我的經驗告訴我是這樣寫的

image

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

資料領取方式:點擊這里下載

image

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

資料領取方式:點擊這里下載

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

搜集費時費力,能看到此處的都是真愛!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386226.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386226.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386226.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PHP----學生管理系統

閑來無事花費兩天時間寫了份簡易版的學生管理系統 源碼地址:https://www.cnblogs.com/post/ReadAuth?blogId509327&PostId11333758&url%2Fbyczyz%2Fprotected%2Fp%2F11333758.html 轉載于:https://www.cnblogs.com/byczyz/p/11333760.html

網易資深Java架構師:jdkjrejvm的區別和聯系

前言 作為同時具備高性能、高可靠和高可擴展性的典型鍵值數據庫,Redis不僅功能強大,而且穩定,理所當然地成為了大型互聯網公司的首選。 眾多大廠在招聘的時候,不僅會要求面試者能簡單地使用Redis,還要能深入地理解底…

深度學習之開端備注

Adagrad //適合稀疏樣本 RMSprop//借鑒Adagrad的思想,改進使得不會出現學習率越來越低的問題 由此可見Adadelta既不需要輸入學習率等參數,而且表現得非常好!!但是我試了幾次,這個優化器效果極差!&#xff0…

網易資深Java架構師:疫情對java行業的影響分析

前言 在實際開發,Redis使用會頻繁,那么在使用過程中我們該如何正確抉擇數據類型呢?哪些場景下適用哪些數據類型。而且在面試中也很常會被面試官問到Redis數據結構方面的問題: Redis為什么快呢?為什么查詢操作會變慢了…

ListView與.FindControl()方法的簡單練習 #2 -- ItemUpdting事件中抓取「修改后」的值

原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/24/listview_itemupdating_findcontrol_20130624.aspx ListView與.FindControl()方法的簡單練習 #2 -- ItemUpdting事件中抓取「修改后」的值 本文跟上一篇文章有關連,請依照順序來練習&#xff1…

美團java研發崗二面:java靜態方法存儲在哪個區

思維導圖 前言 在很多時候,我們都可以在各種框架應用中看到ZooKeeper的身影,比如Kafka中間件,Dubbo框架,Hadoop等等。為什么到處都看到ZooKeeper? 一、 前些年,互聯網行業里對架構師這個崗位的標準還不是…

[學習之道] 修福不修慧,大象披瓔珞; 修慧不修福,羅漢托空缽 (學習寫程序,只靠補習上課嗎?)...

這是我的備份,原文請看 http://www.dotblogs.com.tw/mis2000lab/archive/2014/09/17/learning-and_do-it_20140917.aspx [學習之道] 修福不修慧,大象披瓔珞; 修慧不修福,羅漢托空缽 (學習寫程序,只靠補習上課嗎&#…

阿里P8親自教你!mysql列轉行

前言 今日博主聽聞,現在很多培訓出來的應屆生薪資都趕上了摸爬滾打兩三年的朋友,講道理,這說不過去啊 作為同行來說,這個行業發展很快,技術更新很快,淘汰也很快,千萬不要再找借口了&#xff0…

同步、異步、多線程

1、首先明確一點,對于單核CPU,任意一個時刻只有一個線程在運行。那么既然這樣,多線程還有什么意義呢? 舉例來說,現在只有一個人,要做好幾個任務。單線程就是,任務一個一個地做,必須做…

阿里P8親自教你!熬夜整理華為最新Java筆試題

前言 Mysql的鎖機制確實非常重要,所以在這里做一個全面的總結整理,便于以后的查閱,也分享給大家。 Mysql的鎖機制還是有點難理解的,所以這篇文章采用圖文結合的方式講解難點,幫助大家理解,講解的主要內容…

JSP基礎筆記

/** #####這部分也是筆記,用于記錄JSP的相關內容* ###怎么用JSP###指令的寫法* <% 指令名字%>* *### page指令 * language > 表明jsp頁面中可以寫java代碼 * contentType > 其實即使說這個文件是什么類型&#xff0c;告訴瀏覽器我是什么內容類型&#xff0c;以及使…

阿里P8親自講解!javawhile循環語句用法

前言 作為一個已經畢業的計算機專業學長&#xff0c;其實幾年大學走來還是挺感慨萬千的。&#xff08;說明一下&#xff1a;一本&#xff0c;非958、211&#xff09; 老實說&#xff0c;上大學之前填志愿選專業的時候沒有任何打算&#xff0c;就覺得學海熬到頭了&#xff0c;向…

Cookie,Session基礎知識

//這部分主要是CookieSession的筆記部分/** //獲取來訪的客戶端類型String clientTyereq.getHeader("User-Agent");//如果是火狐瀏覽器&#xff0c;那么使用以下代碼if(clientTye.contains("Firefox")){fileNameDownLoadUtil.base64EncodeFileName(fileNam…

阿里P8親自講解!java中級開發工程師需要掌握的技能

前言 關于技術人如何成長的問題&#xff0c;一直以來都備受關注&#xff0c;因為程序員職業發展很快&#xff0c;即使是相同起點的人&#xff0c;經過幾年的工作或學習&#xff0c;會迅速拉開極大的差距&#xff0c;所以技術人保持學習&#xff0c;提升自己&#xff0c;才能夠…

隨筆--互聯網進化論

不聞不若聞之&#xff1b;有的人士的理論引起了轟動&#xff0c;吾等小網民也來學學&#xff0c;沒那么大腦袋&#xff0c;從不敢談解讀與批判。聞香而來&#xff0c;放屁而去。比如說互聯網進化論。看看實踐&#xff0c;互聯網的膨脹式發展是不會停的&#xff0c;在中國的互聯…

阿里P8親自講解!java分布式需要學什么技術

引言 最近項目上線的頻率頗高&#xff0c;連著幾天加班熬夜&#xff0c;身體有點吃不消精神也有些萎靡&#xff0c;無奈業務方催的緊&#xff0c;工期就在眼前只能硬著頭皮上了。腦子渾渾噩噩的時候&#xff0c;寫的就不能叫代碼&#xff0c;可以直接叫做Bug。我就熬夜寫了一個…

Javascript的this用法

出自&#xff1a;http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html this是Javascript語言的一個關鍵字。 它代表函數運行時&#xff0c;自動生成的一個內部對象&#xff0c;只能在函數內部使用。比如&#xff0c; function test(){ this.x 1; }…

[New Portal]Windows Azure Web Site (4) Web Site Gallery

《Windows Azure Platform 系列文章目錄》 前言&#xff1a;最近因為工作變動&#xff0c;更新博客的速度變慢了。筆者在這邊感到非常抱歉&#xff0c;以后盡量每周更新一篇Windows Azure的博客給大家。 好了&#xff0c;我們回到本章內容。 Windows Azure通過Web Role和Worker…

阿里P8親自講解!java聲明類的語法格式

前言 前兩天&#xff0c;我收到了螞蟻金服的offer&#xff0c;從朋友的內推開始面試到拿到最后offer經歷了4面技術、一面交叉面和一面HR面。經過了漫長的等待和幾次幾乎折磨的面試之后&#xff0c;終于拿到了offer。 分享第一份Java基礎-中級-高級面試集合 Java基礎&#xff…

java-transaction事件

/*########事務&數據庫連接池&DBUtils ######事務 > Transaction 其實指的一組操作&#xff0c;里面包含許多個單一的邏輯。只要有一個邏輯沒有執行成功&#xff0c;那么都算失敗。 所有的數據都回歸到最初的狀態(回滾) ####為什么要有事務?> 為了確保邏輯的成功…