原创 簡述 InnoDB 對 MVCC 的實現

一、簡述 分爲兩個要點簡述: 要點一:行記錄的歷史版本是什麼樣子的? InnoDB 將行記錄及其歷史行記錄通過隱藏字段(DATA_ROLL_PTR)鏈成一個鏈表。歷史行記錄其實就是 undo log,放在共享表空間的 undo 段

原创 HTTPS 和安全通信原來這麼簡單

一、HTTPS 簡介 HTTP 協議(HyperText Transfer Protocol,超文本傳輸協議): 用於客戶端與服務器端之間的通信。 通過請求報文和響應報文的交換達成通信。 是無狀態的協議。 HTTP 協議以簡單

原创 源碼解析-線程A請求偏向於線程B的偏向鎖

一、先理理所有情況 假設偏向鎖有效,即類沒有關閉偏向模式,且其 epoch 沒有過期。 則一定會發生偏向鎖的撤銷。 第一類情況:線程 B 沒有正在持有該偏向鎖。 僅發生單個偏向撤銷,偏向鎖先被撤銷爲無鎖,然後在 slow_ent

原创 一個通用方法團滅 6 道股票問題!

轉載自:https://github.com/labuladong/fucking-algorithm/blob/master/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%B3%BB%E5%88

原创 藉助可變參數一次創建包含多個元素的 ArrayList

一、開門見山 兩種可以直接把要添加元素寫在參數列表裏的方法: 第一種:Arrays.asList 方式 List<Integer> l1 = new ArrayList<>(Arrays.asList(1, 2, 3)); 第二

原创 Java 線程狀態之 blocked 和 waiting 的區別

一、引子 synchronized 會阻塞線程,AQS 也會阻塞線程。那麼這兩種情況,阻塞後,線程的狀態是什麼,是 waiting 還是 blocked。雖然好像知道,但不能確定。在網上搜索後,經過指引,找到 Thread.Sta

原创 從編碼角度直觀理解信息熵計算公式

信息論之父 C. E. Shannon 在 1948 年發表的論文“通信的數學理論(A Mathematical Theory of Communication)”中指出,絕大部分信息都存在冗餘,冗餘大小與信息中每個符號(數字、字

原创 leetcode 215. 數組中的第K個最大元素(熱門面試題)

一、題目 在未排序的數組中找到第 k 個最大的元素。請注意,你需要找的是數組排序後的第 k 個最大的元素,而不是第 k 個不同的元素。 示例 1: 輸入: [3,2,1,5,6,4] 和 k = 2 輸出: 5 示例 2: 輸入:

原创 leetcode 72.編輯距離

編輯距離可以說是動態規劃算法中經典的、知名的題目了,題目難度也不小,是一道很好的動態規劃的題目。很可能會出現在面試中動態規劃的考察上。 題目 給定兩個單詞 word1 和 word2,計算出將 word1 轉換成 word2 所使

原创 強化學習Q learning算法最簡單的入門(含java實現的小例子)

一、強化學習 強化學習和遺傳算法優勝劣汰的思想類似,通過獎懲機制不斷強化好的行爲(action),弱化壞的行爲。至於什麼是好的行爲,什麼是壞的行爲,跟你要解決的具體問題有關,比如路徑規劃問題,走距離目標點較近的路線就是好的行爲,走

原创 你真的熟練掌握二分查找了嗎?

二分查找由於思想簡單,在經典算法中最容易被初學者忽視。 看懂了書上的一種寫法後,就以爲自己會了,而實際上是一看就會,一寫就廢。 不信的話,先來看一個問題: 找出升序數組中小於等於目標值的最大值?(數組中可能不包含目標值) 如果感覺

原创 滑動窗口算法框架總結

一、滑動窗口算法 也會使用兩個指針,但和雙指針算法不同的是雙指針算法關注的往往是兩個指針正在指向的兩個元素,而滑動窗口算法關注的是兩個指針之間的窗口,動態維護窗口中的信息。 滑動窗口算法一般用於解決子串或子數組問題,碰到這兩種問題

原创 源碼解析-觸發批量撤銷或批量重偏向的條件

JVM 基於一種啓發式的做法判斷是否應該觸發批量撤銷或批量重偏向。 依賴三個閾值作出判斷: # 批量重偏向閾值 -XX:BiasedLockingBulkRebiasThreshold=20 # 重置計數的延遲時間 -XX:Bia

原创 Java 字符串與字符串常量池

運行環境爲 JDK1.8。 1. String 的基本介紹 首先看一下 String 類源碼文件的文檔註釋: The String class represents character strings. All string li

原创 ArrayList擴容和溢出感知代碼

ArrayList 的擴容分爲主動擴容和自動擴容兩種。主動擴容就是通過調用 ArrayList 提供的 ensureCapacity() 方法來主動增加 ArrayList 實例的容量。自動擴容就是向 ArrayList 實例添加