原创 九大排序算法-冒泡排序

冒泡排序是一種通過後面相鄰兩個元素依次比較大小,並將最大(最小)值往後移動,從而實現排序的一種方式。 代碼實現: public static void bubble(int[] arr) { for (i

原创 九大排序算法-插入排序

插入排序是通過保證前n位是有序的,當第n+1位需要插入時,反向掃描前n位的大小,碰到大於該數的就向後移動一位,直到小於該數停止,即需要插入的位置。 示意圖: 代碼實現: public static void insert

原创 zookeeper源碼解析-四字命令

1.引入 zookeeper支持通過命令獲取其服務的運行狀態,這就是傳說中的“四字命令”。由於這些命令是通過TCP/UDP協議傳輸的,所以不能在zookeeper的cli命令下使用,常用的使用方式是用工具nc,比如:echo st

原创 九大排序算法-歸併排序

1. 圖示過程 (1) 歸併排序的流程 (2) 合併兩個有序數組的流程 2. 動圖展示 3. Java代碼實現 public static void mergeSort(int[] arr) { sort(arr, 0,

原创 zookeeper原理-一致性

1. 不得不說的CAP原理 要介紹分佈式中的一致性,肯定會關聯出CAP原理,那什麼是CAP呢? 一致性(C):分佈式系統更新操作之後,所有的節點數據一致。 可用性(A):每一個非故障的節點必須對每一個請求作出響應。 分區容錯性(

原创 spark源碼解析-master流程分析

spark版本: 2.0.0 1.概念 master管理着spark的主要元數據,用於管理集羣,資源調度等。 2.master啓動過程 2.1 Master.main方法 在start-master.sh腳本中可以看出最終調用

原创 spark源碼解析-作業執行過程

spark版本: 2.0.0 1. 引入 通過前一篇介紹spark submit的文章,我們知道如果以客戶端模式最終運行的是–class指定類的main方法,這也是執行作業的入口。接下來,我們就以一個簡單的例子,說明作業是如何

原创 九大排序算法-快速排序

快速排序首先需要確定一個基數,讓數組分成左邊整體大於(小於)該基數,右邊小於(大於)該基數。然後通過遞歸的方式將左右兩邊也通過基數分割,最終實現排序。 【注】 圖片選自博客:https://www.cnblogs.com/dcy

原创 spark源碼解析-rpc原理

spark版本: 2.0.0 1.概念 spark是分佈式服務,需要涉及到大量的網絡通信以及遠程服務調用(rpc),在1.6前spark使用的是akka實現,但是考慮到akka兼容性問題,最後捨棄,改爲netty。這篇文章就將

原创 git使用腦圖

原创 zookeeper源碼解析-節點清理

zk版本:3.5.6 1. 引入 在3.5.6版本中,有兩種節點需要清理:臨時節點(會話結束,會被清除)和容器節點(如果沒有子節點,會被清理)。 2. 節點清理 清理節點的操作是通過ContainerManager類完成,在單

原创 zookeeper源碼解析-日誌快照清理過程

zk版本:3.5.6 1.引入 在前面介紹單機啓動zk服務時,我們提到過啓動時會創建DatadirCleanupManager對象,用於清理多餘的日誌快照數據,現在我們來看一下它是如何實現的。 2.清理數據 QuorumPee

原创 九大排序算法-選擇排序

選擇排序是先選定一個數據元素,然後依次和後面的元素進行比較,找到最大(最小)值,然後交換兩個元素的位置。 示意圖: public static void select(int[] arr) { for (

原创 spark源碼解析-sparkSubmit分析

spark版本: 2.0.0 1.引入 爲了簡單測試項目功能,我們可能只需要使用spark-shell就可以完成,但是企業級項目我們都是先打包好之後使用spark-submit腳本完成線上的spark項目部署。 ./bin/s

原创 zookeeper源碼解析-admin服務

zk版本:3.5.6 1.引入 在單機啓動時會創建admin對象 adminServer = AdminServerFactory.createAdminServer(); // 設置zookeeper服務 adm