有時候,將配置文件、模板甚至整個前端應用直接嵌入到 Go 二進制文件中,是一種提高應用部署效率和簡化操作的有效方法。自從 Go 1.16 版本起,Go 語言官方引入了 //go:embed 指令,這使得嵌入靜態資源變得異常簡單而直接。本文將詳細介紹如何在你的 Go 應用中使用這一強大的特性。什麼是 go:embed//go:embed 在 Go 1.16 版本中被加入,這也是我接觸 Go 語言的第 ⌘ Read more
有時候,將配置文件、模板甚至整個前端應用直接嵌入到 Go 二進制文件中,是一種提高應用部署效率和簡化操作的有效方法。自從 Go 1.16 版本起,Go 語言官方引入了 //go:embed 指令,這使得嵌入靜態資源變得異常簡單而直接。本文將詳細介紹如何在你的 Go 應用中使用這一強大的特性。什麼是 go:embed//go:embed 在 Go 1.16 版本中被加入,這也是我接觸 Go 語言的第 ⌘ Read more
在使用 Go (Golang) 並將數據編碼爲 JSON 時,您可能會遇到這樣的情況:如果某些字段的值爲空,則需要從編碼輸出中省略這些字段。這就是 Golang 的 omitempty 功能發揮作用的地方。struct 字段標記中的 omitempty 選項會告訴編碼器,如果字段爲空值,則跳過該字段。什麼是 “Empty Value”?在 Go 中,Empty Value 的定義是:布爾類型爲 ⌘ Read more
本文將介紹如何使用 C 和 Golang 編寫第一個 eBPF 程序。我們將在第一部分介紹實際的 eBPF 程序,在第二部分介紹用戶空間應用程序。準備工作本文開發所運行的操作系統是:OS: Ubuntu 22.04Linux Header Version: 6.5.0–14-generic還通過 apt 安裝了一些依賴項:sudo apt-get -y install libbpf bpfcc-t ⌘ Read more
作者:Vipra Singh 編譯:ronghuaiyang 導讀接下來,我們將轉向 RAG 應用的生成部分。在文本生成方面,我們將運用大型語言模型。到此爲止,我們已經瞭解到原始數據是如何被轉化並存入向量數據庫的,隨後再依據用戶的提示從數據庫中檢索出相關的數據片段。這標誌着應用程序檢索部分的工作已經完成。接下來,我們將轉向 RAG 應用的生成部分。在文本生成方面,我們將運用大型語言模型 ⌘ Read more
Rust 中的並行性允許同時執行多個操作,充分利用多核處理器的優勢。Rayon crate 是一個功能強大的數據並行庫,能夠以最少的樣板代碼並行運行任務。我們將構建一個遊戲,其中多個線程競相完成一個任務,用戶可以打賭哪個線程將首先完成。這個遊戲將幫助你瞭解如何在 Rust 中使用 Rayon 庫管理和利用線程。使用以下命令創建一個 Rust 新項目:cargo new threadracegame ⌘ Read more
前言--tcpdump 是我們常用的一個網絡抓包工具,它的功能非常的強大。但是它還缺少一個大家反饋很久卻一直沒實現的一個特性, 那就是:在結果中包含 / 顯示發送網絡請求 / 流量的進程信息,以及支持抓取指定進程的網絡流量。當前針對 tcpdump 抓取的流量信息,如果要獲取對應的進程信息的話,常見的方法是:基於請求的連接信息,通過 ss 或 netstat 之內的工具反查進程信息。這個方法的缺點 ⌘ Read more
各位 Python 愛好者,你是否曾經在某個深夜,被一個看似無辜的文件名嚇到過?它就是神祕的 init.py。你可能會想:“這個文件究竟有啥用?” 今天,我們要揭開它的面紗,帶你走進 Python 模塊的奇妙世界。 目錄 一、什麼是 init.py? 二、init.py 文件的高級用法 三、實際案例:創建一個實用工具包 四、爲什麼 init ⌘ Read more
關係數據庫操作是 Go 應用開發中的重要一環,尤其是 Go Web 應用、微服務等。作爲 Gopher,我們需要了解幾種主流的數據庫訪問和操作方法,以便在項目中做出適當的選擇。我個人在日常開發中較少涉及 CRUD 類應用,因此使用 Go 訪問和操作數據庫的機會並不多,在這方面也算是有一些 “短板”。通過在這篇文章中對數據庫訪問方式進行全面的梳理,我也算是補全一下技能樹,同時也能爲讀者小夥伴提供一些 ⌘ Read more
在 Web 開發領域,Go 語言以其簡潔、高效和強大的併發能力著稱。Templ 和 HTMX 則是與 Go 完美契合的工具,它們分別負責頁面的渲染和交互邏輯,共同打造出現代化的 Web 應用。本文將深入探討 Templ 和 HTMX 的核心概念、使用方法以及如何結合 Go 語言構建出色的 Web 應用。Templ:Go 語言的模板引擎----------------Templ 是 Go 語言自帶的 ⌘ Read more
在當今數字化時代,實時聊天系統已成爲人們日常生活和工作中不可或缺的一部分。設計一個高效、穩定且可擴展的實時聊天系統架構對於提供優質的用戶體驗至關重要。本文將深入探討如何設計一個實時聊天系統的架構,以滿足現代用戶的需求。一、需求分析在設計實時聊天系統之前,我們首先要明確系統的需求。一個基本的實時聊天系統應支持以下功能:用戶註冊與登錄:允許用戶創建賬戶並登錄系統。 好友管理:用戶可以添加、刪除和 ⌘ Read more
大家好,我是 mikechen。Redis 現在是大型架構的必備技能,也是大廠重點考察對象,下面我就全面來詳解 Redis 的高性能架構 @mikechenIO 多路複用技術Redis 的高性能,有功於其使用的 IO 多路複用技術(IO multiplexing)。IO 多路複用是一種 IO 模型,它使單個線程可以監視多個文件描述符(如:網絡套接字)。這種機制避免了爲每個連接創建一個線程或進程的開 ⌘ Read more
今天來聊一聊 Redis,主要是聊一些在 Go 項目中使用 go-redis 代碼上的一些建議。在上代碼之前我還是要廢話幾句,在大家開發需求用到 Redis 時一定要多想個兩分鐘 "我是不是把 Redis 當數據庫用了?" 因爲數據在數據庫和 Redis 裏存兩份就就得考慮它們的一致性怎麼維護,賊麻煩,而這個一致性不做上線後還經常會出 BUG,所以不是必要我一般不用 Redis。需要過期的數據肯定 ⌘ Read more
曾經流傳已久的簡單美的架構思想已經被到處卷的現代 IT 給拋棄了。系統變得越來越大,分系統越來越多,架構越來與複雜,出現問題排查越來越難。那麼迴歸簡單不好麼?關鍵是怎麼實現成了一個問題,今天我們就介紹一個以 Postgres 爲基礎的,簡化堆棧、減少移動部件、加快開發速度、降低風險並的方法,那就是 “用 Postgres 取代一切”!這種方法特別適合一些剛剛開始的初創公司和還在探索優化架構的那些組 ⌘ Read more
作者:Vipra Singh 編譯:ronghuaiyang 導讀在系列博客中,我們通過檢索增強生成(RAG)應用的視角來學習大規模語言模型(LLM)。 讓我們開始在 RAG 應用程序中探索尋找相關數據的旅程。當用戶輸入查詢時,過程包括對用戶查詢進行分詞,並使用與嵌入原始數據相同的模型進行嵌入。接着,根據與用戶查詢的相似度,從知識庫中提取相關的信息塊。本篇博客將全面深入地探討搜索過程 ⌘ Read more
本文作者系 360 奇舞團前端開發工程師JSSDK 的定義與分類什麼是 JSSDKSDK 是Software Development Kit(軟件開發工具包)的縮寫,JSSDK是爲了幫助前端實現特定需求,而向開發者暴露的一些JS-API的集合,開發者可以通過它在網頁中集成和使用某些特定的功能,例如社交分享、地圖服務、支付功能等. 它通常包括一下模塊:JavaScript庫:這是 JSSDK 的核心 ⌘ Read more
根據一項加密庫漏洞的實證研究,加密庫中 37.2% 的漏洞是內存安全問題,而只有 27.2% 是加密問題。現在是時候不再使用 C 作爲實現加密庫的實際語言了。由於 Rust 的高級特性與底層控制,沒有垃圾收集器,可移植性和易於嵌入,Rust 是我們取代當今最常用的加密庫的最佳選擇。OpenSSL, BoringSSL 和 libsodium,它們都是用 C 編寫的。2024 年,Rust 的加密生 ⌘ Read more
在現代工業自動化和物聯網 (IoT) 領域,通信協議的重要性不言而喻。Modbus 和 MQTT 作爲兩種主流的通信協議,廣泛應用於設備之間的數據交換。今天,亞倫給大家推薦一款集成了這兩種協議的通信調試工具——Wu.CommTool。Wu.CommTool 是一款專爲 Windows 系統設計的通信工具,它不僅支持 Modbus RTU 協議,還集成了 MQTT 服務器和客戶端的功能。這款工具 ⌘ Read more
寫在前面Kafka、RocketMQ 都是很出名的中間件,上次我們講解了 Kafka,這次我們來講講 RocketMQ 的原理。基本架構圖解析RocketMQ 總共可以分成四個模塊NameServer:提供服務發現和路由功能,管理各種元數據信息。 Broker:消息存儲和路由分發節點,負責存儲消息和將消息路由給消費者。 Producer:消息生產者,負責產生併發送消息到指定的 Topi ⌘ Read more
1、引言 在大數據和實時流處理的領域,Apache Kafka 憑藉其高性能、高吞吐量和可擴展性,成爲了業界廣泛使用的分佈式消息隊列系統。然而,在諸多應用場景中,消息的順序性往往是一個至關重要的需求。無論是金融交易、日誌記錄還是其他需要精確時間線的業務場景,消息的順序消費都顯得尤爲關鍵。 Kafka 如何保證消息的順序消費,是許多開發者和架構師關心的問題。從根本上說,Kafka 通過其 ⌘ Read more
背景 當我們把 AI 大模型視作人的大腦時,調用 A 大模型就如同調用一個人的智慧。將 AI 大模型人格化,意味着它應該能夠理解人類的語言(懂人話)、用人類的語言進行表達(說人話),並直接給出結果。然而,重要的是要認識到,儘管 AI 大模型可以提供快速的答案,但這些結果並不總是完全準確。 在 AI 大模型的推理基礎上,我們採用了多種技術手段來實現真正的 AGI(通用人工智能 ⌘ Read more
前言--在 Go 語言中,錯誤處理是一個重要的部分。Go 官方提供了一個輕量級的 errors 標準庫,用於創建和處理錯誤。本文將介紹如何使用 Go 的 errors 標準庫,並深入解析其源碼實現。準備好了嗎?準備一杯你最喜歡的咖啡或茶,隨着本文一探究竟吧。 Go 版本:1.22.0error 接口--------下面的內容會提到 error 接口,因此我們有必要先了解一下 error 接口的相 ⌘ Read more
在 Go 語言中,實現 Base64 和 Base58 編碼與解碼是非常常見的任務。Go 標準庫中已經包含了 Base64 的編碼與解碼函數,而 Base58 需要使用第三方庫來實現。下面分別介紹 Base64 和 Base58 編碼與解碼的實現方法。Base64 編碼與解碼Go 標準庫的encoding/base64包提供了 Base64 編碼與解碼的功能。示例代碼package mainimp ⌘ Read more
作者:Vipra Singh 編譯:ronghuaiyang 導讀在系列博客中,我們通過檢索增強生成(RAG)應用的視角來學習大規模語言模型(LLM)。引言在之前的博文中,我們已經討論到將原始數據嵌入爲向量的內容。爲了重複利用嵌入的信息,我們需要存儲這些嵌入,以便按需訪問。爲此,我們使用一種特殊的數據庫,即向量數據庫。對於使用檢索增強生成(RAG)的大規模應用來說,高效存儲和檢索向量的 ⌘ Read more
作者:Vipra Singh 編譯:ronghuaiyang 導讀通過檢索增強生成(RAG)應用的視角來學習大型語言模型(LLM)。在前幾篇博文中,我們學習了面向 RAG 的數據準備,這包括數據攝入、數據預處理及分塊。由於在執行 RAG 期間需要搜索相關的上下文分塊,我們必須將數據從文本格式轉換爲向量嵌入。因此,我們將探索使用 Sentence Transformers 來轉換文本的最 ⌘ Read more
在前端開發中,隨着項目迭代升級,日誌打印逐漸風格不一,合理的日誌輸出是監控應用狀態、調試代碼和跟蹤用戶行爲的重要手段。一個好的日誌系統能夠幫助開發者快速定位問題,提高開發效率。本文將介紹如何在前端項目中制定日誌輸出規範。1\\. 日誌等級首先,我們需要定義不同的日誌等級,以便根據消息的重要性進行分類。通常,日誌等級從低到高可以分爲以下幾類:DEBUG: 詳細的開發時信息,用於調試應用。 INFO ⌘ Read more
在 Go 1.23 版本中,標準庫 os 包引入了一個名爲 CopyFS 的新函數,它提供了一種僅使用標準庫函數即可複製目錄的便捷方法。從此,開發者無需再依賴第三方庫來完成這項常見任務。本文將深入探討 os.CopyFS 函數的功能、用法以及其帶來的優勢。告別第三方庫------在 os.CopyFS 出現之前,Go 開發者通常需要藉助第三方庫(如 github.com/otiai10/copy) ⌘ Read more
Gaby 是一個實驗性的新機器人, 在 Go 問題跟蹤器中以 @gabyhelp\n 的身份運行, 試圖自動化各種機器可以合理完成的瑣碎事務, 同時也試圖發現機器可以合理完成的新事物。gaby 這個名字是 "Go AI Bot" 的縮寫, 因爲這個實驗的目的之一是瞭解 LLM 可以有效用於哪些方面, 包括識別它們不應該用於哪些方面。一些 gaby 功能將涉及 LLM; 其他功能則不會。指導原則是 ⌘ Read more
概述--閱讀本文前,需要熟悉 NAT 實現原理,因爲內網穿透的核心原理之一,就是需要能夠穿透 NAT 網絡設備,如果讀者還不瞭解 NAT, 可以先閱讀 這篇文章 \n。本文以 P2P 網絡場景爲例來講解內網穿透原理,讀者也可以帶入其他應用場景,例如遠程協助工具、遠程會議工具。內網穿透 (打洞)在大多數的情況下,參與 P2P 網絡的設備位於使用 NAT 設備後面,這導致這些設備無法直接通過公共互聯 ⌘ Read more
大規模語言模型(LLMs)已經成爲我們生活和工作的一部分,它們以驚人的多功能性和智能化改變了我們與信息的互動方式。然而,儘管它們的能力令人印象深刻,但它們並非無懈可擊。這些模型可能會產生誤導性的 “幻覺”,依賴的信息可能過時,處理特定知識時效率不高,缺乏專業領域的深度洞察,同時在推理能力上也有所欠缺。在現實世界的應用中,數據需要不斷更新以反映最新的發展,生成的內容必須是透明可追溯的,以便控制成本並 ⌘ Read more
人工智能領域的權威吳恩達教授,在其創立的《The Batch》週報中發表了一篇博文,概述了機器學習領域六種基礎算法的歷史和重要性。他強調了在這一領域不斷學習和更新知識的必要性。這些算法包括線性迴歸、邏輯迴歸、梯度下降、神經網絡、決策樹和 k 均值聚類算法,它們是機器學習進步的基石。本文將進一步探討這些算法的背景、原理、優缺點及應用場景。線性迴歸背景:線性迴歸是最古老也是最簡單的迴歸算法之一,其歷史 ⌘ Read more
引言在做 MQ 技術選型的時候,Kafka 和 RocketMQ 是常用的兩個消息隊列中間件,今天就從架構設計、性能分析、使用場景來比較一下兩者的區別,到底該使用哪個 MQ?Kafka 最初由 LinkedIn 開發,後來成爲 Apache 的一個頂級項目,它設計之初就是爲處理大規模數據而生,特別擅長於高吞吐量的場景。Kafka 廣泛應用於日誌收集、流式處理、事件驅動架構等多種場景,被許多知名企業 ⌘ Read more
導語Apache Pulsar 是一個多租戶、高性能的服務間消息傳輸解決方案,支持多租戶、低延時、讀寫分離、跨地域複製(GEO replication)、快速擴容、靈活容錯等特性。Pulsar 存儲層依託於 BookKeeper 組件,所以本文簡單探討一下 BookKeeper(下文簡稱 BK) 的一致性協議是如何實現的。背景Pulsar 相對於 Kafka 根本的區別在於數據一致性協議,這也是爲 ⌘ Read more
大家好,我是漁夫子。今天給大家推薦的開源工具是 freeze,該工具可以將源代碼或終端中的輸出內容轉換成對應的圖片。如下圖效果:比如,我們想把一個 go 語言編寫的源代碼 main.go 轉換成圖片,則可以按如下方式操作:freeze main.go --output main.png生成的效果如下:你看,就把對應的代碼按照高亮的形式生成了圖片。實現原理那這個 freeze 的實現原理是什麼呢?通 ⌘ Read more
在現代應用開發中,實時數據處理扮演着至關重要的角色。實時監控數據庫變化,並對這些變化做出迅速響應,是許多應用場景(如實時數據分析、緩存更新、事件驅動架構等)的核心需求。Flash 正是這樣一款應運而生的 Go 語言庫,它爲開發者提供了便捷高效的方式來管理 PostgreSQL 數據庫的實時變化。Flash 簡介--------Flash 是一款輕量級的 Go 語言庫,它利用事件管理機制,實現了對 ⌘ Read more
1 介紹本文對大型語言模型的壓縮和效率推理進行了綜述。大型語言模型基於 Transformer 架構,具有強大的性能,但也帶來了巨大的內存和計算成本。本文從算法角度對大型語言模型的壓縮和效率推理方法進行了分類,包括量化、剪枝、知識蒸餾、緊湊架構設計和動態網絡。大型語言模型有兩個顯著特點:(1)大多數壓縮算法需要在壓縮後對模型進行微調和甚至重新訓練,而大型模型的微調和訓練成本非常高。因此,許多算法 ⌘ Read more
作者:Vipra Singh 編譯:ronghuaiyang 導讀在系列博客中,我們通過檢索增強生成(RAG)應用的視角來學習大規模語言模型(LLM)。檢索增強生成(RAG)的數據準備工作流在上一篇文章中,我們深入探討了檢索增強生成(Retrieval Augmented Generation, RAG)的流程,全面理解了它的各個組成部分。任何機器學習應用的初始階段都涉及數據準備。這包 ⌘ Read more
大模型 RAG 的難題是什麼? RAG 或者 Fine-tuning 微調作爲大模型的增強技術,最核心的技術在於如何把企業的私有數據清洗轉換成知識,企業中能夠第一時間拿到的私有數據,往往是異構的、數據質量參差不齊,通過數據工程把數據變成知識就不是一件很容易的事兒。OmniParse 正是爲此而生的利器!它將任何非結構化數據轉換爲結構化知識。Github 地址:https://github.com ⌘ Read more
一、前言----事實表 作爲數據倉庫維度建模的核心,緊緊圍繞着 業務過程 來設計,通過獲取描述業務過程的度量來表達業務過程,包含了引用的維度和與業務過程有關的度量。事實表中一條記錄所表達的業務細節程度被稱爲 粒度。通常粒度可以通過兩種方式來表述:一種是維度屬性組合所表示的細節程度;一種是所表示的具體業務含義。基於某個業務過程,需要創建事務事實表,需要填寫的信息遵循如下規範建議:英文名:我們預設定了 ⌘ Read more
前言-----最近在搞一個鑑權認證服務器,其中有個問題就是 token 的無感刷新。Token 無感刷新是一種在用戶不感知的情況下自動更新訪問令牌(Token)的機制,以維持用戶的登錄狀態。一般是使用一個短期的 token 來做權限認證,而更長時間的refreshToken來做短 token 的刷新,而在實現的過程中就有各種問題出來比如:Q1: 是要在服務器端實現還是能在客戶端實現? Q2: ⌘ Read more
IO 多路複用在 Linux 上還有一種 poll 的實現方案,其實 poll 和 select 一樣,它們都是函數,但是 poll 針對 select 的底層使用的 bit 數組的文件描述符列表做了優化,下面分析 poll 的原理。 1、認識 poll 函數poll 的原型函數如下所示: struct pollfd myfd\n; int poll(struct pollf ⌘ Read more
在這篇文章中,我們將看到 Web 開發的不同部分如何在 Rust HTTP 生態系統中組合在一起,這樣你就可以無所畏懼地在 Rust 中啓動你的下一個 (微)web 服務,並享受所有附帶的好處 (枚舉、一流的錯誤處理、無與倫比的可靠性、性能等等)。Actix-web vs AxumRust HTTP 框架有兩個主要框架:acitx-web 和 axum。兩者之間的主要區別在於,actix-web ⌘ Read more
開源數據庫是現代軟件開發中的關鍵組成部分,提供了強大、可擴展和靈活的數據存儲和管理解決方案。以下是十個流行的開源數據庫的詳細概述,突出其主要特點和使用場景。01 MySQL--------特性:關係數據庫管理系統 (RDBMS):MySQL 使用結構化查詢語言 (SQL) 進行數據訪問和管理。 ACID 合規性:確保原子性、一致性、隔離性和持久性的可靠事務。 跨平臺支持:運行於多種操作 ⌘ Read more
在 Go 語言的世界裏,io.Reader 和 io.Writer 接口是數據流處理的基石。然而,標準庫並沒有提供一種便捷的方式來追蹤通過這些接口傳輸的字節數。metered-io 庫應運而生,它提供了 io.Reader 和 io.Writer 的替代品,並能夠方便地獲取傳輸的字節總數,爲性能度量和監控提供了強大的支持。metered-io 庫簡介--------------metered-io ⌘ Read more
要在 HTML 中使用 SVG 圖像,可以通過 img 標籤或直接在 HTML 中嵌入 SVG 代碼的方式來實現。以下是使用 img 標籤的方法:!-- 使用 ⌘ Read more
作者:Vipra Singh 編譯:ronghuaiyang 導讀在系列博客中,我們通過檢索增強生成(RAG)應用的視角來學習大規模語言模型(LLM)。即使是一個簡單的檢索增強生成(RAG)應用也涉及到調整衆多不同的參數、組件和模型在我最近對語言模型(LLM)應用的探索中,我被檢索增強生成(RAG)所扮演的重要角色深深吸引。從概念構想到雲上部署,全面理解端到端的 RAG 架構是一項相當 ⌘ Read more
在篇文章中,我們使用 memory-stats crate 來報告和分析 Rust 進程使用了多少內存,它依賴於操作系統的內存計算。使用以下命令創建一個 Rust 新項目:cargo new memory-stats-example加入以下依賴項:\nmemory-stats = { version = "1.1.0", features = ["alwaysusestat ⌘ [Read more](https://www.readfog.com/a/1740017186102153216)
普通登錄提到單點登錄,首先可以想到傳統登錄,通過登錄頁面根據用戶名查詢用戶信息,判斷密碼是否正確,正確則將用戶信息寫到 session,訪問的時候通過從 session 中獲取用戶信息,判斷是否已登錄,登錄則允許訪問。普通登錄的缺點由於 session 不能共享,服務越來越多,並且還服務還搭建集羣,導致每訪問另外一個服務都需要重新登錄。單點登錄單點登錄有個簡稱是 sso,它是一個功能可以控制多個有 ⌘ Read more
前段時間在內網 Rust 羣看到同事分享的一篇關於 Rust 生命週期的文章,個人覺得很適合筆者這一類 Rust 初學人羣,利用週末翻譯記錄一下。 原文地址: https://corrode.dev/blog/lifetimes/很多人提到 Rust 很難學的時候,他們大多數都會提到 Rust 的生命週期。然而,在開發了七年 Rust 代碼之後,我 (原文作者,後面同) 可能 95% 的 ⌘ Read more
在 rust 中,我們從引用借用的規則中知道有不可變 (共享) 引用和可變 (獨佔) 引用。如果我們有一個共享引用,我們可以想要多少就有多少。這是因爲這些引用不允許我們改變它們指向的值,所以同時有多個引用是可以的。可變引用則不然,顧名思義,可變引用允許我們改變它們所指向的值。所以在這種情況下,對值有多個引用是不行的。例如,考慮兩個線程,其中每個線程都持有一個獨佔引用並同時更改其值。線程運行後的值應 ⌘ Read more
作者簡介 Liang,攜程技術專家,專注系統性能、穩定性、承載能力和交易質量,在技術架構演進、高併發等領域有豐富的實踐經驗。本文概述了攜程門票預訂交易系統在應對秒殺活動中面臨的挑戰與應對策略。第一部分闡述了業務激增對系統架構的考驗;第二部分深入剖析了系統架構的優化路徑,涵蓋讀熱點、寫入性能瓶頸、強一致性事務處理及流量精細化控制等關鍵問題的解決方案,並總結了確保系統高可用性與持續性的治理措施。希望 ⌘ Read more
背景介紹--------在開發中,爲了進行耗時優化,基礎庫這層按照慣例使用 tcmalloc 替代 glibc 標配的 ptmalloc 做優化,CPU 消耗和耗時確實有所降低。但在晚上高峯時期,在 CPU 剛剛超過 50% 之後卻出現了指數上升,服務在幾分鐘之內不可用。最終定位到是 tcmalloc 在內存分配的時候使用自旋鎖,在鎖衝突嚴重的時候導致 CPU 飆升。爲了弄清楚 tcmalloc ⌘ Read more
GDB(GNU 調試器)是一個功能強大的開源調試工具,用於幫助程序員分析和調試 C、C++ 等編程語言的代碼。它可以在運行過程中檢查程序狀態,設置斷點以停止程序執行並觀察變量值、內存狀態等,並提供一系列命令和功能來輔助調試過程。GDB 可以與不同編譯器和操作系統配合使用,支持多種調試特性,如單步執行、條件斷點、查看堆棧信息、監視變量值、內存泄漏檢測等。通過 GDB,開發者能夠深入理解程序運行時的細 ⌘ Read more
寫在文章開頭------go語言對於網絡抽象做了非常通用且高性能的封裝,所以就從net包源碼入手介紹一下go語言對於socket的抽象。Hi,我是 sharkChili ,是個不斷在硬核技術上作死的 java coder ,是 CSDN 的博客專家 ,也是開源項目 Java Guide 的維護者之一,熟悉 Java 也會一點 Go ,偶爾也會在 C 源碼 邊緣徘徊。寫過很多有意思的技術博客,也還在 ⌘ Read more
前言:雖然之前一直聽說過 ftrace,但從來沒將它用在實戰中,在一次客戶排查問題中,遇到了比較奇怪的現象,一位精通內核的朋友建議使用 ftrace 來定位一下。雖然那一次並沒有使用 ftrace,但也讓我覺得,後面我們勢必要提供 ftrace 相關的工具幫助我們在線上定位問題,所以自己也決定重新學習使用下 ftrace,當然也決定寫一系列的相關出來,這裏就先簡單介紹下 ftrace。一、什麼是 ⌘ Read more
gRPC 的重連機制是確保客戶端在連接斷開後能夠自動重新連接到服務器的一種機制,對於分佈式系統和微服務架構中的高可用性和容錯性至關重要。什麼是 gRPC 重連機制-------------gRPC 重連機制是指在客戶端與服務器之間的連接斷開後,客戶端自動嘗試重新建立連接的過程。gRPC 的重連機制依賴於底層的傳輸層實現(如 HTTP/2)和客戶端庫的配置。gRPC 重連策略---------gRP ⌘ Read more
你是否也有這樣的困擾:打開 APP 巨耗時、刷劇一直在緩衝、追熱搜打不開頁面、信號稍微差點就直接加載失敗……如果有一個協議能讓你的上網速度,在不需要任何修改的情況下就能提升 20%,特別是網絡差的環境下能夠提升 30% 以上;如果有一個協議可以讓你在 WiFi 和蜂窩數據切換時,網絡完全不斷開、直播不卡頓、視頻不緩衝;你願意去了解一下它嗎?它就是 QUIC 協議。本文將從 QUIC 的背景、原理、 ⌘ Read more
導語北極星是騰訊開源的一款服務治理平臺,用來解決分佈式和微服務架構中的服務管理、流量管理、配置管理、故障容錯和可觀測性問題。在分佈式和微服務架構的治理領域,目前國內比較流行的還包括 Spring Cloud,Apache Dubbo 等。在 Kubernetes 的技術領域,也有以 Istio 爲代表的 ServiceMesh 技術。本篇 Blog 主要分析北極星的優勢,及其服務註冊發現的技術實現 ⌘ Read more
Linux 上提供了 IO 多路複用機制的實現有多種,常見的有 select、poll、epoll,下面分析一下 select 的多路複用的原理。 服務器端有 1 個監聽文件描述符和若干個通信文件描述符,每當服務器端建立一個新的連接後就會生成一個通信的文件描述符,如下圖所示: select 可以同時檢測讀緩衝區(Read buffer)、寫緩衝區(Write buffer) ⌘ Read more
本文翻譯自:What’s false sharing and how to solve it (using Golang as example)譯文在解釋僞共享(false sharing)之前,有必要簡要介紹一下 CPU 架構中緩存是如何工作的。CPU 緩存中的最小單位是緩存行(cache line)(如今,CPU 中常見的緩存行大小爲 64 字節)。因此,當 CPU 從內存讀取一個變量時, ⌘ Read more
不知道你是否有遇到過需要解析 binlog 日誌的場景。今天我整理了一些對 binlog 解析的解決方案,供大家參考下。 基於 Canal 的實時訂閱一般業內對 binlog 進行實時監聽最常用的中間件會是 canal。canal 其實本質底層是制定了一個僞造的 MySQL 的 Slave 節點,接收 MySQL 主節點發送過來的 binlog 文件。只需要我們引入相關的依賴,然後部署一套 Ca ⌘ Read more
大家好,我是小寒。今天給大家分享自然語言處理中常用的一個知識點,word2vecword2vec 是一種廣泛用於自然語言處理的技術,主要目的是將單詞轉換爲詞向量(將單詞表示爲數字向量)。這些詞向量能夠反映不同詞語的相似性,使得語義上或語法上相近的詞語在向量空間中也相互接近。如下圖所示,從 “man” 到 “woman” 的向量與從 “king” 到 “queen” 的向量在向量空間中是平行的。這表 ⌘ Read more
大家好,我是君哥。Kafka 高水位(簡稱 HW)是 Kafka 中非常重要的一個概念,今天來聊一聊 HW。1 HW 簡介-------HW 是 Kafka 中 Offset 的一個值,HW 作爲一個邊界,Offset 小於 HW 的消息被稱爲已提交消息,這部分消息可以被消費者進行拉取消費,大於等於 HW 的消息被稱爲未提交消息,不能被消費者拉取。如下圖:Offset 小於 108 的消息可以被消 ⌘ Read more
Netflix 的目標是讓用戶儘可能長時間地觀看流媒體。但用戶的注意力通常只有 90 秒。Netflix 使用 EVCache(分佈式鍵值存儲)來減少延遲,以免用戶失去興趣。EVCache 在 Netflix 有多種使用情況。01 側緩存 (Lookaside Cache)------------------------當應用程序需要某些數據時,它會首先嚐試使用 EVCache 客戶端,如果緩存中 ⌘ Read more
AI Agent:探索 AGI 的真實形態什麼是 AI AgentAI Agent(人工智能代理)是一種能夠感知環境、進行決策和執行動作的智能實體。不同於傳統 的人工智能,AI Agent 具備通過獨立思考、調用工具去逐步完成給定目標的能力。比如,告訴 AI Agent 幫忙下單一份外賣,它就可以直接調用 APP 選擇外賣,再調用支付程序下單支付,無需人 類去指定每一步的操作。Agent 的概念由 ⌘ Read more
簡介--布隆濾波器 BloomFilter 是一種常用的「使用少量字節數判斷鍵值存在性」的手段。其大致原理爲:使用多個哈希函數,對同一個鍵值做哈希運行,並將其哈希值取模設置比特數值。當給定一個鍵值時,如果計算上述多個哈希函數,存在一個哈希值對應的比特位爲零,則說明該鍵值不存在。從上可以發現,BloomFilter 常用於判斷鍵的不存在性。由於哈希碰撞的原因,可能存在假陽性 (False Posit ⌘ Read more
在前一篇的《圖解支付賬務系統入門》中,講解了賬務相關的一些基礎概念和關鍵模塊的設計要點。今天繼續深入講解支付賬務系統的設計,部分內容和入門篇有重複。進入正題前,先講個小故事。在入門篇中有說到,老闆把賬務系統也劃到我這裏管理,我只得被迫學習賬務知識。某日的下午,窗外驕陽如烈火,我端着一杯咖啡正襟危坐,正式開始學習賬務相關知識。首先映入眼簾的是賬戶、科目、會計分錄,翻了幾遍,還是雲裏霧裏,於是去找做賬 ⌘ Read more
引言--Go 的泛型功能在 Go 1.18 版本中發佈, 至今已有兩年多了。我們正在使用 Go 開發 Dolt\n , 這是世界上第一個支持版本控制的 SQL 數據庫。儘管我們有數十萬行 Go 代碼, 但我們並沒有大量使用泛型。我們在一些地方使用泛型 來加速代碼中的高流量部分 \n , 但總的來說, 除了 slices\n 和 maps\n 包中的一些有用的庫方法外, 我們還沒有找到使用泛 ⌘ Read more
cookie 的背景---------- HTTP 協議是無狀態的 一個用戶第二次請求和一個新用戶第一次請求 服務端是識別不出來的,cookie 是爲了讓服務端記住客戶端而被設計的。cookie 是一種存儲方式--------------Cookie 是存儲在用戶 web 瀏覽器中的小塊數據一般不超過 4k,它一般用於存儲用戶身份信息。 Cookie 是由服務端設置在瀏覽器上的 Cookie ⌘ Read more
大家好,我是小風哥,今天簡單聊聊字符串匹配 kmp 算法。字符串匹配是計算機科學中非常基礎的操作,給定兩個字符串 a 和 b,我們需要判斷字符串 a 是否包含字符串 b。像你我這樣的普通程序員能想到的最簡單方法是這樣的,用字符串 b 不斷去匹配每個主串中的子串。 假設給定這樣兩個字符串:首先從主串的第一個位置和子串的第一個位置去匹配,我們發現 A 和 B 不相同:因此主串指針後移一位,子串重新從 ⌘ Read more
主要技術棧-----Vue3.4 Typescript Vite4 Pinia Vue-Router Less 主要插件----Axios 網絡請求庫 mitt 事件總線 dayjs 時間處理工具 vue-i18n 國際化 lodash 實用工具庫 js-base64 Base64 加密解密工具 localforage Ind ⌘ Read more
概述\\-\\- ARP(Address Resolution Protocol,地址解析協議)是用來將 IP 地址解析爲 MAC 地址的協議。主機 (客戶端) 和三層網絡設備 (例如路由器,三層交換機) 上會維護一張 ARP 表,用於存儲 IP 地址和 MAC 地址的映射關係,每一個表項表示一個 IP 地址到 MAC 地址的轉換關係。工作層次第一種看法ARP 屬於二層協議,工作在數據鏈路層,因爲 AR ⌘ Read more
爲什麼冪等性是關鍵?在現代分佈式系統中,可用性是關鍵因素,這意味着你需要構建重試機制和處理失敗及恢復的方法。這也意味着你可能會在系統中重複處理相同的操作,但如果你的應用程序不瞭解這一點,並將其視爲一個全新的請求,它將產生不可預期的結果。如果是處理支付或管理電子商務訂單的應用程序,這會導致巨大的財務損失和不可挽回的損害。 那麼,我們該怎麼做才能保證多次執行操作的結果與僅執行一次的結果相同呢? 讓 ⌘ Read more
ARM32 位系統的內存佈局圖---------------32 位操作系統的內存佈局很經典,很多書籍都是以 32 位系統爲例子去講解的。32 位的系統可訪問的地址空間爲 4GB,用戶空間爲 1GB ~ 3GB,內核空間爲 3GB ~ 4GB。爲什麼要劃分爲用戶空間和內核空間呢?一般處理器會把運行模式分爲好幾個,比如 x86 分爲 rang0 ~ rang3 級別。ARMv7 架構中,又分爲好幾個 ⌘ Read more~
CI/CD 是現代軟件開發流程中的關鍵實踐,它代表着持續集成(Continuous Integration)和持續部署(Continuous Deployment)或持續交付(Continuous Delivery)的組合。這些實踐旨在幫助軟件開發團隊更快、更頻繁地交付高質量的軟件產品。持續集成(CI): 持續集成是一種軟件開發實踐,開發團隊成員經常將他們的代碼變更集成到共享的代碼倉庫中。這通常每 ⌘ Read more
在軟件開發過程中,合理處理配置項對於確保代碼的靈活性和可維護性至關重要。對於 Go 語言開發者們來說,aconfig庫提供了一個簡潔明瞭的解決方案來加載配置。本文將深入探討aconfig庫的特性和使用方法,向您展示如何高效地在 Go 項目中使用這個強大的配置加載工具。aconfig 的理念與特點--------------aconfig是由開源社區提供的一個配置加載庫,它的設計理念基於實現配置加載 ⌘ Read more
在 Web 開發中,Cookie 是一種非常常見的數據存儲形式。它可以幫助我們在客戶端和服務器之間保存一些狀態,如用戶的登錄狀態、偏好設置等。在 Go 語言中,操作 Cookie 有很多種方式,今天我們重點介紹一個名爲 cookie 的庫——這是一個可以使用結構體操作 Cookie 的庫。文章將詳細介紹 cookie 庫的使用方法、實際場景中的應用以及提供豐富的示例代碼。希望通過這篇文章,你能夠更 ⌘ Read more
在當今的人工智能(AI)領域,Embedding 是一個不可或缺的概念。如果你沒有深入理解過 Embedding,那麼就無法真正掌握 AI 的精髓。接下來,我們將深入探討 Embedding 的基本概念。Embedding 的基本概念 1.1 什麼是 Embedding Embedding 是一種將高維數據映射到低維空間的技術。簡單來說,它就是把複雜的、難以處理的數據轉換成便於計算的形式。 ⌘ Read more
多態(Polymorphism),英文單詞來源自希臘語,"poly" 意爲 "多","morph" 意爲 "形態",也就是 “多形態” 的意思,翻譯爲 “多態” 也比較貼切。遙想當年初學 Java 時,那時的我對 Polymorphism 還是相當困惑,爲何是多種形態?到底是什麼意思,因爲中文語境裏面並不存在 “多態” 這個詞。我打算以我的理解方式,白話一下 “多態” 一詞。函數(方法)尋址--- ⌘ Read more
1、發起 GET 請求-----------使用net/http 可以很容易發起 get 請求package mainimport ( "fmt" "io" "net/http")func main() { resp, := http.Get("https://httpbin.org/get") defer resp.Body.Close() body, : ⌘ Read more=
在現代的應用程序開發中,緩存是提高性能和擴展性的關鍵技術之一。在 Go 語言的生態系統中,有許多優秀的緩存庫,其中之一便是go-cache。本文將詳細介紹go-cache庫及其使用方法,旨在幫助開發者更好地利用緩存提高應用程序的性能。什麼是 go-cache?-------------go-cache是一個靈活的多層緩存庫,設計用於處理內存緩存和共享緩存。它採用了 Cache-Aside(旁路緩存 ⌘ Read more
REST(Representational State Transfer)是 Web 服務中廣泛使用的一種架構風格,其核心思想是使用 HTTP 協議出色地創建、讀取、更新和刪除(CRUD)資源。作爲一種靜態類型、編譯型語言,Go 在構建高效、可靠的 Web 服務時具有顯著優勢。使用 Go 語言構建 REST API 服務需要我們從多個方面入手,包括項目結構、框架選擇、數據庫操作、路由設計等。以下將 ⌘ Read more
寫在正文之前閱讀本文之前我們來先熟悉以下的代碼原則,如果你已經很熟悉這些內容,可以直接跳到正文。接口隔離原則:絕不能強迫客戶實現其不使用的接口,也不能強迫客戶依賴其不使用的方法。 多態性:代碼變化會根據接收到的具體數據改變其行爲。 里氏替換原則:如果你的代碼依賴於一個抽象概念,那麼一個實現可以被另一個實現所替代,而無需更改你的代碼。 抽象的目的不是爲了含糊不清,而是爲了創造一 ⌘ Read more
使用 Rust 執行env操作, 獲取到相應內容後進行相應處理, 是最直觀的方式. 但是也有第三方庫, 已經對此做了封裝. dotenv\n 這個 crate 是不錯的選擇, 迄今已有 1700 多萬次下載. 但看其 github\n 已經有數年沒有更新 (大概比較基礎, 基本功能實現後沒什麼好更新的了吧...) 使用 cargo init read-env cd read-env ⌘ Read more
Vue.js 是一個流行的 JavaScript 框架,用於構建用戶界面和單頁應用程序。它以簡潔、易用和高效而著稱,使得開發者能夠快速上手並開發出功能豐富的 Web 應用。本文將帶你走進 Vue 的世界,從基礎知識到實踐應用,一步步引導你掌握 Vue 的核心概念和開發技巧。一、Vue 簡介Vue.js(通常簡稱爲 Vue)是一個用於構建用戶界面的漸進式 JavaScript 框架。與其他重量級框架 ⌘ Read more
開篇之前,老周覺得有必要先鋪墊一下,我們先來說一說 VIP (Virtual IP) 相關的技術。一、虛擬 IP 概述----------1.1 VIP 是什麼 虛擬 IP(Virtual IP Address,簡稱 VIP)是一個未分配給真實彈性雲服務器網卡的 IP 地址。彈性雲服務器除了擁有私有 IP 地址外,還可以擁有虛擬 IP 地址,用戶可以通過其中任意一個 IP(私有 IP / 虛擬 ⌘ Read more
之前寫過用 rust 實現一個虛擬機的文章 (收藏,用 rust 實現一個迷你虛擬機,模擬 CPU 執行指令),該虛擬機是基於代碼解釋執行的,效率較低。評論區大神告知目前主流的實現方案是基於 kvm(Kernel-based Virtual Machine) 的,直接由系統調度,性能強悍,並且在 github 上開源了一個 kvmsample 例程。https://github.com/BillX ⌘ Read more
序言在微服務架構風格中,微服務通常設計遵循 SRP(單一職責原則),作爲一個獨立部署的軟件單元,專注於做一件事,並且做到極致。作爲開發人員,我們常常傾向於在沒有考慮爲什麼的情況下儘可能地將服務做得小。這種關於什麼是和不是什麼是單一職責的主觀性是我們開發人員在服務粒度方面容易犯錯誤的地方。爲了克服開發團隊在微服務尺寸上面臨的這種困境,理解粒度驅動因素至關重要。粒度在微服務中,我們有兩個概念——模塊化 ⌘ Read more
隨着數據科學和數據分析的發展,CSV(Comma-Separated Values)文件依然是數據存儲和交換中最常見的格式之一。然而,對 CSV 文件進行有效、快速的操作和分析一直是一個挑戰。本文將詳細介紹一個名爲qsv的工具,它可以幫助我們高效地處理和分析 CSV 文件。什麼是 qsv?--------qsv是一個基於 Rust 編程語言開發的命令行工具,用於對 CSV 文件進行切片、切丁和分析 ⌘ Read more
探索 Llama 3:Meta 推出的創新開源 LLM,介紹其架構、訓練和實踐應用,助力 AI 開發者。本文譯自:https://www.unite.ai/everything-you-need-to-know-about-llama-3-most-powerful-open-source-model-yet-concepts-to-usage/Meta 公司最近發佈了 Llama 3\n,這是 ⌘ Read more
現在有三段文本,id 分別是 0、1、2,你需要快速找到哪段文本里含有關鍵詞 "xiaobai".I like xiaobai (點贊)I follow xiaobai (關注)I forward the video (轉發)我們很容易想到,可以依次遍歷這三段文本,匹配文本內是否含有 "xiaobai",最終將符合條件的文本 ID 輸出。 在數據量小的時候,問題不大, ⌘ Read more
圖片上帝視角 OSPF 出現背景圖片 如上圖就是一張簡單的 OSPF 協議網絡,那麼爲什麼會出現 OSPF 協議呢?開放式最短路徑優先 OSPF(Open Shortest Path First)協議是 IETF 定義的一種基於鏈路狀態的內部網關路由協議。爲什麼會出現 OSPF?: 因爲 RIP 是一種基於距離矢量算法的路由協議,存在着收斂慢; 易產生路由環路; 可擴展性差,最大隻 ⌘ Read more
本文是 WebSocket 系列文章的第 3 篇,從源碼角度理解 WebSocket 是如何實現的。分析的是 gorilla websocket,即 WebSocket 協議 - 實戰中服務端使用的 WebSocket 庫。 Gorilla WebSocket 是一個由 Go 語言實現的,經過很好測試並且廣泛使用的 WebSocket 庫,它提供了簡單易用、功能強大的 API 接口。目前在 gi ⌘ Read more
在 Rust 編程語言中,target 目錄是由 Cargo(Rust 的包管理和構建工具)自動生成的。它主要用於存放構建輸出的產物文件和相關的編譯期產生的中間文件等。但是 target 目錄往往會非常大,即使一個簡單的 hello world 程序,就已經達到 9 MB 了。可能一個比較簡單的項目,會達到 1 GB 多。甚至有些網友調侃——如果電腦硬盤太小,可能學不了 Rust。0x01 指定 ⌘ Read more
隨着數據量持續增長,對合格數據專業人員的需求也會增長。具體而言,對 SQL 流利的專業人士的需求日益增長,而不僅僅是在初級層面。因此,Stratascratch 的創始人 Nathan Rosidi 以及我覺得我認爲 10 個最重要和相關的中級到高級 SQL 概念。那個說,我們走了!1. 常見表表達式(CTEs)-------------------如果您想要查詢子查詢,那就是 CTEs 施展身 ⌘ Read more
介紹在分佈式系統的世界中航行需要處理多個複雜的概念和原則。兩個經常提到的基本原則是 CAP 定理和 ACID 特性。這些原則在塑造分佈式系統的設計和行爲中起着關鍵作用。本文旨在解構這些概念並深入探討它們的影響。瞭解 CAP 定理CAP 定理由計算機科學家 Eric Brewer 提出,是適用於分佈式系統的一個原則。它指出分佈式數據存儲不可能同時提供以下三個保證中的超過兩個:1. 一致性(Consi ⌘ Read more
當我們在使用 tokio 和 MPSC(多生產者單消費者) 通道時,通常以某種固定的方式連接派生線程。然而,在最近項目中,必須在各種配置中動態匹配異步生產者和消費者。在這篇文章中,讓我們來看看如何實現這種非常有用的動態匹配模式。 首先,我們創建一個關於餐廳的 Rust 項目:cargo init restaurant在 Cargo.toml 文件中加入依賴項:\ntoki ⌘ Read more
背景介紹今天給大家分享一個實操項目 \n,手把手教你利用 whisper +qwen1.5110B 大模型 + ffmpeg 來給視頻添加英文字幕,效果驚豔!乾貨滿滿!當然你可以翻譯成其他語言 (日語或者韓語等等),思路大同小異。下面進入今天的主題~本文目錄第一步: 準備短視頻素材 第二步: 利用 whisper 來對電影的聲音提取對應的字幕 whisper 網絡 ⌘ Read more
在之前的文章中,我們大致說明了 coredump 的生成機制,也就是 coredump 文件的生成流程。但是實際上,這個流程並不是 coredump 獨用,而是一套通用流程。在這個流程中,有信號產生方、信號存儲方、信號消費方。在這三個階段,其中信號和中斷有類似的地方,但是二者並不等價。 信號本質上是在軟件層次上對中斷機制的一種模擬,其主要有以下幾種來源: 程序錯誤:除零,非法內存訪問等。 ⌘ Read more
一、這裏 IO 是什麼 操作系統爲了保護自己,設計了用戶態、內核態兩個狀態。應用程序一般工作在用戶態,當調用一些底層操作的時候(比如 IO 操作),就需要切換到內核態纔可以進行服務器從網絡接收的大致流程如下: 1、數據通過計算機網絡來到了網卡2、把網卡的數據讀取到 socket 緩衝區3、把 socket 緩衝區讀取到用戶緩衝區,之後應用程序就可以使用核心就是兩次讀取操作,五大 IO 模型的 ⌘ Read more