原创 Twitter SnowFlake算法

  SnowFlake算法生成的ID值是一個64bit大小的整數,結構圖如下 1位,不用。二進制中最高位爲1的都是負數,但是我們生成的id一般都使用整數,所以這個最高位固定是0 41位,用來記錄時間戳(毫秒)。 41位可以表示個數字,

原创 Netty之心跳重連

心跳定義 心跳即在TCP長連接中,客戶端和服務器之間定期發送的一種特殊的數據包, 通知對方自己還在線,以確保TCP連接的有效性。爲什麼需要心跳 因爲網絡的不可靠性,有可能在TCP保持長連接的過程中,由於某些突發情況,例如網線被拔出,突然掉

原创 Guava之EventBus實戰

EventBus是Guava的事件處理機制,是設計模式中的觀察者模式(生產/消費者編程模型)的優雅實現。對於事件監聽和發佈訂閱模式,EventBus是一個非常優雅和簡單解決方案,我們不用創建複雜的類和接口層次結構。 定義EventBus

原创 Redis發佈訂閱模式

redis發佈訂閱架構 Redis提供了發佈訂閱功能,可以用於消息的傳輸,Redis的發佈訂閱機制包括三個部分,發佈者,訂閱者和Channel。  發佈者和訂閱者都是Redis客戶端,Channel則爲Redis服務器端,發佈者將消息發送

原创 Netty之粘包拆包解決

粘包拆包表現形式 產生粘包和拆包問題的主要原因是,操作系統在發送TCP數據的時候,底層會有一個緩衝區,例如1024個字節大小,如果一次請求發送的數據量比較小,沒達到緩衝區大小,TCP則會將多個請求合併爲同一個請求進行發送,這就形成了粘包問

原创 實例分析join、left join、right join、fulljoin間的區別

分析INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN的ON、WHERE後面跟條件的區別 準備表結構及數據 新建表TAB1和TAB2,TAB1字段ID,SIZ;TAB2字段SIZ,NAME SELECT *

原创 linux日常使用命令

一.grep 定位到關鍵字所在的行 grep -n '關鍵字' filename vim +n filename 查找文件中是否存在關鍵字 cat filename | grep ‘關鍵字'二.sz、rz sz filename(下載)

原创 netty之HashedWheelTimer源碼分析

簡介 HashedWheelTimer是Netty的一個工具類,來自netty-common包,簡單來說用於實現延時任務。 使用場景:dubbo失敗重試、netty中長連接超時(如客戶端由於網絡原因導致無法傳送心跳至服務端)。優缺點 優點

原创 java讀寫鎖ReentrantReadWriteLock源碼分析

ReentrantReadWriteLock簡介 ①讀寫鎖在同一時刻可允許多個讀線程訪問,但在寫線程訪問時,所有的讀線程和其他寫線程均被阻塞。保證了寫操作對讀操作的可見性 ②讀寫鎖維護了一對鎖,一個讀鎖和一個寫鎖,分離讀寫鎖提升併發性能

原创 redis批量刪除問題

1、批量刪除以name_開頭的key redis-cli keys "name_*" | xargs redis-cli del注意:如果redis-cli沒有設置成系統變量,需要指定redis-cli的完整路徑 /usr/local/b

原创

隊列章節中我們已經介紹了優先級隊列,優先級隊列是一種抽象數據類型(ADT),它提供了刪除最大或最小關鍵字值的數據項的方法,插入數據項的方法,優先級隊列可以用有序數組來實現,這種實現方式儘管刪除最大數據項的時間複雜度爲O(1),但是插入還是

原创 Netty啓動連接分析

1. 服務端啓動流程 // ServerSocketChannel初始化註冊過程 bind(int inetPort)     - doBind(final SocketAddress localAddress)         - i

原创 java阻塞隊列之ArrayBlockingQueue

ArrayBlockingQueue簡介 它是 BlockingQueue 接口的有界隊列實現類,底層採用數組來實現。 ArrayBlockingQueue的特性 1.其併發控制採用可重入鎖來控制,不管是插入操作還是讀取操作,都需要獲取到

原创 MongoDB備份與恢復

備份命令 mongodump -h dbhost -d dbname -o dbdirectory mongodump -h 127.0.0.1:27017 -d test -o e:\backup -h指定MongDB所在服務器地址,-

原创 NIO selector多路複用

public class NioServer {     // 通道選擇器,監控多個Channel並決定哪些channel能進行讀或寫,一個selector管理多個channel     private Selector se