原创 持續集成、持續交付、 持續部署之間的區別於聯繫

持續集成(Continuous integration, 簡稱CI), 持續集成是一種軟件開發實踐, 即團隊開發成員經常集成他們的工作,通常每個成員每天至少集成一次,也就是意味着每天可能發生多次集成,每次集成都通過自動化的構建(包

原创 Java中運行javascript代碼(二)

本文在《Java中運行javascript代碼(一)》基礎上,展示瞭如何通過java向js函數傳遞參數。 請先閱讀《Java中運行javascript代碼(一)》以便您更快理解例子。 本文將展示兩個示例。 第一個示例,通過java

原创 netty heartbeat機制

前提: 本文會直接使用netty的LineBasedFrameDecoder和StringDecoder作爲例子,介紹heatbeat機制,因此讀者需要具備一定netty編程基礎。 問題由來 所謂心跳, 就在在 TCP長連接中,

原创 jstat命令基本用法

診斷程序性能問題,或者OOM問題需要查看程序運行的一些統計信息,jstat爲我們提供了很多虛擬機運行時的狀態信息,它可以顯示本地或者遠程虛擬機進程中的類加載、內存、垃圾收集、JIT編譯等信息。 基本用法 我的jdk是1.8.0_1

原创 Docker 中無法使用 JDK jmap之 Can't attach to the process: ptrace(PTRACE_ATTACH問題

問題描述 一個老服務最近出現OOM問題了(日誌中發現的),但是由於啓動參數沒有添加 -XX:+HeapDumpOnOutOfMemoryError無法獲取dump文件,這時想着使用jmap獲取dump文件,結果執行jmap報如下錯

原创 類加載器之-----使用spring-boot-devtools與drools導致的 com.x.y.A cannot be cast to com.x.y.A

我們知道判斷兩個類是否相等,只有在這兩個類是由同一個類加載器加載的前提下才有意義。使用spring-boot-devtools時,我們很多“”應用類“”是由spring提供的org.springframework.boot.dev

原创 如何將.crt和.key轉換爲.jks證書

項目中因爲使用環境和語言不通,需要將證書進行轉換,下面我們就展示一下如何將server.crt和server.key轉換爲.jks證書。 各種證書格式參考《SSL 證書格式普及,PEM、CER、JKS、PKCS12》 第一步 1,

原创 Netty實現SSL單向示例

直接使用TCP通信,方便靈活。 單將端口保留在外,又不安全,因此我們需要使用SSL, 對通信過程進行握手和加密, 確保安全。 準備證書 要使用ssl單向驗證,就必須先要生成服務端和客戶端的證書,並相將服務器證書添加到客戶端信任證

原创 bucket4j限流示例

最近處理測試某個業務的性能,發現當kafka消息量特別大的時候需要限制kafka消息消費速度,因爲接受消息的處理流程比較多,當消息量特別大的時候,如果kafka消息了消息(kafka是自動完成commit)提交給後臺處理,一旦後臺

原创 Java 堆默認大小

最近在調整程序的堆大小設置,就順便看了開發環境中如何設置的。發現開發環境沒有主動設置大小,那就應該是根據機器配置和操作系統以及JDK版本等信息使用了默認配置。 查詢 PrintFlagsFinal 關於查詢命令,請參考官方文檔:

原创 volatile與synchronized區別

招人時需要準備一些面試問題,有些內容雖然日常在用,但是沒有系統化理解,面試時也很難評判對方回答的是否準確。因此,重新梳理了volatile與synchronized。 volatile volatile 是最輕量級的同步機制。Ja

原创 Netty中基於ip的白名單或者黑名單機制示例

使用Netty 4.1.23版本需要用到白名單機制,發現網上很多資料都是介紹IpFilterRuleHandler,仔細一看4.x版本中找不到這個,而5.x又不被推薦使用,因此仔細查看官方4.x文檔發現有個RuleBasedIpF

原创 Java8 默認的GC收集器是?

起源 網上很多博文都java8之前的jvm的各種設置介紹,尤其關於Java8使用哪種垃圾收集算法以及jvm方面改變沒有準確的介紹。本文主要參考Oracle官方文檔。因此會有大量英文引用。 先上結論: 默認使用ParallelGC收

原创 Java9 默認的GC收集器是?

我們在介紹了Java8的默認收集器ParallelGC後, 很多人就繼續追問那Java9默認使用哪種收集器呢? 直接看官方文檔(https://docs.oracle.com/javase/9/whatsnew/toc.htm#J

原创 System.gc()與Runtime.getRuntime().gc()區別

首先,我們需要明確一點的是,兩個gc都會強制觸發垃圾收集,它們只是向JVM建議,現在也許是收集垃圾的好時機。 比較 System.gc()調用起來更方便,但是會給應用帶來不必要的性能問題。還可以通過參數-XX:+DisableEx