行爲模式旨在解決對象間通信和交互相關的問題,專注於定義那些複雜到無法靜態設計的協作策略,這些協作策略使得程序可以在運行時動態地進行職責派遣以實現更好的擴展。今天我們開始第 5 個行爲模式的學習 —— Template Method(模版方法)。問題背景:-----在設計一系列步驟的算法時,有些步驟可能在各個子類中都是通用的,而其他步驟則會有所不同。如果我們每個子類都實現所有步驟,將會產生大量重複代 ⌘ Read more
行爲模式旨在解決對象間通信和交互相關的問題,專注於定義那些複雜到無法靜態設計的協作策略,這些協作策略使得程序可以在運行時動態地進行職責派遣以實現更好的擴展。今天我們開始第 5 個行爲模式的學習 —— Template Method(模版方法)。問題背景:-----在設計一系列步驟的算法時,有些步驟可能在各個子類中都是通用的,而其他步驟則會有所不同。如果我們每個子類都實現所有步驟,將會產生大量重複代 ⌘ Read more
1. 背景評論是 B 站生態的重要組成部分,涵蓋了 UP 主與用戶的互動、平臺內容的推薦與優化、社區文化建設以及用戶情感滿足。B 站的評論區不僅是用戶互動的核心場所,也是平臺運營和用戶粘性的關鍵因素之一,尤其是在與彈幕結合的情況下,成爲平臺的標誌性特色。在社會熱點事件發生時,評論區的讀寫流量會急劇增加,直接影響業務運行,對用戶體驗、內容創作和社區文化等多個方面產生負面影響,所以評論服務的穩定性至 ⌘ Read more
微服務架構是一種將單體應用分解成一組獨立的小服務的架構模式,服務之間通過輕量級協議(如 HTTP 或 RPC)進行通信。相比傳統的單體架構,微服務架構具有高靈活性和擴展性,使團隊可以在開發、測試和部署上實現高度的自治。要深度理解微服務架構的基礎和設計。一. 微服務基礎1. 微服務架構的核心基礎-----------------服務劃分(Service Partitioning) 微服務的核心是將應 ⌘ Read more
這篇分享我在工作這幾年遇到過的好用的 Mac 軟件,其中有不少我還在使用,它們在我工作道路上幫到了我很多,部分軟件組合起來形成的工作流甚至讓我的工作本身也變得愉悅起來。我希望能夠把這些分享給大家。一、筆記篇-----首先出場的是筆記賽道的諸多產品們,實話說,其中的產品我都折騰過,最後選擇了 Heptabase,除了偶爾作圖或者寫草稿的時候在用 Excalidraw。選擇 Heptabase 只是因 ⌘ Read more
背景--最近在觀看抖音直播時,我發現了一位專注編程的主播,他在錄製視頻時使用了一個自制的桌面計時工具。這個工具非常實用,每當直播到達半小時左右,主播就會暫停錄製並保存視頻。這不僅幫助他有效管理直播時間,也讓他的工作流程更加有條不紊。作爲一名長期從事開發的程序員,這一巧妙的工具引起了我的興趣,於是我決定動手開發一個類似的桌面計時應用。經過一番摸索,我使用 Wails 框架順利完成了這個項目。下面是 ⌘ Read more
引言--本文將帶你深入探索 Rusqlite 的進階功能,並通過實戰案例展示如何優雅地使用這些功能。無論你是想提升數據庫操作的性能,還是希望編寫更加健壯和安全的代碼,本文都將爲你提供實用的指導。 一、Rusqlite 進階功能概覽-----------------在進階實戰中,我們將重點介紹以下幾個功能:事務管理:確保數據庫操作的原子性和一致性。 預編譯語句:提高查詢性能,避免 SQL 注入 ⌘ Read more
Discord 一直以來都非常重視性能優化。在任何時刻,數百萬用戶在平臺上進行聊天、通話、直播和遊戲,哪怕是微小的性能延遲都可能導致用戶體驗的下降。儘管 Go(Golang)在很長一段時間內爲我們提供了良好的支持,但我們逐漸發現了一些難以解決的性能和延遲問題。在對我們的技術棧進行廣泛的實驗後,Rust 在其他場景中取得了顯著的成功,這讓我們決定嘗試一個大膽的舉措:將一個關鍵的後端服務完全用 Rus ⌘ Read more
RocketMQ 作爲一款高性能的分佈式消息中間件,提供了多種負載均衡策略,以確保消息能夠均勻地分佈到不同的消費者實例中,並保證系統資源得到充分利用。以下是對 RocketMQ 負載均衡的詳細解析及案例分析:一、負載均衡概述負載均衡在 RocketMQ 中主要指的是如何將消息隊列(Message Queue)均勻地分配給消費者組中的各個消費者實例。通過負載均衡機制,可以避免某些消費者實例處理過多消 ⌘ Read more
NSQ 是由 Go 語言編寫的一個分佈式實時消息隊列系統,以其簡單、高性能和可擴展性著稱。今天咱們就來深入瞭解如何在實際項目中最佳地運用 NSQ,讓你的系統既穩定又高效!NSQ 架構簡介--------NSQ 採用分佈式架構,主要包含以下核心組件:nsqd: 接收、排隊、投遞消息的守護進程 nsqlookupd: 管理拓撲信息並提供發現服務 nsqadmin: Web 管理界面,用於實 ⌘ Read more
引言--在分佈式系統中, 事務處理一直是一個複雜的話題。想象一下, 當你在網上商城購物時, 整個過程涉及:訂單系統創建訂單 庫存系統扣減庫存 支付系統完成支付 積分系統增加積分 這些操作分佈在不同的服務中, 如何保證它們要麼全部成功, 要麼全部失敗? 這就是分佈式事務需要解決的問題。分佈式事務的挑戰--------傳統事務的侷限在單體應用中, 我們習慣使用數據庫的 ACID ⌘ Read more
行爲模式旨在解決對象間通信和交互相關的問題,專注於定義那些複雜到無法靜態設計的協作策略,這些協作策略使得程序可以在運行時動態地進行職責派遣以實現更好的擴展。今天我們開始第 4 個行爲模式的學習 —— State Pattern(狀態模式)。問題背景:---------當一個對象的行爲需要根據其內部狀態的變化而變化時,通常的做法是使用 if-else 語句來處理不同的情況。然而,隨着狀態和行爲數量的 ⌘ Read more
log/slog 是 Go 1.21 引入的一個新的日誌記錄包,旨在提供比傳統 log 包更靈活和現代化的日誌功能。它支持結構化日誌、可配置的日誌級別、靈活的日誌輸出格式等功能,彌補了舊版 log 包的不足。對比舊版 log 包 \| 特性 \| log \| slog \|\| --- \| --- \| --- \|\| 日誌級別支持 \| 無 \| 內置支持(Debug、Info 等) \|\| 結構化日誌 \| ⌘ Read more
Dioxus 是一個基於 Rust 的跨平臺應用框架,允許開發者使用單一代碼庫構建 Web、桌面和移動應用。 在本教程中,我們將詳細介紹如何使用 Dioxus 創建桌面應用程序。1. 環境準備在開始之前,請確保您的系統已安裝以下工具:Rust 編程語言:請訪問 Rust 官方網站 [1] 下載並安裝 Rust。 Dioxus CLI:通過以下命令安裝 Dioxus 命令行工具: ⌘ Read more
Go 編程語言提供了豐富的特性,使得像 Google 這樣的大型公司能夠高效地進行軟件開發。它爲許多雲服務提供商和分佈式服務的底層基礎設施提供支持,同時保持了簡單易學的特點。在 Go 中,我們可以根據需要使用指針類型和值類型。在本文中,我們將探討一個有趣的使用場景。函數調用中的切片和映射傳遞-------------通常,在 Go 中調用函數時,切片(slice)和映射(map)並不是通過指針傳遞 ⌘ Read more
在項目開發實現功能需求的過程中不可避免的要與外部第三方系統進行交互,這些交互大部分是通過請求 API 接口來完成的。前幾節提到但一直沒帶大家用代碼過一遍的 Lib 層就是負責寫第三方對接邏輯的,通過把跟第三方對接的邏輯限制在 Lib 層裏,讓項目的其他部分不需要關注第三方的邏輯,從而達到每部分都職責分明,這樣項目的代碼多起來後纔不會變得臃腫和雜亂。不過在演示 Lib 層的使用前我們需要先一起給項目 ⌘ Read more
監視應用程序性能是必不可少的,特別是在跨各種平臺 (包括雲服務器、本地機器和邊緣設備) 操作時。傳統上,開發底層系統監視工具需要特定於平臺的代碼,這可能變得複雜且難以維護。而使用 WASI(WASM 系統接口)這種強大的技術,使開發人員能夠創建在任何環境中有效運行的跨平臺系統工具,而無需修改。在我們深入研究編碼之前,讓我們概述一下爲什麼 WASI 是系統監控和自動化的遊戲規則改變者:跨平臺兼容性: ⌘ Read more
最近我寫了一篇講解 context 包源碼的文章《Go 併發控制:context 源碼解讀》,在閱讀源碼的過程中,我在 context 包測試代碼中發現了一個解決循環依賴的小技巧,在此分享給大家。xtest.go 解決循環依賴context 包源碼目錄結構如下: https://github.com/golang/go/tree/go1.23.0/src/context$ tree contex ⌘ Read more
昨天看到 Jaana Dogan 創建了一個 broadcaster 的庫, 話說美女 Jaana Dogan 又回到了 Google 了麼。她的實現我們就當做 broadcaster 的第一個實現吧。什麼是 broadcaster?就是村口的大喇叭,一播音,全村都知道了。Jaana Dogan 實現的這個 broadcaster 只有通知的功能,沒有傳遞消息,也不能重用。我們就以這個庫爲基準,看 ⌘ Read more
業務場景介紹1.1 需求分析--------某知名的在線旅遊平臺,在即將到來的春季促銷活動之前,決定推出一項新的功能:用戶可以通過輸入目的地、酒店名稱、房型、價格範圍等屬性來搜索旅遊優惠酒店。爲了及時上線這一功能,運營團隊需要將現有的酒店數據同步到高效的搜索引擎中,以支持用戶的高頻搜索需求。功能需求:按目的地、酒店名稱、房型、價格範圍等屬性進行全模糊搜索酒店信息。 非功能需求: 性能: ⌘ Read more
在做網絡編程時,我們常常會遇到各種性能問題,尤其是在面對大量連接和高併發的情況下。今天,我就來聊聊如何用 Go 實現一個高效的 TCP 連接的雙向拷貝機制,幫助你減少延遲、提高吞吐量。這篇文章既適合對網絡編程有一定了解的開發者,也適合那些想要進一步提升性能的程序員。首先,給大家簡要介紹一下 “TCP 連接的雙向拷貝” 是什麼意思。簡單來說,這就是將來自一個連接的數據拷貝到另一個連接,通常這種操作是 ⌘ Read more
建造模式,處理與創建對象及對象實例化過程相關的問題,通常尋求以分離業務代碼和對象創建邏輯,或將複雜的構造邏輯封裝在可重用組件中的方式。讓我們來探討第四種創建模式——原型模式。問題背景: 我們有一個對象,你要創建它的一個拷貝。您可以採用什麼方法來實現這一點?也許您需要知道該對象所屬的類型,從而能夠創建新的同樣類型的對象,然後將原始對象中每個字段值複製到新對象中。該類包含一些隱藏字段,因此你無法複製 ⌘ Read more
「RAG 技術通過在 AI 生成過程中引入外部知識檢索,從基礎的文檔查詢發展到多模態、Multi-Agent 體協同的智能架構,讓 AI 回答更準確、更全面」「核心組件」嵌入模型: 將文本轉換爲向量表示 生成模型: 負責最終的內容生成 重排序模型: 優化檢索結果的相關性 向量數據庫: 存儲和檢索向量化的內容 提示模板: 規範化的查詢處理模板 AI ⌘ Read more
▍作者:範志東,螞蟻圖計算開源負責人、圖計算佈道師回顧 2024,大模型日新月異,智能體百家爭鳴。作爲 AI 應用的重要組成部分,RAG 也是 “羣雄逐鹿,諸侯並起”。年初 ModularRAG 持續升溫、GraphRAG 大放異彩,年中開源工具如火如荼、知識圖譜再創新機,年末圖表理解、多模態 RAG 又啓新徵程,簡直 “你方唱罷我登場”,奇技疊出,不勝枚舉!我在這裏遴選了 2024 年度典型的 ⌘ Read more
在軟件開發的世界裏,調試是確保程序質量和穩定性的關鍵環節。當我們面對複雜的代碼邏輯和難以捉摸的程序錯誤時,一個強大的調試工具就如同黑暗中的明燈,爲我們指引方向。而 GDB(GNU Debugger)無疑是衆多開發者手中的得力助手,其背後的 Ptrace 技術則是支撐 GDB 實現強大調試功能的核心祕密。本文不是介紹 GDB 的使用方式,而是大概介紹 GDB 的實現原理,當然 GDB 是一個龐大而複 ⌘ Read more
Asyncgo[1] 是純用 Go 編寫的零依賴異步任務執行器,優先考慮速度和易用性。特徵--異步任務執行:提交任務以異步執行並檢索結果。 無需手動管理 Goroutine :抽象化管理 Goroutine 的複雜性,並簡化代碼。 工作池管理:Asyncgo 仔細處理工作池創建和任務執行。 正常關閉:確保在關閉工作線程之前完成所有現有任務。 任務取消:支持終端終止任務。 ⌘ Read more
行爲模式旨在解決對象間通信和交互相關的問題,專注於定義那些複雜到無法靜態設計的協作策略,這些協作策略使得程序可以在運行時動態地進行職責派遣以實現更好的擴展。今天我們開始第 3 個行爲模式的學習 —— Memento(備忘錄模式)。問題背景:在我們需要記錄和恢復對象的內部狀態,而又不希望破壞封裝原則時,可以使用備忘錄模式。有時,我們需要在特定時間點保存對象的狀態,並能夠在以後恢復該狀態。然而,直接暴 ⌘ Read more
支付是一個龐大且繁雜的體系,有非常多的概念、模型和邏輯。通過本文的 88 張圖,66 個知識點,把支付清結算體系串起來,建立一個支付知識速查手冊1. 支付的本質支付的本質是付款人向收款人的資金轉移收付款人:可以是個人、企業、銀行 資金:即貨幣,可以是現金、銀行存款、支付機構零錢餘額 轉移:即債權歸屬發生了變化 轉移需要工具:銀行卡、支票、移動支付、網絡支付等 2. 支付和交 ⌘ Read more
大家好,我是 frank。「Golang 語言開發棧」公衆號作者。01 介紹在使用 Gin 框架開發時,入口函數通常需要支持驗證請求參數和返回響應數據。我們可以將驗證請求參數和返回響應數據整合爲一個通用函數。然後,結合響應數據返回中間件,實現通過一個函數,實現驗證請求參數和返回響應數據 的功能。02 請求參數驗證和返回響應數據首先,我們需要定義一個自定義結構體類型 Response,示例代碼: ⌘ Read more
原文:Linux Network Performance Ultimate Guide[1]作者:Kien Nguyen-Tuan參考資料https://github.com/leandromoreira/linux-network-performance-parameters/[2] https://access.redhat.com/sites/default/files/attachm ⌘ Read more
在複雜而龐大的 Linux 系統世界中,內核就如同一位有條不紊的指揮官,協調着各種任務和資源的分配。而其中,內核同步機制則是確保整個系統穩定與高效運行的關鍵要素。想象一下,衆多的進程和線程在 Linux 內核的舞臺上同時登場,它們都渴望訪問共享的資源,如同千軍萬馬奔向同一個目標。如果沒有有效的同步機制,混亂和衝突將不可避免,系統可能陷入崩潰的邊緣。那麼,Linux 內核同步機制究竟是如何發揮其神奇 ⌘ Read more
Tmux 是一個強大的終端複用工具,允許用戶在一個終端窗口中管理多個獨立的會話、窗口和窗格。它最初是爲了解決在遠程服務器上長時間運行程序時遇到的網絡中斷問題而設計的,但其功能遠不止於此。通過 tmux,你可以輕鬆地在不同任務之間切換、保持會話持續運行(即使你斷開了連接),並且可以同時從多個位置訪問同一個會話。常見應用場景Tmux 作爲一個終端複用工具,因其強大的功能和靈活性,在多種場景下都非常有用 ⌘ Read more
Dockerless 是一種無需依賴 Docker 守護進程的容器管理方案,直接利用 Containerd 及其周邊工具(如 nerdctl 和 buildkit)進行容器和鏡像管理。該方案旨在簡化容器基礎設施,減少系統資源開銷,並提升性能和靈活性。 文|zouyee背景介紹Docker 作爲最早廣泛應用的容器運行時,其普及程度使得用戶對其操作方式和功能特性極爲熟悉。在 Kubernetes 的 ⌘ Read more
數據操作和分析是開發人員和數據科學家的基本任務。多年來,Pandas 一直是 Python 中用於輕鬆處理和操作大型數據集的首選庫。然而,對於 Node.js 開發人員來說,還沒有一個等價的解決方案可以提供同樣強大的數據處理。這就是 RustifyData 的用武之地。在本文中,我們將帶你瞭解 RustifyData 是什麼,它的特性集,以及爲什麼它是 JavaScript 開發人員進行數據操作的 ⌘ Read more
背景-- 最近搭建私有云環境中使用了 MQTT,MQTT 作爲客戶端和服務端之之間的長連接中間件,主要用作客戶端和服務端之間的信息交換。順手寫個文章分享一下。介紹--什麼是 MQTT 首先 MQTT 不是 MQ(消息隊列),只是名字帶有 MQ。 MQTT(Message Queuing Telemetry Transport),一種基於發佈 / 訂閱模式的消息傳輸協議,它設計輕巧、易於實現,非常適 ⌘ Read more
今天在準備《祕而不宣》系列下一篇文章時,思緒飄散了,突然想到使用 Heap 的功能再加 HashTable (Map) 的功能,可以構造一種新的數據結構,然後把我聚合程序中的數據聚合數據結構替換掉,總之思緒翩翩。然後在網上搜了一下,這種數據結構其實早就有了,名字叫 HeapMap。HeapMap (也叫做 PriorityMap) 是一種結合了堆和哈希映射的數據結構,常用於需要按鍵排序並進行高效查 ⌘ Read more
在我們日常玩的遊戲中或一些銀行類 app 上,他們爲了提高用戶的活躍度,設計了簽到領取獎勵的功能,當用戶連續簽到多少天之後我們可以獲得相應的獎勵,如下是某個 app 中籤到頁面: 用戶簽到的數據如果直接存到數據庫中是不推薦的,因爲需要一張簽到表來單獨的記錄每個用戶的每天簽到數據,隨着業務的發展,一旦用戶量非常大的時候,那麼簽到表的數據會急劇的增長,到最後會存在性能的問題。下面我們來介 ⌘ Read more
在快速演變的互聯網時代,服務的高可用性和彈性成爲了構建現代網絡服務的關鍵。傳統的靜態 DNS 解析機制,在應對頻繁變動的服務端點時顯得力不從心。而今,NGINX 開源了 DNS 動態解析功能,我們迎來了智能化、自適應的網絡架構新紀元。場景與問題解析----------- 在微服務架構和容器化部署(如 Kubernetes)的背景下,服務實例的 IP 地址可能會動態變化。傳統的 DNS ⌘ Read more
本文將探索 Golang 高級構建技巧,從而有助於創建更高效的二進制文件。原文: Advanced Go Build Techniques[1]構建選項以下是 go build 命令最常用的一些選項:-o: 指定輸出文件名。默認輸出文件名是主軟件包的名稱,在 Windows 系統中會自動添加 .exe 後綴。 -v: 詳細輸出。該選項會在編譯時打印軟件包的名稱。 -work: 打印 ⌘ Read more
提起在線支付,大家一定不陌生,這個行業發展了快 20 年了,最近又推出了 “碰一碰” 支付等創新形態。但絕大多數人對支付的瞭解仍只浮在水面上,作爲支付行業從業者,今天來帶大家看看冰山下面的部分:歡迎走進 “資金管理” 這個神祕領域。 01支付和資金的關係 這裏所說的 “資金” 或“資金管理”不是特指某一個團隊或某一款產品,你可以理解爲支付一定要與錢打交道吧?我暫且把在支付流程中與錢相關的東 ⌘ Read more
在現代高併發系統中,隨着用戶訪問量的激增和業務需求的不斷擴展,限流作爲一種至關重要的保護機制,被廣泛應用於防止系統過載,確保系統的穩定性和可用性。 本文將深入剖析幾種常見的限流算法,探討它們的原理、優缺點並給出代碼實例,幫助讀者更好地理解和應用這些算法,從而在實際項目中構建更加高效、穩定的系統。 01固定窗口算法(Fixed Window Algorithm)固定窗口算法將時間劃分爲固定大小的 ⌘ Read more
kcptun 是一個基於 kcp 協議的遠程端口轉發工具。它創建基於 kcp 協議的 UDP 隧道,可以將 TCP 流轉換爲 KCP+UDP 流。kcptun 使用 Go 開發,可以用於 Windows、Linux、MacOS 等操作系統。它對硬件要求非常低,內存最低僅需要 20MB。安裝非常簡單,庫提供了安裝腳本:curl -L https://raw.githubusercontent.co ⌘ Read more
本文根據字節跳動服務框架團隊研發工程師在 CloudWeGo 技術沙龍暨三週年慶典中演講內容《ROG——高性能 Go 實現》整理。 作者|不願意透露姓名的小劉市民ROG 之緣起ROG 的誕生是因爲我們一部分業務使用 Rust 重寫之後,獲得了非常好的收益,比如 AVG、CPU、MEM、P99,這些數據表現非常好,大約節省了接近 50% 的 CPU,內存大大降低。這個性能數據讓人眼紅,因此 ⌘ Read more
這篇文章會引導大家使用 Golang 設置本地大型語言模型 (LLM) 並與之交互,以此在本地構建你的 AI 應用。設置本地 LLM首先,我們需要在本地計算機上運行 LLM。爲此,我們將使用 Ollama(可在 GitHub ollama[1] 上獲取)。雖然本地加載模型有多種選擇,但我發現 Ollama 是相對容易使用的。Ollama 支持 macOS、Linux 和 Windows。本文的代碼 ⌘ Read more
前言你維護的Go 項目代碼架構是什麼樣子的?六邊形架構?還是洋蔥架構?亦或者是DDD?無論項目採用的是什麼架構,核心目標都應是一致的:使代碼能夠易於理解、測試和維護。本文將從Bob 大叔的整潔架構(Clean Architecture)出發,簡要解析其核心思想,並結合go-clean-arch 倉庫,深入探討如何在Go 項目中實現這一架構理念。準備好了嗎?準備一杯你最喜歡的咖啡或茶,隨着本文一探究 ⌘ Read more
gopay 是一個使用 Golang 編寫的支付庫。現在支持微信、支付寶、QQ、通聯支付、拉卡拉、PayPal。使用方法如下:引入 gopay 庫go get -u github.com/go-pay/gopay使用示例:import ( "github.com/go-pay/gopay" "github.com/go-pay/xlog")func main() { xlog.I ⌘ Read more
kcp-go 是 Golang 實現的 kcp 協議庫,它是可靠的 UDP 庫。該庫 kcp-go 旨在通過 UDP 數據包提供流暢、有彈性、有序、經過錯誤檢查和匿名的流傳遞。該庫和開源項目 kcptun 經過了戰鬥測試。從低端 MIPS 路由器到高端服務器,數以百萬計的設備在各種應用中部署了基於 kcp-go 驅動的程序。包括在線遊戲、直播、文件同步和網絡加速。我們介紹一下 kcp 協議,kcp ⌘ Read more
context 是 Go 語言的特色設計之一,主要作用有兩個:控制鏈路和安全傳值,並且 context 是併發安全的。context 在 Go 1.17 版本被引入,經過數年的迭代,在設計和用法上已經趨於穩定,本文以最新的 Go 1.23.0 版本源碼爲基礎,帶你深入理解 context 的設計和實現。context 設計context 被設計爲一個接口,名爲Context。爲了支持不同特性,這個 ⌘ Read more
跨境支付是指支付或者清結算過程發生在兩個及以上的國家地區之間、實現了資金跨國跨地區轉移的支付行爲。本文將從全局視角解析跨境支付體系的構成,從基礎概念、與國內支付的對比、全局組成、業務架構、產品架構、一個跨境支付實例等幾個方面展開01 跨境支付概念和名詞解釋 -------------------1.1.VA 賬戶 即 Virtual Account(虛擬賬戶),其本質是設立在機構傘形母賬戶下的一 ⌘ Read more
最近,我發現了一個有趣的新編程語言——Borgo。如果你是一個對編程語言感興趣的開發者,或者在使用 Go 開發應用時曾想過 “如果 Go 能多點現代語言特性會怎樣”,那這篇文章一定值得你讀下去!Borgo 的定位非常清晰:它是一種以簡潔和高效爲核心的語言,最終編譯成 Go 代碼。這意味着什麼?你不僅能獲得 Go 語言的性能優勢,還能享受到現代編程語言帶來的靈活性和便捷性。今天我們來聊聊 Borgo ⌘ Read more
Kafka 的文件存儲機制是其高性能、高可靠性和可擴展性的重要保障。以下是對 Kafka 文件存儲機制的詳細解析:一、Kafka 文件存儲的基本概念Topic 與 Partition: Kafka 中的每個主題(Topic)都可以分成一個或多個分區(Partition)。 Topic 是邏輯上的概念,而 Partition 是物理上的概念,分區是消息的基本單元。 每個分區都是一個 ⌘ Read more
Redis 的主從集羣同步機制是保證數據高可用性和可靠性的重要手段,以下是對其的詳細解釋:一、主從同步的概念Redis 主從同步是一種數據複製機制,其中一個 Redis 實例(主節點)負責寫操作,而其他實例(從節點)複製主節點的數據,並處理讀請求。這種機制提供了數據冗餘和故障轉移能力,確保在主節點出現故障時,系統仍能正常運行。二、主從同步的工作原理數據複製:主節點將寫操作記錄在本地的操作日誌(AO ⌘ Read more
前言--我們生活中都聽說了 DDD,也瞭解了 DDD,那麼怎麼將一個新項目從頭開始按照 DDD 的過程進行劃分與架構設計呢?一、專業術語------各種服務IAAS:基礎設施服務,Infrastructure-as-a-service PAAS:平臺服務,Platform-as-a-service SAAS:軟件服務,Software-as-a-service 推薦一個開源免費的 ⌘ Read more
手寫SpringMVC框架之前呢,我覺得有必要先了解SpringMVC的請求處理流程以及高級特性。一、SpringMVC 的請求處理流程-------------------1、請求處理流程--------流程說明:第一步:用戶發送請求至前端控制器DispatcherServlet。第二步:DispatcherServlet收到請求調用HandlerMapping處理器映射器。第三步:處理器映射器 ⌘ Read more
如果你使用過如 Python、Java 等主流支持併發的編程語言,那麼通常都能夠比較容易的獲得進程和線程的 id。但是在 Go 語言,沒有直接提供對多進程和多線程的支持,而是提供了 goroutine 來支持併發編程。不過在 Go 中,獲取 goroutine 的 id 並不像其他編程語言那樣容易,但依然有辦法,本文就來介紹下如何實現。獲取當前進程的 id首先,雖然 Go 沒有提供多進程編程,但啓 ⌘ Read more
哈嘍大家好,我是小康!上次我們聊了 GCC、G++ 和 GDB,搞清楚了這些工具在 C/C++ 開發中的用法。有了它們,你已經可以愉快地編譯、調試代碼了。但我問你,每次編譯項目是不是手動敲gcc 命令? 當項目文件一多,命令就像繞口令一樣——又長又複雜,還特別容易出錯。 別怕,今天我就帶你認識一個 “懶人神器”——Makefile。用 Makefile 的好處很簡單:代碼編譯自動化,輕鬆又高效; ⌘ Read more
我們團隊在利用 Taro 進行秒送頻道小程序的同時,一直在探索性能優化的最佳實踐。隨着需求的不斷迭代,項目中的性能問題難免日積月累,逐漸暴露出來影響用戶體驗。適逢雙十一大促,我們趁着這個機會統一進行了 Taro 性能優化實踐,現總結如下,希望能爲大家在日程的開發中提供借鑑,助力大促。優化前性能表現-----------性能表現主要從兩方面進行衡量,第一個是頁面加載時間,其次是頁面流暢程度。頁 ⌘ Read more
7 年前我在頭部支付機構負責備付金管理線,主要涉及對賬、成本計費、商戶計費、清算、結算、賬務、財務處理、備付金報備、資金調撥等對賬是其中非常重要的一個環節,每天要確保幾千萬筆的交易,上百億的資金的準確性接下來就跟大家分享一下,大型支付機構都是咋對賬的,主要介紹一個 “四段式對賬模型”四段式對賬,這裏的 “四段” 指的是”四組數據”,”四段式對賬“就是指這四組數據的相互覈對,他們一致了,整個清結算鏈 ⌘ Read more
Java 中的所有類都必須被裝載到 JVM 中才能運行,JVM 中的類加載器負責將編譯後的. class 文件裝載到 JVM 中,由於. class 文件只能在虛擬機上運行,不能直接和操作系統交互,所以 JVM 需要將文件解釋給操作系統,這樣就實現和操作系統之間的交互。有如下的代碼:public class JVMTest { public static void main(Stri ⌘ Read more
大家好,我是隱墨星辰,專注境內 / 跨境支付架構設計十餘年。在前面介紹過支付系統的整體設計,有興趣的讀者可點擊鏈接查看:圖解支付系統整體設計,今天聊聊支付系統的一些關鍵設計細節。內容主要包括一些支付系統常用的設計,比如領域建模,狀態機,冪等,日誌規範,業務 ID 生成規範,監控,資損防控,支付安全等。這些技術在互聯網其它領域比如電商也是通用的。這裏只摘錄了部分精華內容出來,但已經能表達最核心的設計 ⌘ Read more
Redis 事務詳解Redis 的事務和 MySQL 的事務在概念上是類似的,都是把一系列操作綁定成一組,讓這一組能夠批量執行。不過,Redis 事務與 MySQL 事務存在以下區別:弱化的原子性:Redis 沒有回滾機制,只能做到批量執行,不能做到一個失敗就恢復到初始狀態。如果事務中若干個操作存在失敗的,那就失敗,不會有回滾操作。 不保證一致性:Redis 事務不涉及約束,也沒有回滾,事務 ⌘ Read more
在瞭解微服務之前,我們需要了解一下它的背景。微服務的背景大約在 2005 年左右,隨着互聯網公司的快速發展,許多企業開始遇到單體應用程序在可擴展性和靈活性方面的瓶頸,爲了應對這些挑戰,企業開始探索將應用程序拆分成更小的、獨立的組件。基於上述的背景,微服務的發展出現了幾個關鍵時刻:2011 年:在這段時間,行業內開始廣泛使用 “微服務” 這一術語。雖然沒有一個明確的 “首次提出” 事件,但在技術會議 ⌘ Read more
Go 語言以其併發性和輕量級的 goroutine 而聞名,學習如何使用和處理它們是最具挑戰性的任務。在本文中,我將展示一些併發模式及其使用場景,以幫助您識別所需場景的模式。Goroutine------------package mainimport ( "fmt" "time")func main() { go sayHello() // 啓動goroutine tim ⌘ Read more
sync.Pool 簡介------------sync.Pool 是什麼sync.Pool 是 Go 語言標準庫中提供的一個用於對象複用的工具,它具有以下特點:對象緩存:使用 Get、Put 方法可以獲取和歸還 sync.Pool 中的數據,從而減輕內存分配與垃圾回收的壓力; 自動回收:sync.Pool 中的對象可能會被自動回收。這意味着即使你將對象放入池中,也不能保證該對象會一直存在於 ⌘ Read more
OpenAI 在它的多個版本的模型裏提供了一個非常有用的功能叫 Function Calling,就是你傳遞一些方法的信息給到大模型,大模型根據用戶的提問選擇合適的方法 Function,然後輸出給你,你再來決定是否執行。之所以需要 Function Calling,通俗來講就是大模型不具備實時性。因爲模型是基於之前的數據訓練出來的。而 Function Calling 具備實時性的優勢,比如 ⌘ Read more
雲原生時代,越來越多的企業藉助於微服務與容器化,來提升業務彈性與研發效率。在服務治理的道路上,我們也吸取各家之所長打磨了相關的產品。本次分享以騰訊微服務架構建設爲主,介紹了 TCS/TSF、北極星 (PolarisMesh) 和微服務治理方面的實踐經驗,以及在企業的相關落地案例。 01前言云原生時代,越來越多的企業藉助於微服務與容器化,來提升業務彈性與研發協作效率。Dubbo、Spring Cl ⌘ Read more
MySQL 的事務管理是數據庫系統中至關重要的部分,特別是在涉及到數據一致性和可靠性的時候。這篇文章,我們將深入探討 MySQL 事務的兩階段提交機制,包括工作原理、實現細節、優缺點以及實際應用場景。事務的基本概念在深入討論兩階段提交之前,我們先來了解下事務的基本概念。事務是一個邏輯處理單元,它由一組操作組成,這些操作要麼全部成功,要麼全部失敗。事務的四個基本屬性可以用 ACID 來描述:1.1 ⌘ Read more
實現思路----前面的幾篇文章陳某都是將鑑權和認證統一的放在了網關層面,架構如下:微服務中的鑑權還有另外一種思路:將鑑權交給下游的各個微服務,網關層面只做路由轉發。這種思路其實實現起來也是很簡單,下面針對網關層面鑑權的代碼改造一下即可完成:實戰乾貨!Spring Cloud Gateway 整合 OAuth2.0 實現分佈式統一認證授權!1. 幹掉鑑權管理器在網關統一鑑權實際是依賴的鑑權管理器 R ⌘ Read more
在 MySQL 中,分頁是一個常見的功能,但是,當出現深度分頁時,因爲數據庫需要掃描和跳過大量記錄,可能會導致性能問題,尤其是在處理大規模數據集時,那麼,如何解決深度分頁問題,本文我們將一起探討,並提供多種解決方案,以提高查詢性能。深度分頁問題的根源當使用 LIMIT 和 OFFSET 進行分頁時,MySQL 必須掃描 OFFSET + LIMIT 行,然後丟棄前 OFFSET 行。這意味着隨着分 ⌘ Read more
在電商平臺中,購物車是一個非常核心的功能,用戶瀏覽商品的過程中,他們可以將感興趣的商品加入購物車方便後面挑選和下單。購物車功能的設計對於提升用戶體驗、增加公司商品銷售量都有重要影響。 上圖是一個典型的電商購物車的圖,購物車協助用戶選購商品時提供如下的功能:(1)加入商品:用戶可以將商品加入購物車,並選擇商品的數量。(2)刪除商品:用戶可以從購物車中刪除不想要的商品。(3)修改商品數量:支 ⌘ Read more
大家好,我是隱墨星辰,專注境內 / 跨境支付架構設計十餘年。支付系統因其專業性,術語或概念稍爲晦澀不好懂。而我向來喜歡 “一圖勝千言”,所以爲支付系統相關的概念畫了 300 多張手繪風格的圖,摘錄部分供各位參考。極致簡化,真實的實現會複雜非常多。1. 賬戶分類在賬務系統中,通常包含以下幾種賬戶類型:客戶賬戶:對客可見。包括:對私的個人客戶賬戶,對公的商戶賬戶。 內部賬戶:對客不可見。包括:頭 ⌘ Read more
很多應用都屬於數據密集型應用,而非計算密集型;對於這類應用,CPU 往往不是第一限制性因素,關鍵在於數據量 、數據複雜度 和 數據的快速多變性;因此數據庫的選型在應用系統設計中就顯得比較重要。數據庫(數據引擎)最核心的任務就是 “讀到寫入的值”,我們嘗試從 “最簡單的腳本文件數據讀寫” 一步一步擴展討論到 “分佈式鍵值數據庫”,在這個過程中我們會遇到很多 “挑戰”,並嘗試逐步解決。 01單機存儲 ⌘ Read more
在 Linux 操作系統的複雜體系中,中斷管理起着至關重要的作用。它就像是系統運行的 “調度員”,確保各種硬件設備的請求能夠及時得到處理,維持系統的高效穩定運行。而在 Linux 中斷管理中,中斷號的映射是一個關鍵而又神祕的環節。本文將深入探索 Linux 中斷管理中中斷號的映射機制,帶你揭開其神祕面紗。 Linux內核版本:5.0架構:ARM64Linux 5.0內核源碼註釋倉庫地址:zhang ⌘ Read more
fmt.Scanln() 與 fmt.Scanf() 需求場景:數就非常有用。比如,創建一個任務管理工具,可能需要用戶輸入任務名稱、截止日期等信息,這時就可以使用 fmt.Scanln () 或 fmt.Scanf () 來接收用戶輸入。 對於一些需要用戶交互的小型應用程序,比如簡單的計算器程序,可能需要用戶輸入數字和運算符,fmt.Scanf () 可以按照指定的格式接收 ⌘ Read more
用 TypeScript 寫桌面應用聽起來複雜嗎?如果你曾被 Electron 的龐大體量勸退,或因 Bun 的新興技術望而卻步,那麼 Electrobun 會是你重新燃起開發熱情的理由。本文將深入探討 Electrobun 如何結合兩者的優勢,讓跨平臺開發變得直觀高效,幫助你快速構建現代化桌面應用。每當你打開 Spotify 或 VS Code,你是否想過,這些跨平臺的桌面應用是如何誕生的?它們 ⌘ Read more
一背景得物商家客服採用的是桌面端應用表現形式,而桌面端應用主要架構形式就是一套和操作系統交互的 “後端” \+ 一套呈現界面的 “前端(渲染層)”。而桌面端技術又可以根據渲染層的不同核心劃分爲以下幾類:C 語言家族:原生開發、QT Chromium 家族:NW、Electron、CEF Webview 家族:Tauri、pywebview、webviewjava 自立山頭:Flut ⌘ Read more
引言--在現代網絡應用中,HTTP/3 作爲一種基於 QUIC 協議的新一代 HTTP 協議,提供了更快的連接建立和更低的延遲。Rust 作爲一種高性能、安全的系統編程語言,非常適合用於實現高效的網絡客戶端。reqwest是 Rust 中一個流行的 HTTP 客戶端庫,支持 HTTP/1 和 HTTP/2。本文將深入探討如何在reqwest中實現 HTTP/3 客戶端請求,並通過實戰代碼演示如何優 ⌘ Read more
架構模式通過提供可複用的設計方案,有助於解決常見的軟件設計挑戰,從而提升生產力。如果您從事軟件架構設計工作,可能會遇到重複的目標和問題。架構模式通過提供應對這些場景的可重複設計,幫助開發者更高效地解決這些問題。架構模式捕獲了各類系統和軟件要素的設計結構,使其可以被複用。在編寫代碼的過程中,開發者往往在項目內、公司內乃至職業生涯中多次遇到類似問題。通過創建設計模式,工程師們可以藉助一種可複用的方法來 ⌘ Read more
行爲模式旨在解決對象間通信和交互相關的問題,專注於定義那些複雜到無法靜態設計的協作策略,這些協作策略使得程序可以在運行時動態地進行職責派遣以實現更好的擴展。今天我們開始第 2 個行爲模式的學習 —— Iterator(迭代器模式)。問題背景:設想我們定義了一個新的數據類型,它包含了一系列數據元素,可能是以 list、array、set 或其他據結構進行存儲,重要的是我們後續會出於性能、功能方面 ⌘ Read more
作者:jiayan golang 的一大特色就是 goroutine,它是支持高併發程序的重要保障;通過 go 關鍵字我們就能輕易創建大量的輕量級協程,但它和我們認知中的線程有什麼區別呢,輕量在哪裏,具體是如何進行調度的..... 本文將從涉及到的一些基礎知識開始,逐步介紹到 go 協程調度的核心原理,希望你能有所收穫~ 函數調用棧進程在內存中的佈局首先回顧下進程的內存佈局~ 操作系統把磁盤上 ⌘ Read more
Go 號稱 “開箱即用”,這與其標準庫的豐富功能和高質量是分不開的。而在 Go 標準庫中,crypto 庫(包括 crypto 包、crypto 目錄下相關包以及 golang.org/x/crypto 下的補充包) 又是 Go 社區最值得稱道的 Go 庫之一。crypto 庫由 Go 核心團隊維護,確保了最高級別的安全標準和及時的漏洞修復,爲開發者提供了可靠的安全保障。crypto 還涵蓋了從基 ⌘ Read more
介紹--集成測試對於確保 Go 應用程序與數據庫等外部依賴項的無縫協作至關重要。在本文中,我們將探討如何使用 GitHub Actions 爲 Go 應用程序設置和運行集成測試。我們將在 CI(持續集成)管道中配置 PostgreSQL 數據庫,簡化測試流程,並確保每次代碼推送後代碼庫的可靠性和生產就緒狀態。讓我們開始吧!GitHub Actions--------------GitHub Act ⌘ Read more
引言--Rust 作爲一門高性能的系統編程語言,性能優化一直是開發者關注的重點。本文將分享 8 個實用的性能優化技巧,這些技巧來自多年 Rust 開發經驗的總結,希望能幫助你寫出更高效的代碼。使用迭代器處理數據------------迭代器是 Rust 中處理集合的高效方式,它採用惰性求值,可以避免不必要的內存分配。// 低效的方式let mut squares = Vec::new();for ⌘ Read more
在當今的計算機世界中,Linux 操作系統以其高度的穩定性、靈活性和開源特性而備受矚目。而在 Linux 系統的運行背後,進程起着至關重要的作用。那麼,究竟什麼是 Linux 進程?它們是如何工作的?又有着怎樣的關鍵原理支撐着整個 Linux 系統的高效運轉呢?讓我們一同踏上探索 Linux 進程原理的奇妙之旅。一、概述----進程是執行中的程序,爲提高 CPU 利用率和改善系統響應時間而出現。它 ⌘ Read more
Go 的併發模型堪稱一場革命,但管理複雜的併發操作並非易事。這時,context 的傳播與取消機制便成爲了強有力的工具。通過這些機制,我們可以構建健壯的、可取消的操作,甚至跨越多個 goroutine 和網絡邊界。基礎知識----context 包提供了一種方法,用於在 API 邊界和進程之間傳遞截止時間、取消信號以及請求範圍的值。這是控制長時間運行操作和優雅關閉服務的關鍵。以下是一個使用 con ⌘ Read more
前一段時間有應用要進行雙活改造,聊到數據庫的對稱雙活架構,看了下同業在應用雙活尤其是數據庫雙活設計的時候,沒有一個最佳的實施方案。本文簡單介紹下應用層和數據庫層的同城雙活設計方案,對比了不同方案的優缺點,以在實際選擇時候作爲參考。1、應用層同城雙活架構同城雙活架構是指在同一個城市或地理區域內,構建兩個或多個數據中心,也就是常說的 Region 的概念,這些在同一個 Region 內的數據中心同時對 ⌘ Read more
什麼是 Genkit----------Genkit[1] 是一個 Google Firebase 團隊開發的 AI Agent 開發框架,用於構建現代、高效的 AI 應用。它目前包含一個 Node.js 的實現 [2] 和一個 Go 語言的實現 [3]。之所以注意到這個框架是因爲 Go 團隊在他們的十五週年博客 [4] 中提到了它。Go 團隊在博客中提到,他們正在努力使 Go 成爲構建生產 AI ⌘ Read more
需求一個接口調用時,接收到一個列表,十個元素,需要併發執行十個任務,每個任務都要返回執行的結果和異常,然後對返回的結果裝填到一個切片列表裏,統一返回結果。需要協程處理的結構體type Order struct { Name string json:"name" Id int json:"id" }確定通道數量一般按入參的需要處理的元素數量爲準taskNum := 10 初始化通道or ⌘ Read more=
在微服務架構大行其道的今天,如何有效處理複雜業務系統的領域邊界劃分始終是一個難題。事件風暴作爲領域驅動設計 (DDD) 中的一項核心實踐,它通過業務部門、產品、開發等多方協作的工作坊形式,幫助團隊釐清業務流程、統一認知,從而更好地指導微服務架構設計。事件風暴的本質認知------------傳統的需求分析往往陷入細節泥潭,而事件風暴則轉換視角,以業務事件爲核心,構建起完整的業務場景圖景。1.1 核 ⌘ Read more
使用 Pingora 構建反向代理 \| RustCarlos Armando Marcano Vargas 2024年11月Photo by Jezael Melgoza on Unsplash本教程將重點介紹如何使用 Pingora 庫創建一個負載均衡器。如果你已經閱讀過 Pingora 的文檔,那麼本文對你來說可能沒有新內容,除了我們將從文檔中的示例中添加一個速率限制器。需要明確的是,本文僅 ⌘ Read more
本文介紹瞭如何在 Golang 中優化數據庫連接,通過有效管理連接來提高應用程序吞吐量。原文: Optimizing Database Connections in Go: Improving Throughput by Managing Open Connections Efficiently[1]Go 的 database/sql 軟件包提供了自動化數據庫連接池,能夠幫助開發人員有效管理連 ⌘ Read more
大家好!今天我想聊聊用 Go 語言開發 GUI(圖形用戶界面)應用的一個輕量級工具 —— Tk9.0。如果你曾經嘗試用 Go 開發過桌面應用,可能會覺得有些難下手:傳統的工具太 “重”,需要額外安裝依賴,還經常跟操作系統深度綁定,跨平臺開發的成本也不低。而 Tk9.0 正好解決了這些痛點。什麼是 Tk9.0?Tk9.0 是一個 CGo-free(無 C 綁定)、跨平臺的 GUI 工具包,由 mod ⌘ Read more
Rust 的內置所有權模型和編譯時檢查降低了內存泄漏的可能性和風險,但它們仍然很有可能發生。內存泄漏不違反所有權規則,因此借用檢查器允許它們在編譯時可以編譯通過。內存泄漏是低效的,通常不是一個好主意,特別是在有資源限制的情況下。另一方面,如果將不安全行爲嵌入到 unsafe 塊中,它也會編譯通過。在這種情況下,無論操作是什麼,內存安全都是你的責任,例如指針解引用、手動內存分配或併發問題。所有權和借 ⌘ Read more
Gorm 是 Go 語言中最常用的 ORM(對象關係映射)包之一,但它在某些功能上仍有不足,其中之一就是分頁。分頁是管理 Web 應用程序中大數據集的基本功能。通過分頁,可以限制和顯示數據庫中的部分數據,而不必一次性檢索整個表的數據。雖然 Gorm 的文檔中介紹瞭如何使用 Scopes 來實現分頁,但在靈活性和可用性上仍有改進空間。本文介紹了一種利用 Gorm 的 Clauses 特性來簡化分頁並 ⌘ Read more
建造模式,處理與創建對象及對象實例化過程相關的問題,通常尋求以分離業務代碼和對象創建邏輯,或將複雜的構造邏輯封裝在可重用組件中的方式。讓我們繼續來學習第 3 種創建型模式——Builder 模式(建造者模式)。 問題背景: 創建的對象有時比較複雜,可能需要按照特定順序對所有依賴項進行逐一構建,創建依賴項後再最終構建期望的對象。創建這些最終對象及依賴對象,需要很多參數。如果通過構造函數的參數列表 ⌘ Read more
應用架構設計通常包括以下步驟:• 根據業務架構,將業務需求轉化爲 IT 系統,識別核心應用服務。 • 劃分應用結構,設計應用結構與業務流程、數據之間的關係。 • 設計應用結構之間的交互和集成關係。 本文主要分享一下應用服務、應用結構設計設計。應用服務設計------應用服務的概念應用服務是對一個或一組密切相關的業務對象及其操作的封裝。應用服務應明確定義其責任範圍,將相關業務功能和 ⌘ Read more
今天我們來聊一個經常在後臺開發中遇到的話題——站內信消息的未讀 / 已讀狀態數據表設計,以及如何用 Golang 來實現這個功能。對於很多做過後臺開發的程序員來說,站內信系統幾乎是每個系統都會涉及到的功能之一。無論是用戶通知、系統提醒,還是訂單更新,站內信的使用都非常廣泛。不過,在實際的開發過程中,關於站內信消息的存儲、管理以及查詢等,往往會讓我們花上一些時間去設計和優化。特別是當我們需要處理未讀 ⌘ Read more
簡介 跳躍表 (skip list) 是一種有序數據結構,通過在每個節點中維持多個指向其他節點的指針,從而達到快速訪問節點的目的。在 Redis 中,跳躍表是有序集合鍵的底層實現之一,那麼這篇文章我們就來講講跳躍表的實現原理。跳躍表的實現Redis 的跳躍表由 redis.h/zskiplistNode 和 redis.h/zskiplist 兩個結構定義。zskiplistNode 結構用於表 ⌘ Read more
介紹分佈式鎖的實現原理。一、分佈式鎖概述分佈式鎖,顧名思義,就是在分佈式環境下使用的鎖。衆所周知,在併發編程中,我們經常需要藉助併發控制工具,如 mutex、synchronized 等,來保障線程安全。但是,這種線程安全僅作用在同一內存環境中。在實際業務中,爲了保障服務的可靠性,我們通常會採用多節點進行部署。在這種分佈式情況下,各實例間的內存不共享,線程安全並不能保證併發安全,如下例,同一實例中 ⌘ Read more
在 Linux 這片廣袤而深邃的技術海洋裏,系統調用與 API 猶如兩座燈塔,爲無數開發者照亮前行的道路,指引着我們探索系統底層的奧祕並構建強大的應用程序。系統調用,作爲用戶空間與內核空間的溝通使者,賦予了應用程序直接向內核請求服務的能力。它宛如一把神奇的鑰匙,能夠開啓內核深處諸如硬件控制、進程管理、內存調配等珍貴寶藏的大門。每一個系統調用都是對底層系統資源與功能的精準掌控,是構建穩定高效軟件基石 ⌘ Read more
在 Go(Golang)的世界中,goroutines 是語言的瑰寶之一。它們輕量、高效,使開發者能夠輕鬆編寫併發和並行程序。但正如俗話所說,能力越大,責任越大。濫用 goroutines 可能導致內存泄漏、性能下降,甚至導致生產服務器崩潰。在這篇文章中,我們將介紹 goroutines 的基礎知識、最佳實踐,以及每個開發者應該瞭解的重要 “注意事項”。讓我們深入瞭解吧!Goroutines 概覽 ⌘ Read more