原创 【劍指 Offer 題解】55.2 平衡二叉樹

題目 輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。 思路 一棵二叉樹是否爲平衡二叉樹 = Math.abs(左子樹的深度 - 右子樹的深度) <= 1 public boolean IsBalanced_Solution(T

原创 【劍指 Offer 題解】55.1 二叉樹的深度

題目 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度爲樹的深度。 思路 樹的深度 = 1 + max(左樹的深度, 右樹的深度) 終止條件,樹的根節點爲null,深度

原创 【代碼小技巧】枚舉類

小技巧 枚舉類很實用的,這裏只是用一個示例來記錄一下枚舉類的基本使用方式,沒什麼技術含量,直接開始~ 枚舉類 public enum Fruit { APPLE("apple", "蘋果"), PEAR("pear", "梨"

原创 【劍指 Offer 題解】47. 禮物的最大價值

題目 在一個 m*n 的棋盤的每一個格都放有一個禮物,每個禮物都有一定價值(大於 0)。從左上角開始拿禮物,每次向右或向下移動一格,直到右下角結束。給定一個棋盤,求拿到禮物的最大價值。例如,對於如下棋盤 示例 Input: 1

原创 【劍指 Offer 題解】45. 把數組排成最小的數

題目 輸入一個正整數數組,把數組裏所有數字拼接起來排成一個數,打印能拼接出的所有數字中最小的一個。例如輸入數組 {3,32,321},則打印出這三個數字能排成的最小數字爲 321323。 思路 可以看成是一個排序問題,在比較兩個字

原创 【Java容器】ArrayList源碼分析

目錄ArrayList定義ArrayList數據結構構造方法添加元素擴容一些思考獲取元素刪除元素1、remove(index)2、remove(object)序列化對象序列化步驟writeObjectreadObjectFail-

原创 【劍指 Offer 題解】56. 數組中只出現一次的數字

題目 一個整型數組裏除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。 思考 異或操作,二進制數的每位進行異或,相同爲0,不同爲1. 兩個相同的數進行異或,結果爲0。 如果題目 改爲 “只有一個數只出

原创 【劍指 Offer 題解】52. 兩個鏈表的第一個公共結點

題目 輸入兩個鏈表,找出它們的第一個公共結點。(注意因爲傳入數據是鏈表,所以錯誤測試數據的提示是用其他方式顯示的,保證傳入數據是正確的) 思路 方法1 兩個鏈表公共節點後的所有節點都相同,鏈表長度也相同。 圖中,B鏈表的長度比

原创 【代碼小技巧】Switch開關

小技巧 有時候程序裏的一個功能在某個場景下需要,另一個場景下就不需要,這時候就可以使用一個開關,在部署的時候,通過更改配置文件開關參數值,來控制這個功能的啓用或停用。 當開關較多時,可以將所有的開關可以放在一個開關類,統一管理。

原创 【劍指 Offer 題解】40. 最小的 K 個數

題目 輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。 思路 快速排序的 partition() 方法,會返回一個整數 j 使得 a[l…j-1] 小於等

原创 負載均衡的簡單實現

負載均衡接口類 /** * 負載均衡 * */ public interface LoadBalancing { String selectOne(List<String> serverList); String s

原创 Redis學習(三)——刪除策略

刪除策略 過期數據 Redis是一個內存級數據庫,所有數據都存放在內存中,內存中的數據可以通過TTL指令獲取其狀態 XX:具有時效性數據 -1:永久有效的數據 -2:已經過期的數據,或者 被刪除的數據,或者 未定義的數據

原创 【Java併發】synchronized優化

CAS CAS的全稱是 Compare And Swap(比較相同再交換),是現代CPU廣泛支持的一種對內存中的共享數據進行操作的一種特殊指令 作用:CAS可以將比較和交換轉換爲原子操作,這個原子操作直接由CPU保證,CAS可以

原创 單例模式的八種實現方式

單例模式 一個類只有一個對象實例 實現的基本思路 將該類的構造方法定義爲私有方法,這樣其他處的代碼就無法通過調用該類的構造方法來實例化該類的對象,只有通過該類提供的靜態方法來得到該類的唯一實例; 在該類內提供一個靜態方法,當我們

原创 【Java併發】volatile關鍵字

多線程下變量的不可見性 多線程併發執行下,多個線程修改共享的成員變量,會出現一個線程修改了共享變量後,另一個線程不能立即獲取修改後的最新值。 解決方案: 加鎖:使用synchronized關鍵字或者使用JDK的Lock 使用v