原创 MySQL之SQL優化

1. SQL優化的步驟 發現有性能問題的SQL; 分析SQL執行計劃; 優化索引; 改寫SQL; 2. 發現有性能問題的SQL 分析慢查詢日誌發現存在性能問題的SQL; 配置慢查詢日誌:SET GLOBAL slow_

原创 Java Web之初識Spring

1. 爲什麼會有Spring? 在程序開發中,一個完整的應用程序是由一組相互協作的對象組成的,我們需要控制這些對象的創建,協調對象之間的依賴關係,而且要儘可能做到高內聚、低耦合,光是做到這些就會花費很大的成本,而Spring框架

原创 Java併發工具之鎖分類

1. Lock簡介、地位、作用 鎖是一種工具,用於控制對共享資源的訪問; Lock和synchronized,這兩個是最常見的鎖,它們都可以達到線程安全的目的,但是在使用上和功能上又有較大的不同; Lock並不是用來代替sync

原创 Java併發編程之常見面試題(二)

21.synchronized使用有哪些注意點? 鎖對象不能爲空,因爲鎖是保存在對象頭中,對象都沒有,就沒有對象頭 作用域不能過大,把所有代碼都被修飾,就是串行了,會影響到程序執行的速度 避免死鎖,兩個鎖,兩個線程,線程一持有鎖

原创 Java併發編程之synchronized關鍵字

1. synchronized基本用法 定義:如果一個對象對多個線程可見,synchronized能夠保證在同一時刻最多隻有一個線程操作這個對象,以達到保證併發安全的效果。 作用:保證可見性和原子性,可以避免線程安全問題:運行結

原创 Java併發編程之Java內存模型

1. 底層原理 1.1 JVM內存結構 VS JMM內存模型 JVM內存結構和JVM的運行區域有關,包括堆、方法區、虛擬機棧、本地方法棧、程序計數器 堆:線程共享,new出來的實例對象; 虛擬機棧:線程私有,基本數據類型以及對

原创 Java併發編程之線程異常

多線程異常第一種處理方式:局部處理 在多線程編程中,如果主線程出現異常,我們可以使用try/catch等方式輕鬆的處理異常; 如果子線程出現異常,則需要在每個子線程中可能發生異常的地方用try/catch進行處理,代碼如下:

原创 Java併發編程之多線程會導致的問題

1. 線程安全問題 1.1 什麼是線程安全? 某權威作者定義:“當多個線程訪問同一個對象時,如果不用考慮這些線程的調度,也不需要額外的同步,調用這個對象的行爲都可以獲得正確的結果,那麼這個對象時線程安全的“。 通俗易懂的定義:當

原创 Java併發編程之線程屬性和方法

1. 線程方法 1.1 方法概覽 類.方法 簡介 Thread.sleep() 線程休眠,不釋放鎖 Thread.join() 等待其它線程執行完畢 Thread.yield() 放棄已經獲取到的CPU資源

原创 Java併發編程之線程生命週期

1. 線程生命週期:六種狀態 如下圖所示: NEW:創建線程之後還沒有執行start方法,此時線程處於NEW狀態 RUNNABLE:執行start方法之後,處於RUNNABLE狀態,是可運行狀態。對應着操作系統READY(爲獲

原创 Java設計模式之觀察者模式

觀察者模式也叫發佈訂閱模式,意思是:定義對象之間一對多的依賴關係,使得每當一個對象改變狀態時,則所有依賴於它的對象都得到通知並被自動更新。 觀察者模式(發佈訂閱模式)包含如下角色: 抽象發佈者:可以增加、刪除、通知訂閱者; 具體

原创 Java併發編程之同步與異步、阻塞與非阻塞

同步與異步 被調用者是否主動告訴調用者結果,針對被調用者而言 左圖是同步的情況:客戶端向服務器請求數據,在服務器準備數據期間,客戶端需要不停的等待,無法做別的事 右圖是異步的情況:客戶端向服務器請求數據,在服務器準備數據期間,客

原创 Java併發編程之併發與並行

什麼是併發? 併發的概念:兩個或多個任務在重疊的時間段內運行和完成。 併發的特點:只利用一個處理器,只是因爲處理器處理速度很快,所以看起來像同時運行,但這只是邏輯上的同時運行,在物理層面還是串行。 什麼是並行? 並行的概念:兩個

原创 Java併發編程之實現多線程的方法

實現線程的正確方法:2種 實現Runnable接口創建線程 /** * 實現Runnable接口創建線程 */ public class MyThread implements Runnable { @Overri

原创 Java併發編程之常見面試題

1. 進程和線程的異同? 相同點:生命週期相似,都包含就緒、運行、終止等狀態 不同點: 1. 起源不同,先有進程,由於CPU的提升以及性能要求的提高,纔有了線程; 2. 內存共享機制不同:進程與進程之間通常不能共享數據,線程與