原创 java-併發-鎖-Synchronized

底層原理: Synchronized底層是通過monitorenter 和 monitorexit來實現的。 如果synchronize在方法上,那就沒有上面兩個指令,取而代之的是有一個ACC_SYNCHRONIZED修飾,表示方法加鎖了

原创 JAVA-面試題-02

58的一道面試題   public class Main { public static void main(String[] args) { List<Integer> list = new ArrayLi

原创 Lock和synchronized的對比

  1.1.synchronized 只能實現單線程的讀寫,一旦多個線程要同時訪問一個資源,就只有一個線程可以開啓訪問,其餘線程只能等待,非常影響性能。所以如果使用的話,一定要儘量減小鎖的粒度,到代碼快級。 1.2.synchronize

原创 java基礎面試題3

21.類加載的過程 加載:java將字節碼數據從不同的數據源讀取都jvm中,並映射爲jvm認可的數據結構,數據源可以是class,jar,網絡資源等 鏈接: 驗證:jvm檢驗字節信息是否符合jvm規範 準備:

原创 JAVA經典面試題02

58的一道面試題   public class Main { public static void main(String[] args) { List<Integer> list = new ArrayLi

原创 單鏈表 反轉

package cm.com.datastructure.linkedlist; /** * 實現單鏈表 翻轉 * * @author MemorysLiu * @version 1.0.0 * @date 2019-07-

原创 實現一個支持動態擴容的數組

package cm.com.datastructure.array; /** * 支持動態擴容的數組 * 初始容量爲8 每次擴容2倍 * * @author MemorysLiu * @version 1.0.0 * @

原创 揹包問題-貪心算法

揹包問題描述: 將有限的幾個物品放入一個能承受固定重量的揹包中,求能揹包中物品的最大重量   package cm.com.algorithm.knapsack; import cm.com.algorithm.knapsack.c

原创 揹包問題-動態規劃

揹包問題描述: 將有限的幾個物品放入一個能承受固定重量的揹包中,求能揹包中物品的最大重量     package cm.com.algorithm.knapsack; import cm.com.algorithm.knapsack.

原创 前序遍歷二叉樹

package cm.com.algorithm.tree; /** * 前序遍歷2叉樹 * 前序遍歷是指,對於樹中的任意節點來說,先打印這個節點,然後再打印它的左子樹,最後打印它的右子樹 * * @author liushu

原创 中序遍歷二叉樹

package cm.com.algorithm.tree; /** * 中序遍歷2叉樹 * 中序遍歷是指,對於樹中的任意節點來說,先打印它的左子樹,然後再打印它本身,最後打印它的右子樹 * * @author liushua

原创 後序遍歷二叉樹

package cm.com.algorithm.tree; /** * 後序遍歷2叉樹 * 後序遍歷是指,對於樹中的任意節點來說,先打印它的左子樹,然後再打印它的右子樹,最後打印它本身 * * @author liushua

原创 堆排序

原文:https://time.geekbang.org/column/article/69913     原文是極客時間,的數據結構與算法課程。 整片文章感覺有抄襲的嫌疑,哈哈哈,不過感覺這個圖的確是比文字或者別的更形象和有說服力。 1

原创 插入排序

插入排序: 時間複雜度:因爲需要兩次循環,每一次循環的複雜度都爲n,所以總的時間負責度爲O(n^2) 空間複雜度:沒有使用額外的空間,所以空間複雜度爲O(1) 原地排序算法:因爲空間複雜度爲O(1),沒有佔用額外的空間來排序,所以是原地排

原创 java虛擬機問題2

11.java中的synchronezed實現 重量級鎖:java線程的阻塞和喚醒都是依靠操作系統來完成的,需要操作系統從用戶態切換至內核態,開銷相當大。爲避免這種情況,Java 虛擬機會在線程進入阻塞狀態之前,以及被喚醒後