原创 MyBatis 中爲什麼不建議使用 where 1=1?

最近接手了一個老項目,“愉悅的心情”自然無以言表,做開發的朋友都懂,這裏就不多說了,都是淚... ​ 接手老項目,自然是要先熟悉一下業務代碼,然而在翻閱 mapper 文件時,發現了一個比較詭異的事情。這裏給出簡化後的業務代碼: <?xml

原创 HashMap 中的一個“坑”!

最近公司新來了一個小夥伴,問了磊哥一個比較“奇怪”的問題,這個問題本身的難度並不大,但比較“隱蔽”,那究竟是什麼問題呢?接下來我們一起來看。 ​ 起因 最近公司的系統要增加一個新的列表展示功能,功能本身難度並不大,但遇到了一個很“可怪”的問

原创 Java 中 List 分片的 5 種方法!

前些天在實現 MyBatis 批量插入時遇到了一個問題,當批量插入的數據量比較大時,會導致程序執行報錯,如下圖所示: 原因是 MySQL 只能執行一定長度的 SQL 語句,但當插入的數據量較多時,會生成一條很長的 SQL,這樣程序在執行時

原创 MyBatis原生批量插入的坑與解決方案!

前面的文章咱們講了 MyBatis 批量插入的 3 種方法:循環單次插入、MyBatis Plus 批量插入、MyBatis 原生批量插入,詳情請點擊《MyBatis 批量插入數據的 3 種方法!》。 ​ 但之前的文章也有不完美之處,原因在

原创 升級了 Windows 11 正式版,有坑嗎?

今天磊哥去公司上班,驚喜的發現 Windows 提示更新了,並且是 Windows 11 正式版,這太讓人開心了,二話不說“先升爲敬”。 ​ 下載更新 下載完咱就重啓更新唄。 Windows 11 初體驗 更新按照的時間有點長,大概 1

原创 MyBatis 批量插入數據的 3 種方法!

批量插入功能是我們日常工作中比較常見的業務功能之一,之前我也寫過一篇關於《MyBatis Plus 批量數據插入功能,yyds!》的文章,但評論區的反饋不是很好,主要有兩個問題:第一,對 MyBatis Plus(下文簡稱 MP)的批量插入

原创 MyBatis Plus 批量數據插入功能,yyds!

最近 Review 小夥伴代碼的時候,發現了一個小小的問題,小夥伴竟然在 for 循環中進行了 insert (插入)數據庫的操作,這就會導致每次循環時都會進行連接、插入、斷開連接的操作,從而導致一定的性能問題,簡化後代碼如下: /**

原创 什麼是可中斷鎖?有什麼用?怎麼實現?

在 Java 中有兩種鎖,一種是內置鎖 synchronized,一種是顯示鎖 Lock,其中 Lock 鎖是可中斷鎖,而 synchronized 則爲不可中斷鎖。 ​ 所謂的中斷鎖指的是鎖在執行時可被中斷,也就是在執行時可以接收 int

原创 1.3w字,一文詳解死鎖!

死鎖(Dead Lock)指的是兩個或兩個以上的運算單元(進程、線程或協程),都在等待對方停止執行,以取得系統資源,但是沒有一方提前退出,就稱爲死鎖。 1.死鎖演示 死鎖的形成分爲兩個方面,一個是使用內置鎖 synchronized 形成

原创 輪詢鎖在使用時遇到的問題與解決方案!

當我們遇到死鎖之後,除了可以手動重啓程序解決之外,還可以考慮是使用順序鎖和輪詢鎖,這部分的內容可以參考我的上一篇文章,這裏就不再贅述了。然而,輪詢鎖在使用的過程中,如果使用不當會帶來新的嚴重問題,所以本篇我們就來了解一下這些問題,以及相應的

原创 死鎖終結者:順序鎖和輪詢鎖!

死鎖(Dead Lock)指的是兩個或兩個以上的運算單元(進程、線程或協程),都在等待對方停止執行,以取得系統資源,但是沒有一方提前退出,就稱爲死鎖。 死鎖示例代碼如下: public class DeadLockExample {

原创 死鎖的 4 種排查工具 !

死鎖(Dead Lock)指的是兩個或兩個以上的運算單元(進程、線程或協程),都在等待對方停止執行,以取得系統資源,但是沒有一方提前退出,就稱爲死鎖。 死鎖示例 接下來,我們先來演示一下 Java 中最簡單的死鎖,我們創建兩個鎖和兩個線程

原创 圖解:爲什麼非公平鎖的性能更高?

在 Java 中 synchronized 和 ReentrantLock 默認使用的都是非公平鎖,而它們採用非公平鎖的原因都是一致的,都是爲了提升程序的性能。那爲什麼非公平鎖就能提升性能呢?接下來我們一起來看。 非公平鎖 非公平鎖:每個線

原创 ReentrantLock 中的 4 個坑!

JDK 1.5 之前 synchronized 的性能是比較低的,但在 JDK 1.5 中,官方推出一個重量級功能 Lock,一舉改變了 Java 中鎖的格局。JDK 1.5 之前當我們談到鎖時,只能使用內置鎖 synchronized,

原创 synchronized優化手段:鎖膨脹、鎖消除、鎖粗化和自適應自旋鎖...

synchronized 在 JDK 1.5 時性能是比較低的,然而在後續的版本中經過各種優化迭代,它的性能也得到了前所未有的提升,上一篇中我們談到了鎖膨脹對 synchronized 性能的提升,然而它也只是“衆多” synchroniz