原创 spring 修改返回內容的編碼格式

第一種:直接使用produces @GetMapping(value = "login/home",produces = "text/html;charset=gb2312") @ResponseBody public

原创 AQS

參考文檔1  參考文檔2 AQS(AbstractQueuedSynchronizer),是一個用來構建鎖和同步器的框架,使用AQS能簡單且高效地構造出應用廣泛的大量的同步器,比如我們提到的ReentrantLock,Semaphore,

原创 IO 同步 異步 阻塞 非阻塞

參考:https://blog.csdn.net/historyasamirror/article/details/5778378  一個IO操作(文件IO / 網絡IO)包括兩步: 第一步: 數據複製到內核空間 第二步: 數據從內核

原创 用兩個棧實現隊列

思路: Push:數據都Push到棧A Pop:將A的數據放入B,然後Pop出B的頂部元素,最後再將數據重新放入A // 用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素爲int類型。 Stack<Inte

原创 Java 強引用 軟引用 弱引用 虛引用 ThreadLocal

強引用 規則:使用最普遍的引用,當內存空間不足,JVM寧願拋出OutOf MemoryError錯誤,都不會回收它 // 通過new產生,user就是個強引用 User user = new

原创 Java 線程池

1 線程池 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit, BlockingQueue<

原创 Java JVM

1 運行時內存數據 1.1 線程私有: 虛擬機棧:每個 Java 方法在執行的同時會創建一個棧幀用於存儲 局部變量表(基礎數據類型+對象引用),操作數棧,方法返回信息等數據。從方法調用直至執行完成的過程對應着一個棧幀在 Java 虛擬機棧

原创 二叉樹遍歷

根據根節點的順序 分爲:前序/中序/後序 例如上圖:  A:根節點 B:左節點 C:右節點 前序遍歷:ABC(順序:根,左,右) 中序遍歷:BAC(順序:左,根,右) 後序遍歷:BCA(順序:左,右,根) 案例: 比如上圖二叉樹遍歷

原创 字符串(替換空格)

題目:請實現一個函數,將一個字符串中的每個空格替換成“%20”。例如,當字符串爲We Are Happy.則經過替換之後的字符串爲We%20Are%20Happy   思路:用String.replace函數 public class

原创 數組(二維數組的查找)

題目:在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數   思路:遍歷,由於從左到右,從上到下遞

原创 鏈表(從尾到頭打印鏈表)

題目:輸入一個鏈表,按鏈表從尾到頭的順序返回一個ArrayList   public class Solution { ArrayList<Integer> arrayList=new ArrayList<Int

原创 一致性Hash算法

常規Hash(散列)是通過取模將數據均勻的放置在各個節點,在網絡請求裏適合用於負載均衡(例如nginx裏可以配置成Hash的負載,確保每個IP的請求走固定服務器)。 常規hash取餘(取模): 這樣的配置不需要Session共享,因爲每

原创 取模運算和取餘運算

對於整數 a,b 來說,取模運算(mod)或者取餘運算(rem)的方法要分如下兩步: 1、求整數商:c=a/b 2、計算模或者餘數:r=a-(c*b) 求模運算和求餘運算在第一步不同 取餘運算在計算商值向0方向捨棄小數位 取模運算在計

原创 Java HashMap解析

HashMap:數組+鏈表(或紅黑樹) Hash碰撞:所謂“碰撞”就是多個hash值不同的元素計算得出同一個桶(相同的數組下標),在put時出現衝突 桶:數組裏的每一個元素 Q:怎麼計算key對應的數組下標? A:put()方法裏,將

原创 CAS登錄登出

CAS實現 CAS理論 CAS:中央認證服務,解決sso單點登錄問題   登錄:  登出: A系統結束本地Session,然後通知CAS結束Session,CAS通知各個子系統結束Session