原创 SpringBoot 條件註解

一、引言 當我們使用 SpringBoot 進行開發時,會引入許多的 starter 包,引入後就會爲我們做一些自動化配置,省去了大量配置的時間,快速開發。 以 Redis 爲例,當我們引入 Redis 的 starter 包時:

原创 性能監控 TP 指標

一、TP 指標 在對系統進行性能測試或性能監控時候,TP 指標是一種比較常見的性能參數,包括 TP50、TP99、TP999 等等。 總次數∗指標數=對應指標在總次數中的序號 總次數 \ast 指標數 = 對應指標在總次數中的序號

原创 理解 DRY、KISS、YAGNI 三原則

在軟件的設計當中前人已經總結了許多的設計原則和設計模式。例如 SOLID,GRASP 設計原則,這些原則都是基於面向對象設計總結而來的。而 GOF23 是基於許多常見的場景總結出了一套設計模式,在我們遇到類似的場景,都可以套用設計

原创 Google Jib 容器化構建工具

一、前言 隨着近些年的技術發展,Java 領域微服務已經成爲主流的技術方向。隨着微服務化,雲原生的概念也逐漸火熱起來,不瞭解雲原生彷彿就是一個原始人。而在雲原生中,應用容器化 是其核心屬性之一。 應用容器化,用抽象的話來說就是:將

原创 白話比特幣與區塊鏈

都 9102 年了,連大大都發話要大力發展區塊鏈技術,還不來趕緊了解下區塊鏈知識嗎。本篇文章主要是科普向,建立對比特幣和區塊鏈的基本認知。 一、比特幣誕生 2008 年在世界金融危機的大背景下,有一個化名爲中本聰的極客,在互

原创 上傳 Jar 包至 Maven 中央倉庫

一、前言 隨着時間積累,在平常寫自己的代碼過程中,會有類或者是模塊,比較通用,許多項目都能用得到。我們就可以把這些部分抽取成一個公共包,方便其他項目去使用。 本地 install 只能保存在本地中,因此將其上傳到中央倉庫中,平常就

原创 Java 併發編程——CountdownLatch

一、前言 今天來介紹下 concurrent 包下的一個工具類——CountDownLatch,這算是一個比較實用的工具類,在我們日常開發中使用的比較多,而且 API 也很簡單,總結記錄下。 注:本文的源碼淺析章節參考文章:《C

原创 Java 併發編程——線程池的異常處理機制

一、前言 1.1 文章起因 這篇文章的起因來源於一個 BUG,這個 BUG 和上篇文章《Java SynchronizedSet 線程不安全之坑》 有點關係。簡單來說,就是在線程池中執行任務,任務本身未做異常處理,導致出現異常後任

原创 JS 防抖技術和節流技術

在監聽窗口進行 resize、scroll 等調用函數頻率很高的操作時,如果每次都做相應的處理,則會加重瀏覽器的負擔,導致渲染延遲,甚至是假死,這樣會給用戶帶來非常糟糕的體驗。爲此我們必須在特定場景下限制調用頻率,但是又不影響效果

原创 Java 併發編程——ReentrantLock

一、簡介 ReentrantLock 是一個可重入且獨佔式的鎖,相較於傳統的 Synchronized,它增加了輪詢、超時、中斷等高級功能。其類圖如下: ReentrantLock 是 java.util.concurrent(

原创 Maven filter 實現 SpringBoot 多環境配置

一、前言 當我們正式開始工作生涯後,最先發現商業項目和我們自己寫的項目的不同之一就是:怎麼這麼多配置文件啊!! 就按照最普遍的:開發、測試、預發(仿真)和線上來說,一個項目就至少有四套配置了,那麼我們到底要如何配置多環境呢? 二、

原创 Java 併發編程——CyclicBarrier

一、簡介 CyclicBarrier 是一個同步工具類,它允許一組線程在到達某個柵欄點(common barrier point)互相等待,發生阻塞,直到最後一個線程到達柵欄點,柵欄纔會打開,處於阻塞狀態的線程恢復繼續執行.它非常

原创 SpringBoot集成Spring Security(10)——角色繼承

在本節中,補充下角色繼承的知識點。角色繼承其實是一個十分常見的需求,因爲一般系統中角色權限呈金字塔型,高層用戶擁有底層用戶的權限。 例如存在以下角色:普通用戶、VIP 用戶、SVIP 用戶、星悅會員,那麼對應的權限可以是“星悅會員

原创 Java SynchronizedSet 線程不安全之坑

一、前言 一般而言,想要構造出線程安全的 Set,我們會使用 Collections.synchronizedSet 方法,如下所示。 Set<User> set = Collections.synchronizedSet(new

原创 MySQL 常用用戶權限管理命令

一、用戶 1.1 創建用戶 -- 創建用戶,並允許其在任何IP登陸 create user 'username'@'%' identified by 'password'; -- 創建用戶,並允許其在任何主機登陸,不設置密碼 c