原创 java lambda 表達式

java lambda 表達式 lambda 是 java 8 引入的新特性,lambda 能替換簡單的函數和類,簡化了代碼,提高了代碼可讀性 語法 (Type1 param1, Type2 param2, ...) -> {

原创 java atomic

java atomic 原子變量提供各種原子操作,多線程場景下操作不需要加鎖,性能非常好 簡例 AtomicInteger ai = new AtomicInteger(10); ExecutorService es = Exec

原创 golang grpc keepalive

最近遇到 grpc 客戶端報錯 rpc error: code = Unavailable desc = transport is closing,原因是連接長時間沒有使用,被服務端斷開,這種情況通過簡單粗暴的重試策略可以解決,更

原创 mysql 事務

事務 ACID 特性 原子性(Atomicity): 事務中的所有操作,要麼全部成功,要麼全部失敗回滾到最初狀態,不會結束在中間的某個環節 一致性(Consistency): 事務開始之前和結束之後,數據庫的完整性沒有被破壞,寫

原创 java 集合

java 集合 數據結構總覽 Collection Collection 接口主要關注集合的添加,刪除,包含 isEmpty: 判斷是否沒有元素 size: 獲取元素個數 add: 添加元素 addAll: 添加給定集合中的所

原创 golang 標準命令行解析庫 flag

flag 庫實現了對命令行參數的解析 基本用法 package main import ( "fmt" "flag" ) func main() { b := flag.Bool("b", false,

原创 java io 流

java io 流 io 流總覽 io 流主要提供四個接口 InputStream: 輸入字節流 OutputStream: 輸出字節流 Reader: 輸入字符流 Writer: 輸出字符流 InputStream Inp

原创 java 正則表達式

java 正則表達式 正則表達式是一個非常強大的字符串處理工具,通過一種特殊的語法來描述一種模式,再通過模式可以完成字符串的匹配,萃取,替換等操作 簡例 要判斷一個字符串是否是一個郵箱,可能需要很多的判斷邏輯,使用則表達式,只需要

原创 c++ 實現 blocking queue

阻塞隊列就是多線程線程安全的隊列,在多線程場景下經常用到,c++ 標準庫裏面沒有提供阻塞隊列,boost 中有提供,生成環境下可以使用 blocking queue 實現 主要設計思路: 使用 std::vector 實現一個環

原创 golang 依賴管理之 mod

go 很早就考慮了依賴管理的問題,內置 go get 命令,可以直接獲取對應的依賴,非常方便,但是有一個巨大的缺陷,沒有版本的維護和管理,而版本不一致可能會導致各種兼容性問題,因此出現了很多第三方依賴管理工具,dep 和 glid

原创 系統監控設計與實現

監控宿主機器的一些基礎指標,並寫入到 influxdb 用於之後的可視化以及報警服務 監控的指標包括:cpu利用率,cpu負載,內存使用,網絡負載,iops,磁盤等 總體設計 主要分爲兩大模塊,reporter,collecto

原创 java 字典

java 字典 數據結構總覽 Map Map 描述的是一種映射關係,一個 key 對應一個 value,可以添加,刪除,修改和獲取 key/value,util 提供了多種 Map HashMap: hash 表實現的 map

原创 golang 網絡框架之 gin

golang 原生 http 庫已經可以很方便地實現一個 http server 了,但對於複雜的 web 服務來說,路由解析,請求參數解析,對象返回等等,原生 api 就顯得有些不太夠用了,而 gin 是一個功能完備,性能很高的

原创 java 基本類型

java 基本類型 基本類型 java 基本的基本類型包括 boolean, byte, char, short, int, long, float, double 每個類型都有一個封裝類,封裝類繼承自 Object 對象,可以用

原创 docker golang 開發環境

go 版本的不一致,依賴庫不一致,導致編譯失敗;代碼生成工具不一致,導致生成代碼有問題;依賴工具缺失,導致測試不通過等等,開發環境和生產環境之間的差異會導致各種各樣奇怪的問題,而 docker 特別擅長解決這種一致性問題 總體方案