原创 你好,我是B樹

一、什麼是B樹? B樹是一棵是具備以下特點的有根樹。 1、節點屬性 a)x.n:爲節點中存儲的關鍵字個數。 b)x.key:爲節點中存儲的關鍵字。x.key1、x.key2 ... x.keyx.n 以非降序順序排列,滿足 x.key1 <

原创 gRPC 攔截器能做些什麼?

什麼是攔截器? 攔截器是一種橫切維度的功能延展。 具象說明一下,高速收費站就是一種攔截器。它可以做什麼?收費,查證,交通控制等等,面向所有穿行過往的車輛。 gRPC 攔截器主要分爲兩種:客戶端攔截器(ClientInterceptor),服

原创 解決緩存穿透的幾種應用思考

其實在之前的文章【緩存,確實很香,卻也很受傷!】中,對緩存穿透的引發緣由及應對策略做過簡要的描述。這篇文章將對這個問題再做下額外的擴展。 一、關於布隆過濾器 布隆過濾器支持兩種操作:1、添加元素;2、判斷元素是否存在。 布隆過濾器的特性:佔

原创 關於 kafka 消息的順序問題一二

順序就像就是 12345,任何 12354、12543、51234等都不行。 因爲是 mq,所以必然涉及三個主體:發送方、消息服務器、消費方。 一、kafka 消息服務器 kafka brokers 順序接收客戶端請求,將消息順序追加到 p

原创 不可不知的 JVM 預熱

一、JVM 架構基礎 JVM 進程啓動時,ClassLoader 會將需要的所有類加載到內存,主要分爲以下三步: Bootstrap Class: 核心類庫,由 “Bootstrap Class Loader”負責加載, 例如基礎的運行時

原创 proto3 協議指引

一、protocal buffer 是什麼? 一種序列化機制。 什麼是序列化? 一種轉化爲可存儲和傳輸對象的過程。 序列化的方式有很多,那麼proto有什麼特殊的呢? 它的英文介紹裏提到了neutral這個詞,中立,無關的。 languag

原创 TCP 隊列溢出了

一、TCP 隊列 1、syns queue:半連接隊列 TCP 三次握手(參考:TCP建立連接之三次握手),第一步,服務端接收到客戶端發送的 syn 消息後,將連接信息放入 syns queue,此時,雙方連接尚未建立,稱之爲半連接。 2、

原创 Redis Hashes 數據類型簡述

Redis Hashes 是我們日常使用中比較高頻的 Redis 數據類型,內部使用 Redis 字典結構存儲,底層基於哈希表結構實現。 下面從哈希表節點,哈下表結構,Redis 字典,Redis 字典元素操作,Redis rehash 幾

原创 Redis 字典結構細談

Redis 字典底層基於哈希表實現。 一、哈希表結構 1、dictht: typedef struct dictht {   dictEntry **table; //哈希表數組,存儲具體的鍵值對元素,對象類型 dictEntry   un

原创 當你處理了幾千萬數據之後...

數據出問題了! 一次偶發的端上問題。 排查日誌、監控、數據、代碼邏輯。 服務沒有添加事務性保障,不可避免的數據不一致:緩存有數據,數據庫沒數據或者相反;有A階段數據,沒有B階段數據;該有的數據沒有,不該有的數據卻存在。 主從機制遇到了強一致

原创 服務治理之重試篇

一、背景 什麼是重試? 一種保障機制,why not try again! 無論是單體服務模塊化的調用,或是微服務當道的今天服務間的相互調用。一次業務請求包含了太多的鏈條環扣,每一扣的失敗都會導致整個請求的失敗。因此需要保障每個環節的可用性

原创 一面動態規劃,一面廣度優先

1、取數組a[n]中不相鄰的m個元素,使得其和最大 不要嘗試去使用暴力破解,因爲即使可能行得通,但通常也會受制於空間和時間的複雜度。 限制條件:一個數組、取不相鄰的元素 取多少個,m個,不確定。是不是要取最多個?不確定。 不過有一點能夠確定

原创 一次排查線上接口偶發異常耗時引起的思考!

一、引子 這要從線上的一個接口偶發異常耗時說起,事情往往不是你想象的樣子,尤其是在排查問題的時候,切忌有先入爲主的的某些判斷。 二、問題: 接口監控圖:顯示每天總會有那麼幾次耗時特別長的請求。 三、排查: 1、直觀的認識是“偶發”,每天零

原创 臺階很高,青蛙跳不跳?

青蛙總是被被要求跳臺階,我想,他一定很累的! 一隻青蛙一次可以跳上1級臺階,也可以跳上2級臺階。求該青蛙跳上一個 n 級的臺階總共有多少種跳法? 對於這樣的問題,n可大可小,如果n很小,我們可以直觀暴力拆解就可以得到答案,但是如果n很大,那

原创 從零開始認識堆排序

一、什麼是堆? 維基百科的解釋是:堆是一種特別的樹狀數據結構,它需要滿足任意的子節點必須都大於等於(最大堆)或者小於等於(最小堆)其父節點。 二、堆排序 堆排序是通過二叉堆數據結構實現,二叉堆滿足一下兩個特性: 1、滿足對的基本特性 2、完