引言-----在現代分佈式系統中,高效的通信機制至關重要。gRPC 作爲一種高性能、開源的 RPC 框架,憑藉其基於 HTTP/2 的傳輸協議和 Protocol Buffers 的數據序列化機制,成爲構建微服務和分佈式應用的首選。本教程將帶你從零開始,掌握 gRPC 的基本概念,並通過實戰項目構建一個簡單的 gRPC 服務端和客戶端。gRPC 基礎概念------------2.1 什麼是 gR ⌘ Read more
引言-----在現代分佈式系統中,高效的通信機制至關重要。gRPC 作爲一種高性能、開源的 RPC 框架,憑藉其基於 HTTP/2 的傳輸協議和 Protocol Buffers 的數據序列化機制,成爲構建微服務和分佈式應用的首選。本教程將帶你從零開始,掌握 gRPC 的基本概念,並通過實戰項目構建一個簡單的 gRPC 服務端和客戶端。gRPC 基礎概念------------2.1 什麼是 gR ⌘ Read more
沃爾瑪在私有云和公共雲環境中擁有大規模的 Apache Kafka 部署,其消費應用數量超過 25,000。該部署每天處理數萬億條 Kafka 消息,可用性高達 99.99%。它支持以下關鍵用例:數據移動 事件驅動的微服務 流分析 在沃爾瑪這樣的規模下,Kafka 設置必須能夠應對突發的流量高峯。此外,由於消費應用程序應用程序使用多種編程語言開發,所有這些應用程序都必須遵循一套最 ⌘ Read more
對於高併發系統來說,有三個重要的機制來保障其高效運行,它們分別是:緩存、限流和熔斷。而緩存是排在最前面也是高併發系統之所以高效運行的關鍵手段,那麼問題來了:緩存只使用 Redis 就夠了嗎?冗餘設計理念---------當然不是,不要把所有雞蛋放到一個籃子裏,成熟的系統在關鍵功能實現時一定會考慮冗餘設計,注意這裏的冗餘設計不是貶義詞。 “ 冗餘設計是在系統或設備完成任務起關鍵作用的地方,增 ⌘ Read more
本文爲第二篇,包含軟件分層架構、管道與過濾器架構、主從架構。軟件架構模式捕獲了各類系統和軟件要素的設計結構,使其可以被複用。在編寫代碼的過程中,開發者往往在項目內、公司內乃至職業生涯中多次遇到類似問題。通過創建設計模式,工程師們可以藉助一種可複用的方法來解決問題,結構化地實現項目目標。軟件分層架構 Layered Architecture在複雜軟件系統設計中,分層架構是一種常見且有效的設計方法。這 ⌘ Read more
什麼是軟件架構?軟件架構是指軟件系統的高級結構,定義了系統中不同組件和模塊之間的交互方式。它涵蓋了各種設計決策和模式,這些決定塑造了系統的整體行爲、性能、可擴展性和可維護性。軟件架構是定義軟件系統高級結構和組織的過程。它包括識別並選擇合適的組件,決定它們如何相互作用,並確定它們應如何組織以實現特定目標。軟件架構的目標是創建一個可維護、可擴展、安全的系統,滿足用戶和組織的需求。爲什麼需要軟件架構?一 ⌘ Read more
在一次活動中,系統出現了大規模崩潰情況。活動開始時,約有五萬學員同時進行操作,大量請求瞬間湧向服務器,使得服務端出現大量請求堆積,最終系統資源耗盡而停止響應。我們不得不重啓服務,並對接口實施限流措施,服務才得以恢復正常。究其原因,我們習慣將公用功能和數據做成內網服務。這種方式雖能提高服務的複用性,卻也使我們的服務高度依賴內網服務。當外網受到流量衝擊時,內網會受到放大流量的衝擊,過高的流量極易導致內 ⌘ Read more
結構模式關注代碼、組件以及接口的有效組織與調用,主要解決如對象間的關係管理、提供必要抽象與具體實現相分離,以及將多個不同的庫或框架集成爲一個統一且連貫的系統等問題。今天我們開始第 4 個結構模式的學習 —— Decorator(裝飾器)。問題背景:我們希望在運行時增強或修改特定對象的功能。由於對象存在一定的類繼承關係,所以開發者可能首先想到通過修改基類的功能來實現,以希望這些修改可以同時在所有 ⌘ Read more
你是否對 JavaScript(JS)和 WebAssembly(Wasm)的運行機制感到好奇?今天我們將一同探索一個名爲 Nova 的開源項目,這是一個用 Rust 編寫的 JavaScript 和 WebAssembly 引擎。儘管 Nova 目前還在開發中,並不適合實際使用,但其創新設計和獨特的方法已經吸引了不少技術愛好者的目光。 什麼是 Nova?---------Nova 是一個 Ja ⌘ Read more
寫網頁模板太麻煩?重複的 HTML 代碼讓你頭大?Jinja2 就是爲解決這些痛點而生的。它是 Python 最受歡迎的模板引擎,Flask 框架的親兒子,能讓你輕鬆搞定各種模板渲染的活兒。模板引擎是啥玩意?說白了,模板引擎就像個翻譯官,把你寫的模板文件翻譯成最終的 HTML 頁面。打個比方,你在寫一個商品列表頁面,總不能爲每個商品都複製粘貼一遍 HTML 代碼吧?用 Jinja2,你只要寫一個模 ⌘ Read more
在談論 goroutines 時,我們需要記住 Go 語言的簡潔性,並且它非常強調併發處理。併發是指能夠獨立地處理多個任務,一項接一項地進行,這與並行不同,後者是指任務同時執行。我在之前的文章中已經討論過併發和並行的區別,所以這裏不再深入探討。Goroutines 的基本概念----------------讓我們直接進入 Go 中 goroutines 的主題,這是在代碼中實現併發處理的一種方式。 ⌘ Read more
在構建應用程序時,與多個提供商集成很麻煩,現在 aisuite 給解決了。用相同的代碼方式調用 OpenAI、Anthropic、Google 等發佈的大模型,還能實現便捷的模型切換和對比測試。剛剛,AI 著名學者、斯坦福大學教授吳恩達最新開源項目實現了。吳恩達在推文中宣佈了這一好消息開源新的 Python 包:aisuite!這個工具可以讓開發者輕鬆使用來自多個提供商的大型語言模型。在談到爲 ⌘ Read more
最近在 Pigsty v3.1 中,我們提供了開箱即用的 Supabase 自建支持。這是一篇關於如何自建 Supabase 的詳細教程。完整的教程,我建議您直接參考我們的博客:https://pigsty.cc/zh/blog/db/supabase/ Supabase 是什麼?Supabase 是一個開源的 Firebase,是一個 BaaS (Backend as Service)。Supa ⌘ Read more
正如 LSP 成爲了 IDE 的通用標準一樣,Anthropic 正在將 MCP 打造成 LLM 集成的開放標準。前段時間 OpenAI 發佈了一個實時訪問第三方應用的功能來爲 ChatGPT 提供上下文(ChatGPT 升級爲實時協作助手),沒想到 Claude 這麼快就帶來了一個 LLM 協議標準,直接將 AI 能力拉滿(現在下結論爲時尚早)。不過當我看完整個協議以及簡單上手體驗後,我想說 ⌘ Read more
在 Web 應用中,文件上傳是一項常見的功能。然而,當文件體積過大時,傳統的文件上傳方式往往會導致頁面卡頓,用戶體驗不佳。爲了解決這一問題,我們可以利用Web Worker技術來進行大文件的切片上傳。本文將詳細介紹如何使用Web Worker進行大文件切片上傳,並通過具體的例子來演示其實現過程。Web Worker 簡介-------------Web Worker 是 Web 瀏覽器提供的一種在 ⌘ Read more
近期工作中遇到線程池參數配置不當引發的相關問題。基於此,本文主要結合線程池的原理、使用場景、參數配置、使用注意事項等詳細闡述。文章較長,預計閱讀時長 8~10 分鐘,建議收藏。前置知識池化技術一種資源管理策略,旨在提高資源利用率和系統性能,減少資源創建和銷燬的開銷。如數據庫連接池、線程池、常量池等。 線程和進程進程就像是你打開的 360 安全衛士這個軟件本身。線程:在這個空間裏,360 ⌘ Read more~
對象存儲(如 S3)中常用的一種提高耐用性的技術叫做糾刪碼(Erasure Coding),可以提高數據耐久性並減少存儲開銷。即使發生硬件故障,也能保證數據的可用性和完整性。讓我們來看看它是如何工作的。糾刪碼處理數據持久性的方式與複製不同。它將數據分割成小塊(放在不同的服務器上),並創建奇偶校驗以實現冗餘。發生故障時,我們可以使用分塊數據和奇偶校驗來重建數據。讓我們來看一個具體的例子(4 + 2 ⌘ Read more
提到歷史項目,大家對它的第一印象可能會是數據量大、技術老舊、文檔缺失、開發人員斷層、"屎山" 等。剛好這幾天就接到了一個優化老項目的需求,客戶反饋頁面數據加載緩慢甚至加載不出來,希望能夠做一些優化。剛接到這個任務後真的是一臉懵逼,因爲既沒有文檔,也沒有相關的開發人員,甚至連需求都不瞭解。唯一的解決辦法就是向上面多要時間,有了足夠的時間就可以通過代碼梳理出業務邏輯。背景------客戶在我司採購了 ⌘ Read more
在這篇文章中讓我們探討一下如何使用 Rust 構建線程池來併發地管理多個任務。在開始實際的編碼之前,讓我們首先了解線程池是什麼以及它是如何工作的。線程池線程池是工作線程的集合,創建這些線程是爲了同時執行多個任務並等待新任務的到來。這意味着一開始創建了多個線程,並且所有線程都處於空閒狀態。每當你的系統獲得任務時,它可以快速地將任務分配給這些線程,從而節省大量時間,而無需多次創建和刪除線程。正如圖所看 ⌘ Read more
當我們深入探索 Linux 操作系統的奧祕時,線程同步無疑是一個至關重要且充滿挑戰的領域。在複雜的 Linux 系統中,多個線程常常同時運行,它們如同在一個繁忙的數字工坊中協同工作的工匠。然而,若沒有有效的同步機制,這些線程可能會相互干擾、衝突,導致數據不一致、系統不穩定甚至崩潰。線程同步就像是爲這個工坊制定的一套精準的規則和協調機制。它確保不同的線程在合適的時機進行操作,有序地共享資源,避免混亂 ⌘ Read more
單例模式是常用的軟件設計模式之一,同時也是設計模式中最簡單的形式之一,在單例模式中對象只有一個實例存在。單例模式的實現方式有兩種,分別是懶漢式和餓漢式。1、餓漢式 餓漢式在類加載時已經創建好實例對象,在程序調用時直接返回該單例對象即可,即在編碼時就已經指明瞭要馬上創建這個對象,不需要等到被調用時再去創建,如下是餓漢式的代碼:public class Singleton { privat ⌘ Read more
在高併發系統的設計中,面對大流量的挑戰,我們通常需要運用一些巧妙的方案來有效地分流和處理這些流量,從而保證系統的穩定性和用戶體驗。可以通過一個比喻來幫助理解:就像古代治水一樣,我們在高併發系統中採用的策略,也旨在將洪水引流、分擔壓力、提高系統的承載能力。例如,在古代的治水實踐中,大禹通過拓寬河道清除淤沙,讓水流更加順暢;都江堰則利用引流技術將岷江的水分流到多個支流,從而減少水流的壓力;而三門峽和葛 ⌘ Read more
由於秒殺場景是庫存爭搶非常經典的一個應用場景,接下來我會結合秒殺需求,帶你看看如何實現高併發下的庫存爭搶,相信在這一過程中你會對鎖有更深入的認識。鎖爭搶的錯誤做法在開始介紹庫存爭搶的具體方案之前,我們先來了解一個小知識——併發庫存鎖。還記得在我學計算機的時候,老師曾演示過一段代碼:public class ThreadCounter {private static int count = 0;pu ⌘ Read more=
官方的介紹。https://go.dev/wiki/Go123Timer Go 1.23 引入了一個新的實現方案,用於由 time.NewTimer、time.After、time.NewTicker 和 time.Tick 創建的基於通道的定時器。這個新實現帶來了兩項重要改變:未停止但不再被引用的定時器和週期計時器現在可以被垃圾回收。在 Go 1.23 之前,未停止的定時器在觸發之前無法被垃圾回 ⌘ Read more
在當今數字化與智能化浪潮洶湧的時代,人工智能技術不斷取得突破性進展,多模態模型作爲其中的前沿領域,正日益成爲研究和應用的熱點。邊緣設備,如智能手機、物聯網設備等,對智能處理視覺和文本信息的需求也在急劇增長。然而,傳統模型往往因參數規模龐大、計算複雜等問題,難以在邊緣設備上高效運行。在此背景下,OmniVision - 968M 模型應運而生,它以緊湊的架構、創新的技術設計,爲邊緣設備的多模態智能應 ⌘ Read more
今天,我打算以直播互動作爲例子,引領大家一同去了解在面對讀多寫多的情況時,應當怎樣去應對所產生的流量壓力。通常而言,這類服務在多數情況下都屬於實時互動服務。由於其對時效性有着極高的要求,這就致使在許多場景當中,我們沒辦法藉助讀緩存的方式來減輕核心數據所承受的壓力。那麼,爲了有效降低這類互動服務器所面臨的壓力,我們能夠從架構層面着手,開展一些具有靈活性的拆分操作,並對其進行相應的設計改造。實際上,這 ⌘ Read more
前言-----在 Go 語言中, 雖然協程的創建成本相對較低, 但在高併發場景下, 無限制地創建協程仍可能導致系統資源耗盡。協程池通過複用一組預創建的協程來處理任務, 可以有效控制協程數量, 提升系統性能和穩定性。協程池的核心原理-----------協程池的核心思想是維護一個固定大小的協程隊列, 這些協程會持續從任務隊列中獲取任務並執行。主要包含以下組件:任務隊列: 存儲待執行的任務 工 ⌘ Read more
Redis 數據庫的數據結構--------------Redis 的鍵值對中的 key 就是字符串對象,而 value 就是指 Redis 的數據類型,可以是 String,也可以是 List、Hash、Set、 Zset 的數據類型。其實是 Redis 底層使用了一個全局哈希表保存所有鍵值對,哈希表的最大好處就是 O(1) 的時間複雜度快速查找到鍵值對。哈希表其實就是一個數組,數組中的元素叫做 ⌘ Read more
本文包含軟件架構的重要性、定義及其常見模式,架構對系統成功的影響,五種主要的架構模式及其最佳應用場景,評估優秀架構的關鍵質量屬性。 關注 TechLead,復旦博士,分享雲服務領域全維度開發技術。擁有 10 + 年互聯網服務架構、AI 產品研發經驗、團隊管理經驗,復旦機器人智能實驗室成員,國家級大學生賽事評審專家,發表多篇 SCI 核心期刊學術論文,阿里雲認證的資深架構師,上億營收 AI ⌘ Read more
jxls 是一個輕量級的 Java 庫,用於基於模板的 Excel 報表生成。jxls 作爲一個開源工具,提供了一種高效且易於維護的方式來處理複雜的 Excel 導出需求。它允許用戶通過在 Excel 模板中放置特定的標記或註釋來定義數據的輸出格式和佈局,從而避免了編寫大量重複且易出錯的代碼。 標註:簡單的 excel 格式,用簡單的 poi,easyExcel 等工具都能導出。但是針對複雜的 ⌘ Read more
在 Linux 操作系統那複雜而精妙的內核世界裏,自旋鎖宛如一顆獨特而關鍵的 “螺絲釘”,雖看似微小卻有着不可忽視的力量。它緊密地與多任務處理、併發控制以及資源共享等核心機制相互交織,深刻地影響着系統的性能、穩定性與可靠性。當我們開啓探索 Linux 自旋鎖之旅時,就彷彿踏入了一個神祕而充滿挑戰的技術領域,在這裏,我們將逐步揭開自旋鎖的神祕面紗,洞察它在 Linux 內核運作中所扮演的微妙角色,以 ⌘ Read more
大家好,我是不才陳某~Spring Boot 自定義線程池實現異步開發相信看過陳某的文章都瞭解,但是在實際開發中需要在父子線程之間傳遞一些數據,比如用戶信息,鏈路信息等等比如用戶登錄信息使用 ThreadLocal 存放保證線程隔離,代碼如下:/\* @author 公衆號:碼猿技術專欄 @description 用戶上下文信息 /public class OauthContext { p ⌘ Read more
一、分佈式鎖的概念與特點在分佈式系統中,爲了保證多個服務之間互斥地訪問共享資源,需要使用分佈式鎖。分佈式鎖的特點包括:互斥性:同一時刻只能有一個線程持有鎖。 可重入性:同一節點上的同一個線程如果獲取了鎖之後能夠再次獲取鎖。 鎖超時:支持鎖超時,防止死鎖。 高性能和高可用:加鎖和解鎖需要高效,同時也需要保證高可用,防止分佈式鎖失效。 具備阻塞和非阻塞性:能夠及時從阻塞狀態中被 ⌘ Read more
結構模式關注代碼、組件以及接口的有效組織與調用,主要解決如對象間的關係管理、提供必要抽象與具體實現相分離,以及將多個不同的庫或框架集成爲一個統一且連貫的系統等問題。今天我們開始第 6 個結構模式的學習 —— Flyweight(享元模式)。問題背景:程序執行時會創建太多相似的對象副本,所以內存消耗會非常高。觀察這些這些對象定義發現,它們包含了若干的共同屬性(字段值相同),而其他字段則不同。這些 ⌘ Read more
在一個公司中,消息通知系統是不可或缺的一部分,每個團隊都可能開發了一套獨自的消息通知組件,隨着公司業務團隊的日益增長,維護繁瑣、排查問題複雜、開發成本等問題就會凸顯出來。(例如我們的企微羣通知,由於消息內容不同模板不同,一個項目內使用的組件就有 3 種,還不包含其他通知部分。)基於這樣的背景,我們就迫切需要開發一套通用的消息通知系統。那麼如何高效地處理大量的消息請求以及服務穩定性的保障,成爲了開發 ⌘ Read more
cron,相信玩過 Linux 的朋友應該都對這個很熟悉吧,這不就是計劃任務嘛,當你需要某個時間段去執行某一件事的時候,普通的執行方式已經不能滿足我們的需求了,這個時候就需要一個定時任務了,那麼下面我就來介紹一個 Go 的開源定時任務框架。一、安裝---- 下載go get github.com/robfig/cron/v3@v3.0.0 導入:這裏後面加個v3意味着這是v3版本,注意不要搞錯 ⌘ Read more
RAG 結合了大型語言模型和信息檢索模型的力量,允許它們用從大量文本數據中提取的相關事實和細節來補充生成的響應。事實證明,這種方法在提高模型輸出的實際準確性和總體質量方面是有效的。然而,隨着 RAG 系統得到更廣泛的採用,它們的侷限性開始浮出水面,具體而言:平面檢索: RAG 將每個文檔作爲一個獨立的信息。想象一下,閱讀單獨的書頁,卻不知道它們之間是如何連接的。這種方法錯過了不同信息片段之間更深層 ⌘ Read more
一、前言----實際項目開發中,由於設計原因,會將 phy 的 mdio 引腳連接到 SoC 的 2 個空閒 gpio 上,這樣就無法通過 Gmac 自有的架構實現修改 phy,因此只能通過 GPIO 模擬的方式實現 MDIO,好在 Linux 支持 MDIO via GPIO 功能。該功能需要用到內核驅動 mdio-bitbang.c 和 mdio-gpio.c。本例 :平臺: 復旦微ke ⌘ Read more
bisect 是一個英文動詞,意爲 “二分” 或“分成兩部分”。在數學和計算機科學中,通常指將一個區間或一個集合分成兩個相等的部分。對於程序員來說,最熟悉的 bisect 應用莫過於下面兩個:算法中的二分查找 (binary search) 二分查找是一個經典且高效的查找算法,任何一本介紹數據結構或計算機算法的書都會包含對二分查找的系統說明。所謂二分查找就是通過不斷將搜索區間一分爲二來找到目 ⌘ Read more
singleflight 是 Go 官方擴展庫 x 中提供的擴展併發原語,能夠將多個併發請求合併爲一個,降低服務端壓力。本文就來介紹下它的用法和實現原理。請求合併singleflight 主要用於抑制重複的併發調用,從而避免對同一資源進行重複操作,提升系統性能。比如,當我們有多個 goroutine 併發調用一個同一個函數時,singleflight 能夠實現只讓一個 goroutine 發起調用 ⌘ Read more
哈希算法 (也稱散列算法) 是一種將任意長度的輸入數據轉換成固定長度輸出的數學算法。Hash 算法的應用場景------------Hash 算法常常用在以下的場景中:數據完整性驗證 可以爲文件生成唯一的哈希值,用於檢測文件是否被篡改 常見場景如軟件下載時的 MD5 校驗、區塊鏈中的數據驗證 密碼存儲安全 不直接存儲用戶密碼原文, 而是存儲密碼的哈希值 即使數據庫被 ⌘ Read more
大家好,我是 frank。「Golang 語言開發棧」公衆號作者。01 介紹Gin 框架爲 JSON、XML 和 HTML 渲染提供了易用的 API。本文我們主要介紹 JSON 的使用方式。02 JSON在 Go 項目開發中,當開發 HTTP API 時,我們通常提供 JSON 格式的返回結果。Go 框架爲 JSON 渲染提供了易用的 API。普通 JSON示例代碼:func main() { ⌘ Read more
在應用程序開始時最常見的事情之一是初始化各種資源。這可以是應用程序配置、日誌服務或某些數據庫連接。然而,並非所有這些都需要在應用開始時就準備好,因爲這可能會導致啓動緩慢。這就需要在使用資源的時候再進行初始化,延遲初始化模式可以幫助我們推遲資源的初始化。如果資源根本不使用,也可以完全跳過初始化。在 Rust 的舊版本中,其標準庫不支持這種延遲初始化。在生態系統中有幾個流行的 crate 通常用於此功 ⌘ Read more
公衆號:尤而小屋 編輯:Peter 作者:Abhay Parashar大家好,我是 Peter~今天給大家介紹機器學習中集成學習的 5 種不同方法:Bagging Boosting Stacking Voting Blending 0、引言----機器學習是人工智能的一個分支領域,致力於構建自動學習和自適應的系統,它利用統計模型來可視化、分析和預測數據 ⌘ Read more~
在現代的 Web 開發中,JavaScript 不僅是網頁交互的基礎,更是構建複雜應用的核心技術。隨着 ECMAScript 標準的不斷演進,JavaScript 引入了許多新的特性和 API,使開發者能夠更高效、優雅地編寫代碼。本文將探討幾個重要的 JavaScript 高級特性,並通過實例展示它們的應用。一、箭頭函數(Arrow Functions)---------------------- ⌘ Read more
前言--最近一直在使用 DjangoStarter 開發各種小項目,之前我是比較喜歡前後端分離的,後端用 Ninja API,前端 nextjs,開發起來也挺舒服的,交互體驗也比較好。不過我在網上衝浪的時候也瞭解到有 htmx 和 alpine.js 這些和 Django 很搭配的輕量級前端開發庫,於是來新的玩具項目裏嘗試一下。(本文先來試試 alpine.js,以最近正在開發的 LiveChat ⌘ Read more
存算分離架構,作爲數據處理領域的一個重要概念,從其最初的雛形到如今廣泛應用,經歷了多次迭代和變革。本篇文章從過去的存算架構,逐步講述存算分離的演進,現今的存算分離架構的優勢及其在 Databend 中的體現,直至未來存算分離的發展方向。存算一體架構侷限性在傳統的數據處理架構中,計算和存儲往往是緊密耦合在一起的。這種存算一體的架構雖然在早期的數據需求中表現優異,但隨着業務複雜度和數據量的激增,逐漸顯 ⌘ Read more
一、前言----我們在操作大型數據表或者日誌文件的時候經常會需要寫入數據到數據庫,那麼最合適的方案就是數據庫的批量插入。只是我們在執行批量操作的時候,一次插入多少數據才合適呢? 假如需要插入的數據有百萬條,那麼一次批量插入多少條的時候,效率會高一些呢?這裏博主和大家一起探討下這個問題,應用環境爲批量插入數據到臨時表。二、批量插入前準備---------博主本地原本是循環查出來的數據,然後每 10 ⌘ Read more
pprof 是一個用於分析 Go 程序性能數據的工具,幫助開發者找出 CPU、內存和其他瓶頸。本文提供了一個詳細的分步指南,介紹如何分析 .pprof 文件,包括設置、生成文件和解釋結果。第一步:安裝必要工具----------要分析 .pprof 文件,請確保安裝以下工具:Go 編程語言: 從官方網站安裝 Go。 驗證安裝:go version pprof 工具: ppr ⌘ Read more
限流是一種控制訪問速率的策略,用於限制系統、服務或 API 接口的請求頻率或數量。它的目的是爲了保護系統免受過多請求的影響,防止系統因過載而崩潰或變得不可用。限流是一種重要的性能優化和資源保護機制。限流的好處有以下幾個:保護系統穩定性:如果系統接受太多請求,超出了其處理能力,可能導致系統崩潰或響應時間急劇增加,從而影響用戶體驗。限流可以幫助控制請求速率,確保系統穩定運行。 保護系統可用性:有 ⌘ Read more
之前,我們將 Go 程序編譯爲 WebAssembly,然後轉換爲 C++ 文件以在 Nintendo Switch 上運行。現在,我已成功將 Go 程序編譯爲 Nintendo Switch 的原生二進制文件,並在那裏運行遊戲。我使用-overlay選項用 C 函數調用替換系統調用。此外,我開發了一個新的包 Hitsumabushi[2] 來生成此內容的 JSON。注意--本文及文中的開源項目僅 ⌘ Read more
本文主要針對 Feed 流進行介紹,將從 Feed 流的演變入手,帶你一步步瞭解 Feed 流,而後學習如何從開發角度入手,對其進行建模,抽象出 Feed 流常見的架構,最終搭建高可用、高擴展、高性能的 Feed 流應用。01瞭解 Feed 流在學習如何開發 Feed 流應用前,我們需要先了解什麼是 Feed 流。 1.1 什麼是 Feed 流Feed 流是一個持續更新並展示給用戶的信息流。它 ⌘ Read more
代理服務器充當請求資源的客戶端與提供資源的服務器之間的中介。它可以實現多種功能,例如緩存資源以加快訪問速度、匿名化請求、執行安全策略以及在多個服務器之間進行負載均衡。簡單來說,代理服務器接收來自客戶端的請求,將其轉發到相關服務器,然後將服務器的響應返回給客戶端。代理服務器的類型代理服務器有多種類型,每種類型具有不同的用途。以下是主要類型的介紹:正向代理(Forward Proxy)位於客戶端前方, ⌘ Read more
在 Web 應用中,確保前後端之間的數據傳輸安全是非常重要的。這通常涉及到使用 HTTPS 協議、數據加密、令牌驗證等安全措施。本文通過將前後端之間的傳輸數據進行加密,用於在 Spring Boot 應用中實現前後端傳輸加密設計。一、數據加密方案--------即使使用了 HTTPS,也可能需要在應用層對數據進行額外的加密。這可以通過以下方式實現:對稱加密: 加密解密是同一個密鑰,速度快,數據接收 ⌘ Read more
在 Go 語言開發中,包(package)是代碼組織的基本單位 [1],也是基本的構建單元。Go 編譯器會將每個包構建成一個目標文件 (.a),然後通過鏈接器將這些目標文件鏈接在一起,形成最終的可執行程序。儘管 Go 包的構建過程看似簡單,但實際上蘊含着許多值得深入瞭解的細節。例如,當我們執行 go build 命令時,Go 編譯器是如何選擇需要編譯的源文件的?你可能會回答:“不就是通過文件名中的 ⌘ Read more
如何診斷佔用過多 CPU、內存和 IO 等資源的神祕進程?下圖說明了 Linux 系統中的有用工具。01 初步排查-------1. 查看系統總體狀態top 或 htop:實時查看 CPU、內存使用情況。 iotop:查看 IO 使用情況(需要 root 權限)。 vmstat:檢查 CPU、內存、磁盤 IO 等性能指標。 2. 找出佔用資源的主要進程使用 ps 查找佔用最多資源 ⌘ Read more
在我們的日常生活中,常常會遇到這樣的情況:你正在專心做一件事,突然被一個緊急的電話或者他人的呼喊打斷。在 Linux 系統的世界裏,也有類似的現象,這就是中斷機制。它就像是系統運行中的 “緊急打斷器”,當某些重要的事情發生時,比如硬件設備有新的數據需要處理或者出現了異常情況,中斷機制就會暫停當前正在執行的進程,優先處理這些緊急事務。今天,讓我們深入理解 Linux 中斷機制這個奇妙的系統 “管家” ⌘ Read more
大家好,我是 frank。「Golang 語言開發棧」公衆號作者。01 介紹Gin 框架自定義驗證器,分爲字段級別驗證器和結構體級別驗證器。其中結構體級別驗證器,可以用於跨字段驗證,也可以用於和字段級別驗證器結合使用。需要注意的是,結構體級別驗證器的優先級小於字段級別驗證器。02 字段級別自定義驗證器定義字段級別驗證器示例代碼:var userValidator validator.Func ⌘ Read more
Gum 是一個可以用來製作迷彩腳本的工具。它使用 Golang 編寫。它可以在您的腳本中利用 Bubbles 和 LipGloss 的力量,實現炫彩的交互動畫,而無需編寫任何 Go 代碼。Gum 提供了高度可配置、即用型的實用程序,可以幫助你用幾行代碼就能編寫有用的 Shell 腳本。下面會演示如何讓腳本更富有表現力以及趣味性。我們開始吧,來構建一個腳本,讓提交代碼更具有趣味性。首先,我們先安裝 ⌘ Read more
大家好,我是湯師爺~想要深入理解零售企業的組織架構並不容易。大多數人並沒有實際經營過零售企業,更不曾參與設計其組織架構。在調研商家的過程中,我們通常只能瞭解他們組織架構的現狀,卻難以直接與企業高層溝通,深入理解組織架構設計背後的邏輯。很多時候,我們只能通過業務場景的表象,去推測商家的組織設計意圖。然而,要爲商家提供有競爭力的數字化產品,首先需要確保其組織數字化的合理性。組織管理是一切業務的起點,否 ⌘ Read more
在這篇文章中,我們將討論如何擴展數據庫以應對高寫入吞吐量和存儲空間的挑戰。爲此,我們將使用一種叫做分片(sharding)的方法。我們從零開始,假設數據庫只有一個單節點。我們有多個客戶端,它們都在從該數據庫讀取和寫入數據,但由於數據庫僅有一個節點,所有的讀寫操作都集中在這個單一設備上。如果我們的客戶端數量非常多,並且它們的讀寫操作都非常快速,我們很快就會遇到存儲空間不足的情況,而且數據庫的處理速度 ⌘ Read more
緩存(Cache)策略在計算機系統中起着至關重要的作用,它們決定了數據如何在存儲層次結構中流動和被管理,緩存策略的選擇可以顯著影響系統的性能、可靠性和複雜性。這篇文章,我們來分析 6 種常見的緩存策略:Read Through(讀取穿透) Cache Aside(緩存旁路) Write Through(直寫) Write Around(繞過緩存寫) Write Back(回 ⌘ Read more
在人工智能快速發展的當下,10 月 18 日微軟開源了 bitnet.cpp,這是一個具有革命性的 1--bit 大語言模型推理框架。傳統大語言模型運行依賴龐大 GPU 基礎設施和大量電力,成本高且限制了小型企業和個人用戶。而 bitnet.cpp 能在 CPU 上運行,使更多用戶無需藉助 GPU 就能在本地設備上運行 1000 億參數的大語言模型,以親民成本感受強大 AI 技術的便利與魅力。一、 ⌘ Read more
SQLite 作爲一種輕量級的嵌入式數據庫,提供了豐富的內置函數,這些函數能夠在 SQL 查詢中直接調用,從而大大增強了數據處理和操作的能力。本文將詳細介紹 SQLite 內置函數的分類、用法及其特性,旨在幫助讀者更好地利用這些功能強大的工具。 一、核心函數 核心函數是 SQLite 中最基礎且常用的函數,涵蓋了數據類型檢測、空值處理及隨機數生成等功能。 • typeof(X):返回參數 ⌘ Read more
大家好,我是島主小風哥,今天聊聊零拷貝。計算機處理的任務大體可以分爲兩類:CPU 密集型與 IO 密集型。當前流行的互聯網應用更多的屬於 IO 密集型,傳統的 IO 標準接口都是基於數據拷貝的,這篇文章我們主要關注該怎樣從數據拷貝的角度來優化 IO 性能,讓你的程序在 IO 性能方面趕超 P8。爲什麼 IO 接口要基於數據拷貝?操作系統本質上就是一個管家,目的就是更加公平合理的給各個進程分配硬件資 ⌘ Read more
在之前,我們有些過這麼一篇文章 \- 使用 CSS 輕鬆實現高頻出現的各類奇形怪狀按鈕 [1]。裏面包含了如下這些圖形:接下來幾篇文章中,將在上述基礎上,額外補充一些在日常設計稿中,常見的,可能出現的更爲複雜的幾個按鈕,本文,我們來嘗試實現這個造型:不鏤空的內凹圓角按鈕----------在文章開頭的貼圖中,其實是有和這個按鈕非常類似的造型:此造型如果內部無需鏤空,整體還是比較簡單的,利用 back ⌘ Read more
隨着雲原生技術棧的迅速發展,系統複雜性逐漸下沉到服務網格、網關、通用 sidecar、serverless 運行時、內核等基礎設施層面,給可觀測性帶來了巨大的挑戰。本文結合真實的排障案例,介紹了火山引擎雲原生團隊在容器全棧觀測方面的技術實踐。來源 \| 火山引擎雲原生團隊 一、容器觀測的挑戰近年來,伴隨雲原生技術棧的迅速發展,越來越多工程師開始藉助容器、Kubernetes、服務網格等基礎設施快速 ⌘ Read more
在 Docker Desktop 4.18 中 docker initCLI 可以爲項目生成 Docker 資源,使創建 Docker 鏡像和容器變得更加容易。當你在項目目錄中運行 docker init 命令時,它將指導你使用合理的默認值爲項目創建必要的文件。這些文件包括:1,.dockerignore2,Dockerfile3,docker-compose.yamldocker init 命令 ⌘ Read more
你是否想過,在 Linux 系統中,當你打開一個程序、瀏覽網頁或者處理文件時,這些數據都存放在哪裏呢?答案就是內存。Linux 內存管理就像是一個超級大管家,它負責管理着系統中所有數據的 “家”。這個 “家” 的空間有限,卻要容納各種各樣的數據,而且要保證每個數據都能被快速準確地找到和使用。它需要智慧地分配房間(內存空間),合理地安排住戶(進程),還要及時清理不再需要的雜物(回收內存)。今天,我們 ⌘ Read more
在我們日常的生活中排行榜是常見的功能,如遊戲的排行榜,銷售額的排行榜等等,排行榜不僅可以讓用戶有更多的激情參與到活動中來,而且可以更好的留存住用戶,如下所示的拉新排行榜: 排行榜是一個常見的業務需求,下面我們就來聊聊如何通過 Redis 來設計一套支持高併發的排行榜的功能。 1、支持高併發的 Zset 實現榜單方案 假設業務需要展示排名前 10 名的用戶在榜單上,假如在每 ⌘ Read more
在現代 Web 開發中,異步編程是不可或缺的一部分。無論是處理用戶輸入、網絡請求還是定時任務,異步編程都能幫助我們更好地構建流暢且高效的用戶體驗。JavaScript 作爲一門主要運行在瀏覽器中的語言,提供了多種方式來實現異步編程,從傳統的回調地獄到 Promise 和 async/await 等現代解決方案。本文將帶你一起探索這些異步編程技巧,瞭解它們背後的技術原理,並通過實際例子展示如何使用它 ⌘ Read more
一、什麼是瀏覽器插件--------------瀏覽器插件是依附於瀏覽器,用來拓展網頁能力的程序。插件具有監聽瀏覽器事件、獲取和修改網頁元素、攔截網絡請求、添加快捷菜單等功能。使用瀏覽器插件可以實現很多有趣的功能。二、瀏覽器插件有哪些種類----------------• 以 chromium 爲內核的瀏覽器插件如 Chrome•firefox 瀏覽器插件•safari 瀏覽器插件 本文只介 ⌘ Read more
朋友歪哥之前關注到了一個關於 Java 方面的比賽,很有意思。由於是開源的,我把項目拉下來試圖學(白)習(嫖)別人的做題思路,在這期間一度讓我產生了一個自我懷疑: 他們寫的 Java 和我會的 Java 是同一個 Java 嗎?不能讓我一個人懷疑,所以這篇文章我打算帶你盤一下這個比賽,並且試圖讓你也產生懷疑。賽題--在 2024 年 1 月 1 日,一個叫做 Gunnar Morling 的 ⌘ Read more
前言--Redis 在我們的日常開發工作中,使用頻率非常高,已經變成了必不可少的技術之一。Redis 的使用場景也很多。比如:保存用戶登錄態,做限流,做分佈式鎖,做緩存提升數據訪問速度等等。那麼問題來了,Redis 的性能要如何優化?爲了提升 Redis 的性能,這篇文章跟大家一起聊聊 Redis 性能優化的 18 招,希望對你會有所幫助。選擇合適的數據結構------------Redis 支持 ⌘ Read more
在 Linux 的世界裏,進程就像生活在城市中的人,它們需要相互溝通來協調行動。而信號機制呢,就像是一種神奇的 “信號彈”,用於進程之間的交流。當一個進程有重要消息要傳達給另一個進程時,就會發射出這樣的 “信號彈”。這就是 Linux 信號機制,它是管理進程間通信的一把 “金鑰匙”,讓我們一起深入瞭解它是如何發揮作用的吧。一、概述----Linux 的信號機制作爲進程間通信的重要方式,發揮着關鍵作 ⌘ Read more
使用 Ansible 工具一鍵部署 Keepalived 服務需求分析----使用 ansible 部署 keepalived 服務的過程中,需要實現:多系統支持 根據不同的系統,自動選擇對應的安裝方式。可通過相關的環境變量結合when實現。源碼安裝 考慮到 rpm 安裝的方式會需要依賴一些基礎環境,以及版本較低,將採用源碼編譯的方式進行安裝。可選版本 爲保證適用更多的應用場景, ⌘ Read more
Nginx 虛擬主機的配置是一個相對複雜但功能強大的過程,它允許在一臺物理服務器上運行多個網站或服務。什麼是 Nginx 虛擬主機呢?以下是 Nginx 虛擬主機配置的詳細步驟及案例分析:一、Nginx 虛擬主機配置概述Nginx 支持三種類型的虛擬主機配置:基於域名的虛擬主機:通過servername指令來區分不同的虛擬主機,適用於外部網站。 基於 IP 的虛擬主機:一塊主機綁定多個 IP ⌘ Read more
建造模式,處理與創建對象及對象實例化過程相關的問題,通常尋求以分離業務代碼和對象創建邏輯,或將複雜的構造邏輯封裝在可重用組件中的方式。現在讓我們逐步瞭解第一種建造模式——工廠模式。問題背景: 設想這樣一種場景,當您想要生產一些產品(產品可以是任何對象),同時不希望將產品綁定到特定的類。我們可以使用工廠來作爲生產者。具體地說,我們不希望顯示寫太多這樣的代碼:var a IProductAvar ⌘ Read more
原文作者: Conor 原文鏈接: https://www.xzhh.top/article/soc 一、SoC 架構圖:核心功能和設計目標SoC 是基於通用處理器這樣的思路進行設計的,與 PC 設計思路一樣。即通用處理器是由 CORE + MEM 兩部分組成,修改軟件來實現不同的功能,電腦還是同一個電腦,硬件組成還都是一樣的。SoC 架構圖四大組成部分:1、核 CORE ⌘ Read more
大家好,我是一安~一、業務背景------在業務系統中,支付功能的實現尤爲關鍵且挑戰重重,尤其是對經驗不足的開發者而言。支付結算邏輯的細微差錯可能導致對賬失誤,引發連鎖反應:錯誤排查耗時巨大,數據不平需調整,甚至可能演變成複雜的賬目混亂,最終不得不依賴人工逐一手動修正。支付場景複雜,涵蓋多維度業務、結算規則及長流程,還需與第三方對接,技術上要求嚴格,涉及事務管理、異步處理、重試策略、併發控制等關鍵 ⌘ Read more
引言--在後端開發中, 守護進程 (Daemon) 是一個非常重要的概念。它是一個在後臺運行的長期存在的進程, 不受終端控制。本文將詳細介紹如何使用 Go 語言實現守護進程, 並探討其中的關鍵技術點。什麼是守護進程?--------守護進程具有以下特徵:在後臺運行 與終端會話無關 通常在系統啓動時啓動, 在系統關閉時關閉 沒有控制終端 作爲服務運行 守護進程的啓 ⌘ Read more
引言在探討 Go 語言中的同步機制時,大多數開發者都熟悉 sync.Mutex 和 sync.RWMutex。然而,還有一個強大但經常被忽視的同步原語:sync.Cond。本文將詳細介紹 sync.Cond,解釋它的工作原理,並通過實際示例說明其應用場景。什麼是 sync.Cond?當一個 goroutine 需要等待一些特定的事情發生時,例如一些共享數據發生變化,它就會 "阻塞",這意味着它只是 ⌘ Read more
什麼是有狀態(Stateful)?想象一下,你去一家忙碌的餐廳喫飯,同一個服務員從頭到尾爲你服務。他會記住你的點單以及所有需求。但是問題來了:如果這個服務員中途休息或換班了,接替他的服務員就不知道你之前點了什麼。這意味着你必須重新開始,和新服務員說明一切。這和有狀態服務器的工作方式很相似。有狀態服務器會記住你的會話信息,比如登錄數據、偏好設置等。但問題是,如果你的下一次請求被另一個服務器處理,那麼 ⌘ Read more
當 Rust 項目規模超過 12 個 crate 時,由於 Rust 的強類型特性,match 會處理所有邊緣情況,因此組織和處理錯誤會變得相當困難。下面介紹一個用於在 Rust 項目中組織和處理錯誤的模式,到目前爲止,它的可擴展性非常好!爲了說明這種模式,我們將以一個單一的模塊化 web 應用程序爲例,該應用程序使用不同的服務來處理業務領域的不同 “有界上下文”。一個全局錯誤類型和多個本地錯誤類 ⌘ Read more
1,背景----本文主要分析 vLLM 分離式架構原理。關於大模型推理分離式架構,一直是今年討論的一個熱點,筆者之前針對該技術也做了一些總結。作爲大模型推理最流行的框架之一,vLLM 功能迭代非常的快。關於 vLLM 的一些個人理解,筆者之前也做了一些總結。當前,vLLM 社區已經有分離式架構的 pr,分別是如下 2 個。本文以第一個爲基礎介紹一下 vLLM 分離式架構簡單實現。1https:// ⌘ Read more
本篇內容是根據 2021 年 10 月份#201 eBPF and Go[1] 音頻錄製內容的整理與翻譯eBPF(已有 7 年曆史)是一個可以在 Linux 內核中運行代碼的沙箱。它最初是一種構建防火牆的技術,隨着時間的推移不斷髮展,包含一系列新功能。本期大家討論了 eBPF 的起源及其工作原理,並深入研究了一些實際用例。雖然 eBPF 程序本身不是用 Go(更像 C)編寫的,但我們將瞭解如何從 ⌘ Read more
什麼是 json schema---------------json schema 是一種用於描述 json 數據結構的語言,它可以用來定義 json 數據的類型、格式、約束等信息。json schema 本身是一個也是 json 數據主要用途----數據校驗 數據結構定義 API 文檔生成 代碼生成 github 地址---------json-schema-spec ⌘ Read more
在分佈式高可用設計中,限流應該是應用最廣泛的技術手段之一,今天一起來討論一下,爲什麼需要限流,以及常見的限流算法都有哪些。一、常見限流算法限流是服務降級的一種手段,顧名思義,通過限制系統的流量,從而實現保護系統的目的。合理的限流配置,需要了解系統的吞吐量,所以,限流一般需要結合容量規劃和壓測來進行。當外部請求接近或者達到系統的最大閾值時,觸發限流,採取其他的手段進行降級,保護系統不被壓垮。常見的降 ⌘ Read more
在 Go 語言開發中,我們經常需要處理 JSON 或 YAML 格式的數據。爲了方便地解析和操作這些數據,通常會定義相應的 Go 結構體與之對應。然而,手動編寫這些結構體定義可能會非常繁瑣,尤其是在處理複雜數據結構時。go-jsonstruct 工具應運而生!它可以幫助我們自動生成 Go 結構體定義,從而節省時間和精力,提高開發效率。本文將深入探討 go-jsonstruct 的功能、使用方法以及 ⌘ Read more
剛進入第三方支付行業時,還是網關模式,也就是直接去銀行扣錢,沒有餘額的概念。過了幾年跳槽到另外一家第三方支付公司,開始有餘額賬戶,有了餘額,就有充值、轉賬、提現,簡稱充轉提,通常意義上的資金產品。可是後來出現了微信支付與支付寶之間的被喻爲 “偷襲珍珠港” 事件:當時支付寶佔了第三方支付的絕大部分份額,號稱“拿着望遠鏡也找不到對手“,結果微信支付在某個春晚打廣告,搖紅包,發紅包,綁卡量井噴式增長。從 ⌘ Read more
ants 是 golang 語言的一個強大的、可靠的池化解決方案庫。ants 是一個高性能的 goroutine 池,實現了對大規模 goroutine 的調度管理、goroutine 複用,允許使用者在開發併發程序的時候限制 goroutine 數量,複用資源,達到更高效執行任務的效果。它可以自動調度海量的 goroutine,複用 goroutine,以及定期清理過期的 goroutine,可 ⌘ Read more
大家好,我是冰河很多好用的 RPC 框架都支持服務消費者以同步、異步和單向調用的方式與服務提供者進行交互,冰河你開發的這個 RPC 框架也可以嗎?一、前言----在前面的章節中,實現了服務消費者屏蔽掉基於 Netty 連接服務提供者的實現細節的前提下,以異步轉同步的方式調用服務提供者。在外部服務調用服務消費者向服務提供者發送數據的方法時,能夠直接獲取到服務提供者調用真實方法返回的結果數據。那 RP ⌘ Read more
想象一下,Linux 系統的網絡世界是一座繁華的城市,數據包就像是川流不息的車輛。但是,這座城市需要交通規則和守護者來維持秩序,避免混亂和危險。Netfilter 就像是這座網絡城市的超級警察和交通指揮中心,它能夠精準地識別哪些 “車輛” 可以通行,哪些需要攔截。現在,就讓我們深入瞭解一下這位網絡世界的 “守護者”——Netfilter 的工作原理和應用吧!一、Netfilter 概述------ ⌘ Read more
攝影:產品經理蜜汁叉燒假設你正在寫後端代碼,其中一個函數的功能是傳入文章 id,返回文章詳情。因爲項目比較大,因此在定義函數時,把類型標註加上,標明瞭參數的類型和返回的類型。例如:from typing import Listfrom dataclasses import dataclass@dataclassclass ArticleDetail: id: int title: st ⌘ Read more
隨着項目開發的迭代,我們寫的接口往往會越來越多,如果都把 API 的路由寫到一個文件裏,那麼整個路由文件就會變得又亂又長,所以我們最好在項目開始階段就給路由的分模塊管理做好規劃。今天這個文章給大家介紹一下 Web 項目 API 路由的分模塊管理,我們的項目使用的是 Gin 框架,但基本上所有的 Web 框架都能按照這個方式來分模塊管理 API 接口的路由。 一些路由管理混亂的例子-------- ⌘ Read more
最近,在跨平臺開發領域得到廣泛認可的框架 Tauri 發佈了 2.0 版本。讓我們仔細看看一些值得注意的更新。Tauri 是一個構建輕量級和快速二進制文件的框架,支持所有主要的桌面平臺 (macOS, Linux, Windows) 和移動平臺(iOS, Android)。開發人員可以將任何前端框架(如 HTML、JavaScript 和 CSS)與用 Rust、Swift 和 Kotlin 等語 ⌘ Read more
在 Go 語言的併發編程中,常常會遇到需要確保某個操作僅執行一次的場景。sync.Once 是 Go 標準庫中的一個簡單而強大的工具,專門用於解決這種需求。本文將深入解析 sync.Once 的使用方法和原理,幫助你更好地理解 sync.Once 在併發控制中的用法。sync.Oncesync.Once 是 Go 語言 sync 包中的一種同步原語。它可以確保一個操作(通常是一個函數)在程序的生命 ⌘ Read more
在 Go 開發中,編譯相關的問題看似簡單,但實則蘊含許多細節。有時,即使是 Go 專家也需要停下來,花時間思考答案或親自驗證。本文將通過幾個具體問題,和大家一起探討 Go 編譯過程中的一些你可能之前未曾關注的細節。 注:本文示例使用的環境爲 Go 1.23.0、Linux Kernel 3.10.0 和 CentOS 7.9。Go 編譯默認採用靜態鏈接還是動態鏈接?--------------- ⌘ Read more
前言--上週去韓國旅遊,在首爾喫美食,坐在咖啡店寫代碼,Coding Anywhere,感覺很棒。期間消費,用的是一張 ZA Bank 的 VISA 卡,幾乎沒怎麼用現金。這張卡里的錢,是我做出海 SaaS 產品一年以來的收入。以前聽別人做跨境電商,做出海 SaaS,可以面向全球用戶收款,當時覺得很羨慕。當自己終於跑通了全球收付款的流程之後,逐漸體會到了這裏面的快樂。在裸辭成爲自由職業者之前,我副 ⌘ Read more
在現代多核處理器中,高效的緩存機制極大地提升了程序性能,而 “僞共享” 問題卻常常導致緩存機制的低效。背景\-\-\-\-\- cacheline 本文中有時又叫做 緩存行在現代多核處理器中,三級緩存通常分爲三級:L1、L2 和 L3,每一級緩存的大小、速度和共享方式都不同:L1 緩存:這是速度最快的緩存,通常每個 CPU 核心都有獨立的 L1 緩存。L1 緩存分爲兩個部分:一個用於存儲指令(L1I),另 ⌘ Read more
有這麼一個需求:新用戶入職 創建一系列賬號比較麻煩,打算通過接口傳入姓名進行初始化。想把姓名轉化成拼音。因爲有些賬號即需要中文也需要英文。下面看看用 Go 語言如何去解決的。要將用戶的姓名轉換爲拼音,可以使用 Go 語言的第三方庫,比如 github.com/mozillazg/go-pinyin,這是一個流行的庫,專門用來將漢字轉換爲拼音。你可以通過它生成拼音格式的英文名稱,用於初始化賬戶時的多 ⌘ Read more