原创 Integer填坑

在-128~127的Integer值並且以Integer x = value;的方式賦值的Integer值在進行==和equals比較時,都會返回true,因爲Java裏面對處在在-128~127之間的Integer值,用的是原生數據類

原创 lc50 pow(x,n)

問題可以採用遞歸的形式求解,但是邊界處理爲易錯點,好吧,承認處理了挺久的。 遞歸解法: class Solution { public double myPow(double x, int n) { if (n=

原创 爲什麼HashMap鏈表長度超過8會轉成樹結構

HashMap在JDK1.8及以後的版本中引入了紅黑樹結構,若桶中鏈表元素個數大於等於8時,鏈表轉換成樹結構;若桶中鏈表元素個數小於等於6時,樹結構還原成鏈表。因爲紅黑樹的平均查找長度是log(n),長度爲8的時候,平均查找長度爲3,如果

原创 leetcode236

236. Lowest Common Ancestor of a Binary Tree 尋找二叉樹中給定兩個節點的公共祖先。 很好的一道題目,有助於我們理解遞歸的操作,一般情況下,二叉樹的問題基本都是使用遞歸來解決的。一開始並不明白真實

原创 leetcode15 three sum

import java.util.*; class Solution { public List<List<Integer>> threeSum(int[] sum) { List<List<Integer>>

原创 滑動窗口最大值

題目:給定一個數組和滑動窗口的大小,找出所有滑動窗口裏數值的最大值。 例如,如果輸入數組{2,3,4,2,6,2,5,1}及滑動窗口的大小3,那麼一共存在6個滑動窗口, 他們的最大值分別爲{4,4,6,6,6,5}; 針對數組{2,3,4

原创 旋轉數組的最小值

題目:把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉。 輸入一個非減排序的數組的一個旋轉,輸出旋轉數組的最小元素。 例如數組{3,4,5,1,2}爲{1,2,3,4,5}的一個旋轉,該數組的最小值爲1。  NOTE:給出

原创 線程安全策略

1.不可變對象 1.1.不可變對象需要滿足的條件: ① 對象創建後其狀態就不能修改; ② 對象所有域都是final類型的; ③ 對象是正確創建的(在對象創建期間,this引用沒有逸出); 1.2. final關鍵字 ① final可以用來

原创 JUC組件擴展之FutureTask

1.概述 FutureTask這個組件是JUC裏邊的但是它不是AQS的子類;創建線程有兩種方式,一種是繼承Thread,一種是實現Runnable接口,這兩種方式有一個共同的缺陷就是執行完任務以後無法獲取執行結果,從JDK1.5開始就提供

原创 2018博客總結前言

2018年最後一天,想總結一下這一年的博客內容。之前一直有寫博客的習慣,,,你懂得,總有各種理由。。。好吧,其實我這下半年確立了研究方向,然後就是苦逼的科研生活。不過好在有有道雲筆記這個工具。所以我還是把資料記錄在了那上面。主要是方便。而

原创 線程安全性

1.定義 當多個線程訪問某個類時,不管運行時環境採用何種調度方式或者這些進程將如何交替執行,並且在主調代碼中不需要任何額外的同步和協同,這個類都能夠表現出正確的行爲,那麼就稱這個類爲線程安全的類;   2.線程安全的體現 併發程序正確地執

原创 Java內存模型簡單講解

       在實際講解併發與高併發之前我們還需要先學習一下Java虛擬機是怎麼解決這些問題的;爲了屏蔽掉硬件以及各種操作系統的內存訪問差異以實現讓java程序在各個平臺下都能達到一致的併發效果,Java虛擬機規範中定義了Java內存模型

原创 JUC之AQS

1.AQS簡介 1.1概念: AbstractQueuedSynchronizer,它提供了一個FIFO隊列,可以看做是一個可以用來實現鎖以及其他需要同步功能的框架。這裏簡稱該類爲AQS。AQS的使用依靠繼承來完成,子類通過繼承自AQS並

原创 併發的優勢與風險

優勢: 速度:應用併發系統可以同時處理多個請求,等待的時間就會變短,響應就會更快,另一個方面,複雜的操作可以分爲多個進程同時操作加快了處理速度; 設計:假設一個應用程序需要從本地讀取和處理兩個文件,如果是都單線程的情況,我們就需要記錄每

原创 安全發佈對象

1.發佈與逸出 1.1概念 發佈對象 : 使一個對象能夠被當前範圍之外的代碼所使用; 對象逸出 : 一種錯誤的發佈,當一個對象還沒有構造完成時,就使他被其他線程所見; 1.2代碼演示 /** * 發佈對象 */ @Slf4j @No