原创 擼了一個 Feign 增強包 V2.0 升級版 前言 示例 日誌記錄 監控 metric 異常傳遞 總結

前言 大概在兩年前我寫過一篇 擼了一個 Feign 增強包,當時準備是利用 SpringBoot + K8s 構建應用,這個庫可以類似於 SpringCloud 那樣結合 SpringBoot 使用聲明式接口來達到服務間通訊的目的。 但後期

原创 分享一個 SpringCloud Feign 中所埋藏的坑 背景 Debug 總結

[圖片上傳失敗...(image-883e28-1653318905408)] 背景 前段時間同事碰到一個問題,需要在 SpringCloud 的 Feign 調用中使用自定義的 URL;通常情況下是沒有這個需求的;畢竟都用了 Spring

原创 簡單的 for 循環也會踩的坑 前言 坑一 坑二 defer 的坑 總結

前言 最近實現某個業務時,需要讀取數據然後再異步處理;在 Go 中實現起來自然就比較簡單,僞代碼如下: list := []*Demo{{"a"}, {"b"}} for _, v := range list {

原创 用 Antlr 重構腳本解釋器 前言 Antlr 升級 xjson 總結

[圖片上傳失敗...(image-636c17-1659876521176)] 前言 在上一個版本實現的腳本解釋器 GScript 中實現了基本的四則運算以及 AST 的生成。 [圖片上傳失敗...(image-2b6f3b-1659876

原创 用位運算爲你的程序加速 前言 用位運算優化 其他奇淫巧技 總結

[圖片上傳失敗...(image-471fa1-1659279343782)] 前言 最近在持續優化之前編寫的 JSON 解析庫 xjson,主要是兩個方面的優化。 第一個是支持將一個 JSONObject 對象輸出爲 JSON 字符串。

原创 幾百行代碼實現一個 JSON 解析器 前言 實現原理 總結

前言 之前在寫 gscript時我就在想有沒有利用編譯原理實現一個更實際工具?畢竟真寫一個語言的難度不低,並且也很難真的應用起來。 一次無意間看到有人提起 JSON 解析器,這類工具充斥着我們的日常開發,運用非常廣泛。 以前我也有思考過它是

原创 終於實現了一門屬於自己的編程語言 前言 特性 例子 語法 標準庫 總結

[圖片上傳失敗...(image-802cf0-1662517021420)] 前言 都說程序員的三大浪漫是:操作系統、編譯原理、圖形學;最後的圖形學確實是特定的專業領域,我們幾乎接觸不到,所以對我來說換成網絡更合適一些,最後再加上一個數據

原创 5分鐘學會 gRPC 介紹 HTTP/2 Protocol 調用 負載均衡 總結

介紹 我猜測大部分長期使用 Java 的開發者應該較少會接觸 gRPC,畢竟在 Java 圈子裏大部分使用的還是 Dubbo/SpringClound 這兩類服務框架。 我也是近段時間有機會從零開始重構業務才接觸到 gRPC 的,當時選擇

原创 用 Go 實現一個 LRU cache 前言 實現

前言 早在幾年前寫過關於 LRU cache 的文章: https://crossoverjie.top/2018/04/07/algorithm/LRU-cache/ 當時是用 Java 實現的,最近我在完善 ptg 時正好需要一個最近

原创 擼了一個可調試 gRPC 的 GUI 客戶端 前言 核心功能 後續計劃

前言 平時大家寫完 gRPC 接口後是如何測試的?往往有以下幾個方法: 寫單測代碼,自己模擬客戶端測試。 可以搭一個 gRPC-Gateway 服務,這樣就可以在 postman 中進行模擬。 但這兩種方法都不是特別優雅;第一

原创 編寫一個接口壓測工具 前言 特性 安裝 總結

前言 前段時間有個項目即將上線,需要對其中的核心接口進行壓測;由於我們的接口是 gRPC 協議,找了一圈發現壓測工具並不像 HTTP 那麼多。 最終發現了 ghz 這個工具,功能也非常齊全。 事後我在想爲啥做 gRPC 壓測的工具這麼少,

原创 觀察者模式的實際應用 前言 觀察者模式 示例代碼 總結

前言 設計模式不管是在面試還是工作中都會遇到,但我經常碰到小夥伴抱怨實際工作中自己應用設計模式的機會非常小。 正好最近工作中遇到一個用觀察者模式解決問題的場景,和大家一起分享。 背景如下: 在用戶創建完訂單的標準流程中需要做額外一些事情:

原创 切片 slice 原理分析 前言 示例 slice 原理 總結

前言 作爲一個 Go 語言新手,看到一切”詭異“的代碼都會感到好奇;比如我最近看到的幾個方法;僞代碼如下: func FindA() ([]*T,error) { } func FindB() ([]T,error) { } func

原创 Go 中的 channel 與 Java BlockingQueue 的本質區別 前言 channel 應用 Java 中的 BlockingQueue 總結

前言 最近在實現兩個需求,由於兩者之間並沒有依賴關係,所以想利用隊列進行解耦;但在 Go 的標準庫中並沒有現成可用並且併發安全的數據結構;但 Go 提供了一個更加優雅的解決方案,那就是 channel。 channel 應用 Go 與 J

原创 Python 中的 os.popen 函數 與 Pipe 管道的坑 前言 popen 原理 解決辦法 更多內容 總結

前言 最近用 Python 寫了幾個簡單的腳本來處理一些數據,因爲只是簡單功能所以我就直接使用 print 來打印日誌。 任務運行時偶爾會出現一些異常: 因爲我在不同地方都有打印日誌,導致每次報錯的地方都不太一樣,從而導致程序運行結果非