原创 Scala那些奇怪的符號(三)

<%       這個符號有點像“<:”,但作用卻完全不一樣,類型上邊界“<:”的意思有點像繼承,A <: B 表示 A是B的子類;而A <% B的意思是“A可以轉化爲B”,這裏可以不必強調A和B本身的關係,只要有一個從A到B的隱士轉化即

原创 圖解Go語言interface底層實現

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

原创 Scala 的那些奇怪的符號 (一)

    Scala的語法很多,有些人認爲過於繁瑣,有些人卻認爲正是因爲繁瑣,所以才讓這門語言嚴謹和強大。    例如在翻閱Scala資料或者查看Scala源碼的時候,經常會看到“<:”和“>:”,這是什麼鬼?下面我就來探討一下這兩個符號的

原创 爲什麼數組要從零開始?

如題,數組第一個元素爲什麼要從零開始,而不從一開始?感覺這很反人類呀,正常來講,一個集合的開始,不應該從一嗎? 對於這個問題,我覺得可以從以下兩方面來考慮。 設計層面 我們先了解一下數組最基本的結構和尋址方式(即實現方式)。 現在

原创 圖解Go的unsafe.Pointer

圖解Go的unsafe.Pointer \ 相信看過Go源碼的同學已經對unsafe.Pointer非常的眼熟,因爲這個類型可以說在源碼中是隨處可見:map、channel、interface、slice...但凡你能想到的內容,基本都

原创 圖解go反射實現原理

Go反射的實現和 interface和 unsafe.Pointer密切相關。如果對golang的 interface底層實現還沒有理解,可以去看我之前的文章:Go語言interface底層實現, unsafe.Pointer會在後續的

原创 Mysql執行計劃explain圖解

在日常工作中,我們的項目如果發現查詢很慢了,往往會去查看MySQL的慢查詢日誌,找到對應的SQL;找到這個SQL並不就此完事兒了,還會對當前SQL進行優化;使用MySQL的explain命令,將會事半功倍:查看該SQL語句有沒有使用上了

原创 圖解Mysql執行計劃explain

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

原创 本地安裝es遇到的問題小結

自己搭建es集羣,遇到如下問題(系統環境:CentOS 6.8 CentOS 7 ): root用戶不能運行 對於es中es總目錄、logs目錄、config目錄中的文件必須要有讀寫權限 要想外網訪問,需要設置yaml文件

原创 PHP性能優化

PHP雖然是世界上最好的語言,但是它本身作爲一門腳本語言,其運行效率一直被人們所詬病。 作爲以PHP爲開發語言的應用程序而言,PHP程序的性能能影響到整個架構性能的百分之30左右,不會超過百分之50,其餘的是硬件的、操作系統的、存儲的

原创 圖解Go的channel底層原理

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

原创 圖解Go select語句原理

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

原创 Go語言interface底層實現

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

原创 快速理解Go數組和切片的內部實現原理

很多人對Go語言的array和slice傻傻分不清楚,今天我們就從底層出發,來聊聊它倆到底有什麼區別。 數組 幾乎所有計算機語言,數組的實現都是相似的:一段連續的內存,Go語言也一樣,Go語言的數組底層實現就是一段連續的內存空間。每個元素

原创 Golang奇葩點

本文即Go語言的那些坑二。 Golang中函數被看做是值,函數值不可以比較,也不可以作爲map的key 請問以下代碼能編譯通過嗎? import ( "fmt" ) func main(){ array := make(