原创 【JAVA】Lambda執行原理

在我的想法裏,Lambda長得很奇怪,虛擬機真的認識這玩意嗎?還是說,Lambda經過編譯後,脫掉了僞裝的衣服,變成了大家熟知的方法? 對Lambda不熟悉的同學,可以先看我的另外兩篇文章。 【JAVA8】對Lambda的理解 【JAVA

原创 【數據庫】MySQL 加鎖處理分析

一、背景 MySQL/InnoDB的加鎖分析,一直是一個比較困難的話題。我在工作過程中,經常會有同事諮詢這方面的問題。同時,微博上也經常會收到MySQL鎖相關的私信,讓我幫助解決一些死鎖的問題。本文,準備就MySQL/InnoDB的加鎖問

原创 Java8中Stream的常用方法

前言 這篇文章簡單總結一下Stream中的常用方法,,當然一般都是和Lambda配合着使用的。 對Lambda不熟悉的同學,可以參考這篇進行入門對Lambda的理解,Lambda真是越用越爽 如果剛剛入門Lambda,但對Consumer

原创 【數據庫】淺析Innodb的聚集索引與非聚集索引

Mysql存儲引擎之一的Innodb的索引,可以分爲聚集索引與非聚集索引,這兩種索引都是使用B+樹組織的。 本文不講解什麼是索引,對索引不瞭解的同學可以先移步到我的另外一篇文章【數據庫】mysql索引簡談 在分析這兩種索引之前,我們先建立

原创 【數據庫】mysql死鎖問題分析

線上某服務時不時報出如下異常(大約一天二十多次):“Deadlock found when trying to get lock;”。       Oh, My God! 是死鎖問題。儘管報錯不多,對性能目前看來也無太大影響,但還是需要解

原创 【JAVA】初探switch實現原理

日常編碼中,我們常常用到switch語句,在我的另外一篇文章中【JAVA】優化if else的幾種方式,也談到了可以利用switch來優化if-else結構,那麼switch底層究竟是如何實現的呢? 我們先寫幾個示例 第一個示例:case

原创 【多線程】說說線程池

前言 線程池內部是多個線程的集合,在創建初期,線程池會創建出多個空閒的線程,當有一個任務需要執行時,線程池會選擇出一個線程去執行它,執行結束後,該線程不會被銷燬,而是可以繼續複用。 使用線程池可以大大減少線程頻繁創建與銷燬的開銷,降低了系

原创 【MySQL】談談鎖的類型

前言 MySQL中的鎖分爲表鎖以及行鎖,從字面意思就可以得知,表鎖是對一整張表進行加鎖,而行鎖是針對於特定的行。在Server層面,提供了表鎖的實現,而行鎖則由存儲引擎實現。Innodb引擎支持行鎖,Myisam則不支持行鎖。 下面從鎖模

原创 SQL中有關DQL、DML、DDL、DCL的概念與區別

SQL(Structure Query Language)結構化查詢語言是數據庫的核心語言,是高級的非過程化編程語言。它功能強大,效率高,簡單易學易維護。SQL語言基本上獨立於數據庫本身、使用的機器、網絡、操作系統,基於SQL的DBMS產

原创 ThreadLocal使用不好,小心造成內存泄露!

一、前言 對ThreadLocal不熟悉的同學,可以先參考我的另外一篇文章淺談ThreadLocal 在討論內存泄漏之前,需要明白java中的四種引用,同樣可以移步到java中的四種引用 什麼是內存泄露? 大白話講,就是我自己創建的對象,

原创 Lambda常用方法

前言 這篇文章簡單總結一下Lambda中的常用方法 對Lambda不熟悉的同學,可以參考這篇進行入門對Lambda的理解,Lambda真是越用越爽 如果剛剛入門Lambda,但對Consumer、Supplier、Predicate與Fu

原创 ConcurrentHashMap 底層原理

這篇文章,我打算從以下幾個方面來講。 1)多線程下的 HashMap 有什麼問題? 2)怎樣保證線程安全,爲什麼選用 ConcurrentHashMap? 3)ConcurrentHashMap 1.7 源碼解析 底層存儲結構 常用

原创 【數據庫】binlog、redo log、undo log掃盲

一、什麼是binlog binlog其實在日常的開發中是聽得很多的,因爲很多時候數據的更新就依賴着binlog。 舉個很簡單的例子:我們的數據是保存在數據庫裏邊的嘛,現在我們對某個商品的某個字段的內容改了(數據庫變更),而用戶檢索的出來數

原创 【HashMap】爲什麼長度總是2的整數次方

前言 開門見山,HashMap這樣做有兩點原因 提升計算效率,更快算出元素的位置 減少哈希碰撞,使得元素分佈均勻 提升計算效率 我們先看put方法的細節: public V put(K key, V value) {

原创 【多線程】LongAdder實現原理

前言 AtomicInteger、AtomicLong使用非阻塞的CAS算法原子性地更新某一個變量,比synchronized這些阻塞算法擁有更好的性能,但是在高併發情況下,大量線程同時去更新一個變量,由於同一時間只有一個線程能夠成功,絕