原创 去if-else化(一),利用工廠模式

if-else是平時寫代碼中最常用的一種寫法,當我們代碼量小的時候用來做條件判斷是再簡單不過的了。當需要判斷的情況逐漸增加的時候,上面的代碼可能會變的難以維護。這個是在進階高級開發的路上,應該逐步培養起這種前瞻意識,下面就介紹如何重構這樣

原创 深入理解Java 泛型原理和使用場景

泛型是什麼 泛型即參數化類型,就是將原來的具體的類型參數化。就像方法變量參數,類型也定義成類型參數,在傳入和調用的時候傳入具體的類型。看看下面的例子,有沒有什麼問題? List arrayList = new ArrayList

原创 Java8 新特性LocalDate 線程安全的時間處理類

Java8 新特性中推出了日期處理類LocalDate,實在是太方便了,主要用到是下面的3個類。 java.time.LocalDate ->只對年月日做出處理 java.time.LocalTime ->只對時分秒納秒做出處理 java

原创 多線程解決耗時的調用

多線程處理耗時操作的demo。耗時操作包括DB查詢和請求接口。  import java.util.List; import java.util.concurrent.Callable; import java.util.concu

原创 線上問題定位—cpu飈高

服務器CPU突然告警,如何定位是哪個服務進程導致CPU過載,哪個線程導致CPU過載,哪段代碼導致CPU過載? 步驟一、找到最耗CPU的進程 工具:top 方法: 執行top -d 1 -c,每秒刷新一次,顯示進程運行信息列表 鍵入P

原创 springboot 中異步調用 使用@Async

一、背景 對於一些的耗時的且與處理結果業務不是緊密關聯的,我們採用異步調用的方式處理。一般我們會手動創建一個線程池,來執行這個耗時的異步任務。其實spring 已經提供了一個註解來幫我們幹了這件事了 二、使用方式 使用方式就是很簡單了 1

原创 Spring 聲明式事務中常見的坑點

背景 我們在業務代碼中經常使用數據庫的事務,及spring 聲明式事務@Transcational, 但也經常遇到事務不生效的情況,總結起來主要是踩到下面的幾個坑去了。 一、配置不正確 導致方法上的事務沒生效,需要確認@Transctio

原创 HTTP壓測工具Wrk 介紹和使用

介紹 wrk是一款簡單的HTTP壓測工具,託管在Github上,https://github.com/wg/wrk. wrk 的一個很好的特性就是能用很少的線程壓出很大的併發量. 原因是它使用了一些操作系統特定的高性能 io 機制, 比如

原创 線上問題定位處理的工具Arthas

前言 在使用 Arthas 之前,當遇到 Java 線上問題時,如 CPU 飆升、負載突高、內存溢出等問題,你需要查命令,查網絡,然後 jps、jstack、jmap、jhat、jstat、hprof 等一通操作。最終焦頭爛額,還不一定能

原创 異步執行一組任務等待所有任務執行完成的2種方式

private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 10, 60, TimeUnit.SECONDS, new ArrayB

原创 GitHub上最牛逼的10個Java項目

以下文章來源於阿飛的博客 ,作者阿飛的博客 1. CS-Notes star:92.1k 介紹:技術面試必備基礎知識、Leetcode、計算機操作系統、計算機網絡、系統設計、Java、Python、C++ ;地址:https://cyc2

原创 HTTP 連接池的使用

一、HTTP 的長短連接問題 HTTP1.0 當時用的還是短連接的方式,就是每次的請求都要建立一次TCP連接,創建TCP連接和關閉TCP的連接都是耗時的過程。 HTTP1.1 則對HTTP1.0做了很大的改進,默認使用的是長連接的方式。減

原创 重試工具庫一: Guava-Retrying

在我們的開發中,api 接口調用異常是經常會遇到的,任何接口都會有不同概率的異常情況,對於可以重入的接口,爲了避免偶發性異常造成的服務的不可用,重試機制就非常有必要了.Guava-Retryiny 是一個非常靈活的重試組件,包含多種重試策

原创 垃圾回收的優化

回收發生在哪裏 JVM內存區域中:程序計數器、虛擬機棧、本地方法這個3個區域是線程私有的,堆和方法區則是線程共享的。那麼垃圾回收重點關注的是堆和方法區。堆中是對對象的回收,方法區是對常量和類的回收。       點贊