原创 Redis詳解(七)哨兵模式和集羣模式

1. 哨兵模式 哨兵模式是redis高可用的實現方式之一 使用一個或者多個哨兵(Sentinel)實例組成的系統,對redis節點進行監控,在主節點出現故障的情況下,能將從節點中的一個升級爲主節點,進行故障轉義,保證系統的可用性。 1.

原创 MVCC多版本併發控制機制

1. 定義 MVCC(Multi-Version Concurrency Control,多版本併發控制)一種併發控制機制,在數據庫中用來控制併發執行的事務,控制事務隔離進行。 2. 核心思想 MVCC是通過保存數據在某個時間點的快照來進

原创 享元模式(Flyweight模式)詳解

在面向對象程序設計過程中,有時會面臨要創建大量相同或相似對象實例的問題。創建那麼多的對象將會耗費很多的系統資源,它是系統性能提高的一個瓶頸。例如,圍棋和五子棋中的黑白棋子,圖像中的座標點或顏色,局域網中的路由器、交換機和集線器,教室裏的桌

原创 建造者模式(Builder模式)詳解

在軟件開發過程中有時需要創建一個複雜的對象,這個複雜對象通常由多個子部件按一定的步驟組合而成。例如,計算機是由 OPU、主板、內存、硬盤、顯卡、機箱、顯示器、鍵盤、鼠標等部件組裝而成的,採購員不可能自己去組裝計算機,而是將計算機的配置要求

原创 Java線程池參數配置

在線程池的實際使用中,參數的配置總讓人難以把握。在網上搜了一下,主要有以下的方案。跟大家分享。 1. 基本概念 1.1 ThreadPoolExecutor的重要參數 corePoolSize:核心線程數 核心線程會一直存活,及時沒有任務

原创 JVM調優-工具篇

16年的時候花了一些時間整理了一些關於jvm的介紹文章,到現在回顧起來還是一些還沒有補充全面,其中就包括如何利用工具來監控調優前後的性能變化。工具做爲圖形化界面來展示更能直觀的發現問題,另一方面一些耗費性能的分析(dump文件分析)一般也

原创 JVM調優-命令篇

運用jvm自帶的命令可以方便的在生產監控和打印堆棧的日誌信息幫忙我們來定位問題!雖然jvm調優成熟的工具已經有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,但是在生產環境出現問題的時候,一

原创 玩轉Java8Stream(一)

相信Java8的Stream 大家都已聽說過了,但是可能大家不會用或者用的不熟,筆者將在《玩轉Java8Stream》系列文章中帶大家從零開始使用,循序漸進,帶你走向Stream的巔峯。 1. 操作符 什麼是操作符呢?操作符就是對數據進行

原创 策略模式(策略設計模式)詳解

在現實生活中常常遇到實現某種目標存在多種策略可供選擇的情況,例如,出行旅遊可以乘坐飛機、乘坐火車、騎自行車或自己開私家車等,超市促銷可以釆用打折、送商品、送積分等方法。 在軟件開發中也常常遇到類似的情況,當實現某一個功能存在多種算法或者策

原创 門面模式(Facade模式)詳解

在現實生活中,常常存在辦事較複雜的例子,如辦房產證或註冊一家公司,有時要同多個部門聯繫,這時要是有一個綜合部門能解決一切手續問題就好了。 軟件設計也是這樣,當一個系統的功能越來越強,子系統會越來越多,客戶對系統的訪問也變得越來越複雜。這時

原创 Mongodb集羣

1. 集羣概述 在大數據領域常常提到的4V特徵中,Volume(數據量大)是首當其衝被提及的。 由於單機垂直擴展能力的侷限,水平擴展的方式則顯得更加的靠譜。 MongoDB 自帶了這種能力,可以將數據存儲到多個機器上以提供更大的容量和負載

原创 Spring三級緩存解決循環依賴

1. 前言 循環依賴:就是N個類循環(嵌套)引用。 通俗的講就是N個Bean互相引用對方,最終形成閉環。用一副經典的圖示可以表示成這樣(A、B、C都代表對象,虛線代表引用關係): 其實可以N=1,也就是極限情況的循環依賴:自己依賴自己

原创 Java 字節碼增強技術ASM概述

1. ASM概述 1.1 簡介 ASM是一個java字節碼操縱框架,它能被用來動態生成類或者增強既有類的功能。ASM 可以直接產生二進制 class 文件,也可以在類被加載入 Java 虛擬機之前動態改變類行爲。Java class 被存

原创 Java Attach機制

1. 什麼是Attach機制 簡單點說就是jdk的一些工具類提供的一種jvm進程間通信的能力,能讓一個進程傳命令給另外一個進程,並讓它執行內部的一些操作,比如說我們爲了讓另外一個jvm進程把線程dump出來,那麼我們運行了一個jstac

原创 使用ASM實現簡單的AOP

1. 前言 之前一直使用greys及其內部升級二次開發版來排查問題。最近週末剛好事情不多,作爲一名程序員本能地想要弄懂這麼神奇的greys到底是怎麼實現的?週末從github上拉了代碼仔細讀了讀,其基本技術框架是JVM attach +