原创 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 特別擅長解決這種一致性問題 總體方案