原创 設計模式學習筆記之-代理模式 原

      代理模式中,客戶不會直接調用目標對象而是通過一個代碼對象,客戶調用代理對象代理對象去調用目標對象,起到對象與對象間的隔離作用。有時候我麼不想直接訪問目標對象,有時候我們不能直接訪問目標對象這時候就需要一個代理對象來代替我們訪問目

原创 有限狀態機學習-簡單交易流程 原

有限狀態機是一種用於對事物或者對象的行爲進行建模的工具,廣泛在互聯網場景下包括但不限於訂單、客服、配送等場景,尤其是訂單場景經常會使用到有限狀態機用於建模。 狀態機具有四要素: 現態:對象當前所處的狀態。 條件:觸發一種動作,當滿足某種條件

原创 CyclicBarrier、CountDownLatch以及Semaphore使用及其原理分析 原 薦

CyclicBarrier、CountDownLatch以及Semaphore是Java併發包中幾個常用的併發組件,這幾個組件特點是功能相識很容易混淆。首先我們分別介紹這幾個組件的功能然後再通過實例分析和源碼分析其中設計原理。 Cyclic

原创 ConcurrentHashMap源碼分析(JDK1.7和JDK1.8) 原

ConcurrentHashMap是Java中使用非常普遍的一個Map,ConcurrentHashMap較HashMap而言極大提高了併發操作速度,我們知道HashMap是線程不安全的,在多線程環境下容易出現死鎖,線程安全的HashTab

原创 Spring事務傳播級別 原

Spring默認支持7種事務傳播級別,這裏事務級別要區分數據庫事務隔離級別。Spring事務傳播性定義在TransactionDefinition類中,下面分別介紹各種傳播級別及其特點: PROPAGATION_REQUIRED:該級別爲S

原创 Mybatis架構設計及源碼分析-SqlSession 原

我們知道執行一次sql語句至少要創建一個SqlSession,一個SqlSession包含了只少一次與數據庫的回話過程,mybatis中SqlSession中包含了所有可能出現的sql語句執行過程其默認實現爲DefaultSqlSessio

原创 Redis設計與實現系列-基本數據結構-SDC 原 薦

關於《Redis設計與實現》讀書筆記 SDC全稱是(simple dynamic string,SDS),Redis是以C語言編寫的,但是Redis並沒有直接使用C語言內置的字符串(C語言內置的字符串以空格結束),Redis自己構建了一套抽

原创 深入分析JDK鎖優化技術 原

JDK中使用了多種方式來進行同步操作,同步操作中使用最多的就是鎖,JDK在1.6對鎖進行了大量優化以滿足不斷髮展的性能要求。JDK主要針對鎖優化做了如下處理:                                   下面分別介紹

原创 Mybatis架構設計及源碼分析-mapper.xml文件解析 原

使用mybatis我們通常會自己去書寫mapper.xml文件,文件內部通常會書寫sql語句相關信息,下面我們將分析mybatis是如何解析這些信息並保存於全部配置類Configuration中。 回到之前的代碼mapperElement(

原创 Redis設計與實現系列-基本數據結構-鏈表和壓縮列表 原

關於《Redis設計與實現》讀書筆記 鏈表作爲一種非常友好的數據結構在很多高級編程語言中都有內置,然而C語言中沒有沒有鏈表這種數據結構,在redis中redis自行設計了一套鏈表數據結構用於存儲鏈式數據,redis中設計了一個雙端鏈表,該鏈

原创 Mybatis架構設計及源碼分析-一條語句執行的過程 原

編程式使用mybatis通常會通過SqlSessionFactoty拿到SqlSession接口對象,如下所示: String resource = "mybatis.xml"; InputStream inputStream = Reso

原创 設計模式學習筆記之-觀察者模式 原

   觀察者模式在實際應用中非常多,觀察者模式定義了一種一對多關係,這樣使得其中的一發生變化時會通知到多。觀察者模式類圖如下:                   Obsserver:抽象觀察者接口,通常會定義一個更新接口,使得被觀察者發生

原创 Mybatis架構設計及源碼分析-MappedStatement 原

一個MappedStatement對應mapper配置的xml文件中的一條sql語句節點,比如: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//m

原创 深入學習JVM-JVM 安全點和安全區域 原

安全點 JVM進行垃圾回收是一個非常複雜的過程,如何進行垃圾標記、什麼時候進行垃圾、如果進行垃圾回收等等都非常複雜,當前主流測JVM在垃圾回收時都會進行STW(stop the world),即使宣稱非常快的CMS垃圾回收期早期也會STW標