原创 深入理解靜態內部類實現單例模式

public class SingletonDemo3 { private static class SingletonClassInstance{ private static final Sin

原创 讀寫鎖中 爲什麼讀鎖不能升級爲寫鎖

讀鎖升級爲寫鎖。首先自己有讀鎖,之後拿到寫鎖。 如果有兩個讀鎖同時升級爲寫鎖。那麼只有一個能升級成功。但是這兩個線程同時擁有讀鎖。其中一個線程還一直在申請寫鎖。這就會造成死鎖。 但是鎖降級是可以的。因爲寫鎖只有一個線程佔有。 鎖降級: 鎖

原创 n個骰子的點數 java

題目: 滑動窗口的最大值 把n個骰子扔在地上,所有骰子朝上一面的點數之和爲s。輸入n,打印出s的所有可能的值出現的概率。 解題思路: 1.解法一可以使用遞歸來求解。詳細代碼見書。 2.解法二的思路爲:在一輪循環當中,第一個數組總的第n個數

原创 Java用位圖的思路實現組合

假設一共有n個字符,則可能的組合結果共有2^n-1種。 以輸入3個字符a、b、c爲例: 3個字符,可以用3個位來表示,從右到左的每一位分別用來代表a、b、c,該位爲1表示取該元素,該位爲0表示不取該元素。例如如組合a表示爲001,組合b表

原创 java併發(二)CAS操作

在java中,使用鎖線程會被阻塞,而且阻塞的時候線程切換上下文會有很大的開銷。而volatile也只能解決共享變量中可見性的問題。不能解決原子問題。 CAS通過硬件保證了原子性,而且是非阻塞的。 下面以一個方法簡單介紹 public f

原创 public static List full(List list, Predicate p) 第一個T是什麼意思?

第一個是用來聲明類型參數的,後面的兩個纔是泛型的實現。 也就是告訴大家 <T>這是一種類型

原创 java 中String拼接後爲什麼輸出到一半就結束了

static void concat(){ token[p_token]=ch; ++p_token; token[p_token]='\0'; } 這是我用來拼接字符串的方法。可

原创 爲什麼異或後可以找出數組中只出現一次而其他數字出現兩次

1-1000放在含有1001個元素的數組中,只有唯一的一個元素值重複,其它均只出現 一次。每個數組元素只能訪問一次,設計一個算法,將它找出來;不用輔助存儲空 間,能否設計一個算法實現? 將所有的數全部異或,得到的結果與1^2^3^...^

原创 java虛擬機(五)類加載的過程

類從加載到虛擬機開始到出去內存。有這麼幾個階段 加載 驗證 準備 解析 初始化 使用 卸載   這幾個過程 並不是有這絕對的先後順序。某些可能會混合式進行。 加載,其實虛擬機並沒有規定什麼時候要加載,但對於初始化是有這麼幾種情況必須要初始

原创 docker是什麼

  docker是什麼通過對應用封裝(Packaging)、分發(Distribution)、部署(Deployment)、運行(Runtime)全生命週期管理,達到“一次封裝,到處運行”   爲什麼使用 ,使用它可以無需關心環境,只需要

原创 java虛擬機(九)編譯是如何優化代碼的

首先我們要明白優化代碼,並不是建立在java的源碼之上的。而是建立在代碼的中間表達是或者機器碼上面。 公共子表達式消除 如果一個表達式E已經出現過了。而且下面出現的E的所有變量值都沒有發生改變,那就可以優化。 如  a=b*c+r+c*b

原创 equals() 如果避免空指針異常

(o1 == null) ? o2 == null : o1.equals(o2); 看源碼的時候看到的。覺得有用,記錄下

原创 爲什麼final修飾符是初始化安全的?

看了java併發編程實戰,有很多困惑。書中沒有講明白final域能確保初始化過程的安全的。   首先我們來看下創建對象的時候。 User user=new User(); 看過JVM都知道,這其中包含了幾步步。 1.檢測類是否被加載,首先

原创 spring使用了環繞通知後,全局異常捕獲失效 解決辦法

項目出現這個問題。本來全局異常捕獲好好的。只要拋出自己寫的自定義異常就會傳給前端。但我加入了環繞通知後,發現全局異常失效了。 來看看我的全局異常 package com.yiban.suoai.exception; import co

原创 java8(三)默認方法 衝突的解決

我們知道java只允許單繼承類,但可以多繼承接口。 默認方法的實現,爲API更新換代帶來方便的,也留下了不少麻煩。 每個接口都可以實現默認接口,而且是同樣的簽名。這個類去實現他們這些接口。那該如何繼承 有三條規則 1.類和父類的優先級最高