原创 zookeeper數據同步

leader節點會爲每個follower節點維護一個FIFO數據隊列,更新數據時往隊列中添加   一、已提交的數據不能丟失 節點1爲leader 節點2、3、4、5爲follower   節點1發起新的事物投票通過後,將事物保持在本地,然

原创 spring單例模式與線程安全問題

一、局部變量,不存在線程安全問題,因爲每個請求都是一個線程請求,局部變量都在線程內不共享 public int sayHello(int count) { try { Thread.sleep(1

原创 redis持久化

rdb(redis database): 觸發rdb條件(默認): save "" : 不使用RDB存儲 save 900 1 : 表示15分鐘(900秒鐘)內至少1個鍵被更改則進行快照 save 300 10 : 表示5分 鍾(300秒

原创 redis事物、樂觀鎖

事物:由MULTI  ...  EXEC控制 就是把多個命令放在一個queue中,一起去執行 語法錯誤:也就是編譯階段出錯,那麼整個queue都被丟棄,全部不執行; 執行錯誤:也就是運行階段出錯,只要是正確的命令都會執行,那怕是在錯誤命令

原创 JVM解釋器和即時編譯器JIT

  代碼編譯的過程就是把class字節碼編譯成機器語言,使機器能夠直接運行的過程。   JIT 編譯器在運行程序時有兩種編譯模式可以選擇,並且其會在運行時決定使用哪一種以達到最優性能。這兩種編譯模式的命名源自於命令行參數(eg: -cl

原创 mysql事物隔離級別詳解

前提條件,兩個session開啓事物,start transaction; 然後進行一下操作,session分別是A和B   一、讀未提交(髒讀) AB開始事物後,A修改數據未提交,B可以讀到A修改的數據; 二、讀已提交(幻讀) AB開始

原创 mysql事物寫入過程原理

一、從緩存區到磁盤的過程 innodb_flush_log_at_trx_commit參數設置redo log重做日誌策略: 0:commit時,redo log寫入到redo log buffer中,每隔固定時間,寫入OS buffer

原创 mysql索引解讀

一、聚集索引:Innodb存儲引擎的索引 1、主鍵索引:所有數據都存儲在主鍵索引上,使用主鍵查找效率非常高 2、輔助索引:輔助索引上存儲的是主鍵值,查詢整行數據需要先通過此索引找到主鍵,再通過主鍵索引找到對應的數據,因爲只有主鍵上有整行

原创 單例模式下synchronize加鎖後爲什麼要用volatile

解決併發共享變量問題需要解決三個問題:原子性、可見性、有序性 synchronize:保證原子性、可見性、有序性(多線程順序執行) volatile:保證可見性、有序性(禁止指令重排序) public class Singleton {

原创 原型模式

原型模式:克隆一個和原型一模一樣的對象,淺拷貝和深拷貝。 淺拷貝:創建一個對象,裏面的屬性對象複製原屬性的引用 深拷貝:創建一個對象,裏面的屬性對象也需要創建一個新對象   使用場景: 1、當創建一個對象非常繁瑣複雜時,使用原型模型 2、

原创 mybatis架構原理

1、 mybatis配置   SqlMapConfig.xml,此文件作爲mybatis的全局配置文件,配置了mybatis的運行環境等信息。   mapper.xml文件即sql映射文件,文件中配置了操作數據庫的sql語句。此文件需要

原创 跨數據中心部署

一、三數據中心(數據強一致性,延遲高,吞吐量低,安全性高) 三個數據中心都不在同一個地方,寫入完主節點後,同時同步到2個從節點 優點:數據一致性高,主節點宕機,選擇一個從節點接管主節點 缺點:延時長,同步提交數據,需等待從節點同步完成;主

原创 跨數據中心部署方案

作爲 NewSQL 數據庫,TiDB 兼顧了傳統關係型數據庫的優秀特性以及 NoSQL 數據庫可擴展性,以及跨數據中心(下文簡稱“中心”)場景下的高可用。本文檔旨在介紹跨數據中心部署的不同解決方案。 三中心部署方案 TiDB, TiKV,

原创 線上問題排查--線程棧

> jstack   java進程號 一、查看死循環 第一種方法(高效找出對應的線程):top+線程堆棧方法 1、jps找出java對應的進程號 2、top -p 進程號,展示這個java進程對應的所有線程號 3、shift+h,對所有線