原创 計算機編碼相關問題

整數在計算機中的編碼 整數在計算機中是以補碼的形式存儲的, 補碼和原碼的區別在負數上。 下面代碼上展示了10這個整數在計算機中的二進制是怎麼表示的。 public static void main(String[] args) {

原创 Tomcat spring boot 項目啓動慢的問題

清理不必要的 Web 應用 首先我們要做的是刪除掉 webapps 文件夾下不需要的工程,一般是 host-manager、example、doc 等這些默認的工程,可能還有以前添加的但現在用不着的工程,最好把這些全都刪除掉。如果你看過 T

原创 Disruptor簡單使用

  Disruptor從功能上來說,可以實現隊列的功能,也可以把它當成單機版的JMS來看待。從性能上來說,它比ArrayBlockingQueue有更好的性能表現,對於生產者消費者模型的業務,Disruptor是一個更好的選擇可以很好的實現

原创 Elasticsearch6.4安裝

下載地址:https://www.elastic.co/cn/downloads 假設系統安裝好了對應的jdk,且jdk的版本要高於8。下面是具體的安裝步驟。解壓下載的安裝包,命令如下:tar -xzvf elasticsearch-6.4

原创 Netty 新連接的接入

本文通過源碼分析Netty是如何一步步的將接收客戶端的新連接,然後將連跟NioEventLoop綁定,並註冊相應的Read事件。 檢測新連接 入口爲NioEventLoop的processSelectedKey方法 進入到N

原创 Netty Recycler源碼解讀

Recycler是一個輕量級的對象緩存池,用來實現對象的複用。下面是使用Recycler的一個簡單實例: import io.netty.util.Recycler; public class RecycleTest { priv

原创 Netty 編碼與數據的寫入

Netty 編碼 業務裏的數據最終需要通過socket寫回到客戶端,我們寫的業務方法都是面向對象來進行編碼的,而channel底層傳輸的是字節,Netty通過定義encoder來完成對象到字節的轉換。自定義的encode可以通過繼承Me

原创 FastThreadLocal

JDK提供了ThreadLocal,用於構造線程安全的對象,ThreadLocal通過Thread的ThreadLocalMap內部屬性來保證線程安全,而ThreadLocalMap的key是ThreadLocal。通過map這種數據結構來

原创 Netty 模擬百萬連接

  我們知道單機的端口最多65536,除去系統使用的端口, 留給程序使用的也就6萬個端口, 在需要對單機做長連接壓力測試的時候,如果要測60W的長連接併發,就得找10臺機器,而一般情況下我們並沒有這麼多的空閒機器去做這種規模的測試,那如何用

原创 Netty 解碼器

解碼器抽象的解碼過程   Netty裏的解碼通過抽象類ByteToMessageDecoder進行統一規劃。ByteToMessageDecoder繼承了ChannelInboundHandlerAdapter,解碼器也是一個Channel

原创 Netty Unpooled 內存分配

Netty裏的內存管理是通過ByteBuf這個類作爲橋樑連接着業務代碼與jdk底層的內存。所以理解ByteBuf的結構就很有必要了。 ByteBuf ByteBuf的內部結構如下圖: 這裏通過兩個指針,readerIndex與write

原创 ChannelPipeline源碼分析

pipeline的初使化 pipeline的創建:pipeline在創建channel(無論是客服端的channel還是服務端的channel)的時候被創建。 Netty裏目前只有一個pipeline的實現, 也就是Defa

原创 Java中弱引用、軟引用、虛引用、強引用、 Finalizer引用

在Java層面,一共有四種引用:強引用、軟引用、弱引用、虛引用,這幾種引用的生命週期由強到弱。轉換關係大致如下圖所示: 強引用(Strong Reference)   就是我們最常見的普通對象引用,只要還有強引用指向一個對象,就能表明

原创 JVM監控及診斷工具

命令行工具jps   jps類似於linux中的ps命令,用於打印正在運行的java進程相關的信息。主要參數有: 1)-l 打印模塊名以及包名 2)-v 打印傳給JVM的參數 3)-m打印傳給main方法的參數 jstat

原创 Spring集成TestNG測試MVC Controller

  在項目中需要寫單元測試,如何保證寫的單元測試的質量是比較高的。有以下幾個原則。編寫具有確定性結果的測試用例。代碼中使用斷言,而不是System.out.print語句輸出結果,然後人工驗證。對於需要訪問數據庫的操作或者外部數據,可以使用