原创 Mybaits 常見面試題
1、談談你對 MyBatis 的理解? Mybatis是一個半ORM(對象關係映射)框架,它內部封裝了 JDBC,開發時只需要關注 SQL 語句本身,不需要花費精力去處理加載驅動、創建連接、創建 Statement 等繁雜的過程。程序員直
原创 6. 秒殺系統-影響性能的因素和提高系統性能的方法
影響性能的因素 “性能”,服務設備不同對性能的定義也是不一樣的,例如 CPU 主要看主頻、磁盤主要看 IOPS(Input/Output Operations Per Second,即每秒進行讀寫操作的次數)。我們討論的主要
原创 AQS 源碼解析
AbstractQueuedSynchronizer是Java併發包java.util.concurrent的核心基礎組件,是實現Lock的基礎。 1. AQS類結構 屬性 // 屬性 private transient volatil
原创 AQS 詳解
AQS的全稱 AbstractQueuedSynchronizer,抽象隊列同步器。這個類在 java.util.concurrent.locks 包下面。AQS 是一個用來構建鎖和同步器的框架,使用AQS能簡單且高效地構造
原创 對鎖的理解和手動模擬死鎖
1. 死鎖 死鎖是指兩個線程同時佔用兩個資源,又在彼此等待對方釋放鎖資源,如下圖所示: 演示代碼如下: import java.util.concurrent.TimeUnit; public class LockExampl
原创 synchronized 和 ReentrantLock 源碼解析
1. synchronized 和 ReentrantLock 是如何實現的,它們之間的區別 synchronized 屬於獨佔式悲觀鎖,是通過 JVM 隱式實現的,synchronized 只允許同一時刻只有一個線程操作資源。
原创 ThreadPoolExecutor 的參數含義及源碼解析
1. 線程池 線程池是爲了避免線程頻繁的創建和銷燬帶來的性能消耗,而建立的一種池化技術,它是把已創建的線程放入“池”中,當有任務來臨時就可以重用已有的線程,無需等待創建的過程,這樣就可以有效提高程序的響應速度。若要使用線程池一定離
原创 線程的狀態、工作原理和常見面試題
1. 線程的狀態 線程的狀態在 JDK 1.5 之後以枚舉的方式被定義在 Thread 的源碼中,它總共包含以下 6 個狀態: NEW,新建狀態,線程被創建出來,但尚未啓動時的線程狀態; RUNNABLE,就緒狀態,表示可以運行
原创 HashMap 源碼分析及 JDK8 的優化
1. 底層數據結構 在JDK1.7中HashMap是以數組加鏈表的形式組成的,JDK1.8之後新增了紅黑樹的組成結構,當鏈表大於8並且容量大於64時,鏈表結構會轉換成紅黑樹結構,它的組成結構如下圖所示: 數組中的元素我們稱之爲哈
原创 String源碼解析及常見面試題
一、String 源碼解析 1. 數據結構 以主流的 JDK 版本 1.8 來說,String 內部實際存儲結構爲 char 數組,源碼如下: public final class String implements java.i
原创 Mybatis 中的事務
1. Mybaits中的事務接口Transaction public interface Transaction { Connection getConnection() throws SQLException; voi
原创 紅黑樹
紅黑樹是一個平衡的二叉樹,但不是一個完美的平衡二叉樹。雖然我們希望一個所有查找都能在 lgN 次比較內結束,但是這樣在動態插入中保持樹的完美平衡代價太高,所以,我們稍微放鬆一下限制,希望找到一個能在對數時間內完成查找的數據結
原创 10. 鎖優化
1. 自旋鎖與適應性自旋鎖 若物理機器上有一個以上的處理器,能讓兩個或兩個以上的線程同時執行,我們可以讓後面的請求鎖的那個線程“稍等一下”,但是不放棄處理器的執行時間,看看持有鎖的線程是否會很快就釋放鎖。爲了讓線程等待,我
原创 Synchronized 詳解
一、Synchronized 的基本使用 Synchronized 的作用主要有三個: 確保線程互斥的訪問同步代碼 保證共享變量的修改能夠及時可見 有效解決重排序問題 從語法上講,Synchronized 總共有三種用法: 修飾實例方法,
原创 單點登錄系統的實現1
一、什麼是單點登錄? 單點登錄的英文名叫做:Single Sign On(簡稱SSO)。在初學/以前的時候,一般我們就單系統,所有的功能都在同一個系統上。爲了合理利用資源和降低耦合性,於是把單系統拆分成多個子系統。簡單來說,