原创 生活中的 “依賴” 和 程序裏的 “依賴”

“依賴” 在百度百科裏有兩種釋義: 1、依靠別人或事物而不能自立或自給。 2、各個事物或現象互爲條件而不可分離。 在生活中,“依賴” 這個詞我們也經常使用。小孩子在嬰幼兒階段,需要父母/養育者的照顧,小孩依賴父母/養育者。談戀愛的時候,女方

原创 數據存儲結構設計,是讀擴散,還是寫擴散?

今天在某個即時通訊的羣中無意看到這麼一句話: 不由問自己,什麼是讀擴散?什麼是寫擴散?感覺這兩個詞昨天才看的,怎麼今天就忘了?翻翻工作記錄,原來是在去年10月份接觸到的。並且確認過眼神,在羣聊裏,我使用的是讀擴散。 所謂讀擴散,就是**

原创 業務邏輯裏的就近原則

說到就近原則,想必大家都不陌生,在生活中我們經常使用。 午飯叫外貨,可以根據店家距離選擇,距離近的送貨比較準時,甚至可以提前送到。 下班購物,更有可能選擇回家路上的商場。這個就近原則,是物理距離上的近。 網頁中的CSS樣式文件,如果有多個樣

原创 Java中,這四種關係如何理清:依賴、關聯、聚合、組合

在學習面向對象、設計對象關係時,依賴、關聯、聚合、組合這四種關係很容易混淆。如何更好地區分和使用它們呢,今天就來梳理一下。 一、依賴(dependency) 依賴關係,是類與類之間的聯結關係,表示一個類依賴於另一個類的定義。 它是一種使用(

原创 String、StringBuffer、StringBuilder的區別千萬不要死記硬背了

String、StringBuffer和StringBuilder它們三者的區別,是面試官們最愛問的問題之一,它們之間到底有什麼區別呢? 1.值可變性 String 是字符串常量,字符串長度不可變。 查看源碼可以發現,String類是被

原创 把權限設計模型RBAC0、RBAC1、RBAC2、RBAC3擼一把

權限管理是管理後臺不可或缺的一個重要模塊。通過對用戶的授權,使得不同用戶在登錄成功後,可以操作不同的菜單和數據,這樣就可以對數據形成一定的保護作用。對於權限管理模塊的設計,本人也經歷了不少版本。 第一個版本,也是最low的一個版本。早不記得

原创 POJO、DO/PO、BO、VO、DTO的區別與聯繫

最近看到好多O,DO/PO、BO、VO、DTO等等,這麼多O不都是POJO嗎,有必要分這麼細嗎? POJO 是什麼?爲什麼會有 POJO ? POJO(Plain Ordinary Java Object) 簡單的java對象,是爲了避免和

原创 SpringBoot整合Flowable框架,一個審批流程的簡單入門

審批流程在ERP系統中比較常見,請假條審批、報銷單審批、財務覈銷審批等等。在Java中也有很多專門針對審批流程而設計的框架,Flowable便是其中一個。現在就以請假條的審批流程爲例,來看看Flowable的入門使用。 請假條的業務流程,暫

原创 char和varchar,數據庫設計時需要注意的一點

char 和 varchar 都是 MySql 數據庫中存儲字符串的數據類型,它們也是經常被面試的題目之一。 char類型 char類型用於存儲長度固定的字符串。存儲範圍:0~255個字符。舉個例子:char(10) ,設置了10個字符,最

原创 使用 Redis 的 zset + 線程池,實現延時隊列

一個靠譜的延時隊列,通常需要保證以下幾個特性: 持久化,不能因爲某個應用的重啓而信息丟失; 確認和重試機制,發送成功了再刪除,發送失敗了可以重試; 低延時,發送時間儘量精準,誤差不能太大; 前幾天寫的兩個demo,一個不能滿足持久化,應

原创 使用 Redis 的 zset 實現延時隊列

Java 延時隊列DelayQueue實現原理及Demo 在上一篇文章中,我們使用jdk自帶的DelayQueue延時隊列寫了一個小demo,現在來看看使用redis的zset有序集合是怎麼實現延時隊列的。在實現之前,先把zset相關的指令

原创 SpringBoot內置工具類之 斷言 Assert

說到斷言Assert,我們在查看源碼時經常看到,它是使用比較頻繁的一個工具類,但我也經常忽略它的存在。現在就讓我們一起看看它吧! About斷言Assert 斷言是一個判斷邏輯,用來檢查不該發生的情況; 斷言的判定規則: 2.1.值爲tr

原创 紅黑樹,不要把它想得太神祕了 紅黑樹的引入 紅黑樹是什麼?有哪些特點和應用?

紅黑樹的引入 一、有了二叉樹,爲什麼還需要平衡二叉樹? 二叉樹容易退化成一條鏈,也就是出現左斜樹、右斜樹的情況; 當出現斜樹的時候,查詢時間複雜度由O(log2N)增長至O(N); 引入左右子樹高度差絕對值不能大於1的平衡二叉樹,可以保證

原创 SpringBoot 快速整合 SpringBatch

SpringBatch是一個輕量級的、全面的批處理框架,旨在開發對企業系統的日常運營至關重要的強大批處理應用程序。 一個典型的批處理流程如下圖所示: 第一步,從數據庫、文件或隊列中讀取大量數據; 第二步,對數據進行處理; 第三步,對處理

原创 使用Redis實現分佈式延遲任務

在上一篇demo中,通過redis的zset加定時任務線程池實現了可持久化的延時任務。可實際情況比這個複雜的多,項目是分佈式應用,延時任務的線程池單獨一個項目,和其他項目互不干擾,這可怎麼辦? 添加其他的消息中間件吧,成本太高。那就用red