# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 9210
# self = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog/twtxt.txt&offset=8110
# next = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog/twtxt.txt&offset=8210
# prev = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog/twtxt.txt&offset=8010
SQLite 系列 - 創建、附加和分離數據庫**
創建數據庫-----SQLite 的 sqlite3 命令被用來創建新的 SQLite 數據庫 [1]。您不需要任何特殊的權限即可創建一個數據。我們需要在路徑D:\\\\myDatas\\\\SQLiteDB\\\\db下創建數據庫,數據庫路徑和名稱如下:D:\\\\myDatas\\\\SQLiteDB\\\\db\\\\sqlite02opdb.db在當前文件夾路徑下,輸入 cmd 回車,然後執行如下命令創建數據庫:D:\\\\myData ⌘ Read more
SQLite 系列 - 創建、附加和分離數據庫**
創建數據庫-----SQLite 的 sqlite3 命令被用來創建新的 SQLite 數據庫 \n。您不需要任何特殊的權限即可創建一個數據。我們需要在路徑D:\\\\myDatas\\\\SQLiteDB\\\\db下創建數據庫,數據庫路徑和名稱如下:D:\\\\myDatas\\\\SQLiteDB\\\\db\\\\sqlite02opdb.db在當前文件夾路徑下,輸入 cmd 回車,然後執行如下命令創建數據庫:D:\\\\myData ⌘ Read more
Golang 中 JSON 操作的 5 個常見陷阱(建議收藏!)**
JSON 是許多開發人員在工作中經常使用的一種數據格式。它一般用於配置文件或網絡數據傳輸等場景。由於其簡單、易懂、可讀性好,JSON 已成爲整個 IT 界最常用的格式之一。對於這種情況,Golang 和許多其他語言一樣,也提供了標準庫級別的支持, encoding/json[1]。就像 JSON 本身很容易理解一樣,用於操作 JSON 的編碼 / JSON 庫也非常容易使用。但我相信,很多開發者可 ⌘ Read more
Golang 中 JSON 操作的 5 個常見陷阱(建議收藏!)**
JSON 是許多開發人員在工作中經常使用的一種數據格式。它一般用於配置文件或網絡數據傳輸等場景。由於其簡單、易懂、可讀性好,JSON 已成爲整個 IT 界最常用的格式之一。對於這種情況,Golang 和許多其他語言一樣,也提供了標準庫級別的支持, encoding/json\n。就像 JSON 本身很容易理解一樣,用於操作 JSON 的編碼 / JSON 庫也非常容易使用。但我相信,很多開發者可 ⌘ Read more
使用 Go 語言的 bytes 包高效地操作字符串**
在編程語言 Go 中,bytes包提供了一系列用於操作[]byte類型的函數,這非常有用,特別是當你需要處理大量的字符串和切片時。通過使用bytes.Buffer,你可以高效地構建和修改字符串,而不必擔心頻繁的內存分配和字符串拼接導致的性能問題。下面,我們將深入瞭解如何使用bytes.Buffer,並通過豐富的示例演示它的強大功能。Buffer 的基本用法------------bytes.Buf ⌘ Read more
Golang 實現搜索引擎**
概述--主要包括三個部分:網絡爬蟲: 爬取儘可能多的網頁; 網頁分詞: 利用jieba庫對網頁內容進行分詞, 並存儲分詞結果(格式爲: 文檔 id, 文檔長度, 詞頻, 分詞偏移 - 文檔 id, 文檔長度, 詞頻, 分詞偏移); 搜索頁面: 提供一個前端頁面, 用戶輸入搜索詞, 基於分詞相關性, 返回結果; 不要害怕,整個邏輯很簡單,邏輯拆分的很獨立,便於理解。項目地址: ht ⌘ Read more
Golang 狀態機設計模式**
本文介紹了 Golang 狀態機模式的一個實現示例,通過該模式,可以解耦調用鏈,有助於實現測試友好的代碼,提高代碼質量。原文: Go State Machine Patterns[1]導言在我們開發的許多項目中,都需要依賴某種運行狀態從而實現連續操作。這方面的例子包括:解析配置語言、編程語言等 在系統、路由器、集羣上執行操作... ETL(Extract Transform Loa ⌘ Read more
Golang 狀態機設計模式**
本文介紹了 Golang 狀態機模式的一個實現示例,通過該模式,可以解耦調用鏈,有助於實現測試友好的代碼,提高代碼質量。原文: Go State Machine Patterns\n導言在我們開發的許多項目中,都需要依賴某種運行狀態從而實現連續操作。這方面的例子包括:解析配置語言、編程語言等 在系統、路由器、集羣上執行操作... ETL(Extract Transform Loa ⌘ Read more
async-await 函數到底要不要加 try catch ?**
作者:EthanZhou https://juejin.cn/post/7213362932423376933前言--寫異步函數的時候,promise 和 async 兩種方案都非常常見,甚至同一個項目裏,不同的開發人員都使用不同的習慣, 不過關於兩者的比較不是本文關注的重點,只總結爲一句話:“async 是異步編程的終極解決方案”。當使用 async 函數的時候,很多文章都說建議用 t ⌘ Read more
從頭預訓練一個 LLaMA 3 超級 mini 杯**
作者:Xode 原文:https://zhuanlan.zhihu.com/p/695130168 整理:青稞 AI這次打算用 Hugging Face 的 API 來寫一份預訓練大(小)模型的代碼,也就是用 Trainer 來做預訓練。由於只是想練習一下,因此打算選一個極小模型 + 小數據集。爲了貼近主流,於是打算預訓練一個 LLaMA 3——不過是超迷你版本,大小僅不到 20M ⌘ Read more
一文帶你瞭解大模型——智能體(Agent)**
作者:lucasgftang大語言模型 vs 人類大語言模型很強大,就像人類的大腦一樣擁有思考的能力。如果人類只有大腦,沒有四肢,沒有工具,是沒辦法與世界互動的。如果我們能給大模型配備上四肢和工具呢?大模型是不是就會打破次元壁,從數字世界走向現實世界,與現實世界實現夢幻聯動呢?大語言模型(後文將用 LLM 指代)可以接受輸入,可以分析 & 推理、可以輸出文字 \\ 代碼 \\ 媒體。然而,其無法像人類 ⌘ Read more
一張圖理解微服務架構設計**
前言當前,微服務架構在很多公司都已經落地實施了,下面用一張圖簡要概述下微服務架構設計中常用組件。不能說已經使用微服務好幾年了,結果對微服務架構沒有一個整體的認知,一個只懂搬磚的程序員不是一個好碼農。流量入口 Nginx在上圖中可以看到,Nginx 作爲整個架構的流量入口,可以理解爲一個外部的網關,它承擔着請求的路由轉發、負載均衡、動靜分離等功能。作爲一個核心入口點,Nginx 肯定要採用多節點部署 ⌘ Read more
Go 語言中,HTTP 請求流式是如何寫入 body 的?**
最近在開發一個功能時,需要通過 http 協議上報大量的日誌內容,但是在 Go 標準庫裏的 http client 的 API 是這樣的: http.NewRequest(method, url string, body io.Reader)body 是通過 io.Reader 接口來傳遞,並沒有暴露一個 io.Writer 接口來提供寫入的辦法,先來看看正常情況下怎麼寫入一個 body ,示例 ⌘ Read more
Linux 內核調試之使用模塊參數**
開場白環境: 處理器架構:arm64 內核源碼:linux-6.6.29 ubuntu 版本:20.04.1 代碼閱讀工具:vim+ctags+cscope 本文主要介紹內核開發中常用的模塊傳參手段,通過模塊參數傳遞可以通過用戶態來獲取內核的一些信息,也可以通過用戶態寫入一些值來控制內核相關行爲。一般內核開發者很喜歡使用模塊傳參來調試內 ⌘ Read more
手把手教你寫一個前端腳手架**
腳手架是什麼,相信各位已經熟悉得不能再熟悉了,畢竟無論是 vue 開發者(vue-cli)還是 react(create-react-app)開發者,他們都有各自的腳手架,個人雖是用 react 更多,但不得不說是更喜歡 vue-cli 的,它的插件機制非常有意思,雖不如 webpack 的 plugin 那麼方便,但也很強大。不過再講這強大的功能之前,原諒我先水一篇腳手架的基礎。腳手架會分兩篇來 ⌘ Read more
用 Rust 和 OpenCV 打造 ASCII 圖片**
使用 Rust 和 OpenCV 的動態組合,將任何舊圖片變成一個炙手可熱的 ASCII 藝術圖片。想象文字像像素一樣跳舞,在純文本的基礎上捕捉圖像的本質。OpenCV 下載地址:https://opencv.org/releases/創建一個 Rust 項目:cargo new img-to-ascii在 Cargo.toml 文件中,加入以下依賴項:[dependencies]opencv = ⌘ Read more
用 Rust 和 OpenCV 打造 ASCII 圖片**
使用 Rust 和 OpenCV 的動態組合,將任何舊圖片變成一個炙手可熱的 ASCII 藝術圖片。想象文字像像素一樣跳舞,在純文本的基礎上捕捉圖像的本質。OpenCV 下載地址:https://opencv.org/releases/創建一個 Rust 項目:cargo new img-to-ascii在 Cargo.toml 文件中,加入以下依賴項:\nopencv = ⌘ Read more
換掉 ES? Redis 官方搜索引擎,效率大幅提升**
RediSearch 是一個 Redis 模塊,爲 Redis 提供查詢、二次索引和全文搜索。要使用 RediSearch,首先要在 Redis 數據上聲明索引。然後可以使用重新搜索查詢語言來查詢該數據。RedSearch 使用壓縮的反向索引進行快速索引,佔用內存少。RedSearch 索引通過提供精確的短語匹配、模糊搜索和數字過濾等功能增強了實現特性基於文檔的多個字段全文索引 高性能增 ⌘ Read more
解讀大模型應用的可觀測性**
似乎在一夜之間,每個 IT 企業的待辦事項清單以及招聘啓事都包含了生成式 AI,基於大模型的應用已經在改變人們的工作、學習、寫作、設計、編碼、旅行和購物的方式,而且可能只是冰山一角。大模型應用並不神祕,仍然是一種軟件系統。就像使用一個庫或者 web 服務,以及 SaaS 乃至雲計算服務,我們需要對庫、服務、SaaS 以及平臺進行評估、監控和追蹤,這可以被粗略地認爲是它們的可觀測性。對大模型應用而言 ⌘ Read more
使用查詢分離後從 20s 優化到 500ms
大家好,我是不才陳某~冷熱分離固然是一個性價比高的解決方案,但也並不是銀彈,仍然有諸多限制,比如:查詢冷數據慢 業務無法修改冷數據 冷數據多到一定程度系統依舊扛不住 此時如果需要解決以上問題,可以採用另外一種方案:使用 查詢分離 優化業務主表數據大查詢緩慢的問題什麼是查詢分離?--------查詢分離從字面上來說非常容易理解,其實就是在寫數據時保存一個備份數據到另外的存儲系統,在 ⌘ Read more
系統設計 - 秒殺系統設計**
文 \\| 蔡佳新 (轉載請註明出處)公衆號:DDD 和微服務編輯:少個分號秒殺活動是大家都熟悉的購物方式。通常的流程是這樣的:商家設定活動開始和結束時間,以及投入的庫存量。在活動即將開始之際,買家會不斷刷新商品詳情頁,一旦看到購買按鈕變爲可點擊狀態,便立即點擊購買、下單並結算,完成商品的購買過程。當商品庫存被搶空或者活動結束時,商品變爲不可售狀態,買家無法繼續購買。一些耳熟能詳的秒殺活動案例包括小米 ⌘ Read more
Next-Admin,一款基於 Nextjs 開發的開箱即用的中後臺管理系統 -全劇終-**
hello,大家好,我是徐小夕。之前和大家分享了很多可視化,零代碼和前端工程化的最佳實踐,今天繼續分享一下最近開源的 Next-Admin 項目的最新更新。這次更新是 1.0 版本最後一次更新,也根據用戶反饋的問題做了一些優化,比如:流程編排模塊 集成在線電子表格 支持可視化搭建模塊(拖拽,參考線,吸附,多選功能等) 支持瀑布流列表 AI 問答模塊 支持基礎的 JWT ⌘ Read more
消息隊列的 6 種經典使用場景和 Kafka 架構設計原理詳細解析**
我是碼哥,可以叫我靚仔。今天來聊一聊 Kafka 消息隊列的使用場景和核心架構實現原理,幫助你全面瞭解 Kafka 其內部工作原理和設計理念。。Apache Kafka 是一個高吞吐量、分佈式的流處理平臺,廣泛應用於實時數據管道和流處理應用中。Kafka 以其高性能、低延遲、擴展性和可靠性,成爲了大數據生態系統中的重要組件。消息隊列有什麼作用------------消息隊列是一種進程間通信或者同一 ⌘ Read more
Rust 中的 new type 模式**
在 Rust 中,newtype 模式(有時也被稱爲 "type alias with zero-sized type" 或 "wrapper type")是一種使用結構體(通常只包含一個字段)來定義新類型的模式。使用 newtype 模式,可以爲現有類型定義新的類型,併爲這些新類型提供自定義行爲或限制。這樣做有助於在編譯時捕獲類型錯誤,並提高代碼的可讀性和可維護性。直接看個簡單的例子。假設有兩個 ⌘ Read more
Rust:Trait 和泛型的高級用法**
在這篇文章中,我們將快速複習一下 Rust 的 trait 和泛型,以及實現一些更高級的 trait 邊界和類型簽名。快速回顧一下 Rust 的 Trait編寫一個 Rust trait,如下:pub trait MyTrait {    fn somemethod(&self) -  String;}我們定義一個 Struct 類型來實現 MyTrait:struct MyStruct;imp ⌘ Read more
Go 項目文件命名規範是什麼?**
計算機科學中只有兩件難事:緩存失效和命名。—— 菲爾 · 卡爾頓(Phil Karlton)。在編程世界中,選擇正確的命名約定是打開可讀和可維護代碼大門的重要途徑。在使用 Go 語言開發大型項目時,文件命名是構建清晰項目結構的關鍵一環,一個合理的文件命名規範不僅能提高開發效率,還能降低團隊協作中的溝通成本。在這篇博文中,我們將深入探討 Go 中命名的最佳實踐。在探討 Go 文件命名規範之前,我 ⌘ Read more
Google 官方發佈 Go 語言編碼規範**
在現代軟件開發中,代碼的可讀性和一致性是至關重要的。尤其是當團隊規模擴大時,遵循一致的編碼規範可以顯著提高代碼的可維護性和團隊協作效率。本文將深入探討 Go 語言的 Google 編碼規範,並結合具體示例,幫助你在實際開發中應用這些規範。爲什麼需要編碼規範?----------編碼規範不僅僅是 “如何寫代碼” 的指導方針,它更是團隊協作的基石。遵守編碼規範可以:提高代碼的可讀性:一致的代碼風格使得 ⌘ Read more
極速輕量的 Web 框架 Hono,比 Express 小 40 倍!**
Hono[1] 是一個極速、輕量且簡單的 Web 框架。它支持大量的 JavaScript 運行時:Cloudflare Workers、Fastly Compute、Deno、Bun、Vercel、Netlify、AWS Lambda、Lambda@Edge 和 Node.js。Hono 的應用場景----------Hono 是一個簡單的 Web 應用程序框架,類似於 Express,沒有前端 ⌘ Read more
極速輕量的 Web 框架 Hono,比 Express 小 40 倍!**
Hono\n 是一個極速、輕量且簡單的 Web 框架。它支持大量的 JavaScript 運行時:Cloudflare Workers、Fastly Compute、Deno、Bun、Vercel、Netlify、AWS Lambda、Lambda@Edge 和 Node.js。Hono 的應用場景----------Hono 是一個簡單的 Web 應用程序框架,類似於 Express,沒有前端 ⌘ Read more
如何用 Rust 讀取 JSON 文件、YAML 文件和 TOML 文件?**
處理文件是軟件工程中一個棘手但不可避免的部分,作爲開發人員,經常需要從外部源加載信息以在項目中使用。在這篇文章中,我們將學習如何用 Rust 編程語言讀取 JSON 文件、YAML 文件和 TOML 文件。使用以下命令創建一個 Rust 新項目:cargo new sampleproject使用 Serde 框架解析 JSONSerde 是一個框架,用於高效、通用地序列化和反序列化 Rust 數據 ⌘ Read more
利用 DNS 隧道進行追蹤和掃描**
什麼是 DNS 隧道DNS 隧道是一種利用 DNS 協議進行數據傳輸的技術。在網絡中, DNS 通常用於將域名解析爲對應的 IP 地址, 但是它也可以被利用來傳輸數據, 而不僅僅是域名和 IP 地址之間的映射關係。實現 DNS 隧道的基本思想是將數據在 DNS 查詢和響應的過程中進行隱藏傳輸。具體來說, 就是可以通過在 DNS 請求和響應中嵌入數據, 並利用域名解析請求和響應的特性來傳輸數據。通常 ⌘ Read more
curl 實戰手冊:面對複雜網絡環境的利器**
curl 是一個功能強大的命令行工具,用於傳輸數據。它支持多種協議,包括 HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP 等。curl 是一個非常靈活的工具,可以用於發送請求、上傳數據、下載文件等,是開發者、系統管理員和終端用戶常用的工具之一。以下是 curl 的一些詳解和使用案例。安裝 curl大多數 Unix-like 系 ⌘ Read more
深入理解內存映射:mmap 映射的背後原理以及和共享內存的差異**
引言---------在我們探索現代計算領域的奧祕時,我們往往會發現,技術的進步不僅是對硬件和軟件的不斷革新,更是對人類思維方式的深刻影響。正如《查拉圖斯特拉如是說》中提到的:“人類的偉大不在於他是什麼,而在於他能成爲什麼。” 這句話在技術世界中同樣適用。內存映射(Memory Mapping)作爲一項關鍵的計算機技術,正是這種思維進步的具體體現。在傳統的文件處理方法中,我們通常依賴於順序的讀寫操 ⌘ Read more
一張圖看懂 DNS 域名解析全過程**
相信大家在平時工作中都離不開 DNS 解析,DNS 解析是互聯網訪問的第一步,無論是使用筆記本瀏覽器訪問網絡還是打開手機 APP 的時候,訪問網絡資源的第一步必然要經過 DNS 解析流程。下面這張圖,詳細說明了一個 DNS 域名解析的全過程:一、什麼是 DNS---------DNS,全稱 Domain Name System,域名系統,是一個記錄域名和 Ip 地址相互映射的一個系統,能夠將用戶訪 ⌘ Read more
350 行 C 代碼實現 epoll reactor 模型**
有了 epoll 爲什麼還需要 reactor?----------------------------響應快,不必爲單個同步事件所阻塞,雖然 Reactor 本身依然是同步的; 編程相對簡單,可以最大程度的避免複雜的多線程及同步問題,並且避免了多線程 / 進 程的切換開銷; 可擴展性,可以方便的通過增加 Reactor 實例個數來充分利用 CPU 資源; 可複用性,reacto ⌘ Read more
告別 Dockerfile,擁抱 docker init 構建 Docker 鏡像**
概述--Docker 是一個開源的應用容器引擎,它允許開發者打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口,更重要的是容器性能開銷極低。什麼是 docker init?----------------docker init 是一個命令行應用程序,可幫助初始化項目中的 Docker 資源。它根據 ⌘ Read more
微服務架構設計模式詳解 -5 種主流模式-**
大家好,我是 mikechen。微服務架構是大型網站的必經之路,下面我就全面來詳解 5 大微服務架構設計模式 @mikechen微服務架構之前談過微服務是一種架構模式,它提倡將單一應用程序劃分成一組小的服務,服務之間採用輕量級的通信機制互相溝通,每個服務都圍繞着具體業務進行構建,並且能夠被獨立地部署到生產環境。如下圖所示:爲什麼需要微服務架構從生產力和系統的複雜性這兩個方面來看,公司一開始的時候, ⌘ Read more
在 Golang 中不要簡單的返回 err
相反, 添加相關的調試細節。有些人喜歡抱怨 Go 需要編寫大量的 " iferr!=nil{returnerr}" 代碼塊。這些人並沒有真正理解 Go 的錯誤處理機制。實際上, 他們抱怨的正是處理 Go 錯誤的完全錯誤方式: returnerr是一種反模式。讓我通過一些示例代碼來解釋我的意思: 一個用於配置 mTLS\n 連接的輔助庫。("雙向 TLS" 是向服務器證明客戶端身份的一種方式。)p ⌘ Read more=
在 Golang 中不要簡單的返回 err
相反, 添加相關的調試細節。有些人喜歡抱怨 Go 需要編寫大量的 " iferr!=nil{returnerr}" 代碼塊。這些人並沒有真正理解 Go 的錯誤處理機制。實際上, 他們抱怨的正是處理 Go 錯誤的完全錯誤方式: returnerr是一種反模式。讓我通過一些示例代碼來解釋我的意思: 一個用於配置 mTLS[1] 連接的輔助庫。("雙向 TLS" 是向服務器證明客戶端身份的一種方式。)p ⌘ Read more=
[譯]Go 中的循環依賴:如何解決這個問題**
作爲一個 Golang 開發,你可能在項目中遇到過包的循環依賴問題。Golang 不允許循環依賴,如果檢測到代碼中存在這種情況,在編譯時就會拋出異常。本文會討論循環依賴是如何發生的以及如何處理。循環依賴假設我們有兩個包:p1 和 p2。當包 p1 依賴包 p2,包 p2 依賴包 p1 時,就會產生循環依賴。真實情況可能會更復雜一些。例如,包 p2 不直接依賴包 p1 而是依賴於包 p3,而 p3 ⌘ Read more
\nGo 中的循環依賴:如何解決這個問題**
作爲一個 Golang 開發,你可能在項目中遇到過包的循環依賴問題。Golang 不允許循環依賴,如果檢測到代碼中存在這種情況,在編譯時就會拋出異常。本文會討論循環依賴是如何發生的以及如何處理。循環依賴假設我們有兩個包:p1 和 p2。當包 p1 依賴包 p2,包 p2 依賴包 p1 時,就會產生循環依賴。真實情況可能會更復雜一些。例如,包 p2 不直接依賴包 p1 而是依賴於包 p3,而 p3 ⌘ Read more
Rust 中的集成測試工具:Testcontainers**
在軟件工程的廣闊世界中,測試在確保應用程序的可靠性、穩定性和性能方面扮演着不可或缺的角色。在各種測試類型中,集成測試作爲一個關鍵階段脫穎而出,驗證系統的不同組件之間的無縫交互。但是,集成測試,特別是在處理數據庫和消息代理等外部依賴關係時,可能會很複雜。在本文中,我們將開始在 Rust 中使用強大的工具 Testcontainers 來掌握集成測試。該工具簡化了爲集成測試啓動 Docker 容器的過 ⌘ Read more
一致性哈希的基本概念及其 Golang 實現**
在大規模分佈式系統的世界中,高效地管理和分配數據是一個關鍵挑戰。一種廣泛使用的技術是一致性哈希。這種方法確保數據在多個服務器之間均勻分佈,即使服務器的數量隨時間變化也是如此。本文將探討水平擴展、簡單哈希和一致性哈希的概念,並提供一個 Go 語言的示例實現。水平擴展在分佈式系統中,數據通常無法容納在單個服務器上。爲了處理大規模數據,數據被分佈在多臺機器上,這個過程稱爲水平擴展或分片。爲了確保可預測的 ⌘ Read more
Clickhouse-Bitmap 實現用戶畫像中海量用戶的圈選**
1\\. 圈客實現我們知道用戶畫像最主要的功能就是實現分客營銷分客分析的功能,我們也介紹過可以使用畫像寬表可以便捷的創建想要的客羣,具體實現思路將 就是將 Hive 表(大數據平臺開發的標籤寬表)中的數據同步到 ClickHouse 中進行緩存,人羣圈選引擎可以從 ClickHouse 中直接查詢到滿足條件的 UserId 然乎進行後續的業務開展。比如江蘇省中年男性用戶,所有的標籤拼接到一張數據表中並 ⌘ Read more
探索 Go 語言數據庫查詢的終極指南:深入解析 GORM 的強大查詢功能**
一、GORM 基本查詢1、基本查詢func (c UserController) UserSelect() { //1、查詢id=3的用戶 user := models.User{Id: 3} models.DB.Find(&user) //2、查詢所有數據 user := []models.User{} result := models.DB.Find(&user) //5 (統計 ⌘ Read more
=
深入理解內存映射:高效處理大型文件和數據**
內存映射是一種操作系統提供的機制,它將磁盤文件或其他設備的數據映射到進程的虛擬地址空間中的一段連續內存區域。通過內存映射,這些數據可以像訪問內存一樣直接讀取和寫入,而無需通過傳統的讀寫操作進行 IO 訪問。具體而言,內存映射允許將一個文件或設備上的數據塊作爲一個連續的內存區域來對待。當應用程序需要訪問該文件或設備時,它可以直接從該內存區域中讀取或寫入數據,而不需要通過使用 read()、write ⌘ Read more
JS 中的二進制散列值和權限設計**
不管是前端還是後端的夥伴,在工作中會經常遇到權限控制的場景,業務上無非就幾種權限:頁面權限、操作權限、數據權限,不同公司根據業務需要都採取不同的方法區控制權限,我們這裏討論一下使用 JavaScript 中的位運算符來控制權限。進制類型--------JavaScript 中提供的進製表示方法有四種:十進制、二進制、十六進制、八進制。 對於數值字面量,主要使用不同的前綴來區分:十進制:取值數字 ⌘ Read more
什麼是 RAG 系統?**
下面是一個簡單的基於 RAG 的聊天機器人的例子,用於查詢您的私人知識庫。第一步是以適合查詢的格式存儲內部文檔的知識。我們通過使用嵌入模型嵌入它來做到這一點:𝟭: 將整個知識庫的文本語料庫分割成塊——塊將表示可查詢的單個上下文。感興趣的數據可以來自多個來源,例如由 PDF 報告補充的 Confluence 中的文檔。 𝟮: 使用嵌入模型將每個塊轉換爲矢量嵌入。 𝟯: 將所有矢量嵌入存儲在矢量數 ⌘ Read more
2 萬字,深度解析 SQL 性能優化,值得收藏**
你好,我是田哥很多朋友經常會遇到如下情況:在做數據統計分析時,分析兩分鐘,跑數兩小時...... Web 開發時候,通常的性能瓶頸,主要出現在數據查詢時候....... 在使用 SQL 過程中不僅要關注數據結果,同樣要注意 SQL 語句的執行效率。1、MySQL 的基本架構1)MySQL 的基礎架構圖 左邊的 client 可以看成是客戶端,客戶端有很多,像我們經常你使用的 CMD ⌘ Read more
深入理解 Go 語言 Gin 框架的請求處理機制**
一、獲取 GET 請求 1、URL?參數 http://127.0.0.1:8080/user/search?username=snail&address=sh package mainimport ( "github.com/gin-gonic/gin" "net/http")func main() { //Default返回一個默認的路由引擎 r := gin.Default ⌘ Read more
=
Bookie 存儲架構源碼剖析|得物技術**
一Pulsar 存儲架構簡析Pulsar 作爲新一代 MQ 中間件,在底層架構設計上充分貫徹了存算分離的思想,broker 與 Bookeeper 兩個組件獨立部署,前者負責流量的調度、聚合、計算,後者負責數據的存儲,這也契合了雲原生下 k8s 大行其道的時代背景。Bookeeper 又名 Bookie ,是一個單獨的存儲引擎。在組件關係上,broker 深度依賴 Bookie,內部集成了 Boo ⌘ Read more
使用 Rust 捕獲和解析網絡包**
大家好,我是鳥窩。前兩篇文章介紹了 C++ 和 Go 中利用 TCP Option 中的時間戳實現計算網絡時延。基於 “用 Rust 重寫一切” 的哲學,今天我們來看看 Rust 中如何做這個事情。夜深人靜,再肝一篇關於網絡編程的文章。Rust 中還沒有和 gopacket 一樣功能強大的包,它的 pcap\n 用來捕獲網絡包沒有問題,但是缺乏解析的能力,所以我們使用另外一個包 pdu\n 來 ⌘ Read more
使用 Rust 捕獲和解析網絡包**
大家好,我是鳥窩。前兩篇文章介紹了 C++ 和 Go 中利用 TCP Option 中的時間戳實現計算網絡時延。基於 “用 Rust 重寫一切” 的哲學,今天我們來看看 Rust 中如何做這個事情。夜深人靜,再肝一篇關於網絡編程的文章。Rust 中還沒有和 gopacket 一樣功能強大的包,它的 pcap[1] 用來捕獲網絡包沒有問題,但是缺乏解析的能力,所以我們使用另外一個包 pdu[2] 來 ⌘ Read more
跨域問題及常用的 4 種解決方案**
跨域問題產生、原理、解決方案文章導讀----前言--  跨域問題指的是在 Web 開發中,由於瀏覽器的同源策略限制,當一個網頁嘗試訪問與它不同源(協議、域名或端口不同)的資源時,可能會遇到安全限制導致無法正常訪問的問題。這種策略旨在防止惡意網站讀取或修改其他網站的數據,保護用戶信息安全。這樣說可能有點抽象,下面具體展開說明。跨域問題演示------  通常情況下,我們主流的開發模式是:前後端分 ⌘ Read more
瞭解 Http 和 Https 的區別(圖文詳解)**
01 整體介紹隨着 HTTPS 的不斷普及和使用成本的下降,現階段大部分的系統都已經開始用上 HTTPS 協議。HTTPS 與 HTTP 相比, 主打的就是安全概念,相關的知識如 SSL 、非對稱加密、 CA 證書、數據完整性保護 等,我們多多少少也都有聽過。本文重點從原理上講解 HTTPS 的安全性,以及同 HTTP 的比較說明。02 HTTP 和 HTTPS 的比較HTTP(全稱:HyperT ⌘ Read more
C 語言竟可以調用 Go 語言函數,這是如何實現的?**
大家好,我是飛哥!今天和大家聊一個問題,一門語言是否可以在同一個進程內調用另外一門語言實現的函數?例如 C 語言是否可以調用 Golang 實現的函數?注意我說的是同進程內調用,跨進程的 IPC、PRC 之類的技術不算。直接拋出這個問題的答案,同進程跨語言調用是可行的。在各種語言設計時,爲了複用其它語言生態中積累下來的大量的代碼資產,都會實現跨語言調用的機制。例如在 Golang 中,實現了 cg ⌘ Read more
一張長圖透徹理解 SpringBoot 啓動原理**
雖然 Java 程序員大部分工作都是 CRUD,但是工作中常用的中間件必須和 Spring 集成,如果不知道 Spring 的原理,很難理解這些中間件和框架的原理。一張長圖透徹解釋 Spring 啓動順序--------------------測試對 Spring 啓動原理的理解程度--------------------我舉個例子,測試一下,你對 Spring 啓動原理的理解程度。Rpc 框架和 ⌘ Read more
萬字長文:Go 語言現代命令行框架 Cobra 詳解**
Cobra 是一個 Go 語言開發的命令行(CLI)框架,它提供了簡潔、靈活且強大的方式來創建命令行程序。它包含一個用於創建命令行程序的庫(Cobra 庫),以及一個用於快速生成基於 Cobra 庫的命令行程序工具(Cobra 命令)。Cobra 是由 Go 團隊成員 spf13 爲 Hugo 項目創建的,並已被許多流行的 Go 項目所採用,如 Kubernetes、Helm、Docker (di ⌘ Read more
gojq:現代 Golang JSON 查詢神器**
隨着現代應用程序對數據處理和解析需求的不斷增加,JSON 已成爲數據交換的主要格式之一。在 Golang 生態系統中,解析和操作 JSON 數據的工具層出不窮,而 gojq 則是其中一款功能強大且易於使用的 JSON 查詢工具。本文將深入解析 gojq,展示其強大功能和實際應用場景,並通過豐富的示例幫助讀者全面掌握這款利器。什麼是 gojq?---------gojq 是一個用 Go 語言編寫的 ⌘ Read more
探索併發安全的 Go 語言 Map - 深入理解 cmap
在 Go 語言中,內建的map類型並不是線程安全的。也就是說,如果您在沒有任何併發控制的狀態下,在多個 goroutine 中對同一個map同時進行讀寫操作,那麼會出現競態條件(race condition),進而導致不可預見的結果。針對這一問題,地裏特(lrita)開發了cmap(concurrent-map),一個用於提供併發訪問的線程安全的map類型,它可以讓您在 Go 語言中更加方便地進行 ⌘ Read more
支撐瞬間百萬 QPS 的熱點文章服務的設計**
在我們的日常生活中,總是在一個不經意間就會出現一個大新聞,如某某一線明星出軌、某某明星官宣結婚、某某明星偷稅漏稅等等。這個都是我們粉絲或者喫瓜羣衆感興趣的話題,一旦新聞被爆出之後,新聞平臺(如微博、頭條、騰訊新聞)都會在短時間內出現某個新聞點擊量暴增,如果沒有做好系統的應對措施就會出現短時間的大流量打垮平臺服務器。     針對熱點新聞的短時間大流量的請求,我們需要做相應的架構設計來支撐 ⌘ Read more
Gorm 源碼解析**
我們先通過一張圖來看 Gorm 核心主流程。gorm 主流程1. 初始化 DB 連接----------------使用 database.sql 初始化連接。我們平時所說的數據庫驅動其實就是每個數據庫對 DSN 不同的解析方式,最終底層都是使用的 TCP 建立起數據庫連接。type Connector interface { Connect(context.Context) (Conn, err ⌘ Read more
go 語言是如何實現協程的**
go語言的精華就在於協程的設計,只有理解協程的設計思想和工作機制,才能確保我們能夠完全的利用協程編寫強大的併發程序。Hi,我是 sharkChili ,是個不斷在硬核技術上作死的 java coder ,是 CSDN 的博客專家 ,也是開源項目 Java Guide 的維護者之一,熟悉 Java 也會一點 Go ,偶爾也會在 C 源碼 邊緣徘徊。寫過很多有意思的技術博客,也還在研究並輸出技術的路上 ⌘ Read more
聊聊 go 語言基於 epoll 的網絡併發實現**
在之前的文章中我們已經介紹了 epoll 模型,而本文就從 go 語言源碼的角度來了解一下,go 語言是如何基於 epoll 模型完成高性能的網絡協程併發程序的。Hi,我是 sharkChili ,是個不斷在硬核技術上作死的 java coder ,是 CSDN 的博客專家 ,也是開源項目 Java Guide 的維護者之一,熟悉 Java 也會一點 Go ,偶爾也會在 C 源碼 邊緣徘徊。 ⌘ Read more
Gone 一個基於 Golang 的輕量級依賴注入框架**
Gone 一個基於 Golang 的輕量級依賴注入框架Gone 首先是一個輕量的,基於 Golang 的,依賴注入框架,靈感來源於 Java 中的 Spring Framework;其次,Gone 框架中包含了一系列內置組件,通過這些組件提供一整套 Web 開發方案,提供服務配置、日誌追蹤、服務調用、數據庫訪問、消息中間件等微服務常用能力。文檔https://goner.fun/zh/ ht ⌘ Read more
高併發下的數據一致性保障(圖文全面總結)**
01架構    —    思維背景我們之前介紹過分佈式事務的解決方案,參考作者這篇《五種分佈式事務解決方案(圖文總結) 》。 在那篇文章中我們介紹了分佈式場景下困擾我們的 3 個核心需求(CAP):一致性、可用性、分區容錯性,以及在實際場景中的業務折衷。 1、一致性(Consistency): 再分佈,所有實例節點同一時間看到是相同的數據 2、可用性(Availability): 不管是否成 ⌘ Read more
這次用 Go 語言實現的多協程文件上傳,效果很明顯**
多協程文件上傳是指利用多線程或多協程技術,同時上傳一個或多個文件,以提高上傳效率和速度。通過將文件分塊,每個塊由單獨的協程處理上傳,可以有效減少總上傳時間。Go 語言通過 goroutine 實現多協程文件上傳。多協程文件上傳的基本流程文件分塊:將大文件分成多個小塊,以便多個協程可以同時處理不同的塊。 上傳塊:每個協程負責上傳一個或多個塊。 合併塊:在服務器端接收到所有塊後,將其合併爲 ⌘ Read more
淺談 K8s Service 網絡機制**
王成,騰訊雲研發工程師,Kubernetes member,從事數據庫產品容器化、資源管控等工作,關注 Kubernetes、Go、雲原生領域。概述-----Service 作爲 K8s 中的一等公民,其承載了核心容器網絡的訪問管理能力,包括:暴露 / 訪問一組 Pod 的能力 Pod 訪問集羣內、集羣外服務 集羣外客戶端訪問集羣內 Pod 的服務 無論是作爲應用的開發者還是使用 ⌘ Read more
TS 中的類型驗算- 高級通用 API 實現**
由於現在工作使用的技術棧是 React、TypeScript 和 ahooks,工作中需要用到大量的類型定義,特此記錄一下一些常用的類型通用 API 封裝。TS 內置類型PartialT:將 T 所有屬性變爲可選屬性 RequiredT:將 T 所有屬性變爲必選屬性 ReadonlyT:將 T 所有屬性變爲只讀屬性 NonNullableT:過濾 T 類型中的 null 及 un ⌘ Read more
Golang:使用 bcrypt 實現密碼加密和和校驗**
bcrypt 可以用於數據庫中的用戶密碼保存,相比 md5 而言更加的安全可靠文檔https://pkg.go.dev/golang.org/x/crypto/bcrypt 文檔上給出了標準文檔,這個庫是下面這個文件描述的算法 golang 實現:https://www.usenix.org/legacy/event/usenix99/provos/provos.pdf 安裝go ge ⌘ Read more
每個程序員都應該掌握的 Golang 性能優化祕技**
性能分析和優化是所有軟件開發人員必備的技能,也是後臺大佬們口中津津樂道的話題。Golang 作爲一門 “現代化” 的語言,原生就包含了強大的性能分析工具 pprof 和 trace。pprof 工具常用於分析資源的使用情況,可以採集程序運行時的多種不同類型的數據(例如 CPU 佔用、內存消耗和協程數量等),並對數據進行分析聚合生成的報告。trace 工具則關注程序運行時的事件(例如協程狀態切換,G ⌘ Read more
複雜 SQL 治理實踐**
一、前言軟件在持續的開發和維護過程中,會不斷添加新功能和修復舊的缺陷,這往往伴隨着代碼的快速增長和複雜性的提升。若代碼庫沒有得到良好的管理和重構,就可能積累大量的技術債務,包括不一致的設計、冗餘代碼、過時的庫和框架以及不再使用的功能。這些因素都會導致軟件結構的脆弱,增加系統出錯的可能性,我們俗稱爲 “代碼腐化”,持續性的重構是一種好的解決方案。SQL 也是我們常用的代碼語言,雖然 SQL 本身作爲 ⌘ Read more
理解並實現 Android MVVM 架構**
Android MVVM 架構在現代 Android 開發中,維護一個清晰、可測試和模塊化的代碼庫變得至關重要。Google 推薦的架構實踐是使用 MVVM(Model-View-ViewModel)模式,它是響應式編程思想在 Android 應用開發中的體現。在本文中,我們將深入探討 MVVM 架構,並通過一個簡單的示例演示如何在 Android 應用程序中實現它。MVVM 架構概述------ ⌘ Read more
C 語言文件流詳解**
解讀文件流  C 語言對文件的寫入和讀取涉及到流的概念,寫入爲輸出流,讀取爲輸入流。如何理解流的概念呢?可以把流看成流動的自來水,打開水龍頭,自來水就會通過自來水管從水源流到用戶家中,同樣的道理,水庫中的水也會通過管道流入到水源。從水源流出到用戶住家爲自來水的輸出流,從水庫流入到水源爲自來水的輸入流,只有這樣,自來水才能源源不斷地輸送到用戶家中。 如果把水源看成文件,用戶住家爲讀取文件的函數,水庫 ⌘ Read more
全面透徹,深刻理解 MySQL 索引**
hello,大家好,我是張張,「架構精進之路」公號作者。對於 MySQL 索引,相信每位後端同學日常工作中經常會用到,但是對其索引原理,卻可能未曾真正深入瞭解。B- 樹和 B+ 樹是 MySQL 索引使用的數據結構,對於索引優化和原理理解都非常重要,下面就揭開 B- 樹和 B+ 樹的神祕面紗,讓大家在面試的時候碰到這個知識點一往無前,不再成爲你前進的羈絆!本文主要內容:MySQL 查詢耗時分析,抓 ⌘ Read more
xgo: 一款新鮮出爐的 Go 代碼測試利器**
大家好,我是江湖十年。我曾經寫過一篇文章《測試代碼終極解決方案 Monkey Patching》,裏面介紹了 Go 語言中的猴子補丁方案。如今,時隔數月我又發現了一款新的工具可以實現 Monkey Patching,本文將帶大家一起嚐鮮下這款新的測試工具表現如何。簡介簡單一句話介紹 xgo:它是一款強大的的 Go 測試工具集,功能包括 Trap、Mock、Trace、增量覆蓋率。當然,開發中最常用 ⌘ Read more
使用 Go 語言實現 pping
大家好,我是鳥窩。在前一篇 pping: 被動式 ping,計算網絡時延中,我給大家介紹了 pping 這個工具的原理和使用方法。這篇文章中,我將使用 Go 語言實現 pping 工具。通過這篇文章,你將瞭解到:如何使用 gopacket 來捕獲和解析網絡數據包 如何設置捕獲時長和過濾捕獲的數據包 如何在 CGO 下靜態編譯庫,如 libpcap 瞭解 TCP/IP 協議棧的基本 ⌘ Read more
go3d:Go 語言遊戲方向的高性能 2D-3D 數學庫**
在面向性能的編程世界中,go3d是爲 Go 語言提供的一款 2D/3D 數學庫,致力於提高圖形計算的效率與速度。適用於那些需要進行向量、矩陣等數學計算以實現圖形處理的應用程序,go3d提供了一套豐富的 API,以支持高效的數學運算。下面,我們將深入瞭解這個庫的主要特性、結構和使用方式,以及如何在項目中有效利用它。主要特性----高性能設計:go3d庫主要關注於性能,通過優化算法和數據結構來減少計算 ⌘ Read more
Go Gio:用 Go 語言編寫跨平臺即時模式 GUI 的庫**
在構建現代應用程序的過程中,不同平臺間的兼容性是一個不容忽視的挑戰。Go Gio 是一個用 Go 編程語言開發的庫,它致力於簡化跨平臺 GUI(Graphical User Interface,圖形用戶界面) 的構建工作,提供一種所謂的 "即時" (Immediate Mode) 編程模型。這種模型與傳統的 "保留模式" (Retained Mode) GUI 庫,例如 GTK+ 或 Qt,有所不 ⌘ Read more
Go 項目開發中如何讀取應用配置?**
幾乎所有的後端服務都需要一些配置項來配置我們的服務,一些小型的項目,配置不是很多,可以選擇只通過命令行參數來傳遞配置,但是大型項目配置很多,通過命令行參數傳遞就變的很麻煩,不好維護,標準的解決方案是將這些配置信息保存在配置文件中,由程序啓動時加載和解析。所以對於一個稍微大型點的系統,配置文件加載和解析就是一個剛需。Go 生態中有很多包可以加載並解析配置,目前最受歡迎的是 Viper 包。Viper ⌘ Read more
高效傳輸大的 JSON 數據,流式處理真香!**
什麼是 TextDecoder API-------------------TextDecoder[1] API 是一個用於將二進制數據(通常是 ArrayBuffer 或 TypedArray)解碼爲字符串的 JavaScript API。它是 Web 平臺的一部分,主要用於處理文本編碼的解碼工作。比如,從服務器接收到的流式數據、文件數據等。爲什麼使用 TextDecoder API------ ⌘ Read more
高效傳輸大的 JSON 數據,流式處理真香!**
什麼是 TextDecoder API-------------------TextDecoder\n API 是一個用於將二進制數據(通常是 ArrayBuffer 或 TypedArray)解碼爲字符串的 JavaScript API。它是 Web 平臺的一部分,主要用於處理文本編碼的解碼工作。比如,從服務器接收到的流式數據、文件數據等。爲什麼使用 TextDecoder API------ ⌘ Read more
你還在使用 websocket 實現實時消息推送嗎?**
前言在日常的開發中,我們經常能碰見服務端需要主動推送給客戶端數據的業務場景,比如數據大屏的實時數據,比如消息中心的未讀消息,比如聊天功能等等。本文主要介紹 SSE 的使用場景和如何使用 SSE。服務端向客戶端推送數據的實現方案有哪幾種?我們常規實現這些需求的方案有以下三種輪詢 websocket SSE 輪詢簡介在很久很久以前,前端一般使用輪詢來進行服務端向客戶端進行消息的僞推送 ⌘ Read more
MySQL 什麼時候鎖表?如何防止鎖表?**
Mysql 調優的重點目標: 避免鎖表-------------------鎖表會帶來一系列問題,影響數據庫的性能和系統的穩定性。主要是下面的四個問題: 性能問題、死鎖問題、可用性問題、一致性問題1. 鎖錶帶來的性能問題鎖表會阻止其他事務對該表的併發訪問,包括讀操作和寫操作。鎖表會導致嚴重的性能問題:系統吞吐量下降:多個事務需要依次等待鎖的釋放,導致系統整體的吞吐量下降。 用戶體驗差:用戶的 ⌘ Read more
Redis 的 RESP 協議真的這麼簡單?抓包分析**
聽說 Redis 協議很簡單,那今天就抓個包來一起看看吧。RESP  是什麼 Redis 的序列化協議, 是一種二進制協議,支持多種數據類型,其中,數據的第一個字節(First byte)決定其類型,使用 ( CRLF \\\\r\\\\n) 作爲協議的終止符。 特點:易於實現,快速解析,可直接閱讀 目前有 RESP2 和 RESP3(Redis6 開始) 兩個版本。支持這麼多種類型 👇\\| RE ⌘ Read more
Cloudflare 最佳實踐:如何通過 Go PGO 回收 CPU
Golang 1.20 在 go 編譯器引入了對配置文件引導優化 (PGO) 的支持。這允許指導編譯器根據系統的真實行爲引入優化。在 Cloudflare 的可觀察性團隊中,我們維護着一些基於 Go 的服務,這些服務在全球範圍內使用數千個內核,因此,即使宣傳的節省 2-7%,也能大幅減少我們的 CPU 佔用空間,而且實際上是免費的。這將減少我們內部服務的 CPU 使用率,釋放這些資源來滿足客戶請求 ⌘ Read more
用 Rust 進行 TUI 編程:Cursive 庫**
在本文中,我們將探索使用 Rust 進行文本用戶界面 (TUI) 編程。TUI 提供了一種通用的方法來創建具有豐富圖形用戶界面的交互式命令行應用程序。我們將使用 Cursive 庫,一個流行的用於構建 TUI 應用程序的 Rust 庫。Cursive 使用聲明式 UI:用戶定義佈局,然後 Cursive 處理事件循環。Cursive 還處理大多數輸入 (包括鼠標點擊),並將事件轉發到當前聚焦的視圖 ⌘ Read more
如何構建現代化的 Go 命令行工具?**
在 Go 項目開發中,我們需要編寫 main 函數,並編譯成爲二進制文件,部署啓動服務。有多種方式可以開發一個 main 函數。例如你可以手擼一個 main 函數,並在 main 函數中處理命令行參數,配置文件解析,應用初始化等操作。如下所示:package mainimport ( "flag" "fmt")func main() { // 解析命令行參數 option1 := flag.Str ⌘ Read more
=
負載均衡策略與算法詳解**
負載均衡策略------在分佈式架構中,負載均衡策略是非常重要的內容。它不僅能在一定程度上保證整個集羣的高可用,而且能夠提高系統的吞吐量,降低服務響應時間。每臺計算機的系統資源都是有限的,能夠承載的任務及處理的請求也是有限的。在分佈式系統中一般通過擴容來增加系統整體的承載能力,但是當大量併發的請求發生時,如果請求分配不均勻,就會導致部分機器收到了大量請求,而部分機器非常空閒,這種現象輕則導致吞吐率 ⌘ Read more
用 Go 實現一個無界資源池**
寫在文章開頭------我們希望通過 go 語言實現一個簡單的資源池,而這個資源池的資源包括但不限於:數據庫連接池 線程池 協程池 網絡連接池 只要這些資源實現我們指定的關閉方法,則都可以通過我們封裝的資源池進行統一管理,需要簡單說明一下這個資源池的要求:需要用戶指定資源以及資源的創建方法。 當協程通過Acquire方法獲取資源時,若發現當前池中有資源可以分配則直接返 ⌘ Read more
深入理解 API Gateway:微服務架構的關鍵入口**
在微服務架構日益盛行的今天,API Gateway(API 網關)已成爲其中不可或缺的一部分。API Gateway 不僅作爲客戶端和微服務之間的橋樑,還提供了路由、認證、限流、監控等一系列功能,對於提升整個微服務架構的可靠性、可維護性和安全性具有重要作用。本文將深入講解 API Gateway 的概念、核心功能、實現方式、流行的 API Gateway 工具以及應用案例。一、API Gatewa ⌘ Read more
從 MongoDB 到 PostgreSQL:數據零丟失、成本砍半**
Infisical 是一家開源的密鑰管理平臺,爲團隊及基礎設施提供同步密鑰的服務並防止密鑰泄露。隨着業務不斷髮展、數據不斷增加,原有數據庫已無法滿足當前需求,Infisical 決定從 MongoDB 遷移到 PostgreSQL 。本文將分享這一從非關係型數據庫遷移至關係型數據庫的決策判斷及背後的遷移故事。Infisical 在過去一年裏迅速擴張,目前平臺每天處理超過 5000 萬個密鑰,向需要 ⌘ Read more
不畏移山,手機 QQ 技術架構升級變遷史**
手機 QQ 經過 20 多年發展,功能不斷增加,代碼不斷累積,架構已經變得越來越臃腫,影響到協作團隊開發效率,對用戶體驗、質量穩定都有較大風險,因此手機 QQ 亟需技術架構的升級。但是對如此龐大的項目進行架構升級,在行業內也是少有的,手機 QQ 架構升級面臨的困難和挑戰都十分巨大,本文將圍繞項目背景、項目歷程、項目挑戰、項目成果等方面進行深入介紹。 01歷史包袱在過去 20 多年裏,手機 Q ⌘ Read more
GitHub 9-8k 的 Go 語言 2D 遊戲引擎 ebiten
前言--hi,大家好,這裏是白澤。今天給大家分享一個 GitHub 🌟9.8k 的 Go 語言 2D 遊戲引擎。https://github.com/hajimehoshi/ebiten引擎的貢獻者依舊在積極維護,是一個兼具學習 & 娛樂的項目!爲此我也用這個引擎寫了一個生存遊戲: avoid-the-enemies【如下圖】:https://github.com/BaiZe1998/avoid-Read more
Go 通過 ETCD 實現應用選主**
原理Go 服務通過 ETCD client 實現有狀態服務的選主,A、B 兩個服務通過生成相同前綴的 key,並且把自己的 IP 值上傳給 ETCD,由於多個服務間會同時上傳,所以按照相同前綴去獲取創建的 key-value,然後通過時間進行排序,最早創建的則成爲 master。如果成爲 master 的服務一直在線的話,會對 key-value 進行 續約, 當 master 下線不能正常續約的 ⌘ Read more
Redis 實現延遲隊列的方案總結**
redis 是我們項目開發中常見的技術中間件,它除了可以實現常見的分佈式鎖和分佈式緩存功能之外,還可以幫助我們實現很多的功能,如延遲隊列。下面介紹幾種 redis 常見的實現延遲隊列的方案。 1、通過過期 key 通知實現     實現思路:首先開啓 redis 的 key 過期通知,然後在業務中給 key 設置過期時間,到了過期時間後 redis 會自動的將過期的 key 消息推送給 ⌘ Read more
Go 通道的高級玩法**
大家好!我是 lincyang。在之前的討論中,我們已經探索了 Go 語言中通道(channel)的基本使用和核心概念。今天,我們將深入探討一些更高級的通道操作技巧,特別是單向通道的使用,以及如何通過它們提高代碼的安全性和模塊性。單向通道的介紹在 Go 中,通道通常是雙向的,意味着它們既可以發送數據也可以接收數據。然而,在某些情況下,限制通道只發送或只接收可以提高程序的可讀性和運行時安全。這就是單 ⌘ Read more
如何使用 Redis Streams 實現消息隊列**
一  背景  在上一篇文章 Redis Streams 原理介紹,使用場景及基於 Golang 實現的使用示例  講解了關於 Redis Streams 的原理,使用情況,提到過它最主要是用在消息隊列中。這篇文章,就基於 Redis Streams 實現消息隊列以及如何基於 Golang 實現它的消息隊列。二 Redis Streams 相關操作命令Redis Streams 實現消息隊列的流程 ⌘ Read more
線上百萬 MQ 消息積壓的快速處理方案**
在我們日常的生產環境上,由於某些原因(如消費者代碼中 bug、消費者端使用的中間件存在性能問題)導致消費者不能處理消息或者消費者處理速度極慢進而導致了線上出現百萬的消息積壓。    假設現在存在百萬消息在消息隊列中堆積,我們如何快速的消費完這些消息呢? 1、優化消費者的代碼     由於消費者現在是消費速度不夠導致了 MQ 消息的積壓,所以我們可以將消費的代碼做優化(如減少業務中不必要 ⌘ Read more
Linux 內核發送網絡數據**
前言--我們開始今天對 Linux 內核⽹絡發送過程的深度剖析。還是按照我們之前的傳統,先從⼀段代碼作爲切⼊。 上述代碼中,調⽤ send 之後內核是怎麼樣把數據包發送出去的。本⽂基於 Linux 3.10,⽹卡驅動採⽤ Intel 的 igb 舉例。基礎框架----我們看到⽤戶數據被拷⻉到內核態,然後經過協議棧處理後進⼊到了 RingBuffer 中。隨後⽹卡驅動真正將數據發送了出去。當發 ⌘ Read more