原创 淺談分庫分表

一、分庫分表背景 老調常談,直接原因是數據量的鍋。傳統IT/業務量較小的企業裏也許很難體現出,而在大型互聯網企業裏,數據量增長巨快,像我們公司埋點數據的指標拍平後,每天有億級別的數據。按阿里巴巴給出的開發規範,單表超過500w行就

原创 Sharding-JDBC的SpringBoot使用

本文使用的sharding-jdbc版本爲3.1.0,採用springboot的配置。 不同的sharding-jdbc版本,會有配置上的差異。請大家注意下版本問題。 要求:模擬訂單數據庫,有兩個數據庫demo_ds_0、de

原创 Redis批量設置Key過期

Redis批量1設置Key過期,一般有兩種方式:lua腳本和pipeline2。 lua腳本 -- expire_keys.lua 存放在classpath的script目錄中 for i=1, ARGV[1], 1 do

原创 JVM4:垃圾收集器和垃圾收集算法

前言 垃圾收集器主要考慮的工作是什麼內存該回收、什麼時候進行回收以及該怎麼樣進行回收? 通過之前的內容我們都知道,程序計數器、JVM棧及本地方法棧都是線程私有的,執行完畢自動銷燬,不需要過多考慮內存回收問題;而堆和方法區是屬於共享的區

原创 JVM2:內存溢出及常用命令列表

前言 本篇博文主要介紹使用程序觸發對應的內存溢出,並附帶上JVM常用的命令,供以後查看使用。 堆溢出 堆主要是用來存儲對象,我們只要不斷的創建對象,並防止虛擬機對對象進行回收則可以觸發堆溢出。 -Xms設置堆最小值、-Xmx設置堆最

原创 JVM1:Java內存區域

前言 說到Java內存區域,可能很多人第一反應是“堆棧”。堆棧不是一個概念,而是兩個概念,堆和棧是兩塊不同的內存區域。簡單理解的話, 堆是用來存放對象而棧是用來執行程序的,堆的使用是需要new並配對delete/free的,在Jav

原创 JVM6:虛擬機類加載機制

文章目錄類加載時機類加載過程加載驗證準備解析初始化描述類的實例化順序,比如父類靜態數據、構造函數、字段、子類靜態數據、構造函數、字段,當`new`的時候,他們的執行順序類加載器雙親委派模型自定義類加載器 類加載時機 類從被加載到虛擬機

原创 JDK1.8源碼:HashMap解讀

HashMap是我們最常用的集合類型之一了。也由於其高效、使用方便,我們有必要對其內部進行梳理一番。 JDK1.8源碼中,關於Map的類圖關係如下: Map家族的對比 從Map的類圖關係中,我們可以看出還是蠻豐富的。需要用到順序的,

原创 【Effective Java】條34:使用接口模擬擴展枚舉

假設某需求,有個計算器實現了加、減、乘、除的算法,但是希望同時也允許客戶端自定義某些操作方法。 計算器實現的加、減、乘、除代碼如下: public enum Operation { PLUS("+") { @Override

原创 【Effective Java】條39:必要時使用保護性拷貝

保護性拷貝 大家都知道,相比於C或者C++,Java是一門安全性的語言。但這不意味着在編程時你可以隨意爲之,相反,你也不得不盡最大考慮客戶端代碼在盡力破壞你的不可變變量等,你也必須保護性的來設計自己的程序。如: public final

原创 【Effective Java】條41:慎用重載

重載(Overload)和重寫(Override) 重載是指,同一個類裏,方法名相同,方法入參類型不同或者個數不同的方法;重寫是指子類重寫父類的某個方法。不僅僅是概念上的不同,在運行時調用哪種方法的選擇上也不同。如首先看個重載的示例: p

原创 【Effective Java】條25:列表優先於數組

數組和列表有兩個很大的不同: 1. 數組是協變,列表是不變的。意思是當類A是類B的子類時,則A[]是B[]的子類;而對於列表,對於任何兩個不同的類型Type1和Type2,都不會存在List<Type1>是List<Type2>的子類或

原创 【Effective Java】條17:爲繼承類專門設計並提供文檔說明,否則不使用

在【Effective Java】條16:複合優於繼承中我們已經提到過使用繼承的缺點。但如果是專爲繼承設計的,並提供文檔說明,那是排除在外的情形。下面看看怎麼專爲繼承設計類,並怎麼提供文檔說明。 該類的文檔需明確說明重寫任何方法的影響

原创 【Effective Java】條21:使用函數對象代表策略

一些編程語言通過提供函數指針、委託、lambda表達式或者其他類似的方式,來使得程序擁有存儲、並傳遞特殊函數的能力。Java沒有提供函數指針,但是對象引用能提供相同的效果,另Java 1.8開始,提供了lambda表達式。 例如,針對字符

原创 【Effective Java】條22:靜態成員類優於非靜態成員類

嵌套類是指定義在其他類裏面的類,其旨在爲外圍類提供服務。嵌套類有四種,分別爲靜態成員類、非靜態成員類、匿名類和局部類,其中非靜態成員類、匿名類和局部類又稱爲內部類。 靜態成員類 靜態成員類是最簡單的嵌套類。靜態成員類是外圍類的靜態成員,且