原创 CAS:Compare And Swap 無鎖
CAS有3個操作數,內存值V,舊的預期值A,要修改的新值B。當且僅當預期值A和內存值V相同時,將內存值V修改爲B,否則什麼都不做。 import java.lang.reflect.Field; import sun.misc.Un
原创 Java內存訪問重排序的研究
什麼是重排序 請先看這樣一段代碼1 public class PossibleReordering { static int x = 0, y = 0; static int a = 0, b = 0; public static
原创 利用redis + lua解決搶紅包高併發的問題
搶紅包的需求分析 搶紅包的場景有點像秒殺,但是要比秒殺簡單點。 因爲秒殺通常要和庫存相關。而搶紅包則可以允許有些紅包沒有被搶到,因爲發紅包
原创 spring中獲取request對象
1.通過註解獲取(很簡單,推薦): public class Hello {@Autowired HttpServletRequest request; //這裏可以獲取到request } 2.在web.xml中配置一個監聽: <
原创 事務小結
事務 1.XA(有一個單點協調事務管理器) XA是由X/Open組織提出的分佈式事務的規範。XA規範主要定義了(全局)事務管理器(Transaction Manager)和(局部)資源管理器(Resource Manager)之間的接
原创 statemachine狀態機
https://github.com/wuchenlv1988/statemachine
原创 圖解JVM內存分配和回收
最簡單例子圖解JVM內存分配和回收 原文鏈接:最簡單例子圖解JVM內存分配和回收 一、簡介 JVM採用分代垃圾回收。在JVM的內存空間中把堆空間分爲年老代和年輕代。將大量(據說是90%以上)創建了沒多久就會消亡的對象存儲在年輕代,而年
原创 Eden&Survivor
1.爲什麼會有年輕代 我們先來屢屢,爲什麼需要把堆分代?不分代不能完成他所做的事情麼?其實不分代完全可以,分代的唯一理由就是優化GC性能。你先想想,如果沒有分代,那我們所有的對象都在一塊,GC的時候我們要找到哪些對象沒用,這樣就會對堆
原创 code玩玩
public class recursive { /** * 倒敘遞歸 * @param args */ public static void main(String[] args) { String str = "I
原创 內核空間與用戶空間
內核空間與用戶空間內核空間主要是指操作系統運行時所使用的用於程序調度、虛擬內存的使用或者連接硬件資源等的程序邏輯。爲何需要內存空間和用戶空間的劃分呢?很顯然和前面所說的每個進程都獨立使用屬於自己的內存一樣,爲了保證操作系統的穩定性,運行在
原创 springMVC 筆記
springmvc工作流程: 1 用戶請求 如 /user.xhtml 2 DispatchServlet攔截,web.xml中配置 *.xhtml 被DispatchServlet攔截 3 DispatchServlet 通過hand
原创 zookeeper服務註冊
系統結構: 2 節點角色: Server1、Server2、Server3構成了ZooKeeper註冊中心,通過LeaderElection,Server2爲Leader,Server1和Server3爲Follower;Server
原创 java對象內存結構
public class Student { privateString name; privateinthigh; privateInteger age; privatelongjj; privateLong weight; priv
原创 SSH免密碼登錄原理
原理: 密匙認證需要依靠密匙,首先創建一對密匙(包括公匙和密匙,並且用公匙加密的數據只能用密匙解密),並把公匙放到需要遠程服務器上。這樣當登錄遠程服
原创 ThreadPoolExecuter 原理機制
當調用 execute() 方法添加一個任務時,線程池會做如下判斷: a. 如果正在運行的線程數量小於 corePoolSize,那麼馬上創建線程運行這個任務; b. 如果正在運行的線程數量大於或等於 corePoolSize,那麼將這