原创 Go 函數調用 ━ 棧和寄存器視角

  函數的調用過程主要要點在於藉助寄存器和內存幀棧傳遞參數和返回值。雖然同爲編譯型語言,Go 相較 C 對寄存器和棧的使用有一些差別,同時,Go 語言自帶協程並引入 defer 等語句,在調用過程上顯得更加複雜。 理解Go函數調用在CPU指

原创 goroutine泄露:原理、場景、檢測和防範

如果你啓動了一個 goroutine,但並沒有符合預期的退出,直到程序結束,此goroutine才退出,這種情況就是 goroutine 泄露。當 goroutine 泄露發生時,該 goroutine 的棧(一般 2k 內存空間起)一直被

原创 golang練手小項目系列(6)-使用map實現set

問題描述 go沒有提供set數據結構,請用map實現set 要點 需要支持方法: Add 添加元素 Remove 刪除元素 Cardinality 獲取 Set 長度 Clear 清空 Set Contains 檢測元素是否在 Set 中

原创 bitcount優化之路

問題: 使用Go實現bitcount函數,統計一個uint64型數值中被設置爲 1 的比特位的數量。 方案一: 最容易想到的實現就是每次右移一位,檢測最後一位是否是1,這樣完成挨個比特檢測後,就可以得出結果。 func bitCount1(

原创 golang練手小項目系列(1)-位向量

本系列整理了10個工作量和難度適中的Golang小項目,適合已經掌握Go語法的工程師進一步熟練語法和常用庫的用法。 問題描述: 有一組非負整數,實現一個位向量類型,能在O(1)時間內完成插入、刪除和查找等操作。 要點: 實現Has(uint