原创 MySQL索引失效分析 總結:

爲了演示索引失效的問題,首先來建一張表: create table staffs( id int primary key auto_increment, name varchar(100) not null default ''

原创 MySQL連接查詢索引優化 一、單表索引優化 二、兩表索引優化 三、三表索引優化 四、exists和in 五、優化結論

一、單表索引優化 建表: 建一張表,SQL如下: create table `tb_article`( `id` int not null primary key auto_increment comment '主鍵', `au

原创 MySQL連接查詢&索引介紹 一、常見的join查詢: 二、索引

一、常見的join查詢: join太多張表,也會導致查詢速度變慢。下面就來分析一下join語句。 1. 執行順序: 我們寫一條join查詢語句一般都是: select * from tableA left join tableB on <j

原创 JVM --- 垃圾回收 一、YGC和full GC的區別 二、四大回收算法

一、YGC和full GC的區別 YGC(minor GC):只針對新生代區域進行GC,發生得非常頻繁,回收速度也很快; Full GC(major GC):指發生在老年代的GC,出現了Full GC,經常會伴隨至少一次以上的YGC,速度

原创 MySQL架構介紹 一、目錄結構 二、分層結構 三、innoDB和MyIsam對比

一、目錄結構 /var/lib/mysql/:MySQL數據庫文件的存放路徑; /usr/share/mysql:配置文件目錄; /usr/bin:MySQL命令的存放目錄; /etc/init.d/mysql:啓停相關腳本 二、分層結

原创 迪傑斯特拉算法(最短路徑問題)

1. 應用場景: 假如有七個村莊(ABCDEFG),有個人從G點出發,到其他六個村莊的最短路徑分別是多少?到A、B、F、E只有一條路,沒得選,但是到C有兩條路,可以是2 + 7,也可以是8 + 4,到D點可以是3 + 9,也可以是6 + 4

原创 弗洛伊德算法(最短路徑問題)

1. 介紹: 弗洛伊德算法和迪傑斯特拉算法一樣,都是求最短路徑的。迪傑斯特拉算法是求某一個頂點到其他各頂點的最短路徑,而弗洛伊德算法會求出各個頂點到其他頂點的最短路徑。弗洛伊德算法更簡單,但是時間複雜度相對較高。同樣以下圖爲例: 假如有七

原创 JVM --- 堆&棧&堆參數調優 一. 方法區: 二. 棧: 三. 堆: 四. JVM調優

一. 方法區: 線程共享的運行時內存區域,它存儲了每一個類的結構信息。什麼叫類的結構信息,其實就是上一篇講類加載器時說的類的模板。也就是類的屬性、構造器、方法、常量池等。而且,方法區是一種規範,不是具體實現。java7及以前的實現叫永久代,

原创 克魯斯卡爾算法(公交站問題)

1. 是什麼? 克魯斯卡爾算法其實也是生成最小生成樹的一種算法,和普里姆算法一樣,解決同一類問題的。 有7個公交站(A, B, C, D, E, F, G) ,現在需要修路把7個公交站連通,各個公交站之間的距離如下。問如何修路,能使各個公交

原创 JVM --- 結構體系介紹

1. JVM的位置: JVM是運行在操作系統之上的虛擬機,跟硬件沒有直接交互。這也就體現了它跨平臺的優越性。只要你這個操作系統能運行JVM,那麼就可以運行java程序。 2. JVM體系結構: 下圖爲JVM的體系結構,灰色的表示線程私有,

原创 普里姆算法(修路問題)

一、是什麼? 1. 應用場景: 有7個村莊(A, B, C, D, E, F, G) ,現在需要修路把7個村莊連通,各個村莊之間的距離如下。問如何修路,能使各個村莊連通且修路的總里程數最小? 這就是經典的修路問題,就可以用普里姆算法來解決

原创 KMP算法(字符串匹配問題)

一、是什麼? 注意,是KMP算法,不是MMP哈,我沒有罵人。KMP算法是用來做字符串匹配的,除了KMP算法分,還有暴力匹配算法,也是用來做字符串匹配的。接下來先看看暴力匹配算法,你就知道爲啥會出現KMP算法了。 二、暴力匹配算法: 1. 算

原创 動態規劃算法(01揹包問題)

一. 動態規劃算法介紹: 動態規劃算法和分治算法類似,也是將待求解問題分成若干個小問題一步步求解,不同的是,每一個小問題求解過程依賴於上一個小問題的解。動態規劃問題可以通過填表法來得到解,最經典的應用就是揹包問題。 二. 揹包問題: 1.

原创 分治算法(漢諾塔問題)

一. 算法介紹: 分治算法,其實就是把一個大問題看成若干個小問題,解決了所有的小問題,那麼大問題就解決了,原問題的解就是子問題解的合併,之前說的歸併排序、快速排序,都用到了分治思想。 二. 分治算法的基本步驟: 分解:將原問題分解成若干個

原创 多叉樹 & B樹 & B+樹 & B*樹

1. 二叉樹存在的問題: 二叉樹雖然操作效率比較高,但是如果數據一多,就會有好多好多的節點,需要進行好多次的I/O操作,構建出來的二叉樹就會很高很高,也會降低操作速度。 2. 怎麼解決? 二叉樹因爲每個節點只能有兩個子節點,所以數據一多構建