原创 netty的基本運行原理

netty BIO的缺陷 一個socket由一個線程處理,大量socket引起創建大量線程。 數據讀寫是以字節流爲單位,效率不高 NIO 線程切換效率:NIO編程模型中,新來一個連接不再創建一個新的線程,而是可以把這

原创 MySQL慢查詢定位方式

MySQL慢查詢定位方式: 查看是否開啓慢查詢功能: mysql> show variables like 'slow_query%'; +---------------------+---------------------

原创 微服務(一):爲什麼需要微服務

微服務(一):爲什麼需要微服務 微服務出現的原因 單體架構存在不足 業務越來越複雜,單體應用的代碼量越來越大,代碼的可讀性、可維護性、可拓展性下降,新人接手代碼所需的時間成倍增加,業務擴展帶來的代價極大。 單體應用的併發能力有

原创 new一個對象發生了什麼之類加載機制

類加載 類加載的過程包括了加載、驗證、準備、解析、初始化五個階段。在這五個階段中,加載、驗證、準備和初始化這四個階段發生的順序是確定的,而解析階段則不一定,它在某些情況下可以在初始化階段之後開始。另外注意這裏的幾個階段是按順序開

原创 用EXPLAIN分析sql執行情況

EXPLAIN用法 -- 實際SQL,查找用戶名爲Jefabc的員工 select * from emp where name = 'Jefabc'; -- 查看SQL是否使用索引,前面加上explain即可 explain se

原创 緩存淘汰策略-LRU

LRU(Least Recently Used) LRU 算法的設計原則是:如果一個數據在最近一段時間沒有被訪問到,那麼在將來它被訪問的可能性也很小。也就是說,當限定的空間已存滿數據時,應當把最久沒有被訪問到的數據淘汰。 提供一種

原创 Java VisualVM中的線程狀態

Java VisualVM的線程狀態解釋 運行狀態:即線程正在運行 休眠狀態:即線程在休眠 等待狀態:即調用Object.wait的線程,此處要注意,condtion.await並不是此狀態,而是下面的狀態。 駐留狀態:調用了

原创 Java動態代理的兩種方式

兩種動態代理: 實現原理: JDK動態代理:利用反射機制生成一個實現代理接口的匿名類,在用接口調用具體方法前,調用代理類的invoke來處理。 cglib:利用asm開源包,對代理對象類的class文件加載進來,通過修改其字節碼

原创 徹底刪除git上沒有用的大文件

不小心提交了大文件到git上,需要從git提交記錄中徹底刪除才能在clone時減小clone的倉庫大小,否則歷史記錄仍然是有這個文件的。 使用git filter-branch $ git filter-branch -f -

原创 布隆過濾器解決緩存穿透的原理

布隆過濾器 作用 告訴你某個元素一定不存在或者可能存在,相比於傳統的List、Set、Map等數據結構,它更高效、佔用的控件更小。 數據結構 布隆過濾器是一個bit向量或者bit,如果我們要映射一個值到布隆過濾器中,我們㤇使用多個

原创 超詳細的Centos7安裝(附鏡像、虛擬機軟件、xshell工具下載)

Centos7安裝 一、下載Centos7鏡像 1.下載BT種子CentOS-7-x86_64-DVD-1708.torrent。 下載地址 2.使用任意工具下載BT種子關聯的鏡像,這裏我使用的是迅雷,使用迅雷打開種子即可創建任務

原创 部分揹包

部分揹包 問題: 有不同種類的金屬粉末,銅粉有5g價值10元,鎂粉有10g價值20元,金粉8g價值21元,現在有一10g的揹包,問裝走最大價值粉末的策略。 思路:貪心算法,直接先選單價最貴的粉末的裝,然後再選次貴的,循環下去,知道

原创 區間DP淺析

區間dp 區間dp就是在區間上進行動態規劃,求解一段區間上的最優解。主要是通過合併小區間的 最優解進而得出整個大區間上最優解的dp算法。 解決思路 讓我求解在一個區間上的最優解,那麼我把這個區間分割成一個個小區間,求解每個小區間的

原创 從源碼淺析ThreadLocal可能的內存泄漏

從源碼淺析ThreadLocal可能的內存泄漏 ThreadLocal的set方法 public void set(T value) { Thread t = Thread.currentThread();

原创 各類GC及觸發條件

針對HotSpot VM的實現,它裏面的GC其實準確分類只有兩大種: Partial GC:並不收集整個GC堆的模式 Young GC:只收集young gen的GC Old GC:只收集old gen的GC。只有CMS的con