原创 java併發-1 java多線程執行的兩種方式
java多線程執行的兩種方式: 1、繼承Thread類,並覆蓋其run方法; 2、實現Runnable接口,並實現其run方法; 第一種方式: public class TestThread1 extends Thread {
原创 java併發-2 Callable和Future-多線程的返回值
上面介紹了多線程啓動的兩種方式,無論繼承Thread還是實現Runnable接口,其內部的run方法都是void,也就是拿不到多線程的執行結果。 考慮下面一個小例子:有一個任務需要計算1-100的和,現代計算機肯定單線程分分鐘就計算完成了
原创 深入理解NIO零拷貝
什麼是零拷貝 張老師的學生無處不在,哈哈哈!@張龍 傳統的IO在進行文件傳輸的時候,涉及多次數據從內核緩衝區到用戶緩存區的雙向拷貝及用戶態和內核態的轉換,因此效率低下;NIO的零拷貝實現了從內核緩衝區到用戶緩衝區的雙向0拷貝,
原创 java併發-線程池原理
線程池的作用 線程池的作用是用來控制系統爲某一任務運行的線程(Thread)的數量,處理過程中將任務(Runnable)放入隊列,然後在線程創建後啓動這些任務,如果工作線程的數量超過線程池允許的最大數量,那麼超過數量的任務在隊列中排隊
原创 JVM-2 對象的創建與對象的定位
對象的創建流程 當我們new了一個對象的時候,JVM是如何操作,使這個對象可用的呢? 加載檢查 虛擬機遇到一條new指令時,首先去檢查這個參數是否能在常量池中定位到一個類的符號引用,並且檢查這個符號引用是否已被加載、解析和初始化
原创 leetcode124-二叉樹的最大路徑和
Question: 二叉樹的最大路徑和問題 樣例1: 樣例: 給定一棵二叉樹 -1 / \ 2 3 / \
原创 lintcode71-二叉樹的鋸齒遍歷
Question: 二叉樹的鋸齒遍歷 給出一棵二叉樹,返回其節點值的鋸齒形層次遍歷(先從左往右,下一層再從右往左,層與層之間交替進行) 給出一棵二叉樹 {3,9,20,#,#,15,7}, 3 / \
原创 lintcode1137-從二叉樹構造字符串
Question: 你需要通過一棵二叉樹的先序遍歷,構建一個包含括號和整數的字符串。 空結點需要用空括號對"()"來表示。 同時你需要忽略掉所有的不影響字符串和原始二叉樹一對一映射關係的空括號對。 樣例1: 輸
原创 lintcode66-二叉樹的前序遍歷
Question: 給出一棵二叉樹,返回其節點值的前序遍歷。 給出一棵二叉樹 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3] Solution: 二叉樹的遍歷只要記住
原创 lintcode481-二叉樹葉子節點之和
Question: 計算二叉樹的葉子節點之和 樣例1: 輸入: 1 / \ 2 3 / 4 輸出:7 樣例2: 輸入: 1
原创 lintcode376-二叉樹的路徑和
Question: 給定一個二叉樹,找出所有路徑中各節點相加總和等於給定 目標值 的路徑。 一個有效的路徑,指的是從根節點到葉節點的路徑。 樣例 給定一個二叉樹,和 目標值 = 5: 1 /
原创 lintcode68-二叉樹的後序遍歷
Question: 給出一棵二叉樹,返回其節點值的後序遍歷。 給出一棵二叉樹 {1,#,2,3}, 1 \ 2 / 3
原创 lintcode67-二叉樹的中序遍歷
Question: 給出一棵二叉樹,返回其中序遍歷 給出二叉樹 {1,#,2,3}, 1 \ 2 / 3 返回 [1,3,2].
原创 lintcode1181-二叉樹的直徑
Question: 給定一顆二叉樹,您需要計算樹的直徑長度。 二叉樹的直徑是樹中任意兩個節點之間最長路徑的長度。 此路徑不一定會通過樹根。 樣例: 給定一棵二叉樹 1
原创 lintcode70-二叉樹的層次遍歷
Question70: 二叉樹的層次遍歷 給出一棵二叉樹,返回其節點值從底向上的層次序遍歷 (按從葉節點所在層到根節點所在的層遍歷,然後逐層從左往右遍歷) 樣例 給一棵二叉樹 {3,9,20,#,#,15