原创 面試題之常見解決方案

秒殺系統設計 1.解決超賣問題 使用version方式的分佈式鎖,這樣當併發的情況下,根據version字段作爲條件來控制併發 2.解決限流問題 a.漏桶算法,有固定大小的容器,請求來了先緩存在容器中,然後以恆

原创 分佈式學習筆記之分佈式鎖

概述 在單機情況下,我們知道也是存在鎖的概念,但是那些鎖在分佈式情況下就沒用了,因爲不是內存共享的,沒辦法通信,所以我們要學習分佈式鎖,主要有三種實現方式 ,分別基於redis,mysql,zookeeper redis分

原创 (四)Spring源碼分析事務原理

概述 Spring的事務原理很簡單,其實就是基於AOP的特性去實現的。不明白的可以先了解AOP的實現原理。所以想要使用事務,那麼必須先配置AOP,那麼怎麼才能使用事務呢,其實很簡單,就是注入一個支持事務的Advice即可,這個A

原创 (三)JDK線程池源碼分析2之線程生命週期

概述 在JDK線程池源碼分析1中我已經將線程池的創建,線程池中線程的創建,線程執行任務的整個流程已經分析完畢了,這次主要是來分析單個線程在線程池中是如何工作的以及如何被管理的.其實這個實現的流程主要在ThreadPoolExe

原创 (四)RocketMQ源碼分析之producer的主流程

概述 producer作爲消息隊列的客戶端之一,我們主要了解清楚producer在發送消息的一些機制。比如:瞭解producer發送消息的幾種方式;瞭解producer如何發送消息到對應的隊列,它的策略是怎樣的,如何做到高可用;

原创 常見問題之線程池

爲什麼要用線程池 1.降低資源消耗:通過重用已經創建的線程來降低線程創建和銷燬的消耗 2.提高響應速度:任務到達時不需要等待線程創建就可以立即執行 3.提高線程的可管理性:線程池可以統一管理、分配、調優和監控 線程的四種創

原创 (八)JDK源碼分析之集合框架ArrayList

概述 ArrayList是java集合框架中最常見的,也是用的最多的一種,底層採用的數據結構就是數組,使用和實現起來非常簡單。 構造方法 說明:構造方法一共三個 1.直接指定一個初始大小,直接創建這個大小的數組分配給Ar

原创 (六)JDK源碼分析之可重入讀寫鎖ReentrantReadWriteLock

概述 可重入讀寫鎖,其實就是在重入鎖基礎上區分了一下讀寫鎖.讀寫鎖也稱爲共享鎖,也就是說可以多個線程同時獲取鎖,這樣大大提高了系統的吞吐量. 讀寫鎖中 讀鎖和讀鎖是共享的,寫鎖和讀鎖寫鎖都是互斥的. 鎖的狀態如何區分讀寫

原创 (十一)JDK源碼分析之AQS同步隊列和等待隊列交互圖

建議 希望讀者打開源碼對照看,或者有AQS源碼基礎存在一些疑惑的同學看,一定能有所收穫

原创 Java線上診斷工具Arthas

概述 Arthas是一個開源的線上診斷工具,可以實時查看線上代碼運行情況,詳情參考Arthas 安裝 1.下載jar包即可 https://alibaba.github.io/arthas/arthas-boot.jar

原创 (十二)JDK源碼分析之常用併發工具類

CountDownLatch 功能 1.需要等待多個線程都完成某個任務,然後喚醒主線程繼續執行; 2.當兩個線程時,主線程需要等待子線程完成任務到某個進度,然後喚醒主線程繼續執行。 使用 1.創建CountDownLa

原创 常見問題之redis

redis過期鍵刪除策略 1.立即刪除:有定時處理器處理,發現鍵過期立刻刪除(對cpu不友好,對內存友好) 2.惰性刪除:當需要用某個鍵時再判斷是否需要刪除,沒用到的鍵一直在(對cpu友好,對內存不友好) 3.定時刪除:定時刪

原创 java併發理論摘要

數據依賴 所謂的數據依賴是指,如果多個java指令之間順序變化會影響結果,那麼說明這個這兩個指令存在數據依賴關係。 as-if-serial 在一個線程中,會考慮數據依賴問題,也就是說如果兩個指令有數據依賴的關係,那麼不會

原创 (十)JDK源碼分析之ReentrantLock流程總結

建議 希望讀者打開源碼對照看,或者有AQS源碼基礎存在一些疑惑的同學看,一定能有所收穫 lock 1.調用AQS的acquire方法,先tryAcquire方法嘗試獲取鎖根據status的判斷。如果獲取鎖成功,那麼直接返回

原创 常見面試題之設計模式

設計模式分類 創建模式:工廠模式,單例模式,原型模式等 結構模式:適配器,組合,裝飾器,門面,代理等 行爲模式:模板方法,責任鏈,策略,觀察者等 簡單工廠,工廠方法,抽象工廠(創建模式)