原创 不可不說的Java“鎖”事

前言 Java提供了種類豐富的鎖,每種鎖因其特性的不同,在適當的場景下能夠展現出非常高的效率。本文旨在對鎖相關源碼(本文中的源碼來自JDK 8和Netty 3.10.6)、使用場景進行舉例,爲讀者介紹主流鎖的知識點,以及不同的鎖的適用場景

原创 hashMap-putVal()方法分析

putVal() 方法解析 final V putVal(int hash, K key, V value, boolean onlyIfAbsent,                    boolean evict) {      

原创 ThreadLocal與WeakReference問題

ThreadLocal local = new ThreadLocal(); local.set("當前線程名稱:"+Thread.currentThread().getName());//將ThreadLocal作爲key放入thre

原创 new BigDecimal(0.1)與new BigDecimal(”0.1″)爲何不等?

在使用BigDecimal進行比較的時候,會發現new BigDecimal(0.1)與new BigDecimal(”0.1″)不相等,後來查了一下API發現對於new BigDecimal(double var)有如下描述: 此構造方

原创 @Autowired 與@Resource的區別

spring不但支持自己定義的@Autowired註解,還支持幾個由JSR-250規範定義的註解,它們分別是@Resource、@PostConstruct以及@PreDestroy。 @Autowired 與@Resource的區別:

原创 聚集索引和非聚集索引的區別

目錄 一、深入淺出理解索引結構 二、區別及優缺點 三、需要搞清楚的幾個問題 四、何時使用聚集索引或非聚集索引 五、結合實際,談索引使用的誤區 六、其他書上沒有的索引使用經驗總結 一、深入淺出理解索引結構 實際上,可以把索引理解爲一種特殊

原创 Spring IOC 容器源碼分析

目錄 引言 BeanFactory 簡介 啓動過程分析 創建 Bean 容器前的準備工作 創建 Bean 容器,加載並註冊 Bean Bean 容器實例化完成後 準備 Bean 容器: prepareBeanFactory 初始化所有的

原创 分佈式ID生成方案

目錄 UUID 類snowflake方案 數據庫生成 Leaf-segment數據庫方案 雙buffer優化 Leaf高可用容災 弱依賴ZooKeeper 解決時鐘問題 在複雜分佈式系統中,往往需要對大量的數據和消息進行唯一標識。如在美團

原创 Java的僞泛型

Java和C#是兩款相似性超過96%的語言,無論是語法還是運行原理機制,這兩者都有着諸多的相似之處。但是目前的市場Java似乎個廣受歡迎一些,但是C#也確實已有些地方比java更加的優異,比如今天我們要說的泛型。Java的泛型爲僞泛型,C

原创 Redis 部署方式(單點、master/slaver、sentinel、cluster) 概念與區別

在K8S上部署Redis集羣時突然遇到一個(sentinel哨兵模式)概念,感覺Redis的概念還是很多的,什麼主從模式、sentinel模式、集羣模式的,一下子都暈了,我覺得還是有必要先理清這些基本概念。具體的部署步驟就不在這贅述了。

原创 Spring和SpringMVC以及SpringBoot的區別

什麼是spring 關於spring的定義無論是從官方還是市面上已經很多能夠清晰明瞭的做出解釋了。我姑且簡單定義它爲一個輕量級的控制反轉(IoC)和麪向切面(AOP)的容器,Java 開發框架,至於控制反轉、面向切面、輕量級、容器等這些自

原创 聚集、非聚集索引、唯一索引、複合索引、系統自建索引

說明:紅色字體表示要特別注意點   索引是在數據庫表或者視圖上創建的對象,目的是爲了加快對錶或視圖的查詢的速度。 按照存儲方式分爲:聚集與非聚集索引 按照維護與管理索引角度分爲:唯一索引、複合索引和系統自動創建的索引。 索引的結構是由:根

原创 樹的時間複雜度

時間複雜度是一個函數,它定量描述了該算法的運行時間。常見的時間複雜度有以下幾種。 1,log(2)n,n,n log(2)n ,n的平方,n的三次方,2的n次方,n! 1指的是常數。即,無論算法的輸入n是多大,都不會影響到算法的運行時間。

原创 初始化MYSQL表數據方式以及實踐

情況一:data2表中無table2表 select * into data2.dbo.table2 in data2 from data1.dbo.table1 情況二:結構不一樣或者你要指定字段 insert into data2

原创 Java線程池

Java-五種線程池,四種拒絕策略,三種阻塞隊列: 三種阻塞隊列:     BlockingQueue<Runnable> workQueue = null;     workQueue = new ArrayBlockingQueue