原创 圖解Golang的內存分配

一般程序的內存分配 在講Golang的內存分配之前,讓我們先來看看一般程序的內存分佈情況: 以上是程序內存的邏輯分類情況。 我們再來看看一般程序的內存的真實(真實邏輯)圖: Go的內存分配核心思想 Go是內置運行時的編程語言(runti

原创 圖解Mysql執行計劃explain

以下是Mysql執行計劃的圖解。在使用explain的時候可以參考使用。 PS:圖片若小,可保存放大使用。 更多精彩內容,請關注我的微信公衆號 互聯網技術窩 或者加微信共同探討交流:

原创 Go語言interface底層實現

Go的interface源碼在Golang源碼的runtime目錄中。 Go在不同版本之間的interface結構可能會有所不同,但是,整體的結構是不會改變的,此文章用的Go版本是1.11。 Go的interface是由兩種類型來實現的:i

原创 圖解字符編碼

啥叫字符集 計算機只認識0和1 那字符串“abc”咋顯示呢? 有個類似於字典的東西,告訴計算機在此種情況(在此編碼格式)下,某些數字該顯示什麼。 這種字典,就是字符集 現有的字符集 目前主要有以下幾種字符集: ASCII字符集 IS

原创 圖解Go的channel底層原理

廢話不多說,直奔主題。 channel的整體結構圖 簡單說明: buf是有緩衝的channel所特有的結構,用來存儲緩存數據。是個循環鏈表 sendx和recvx用於記錄buf這個循環鏈表中的發送或者接收的index lock是個

原创 秒懂InnoDB的鎖

今天我們來聊聊MySQL中InnoDB存儲引擎的鎖。 鎖是數據庫系統系統區別於文件系統的一個關鍵特性。 lock和 latch latch latch在MySQL中是用來保證併發多線程操作操作臨界資源的鎖,鎖定的對象線程,是和咱們使用的Ja

原创 圖解Go的select語句原理

Go 的select語句是一種僅能用於channl發送和接收消息的專用語句,此語句運行期間是阻塞的;當select中沒有case語句的時候,會阻塞當前的groutine。所以,有人也會說select是用來阻塞監聽goroutine的。 還有

原创 十分鐘瞭解比特幣和區塊鏈

比特幣及區塊鏈的發展歷史 大家接觸和了解區塊鏈,最早應該是從比特幣開始的。確實,區塊鏈確實也是起源於比特幣,但是又不侷限於貨幣圈。區塊鏈可以在金融、保險、醫療、政府等領域被廣泛使用。 既然區塊鏈起源於貨幣,那我們就從貨幣開始談起。 貨幣本質

原创 圖解Go語言的gc算法

雖然Golang的GC自打一開始,就被人所詬病,但是經過這麼多年的發展,Golang的GC已經改善了非常多,變得非常優秀了。 以下是Golang GC算法的里程碑: v1.1 STW v1.3 Mark STW, Sweep 並行 v1.

原创 圖解HTTP緩存

用途 HTTP緩存主要用在對一些實時性要求不高的靜態文件進行的緩存,往往都是存在瀏覽器端,防止這些“多餘”的請求重複的訪問服務器,對服務器造成壓力,從而提高網站的性能。 原理 現有兩端,瀏覽器C和服務器端S。 瀏覽器向服務器發送請求,獲取

原创 圖解Golang的GC算法

雖然Golang的GC自打一開始,就被人所詬病,但是經過這麼多年的發展,Golang的GC已經改善了非常多,變得非常優秀了。 以下是Golang GC算法的里程碑: v1.1 STW v1.3 Mark STW, Sweep 並行 v1.

原创 圖解Go select語句原理

Go 的select語句是一種僅能用於channl發送和接收消息的專用語句,此語句運行期間是阻塞的;當select中沒有case語句的時候,會阻塞當前的groutine。所以,有人也會說select是用來阻塞監聽goroutine的。 還有

原创 手繪raft算法

在現實的分佈式系統中,不能可能保證集羣中的每一臺機器都是100%可用可靠的,集羣中的任何機器都可能發生宕機、網絡連接等問題導致集羣中的某個節點不可用,這樣,那個節點的數據就有可能和集羣不一致,所以需要有一種機制,來保證在大多數機器都存在的情

原创 MYSQL的SQL性能優化總結

很多時候,我們的程序出現的“性能問題”,其實是我們自己寫的那"坨"代碼的問題,是自己Coding的問題,是Mysql的DML語句使用的問題。 以下是我總結的關於MySQL DML語句的使用中需要注意的點。 對於select *要時刻保持謹

原创 十分鐘學會正則表達式

正則表達式用處挺廣的,主要用於處理字符串。 正則引擎 想要在計算機語言中使用正則表達式,那麼這門計算機語言必須要利用正則引擎去實現相應的正則庫。主要的正則引擎分爲以下兩類: DFA 確定性的狀態機。不使用"回溯",效率高,但是支持的正則表