原创 Spring聲明事務和編程事務

1、編程式事務:是指通過編碼的方式實現事務,類似JDBC編程實現事務管理,一般使用TransactionTemplate.2、聲明式事物:是建立在AOP之上,對方法前後攔截,在目標方法執行完之後提交或者回滾事務。其優化就是不需要重複的代碼

原创 Spring嵌套事務失效的問題

直接上代碼 @Transactional public void methodA() { try { methodB(); } catch (Exception e) { e.printStackTrace();

原创 Redis問題---個人記,不喜勿噴

  redis是多線程還是單線程?(回答單線程的請回吧,爲什麼請回,請往下看) 單線程指的是網絡請求模塊使用了一個線程(所以不需考慮併發安全性),即一個線程處理所有網絡請求,其他模塊仍用了多個線程。 redis中io多路複用器模塊是單線程

原创 秒殺demo

簡單的秒殺demo,使用redis緩存令牌和庫存,可水平擴展   @RequestMapping(name = "/seckill", method = RequestMethod.POST) public String sec

原创 Redis分佈式鎖注意點

死鎖 爲了防止死鎖,必須設置過期時間 例如:線程A拿到鎖,還沒有解鎖,程序突然掛掉,鎖一直存在,其他線程一直拿不到鎖。所以要設置過期時間 加鎖跟解鎖必須是同一個線程,保證原子性 例如:線程A拿到鎖,業務還沒有處理完成,鎖已經超時被

原创 Redis集羣個人筆記

Redis有三種集羣模式: 1、主從模式 2、Sentinel模式 3、Cluster模式   主從模式 主從模式是三種模式中最簡單的,分爲兩類:主數據庫(master)和從數據庫(slave) 讀寫分離策略:從節點可以擴展redis的讀

原创 Redis緩存設計原則

  緩存熱數據 緩存讀寫順序:讀,先緩存,後數據庫;寫,先數據庫,後緩存 所有緩存數據都應該設置過期時間 緩存的過期時間應該避免集中過期,造成緩存擊穿 緩存key具備可讀性,應避免不同業務出現同名的key,簡單縮寫可節省內存空間 避免緩存

原创 JVM提問----個人筆記,不喜勿噴

什麼時候會嘗試觸發Minor GC 新生代內存區域基本快滿了,再次分配對象的時候,發現空間不足 觸發Minor GC之前會檢查老年代大小? 檢查老年代可用內存空間,是否大於新生代所有對象的總大小,如果大於新生代所有對象,就可以發起Mino

原创 MySql B+樹索引-個人記錄,不喜勿噴

MySql Innodb索引: B+樹 全文索引 哈希索引   B+樹 有n個子樹的中間節點包含n個元素,每個元素不保存數據,只用來索引,所有數據都保存在葉子節點。 所有葉子節點包含元素的信息以及指向記錄的指針,且葉子節點按關鍵字自小到大

原创 垃圾回收個人看

JVM內存區域: 1、虛擬機棧:     方法執行時的內存模型,是線程私有的,生命週期跟線程相同。方法執行時入棧,方法執行完出棧,出棧相當於清空數據,所以這塊不需要GC。 2、本地方法棧:     與虛擬機棧功能非常類似,區別在於虛擬機棧

原创 Mysql事務隔離級別和傳播機制

事務的特性: 原子性:事務不可分割,組成事務的各個邏輯不可分割 一致性:事務執行的前後,數據完整保持一致 隔離性:事務執行不應該受到其他事務的干擾 持久性:事務一旦結束,數據就持久化到數據庫中 如果不考慮事務的隔離性,會引發一些安全問題:

原创 MQ常見面試題

消息中間件   什麼是MQ   爲什麼要使用MQ     1、如何避免消息重複投遞和重複消費 在生產數據時,消自體中必須要有一個bizId作爲去重依據 在消費一條消息的時候,自己判斷一下是否已經消費過了 2、消息丟失,如何保證消息的可靠性

原创 微服務“定義”

翻譯: 微服務架構風格是一種將一個單一應用程序開發爲一組小型服務的方法,每個 服務運行在自己的進程中,服務間通信採用輕量級通信機制(HTTP)。 這些服務圍繞業務能力構建並且可通過全自動部署機制獨立部署。 這些服務共用一個最小型的集中式的

原创 Spring事務死鎖

  ### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait ti

原创 高併發限流

    限流的目的是通過對併發訪問/請求進行限速或者一個時間窗口內的的請求進行限速來保護系統,一旦達到限制速率則可以拒絕服務(定向到錯誤頁或告知資源沒有了)、排隊或等待(比如秒殺、評論、下單)、降級(返回兜底數據或默認數據,如商品詳情頁庫