# 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=8310
# next = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog/twtxt.txt&offset=8410
# prev = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog/twtxt.txt&offset=8210
萬字長文:Go 語言流行 ORM 框架 GORM 使用詳解**
GORM 是 Go 語言中最受歡迎的 ORM 庫之一,它提供了強大的功能和簡潔的 API,讓數據庫操作變得更加簡單和易維護。本文將詳細介紹 GORM 的常見用法,包括數據庫連接、模型定義、CRUD、事務管理等方面,幫助大家快速上手使用 GORM 進行 Web 後端開發。安裝通過如下命令安裝 GORM:$ go get -u gorm.io/gorm你也許見過使用 go get -u github. ⌘ Read more
負載均衡原理最全詳解 -萬字圖文總結-**
大家好,我是 mikechen。負載均衡是大型架構的關鍵技術,也是大廠重點考察方向,下面我就全面來詳解負載均衡原理 @mikechen負載均衡負載均衡,全稱是 Load Balancing,很多時候我們簡稱 “LB”,它可以在多個服務器、或其他資源之間,分配工作負載。如下圖所示:通過增加服務器數量,比如:上圖的 tomcat-node1、tomcat-node2、tomcat-node3... 等 ⌘ Read more
超炫酷, 不用學前端也能自己做網頁!這個 Python 庫,10 分鐘內復刻 GPT WEB 應用**
今天,我要和大家分享如何將請求 GPT 的案例,快速 “復刻” 成 GPT 網頁版。這不僅簡單,而且對於我們這些後端開發者來說,簡直是福音!先睹爲快----看看這個界面,是不是感覺很熟悉? 這就是我們今天要介紹的主角 - Streamlit,此篇文章我們僅僅從復刻一個聊天機器人的角度介紹,認識一下其強大之處。初識 Streamlit------------Streamlit 是一個開源的 Pyt ⌘ Read more
Nuitka,Python 打包神器!**
pyinstaller 和 Nuitka 使用感受1.1 使用需求--------這次也是由於項目需要,要將 python 的代碼轉成 exe 的程序,在找了許久後,發現了 2 個都能對 python 項目打包的工具——pyintaller 和 nuitka。這 2 個工具同時都能滿足項目的需要:隱藏源碼。這裏的 pyinstaller 是通過設置 key 來對源碼進行加密的;而 nuitka 則 ⌘ Read more
Vue 反編譯 dist 包到源碼**
作者:wsqy https://juejin.cn/post/7359893196439207972最近由於公司老項目上的問題,由於項目很老,之前交接的源碼包中缺少了很大一部分模塊,但是現在線上的環境和 dist 包是正常運行的,領導希望能夠手動將這部分補全,由於前期項目的不規範,缺少接口文檔以及原型圖,因此無法知道到底該如何補全,因此,我想着能不能通過 dist 包去反編譯源碼包呢,經 ⌘ Read more
系統設計:設計 URL 短鏈接工具**
這是一個系統設計問題,要求從頭開始設計一個類似於 TinyURL 或 Bitly 的 URL 短鏈接工具。我們將涵蓋從設計需求、架構和組件設計到高性能擴展和安全最佳實踐的各個方面。定義範圍:功能性和非功能性需求首先,我們需要定義該系統的功能性和非功能性需求。我們有兩個功能性需求:給定一個長 URL 時,我們必須創建一個短 URL2. 給定一個短 URL 時,我們必須將用戶重定向到長 URL。該服務 ⌘ Read more
內存是怎樣一步步被分配出來的?**
大家好,我是小風哥,今天簡單聊聊內存分配。 我們申請一塊內存時計算機內部發生了什麼?看下這句代碼:這裏有兩部分,一個是 malloc,再一個是你寫的代碼。malloc 實際上屬於標準庫,標準庫裏有什麼呢?數學相關的函數,sin、cos、絕對值、數冪函數等;字符相關函數,判斷大小寫等;字符串操作函數、字符串拷貝、拼接比較等;當然還有內存管理函數,就是這裏提到的 malloc/free,當然還有很多 ⌘ Read more
Rust 的併發模型 vs Go 的併發模型:Stackless 協程 vs Stackfull 協程**
雖然 Rust 和 Go 都是從上一代編程語言的錯誤中吸取教訓的現代編程語言,但它們以完全不同的方式管理併發,這對性能和開發人員體驗有巨大的影響。但首先,我們爲什麼需要併發?今天,大多數程序與需要一定時間才能返回響應的資源進行交互:例如網絡或磁盤。如果我們在等待網絡響應的同時完全阻塞程序的執行,這將是對硬件的一種相當低效的使用!這就是爲什麼 Go 和 Rust 在等待 I/O(輸入 / 輸出) 時 ⌘ Read more
NeoVim 打造成跟 Goland 一樣好用的 IDE
在軟件開發領域,集成開發環境(IDE)的選擇對程序員的效率和生產力起着舉足輕重的作用。對於尋求精簡而強大的編碼體驗的 Golang 開發者來說,配置 Neovim 是一個不錯的選擇。本文分享完整的 Golang NeoVim 的設置,幫助你將 NeoVim 打造成媲美 Goland 的開發環境。初始設置將以下內容添加到 .vimrc 或 init.vim 文件中。set expandtabset ⌘ Read more
如何爲 Langchain Agent 添加記憶功能?**
0 前言----在開發複雜的 AI 應用時, 賦予 Agent 記憶能力是一個關鍵步驟。這不僅能提高 Agent 的性能, 還能使其在多輪對話中保持上下文連貫性。本文將詳細介紹如何在 Langchain 框架中爲 Agent 添加記憶功能, 並深入解析每個步驟的原理和最佳實踐。Agent 記憶功能的核心組件在 Langchain 中,構建具有記憶功能的 Agent 主要涉及三個核心組件:工具 (T ⌘ Read more
Go 1-22 提供的更加強大的 Tracing 能力**
本文是由 Go Team 的 Michael Knyszek 在 2024 年 3 月 14 日發表於 go official blog,原文地址:https://go.dev/blog/execution-traces-2024runtime/trace packageruntime/trace\n package 包含了理解並排查 Go 程序的強大工具。其功能可以生成每個 gorouti ⌘ Read more
zig-rust - 新物種的對比**
Zig 和 Rust 都是現代編程語言,它們都因注重安全性和性能而備受關注,但它們有着不同的理念和設計目標。很多開發者都對二者有濃厚的興趣,我們來了解下 Zig 和 Rust 這兩個新物種之間的差別。語言理念和目標Rust 的設計目標是在不犧牲性能的前提下提供內存安全性。Rust 的目標是成爲編寫大型系統和應用程序的實用語言,重點關注零成本抽象、安全性和併發性。 Zig 的設計則簡單明瞭。Z ⌘ Read more
Nginx 反向代理最全詳解 -圖文全面總結-**
大家好,我是 mikechen。Nginx 反向代理大型網站必備的,也是大廠經常考察的,下面我就全面來詳解 Nginx 反向代理 @mikechen正向代理正向代理最大的特點是:客戶端非常明確要訪問的服務器地址,服務器只清楚請求來自哪個代理服務器,而不清楚來自哪個具體的客戶端,正向代理模式屏蔽或者隱藏了真實客戶端信息。例如:在大陸訪問 www.google.com,我們需要一個代理服務器,我們通過 ⌘ Read more
10 萬行數據耗時 500 毫秒,使用 rust 的 nom 框架實現時序數據庫協議解析 -下-**
table data-sort="sortDisabled" width="578"tbodytrtd valign="top" align="center" width="577" class=""strongnom 解析時序數據庫協議/strong/td/tr/tbody/table上回我們瞭解了 nom 框架的原理及核心的解析器,這一回我們使用 nom 解析時序數據庫協議,鞏固和提升對 no ⌘ Read more
新手挑戰一小時學一種 Rust 框架之解析框架 nom —— 實現時序數據庫協議解析(上)**
table data-sort="sortDisabled" width="578"tbodytrtd valign="top" align="center" width="577"sectionstrongnom 簡介/strong/section/td/tr/tbody/tablenom 是一個通用的協議解析框架,提供了通用的解析算子和組合器,聚焦於安全的、零拷貝的、面向流模式的強大解析功能。 ⌘ Read more
=
分佈式事務設計與實踐**
異步消息隊列:用於在服務之間傳遞事務信息和狀態,確保各服務可以異步地處理事務操作。 事務協調器:負責協調和管理全局事務的狀態,包括提交和回滾操作。 補償機制:在事務失敗時,通過補償操作來回滾或修復之前的操作,以保證數據的一致性。 設計步驟1\\. 事務初始化事務發起者:事務開始時,由事務發起者(例如用戶請求服務)向事務協調器發起一個全局事務。 事務 ID:事務協調器生成一個全局 ⌘ Read more
1 號店的抽獎系統架構實踐(限流削峯到性能優化)**
你好,我是悟空。------------抽獎是一個典型的高併發場景應用,平時流量不多,但遇到大促活動,流量就會暴增,今年的週年慶期間的日均 UV 就超過百萬。在過去的一年裏,負責過這個項目的多次重構工作,期間各種踩坑無數,就以此文當做總結,來聊聊我們是如何架構這個高併發系統吧。------------------------------------------------------------- ⌘ Read more
Go 設計模式:責任鏈和函數選項,讓你的代碼更優雅!**
最近接觸到越來越多有歷史 “沉澱” 的 Go 項目,深感設計模式和及時干預的重要性。近期會分享一些設計模式,一起學習代碼設計!今天的分享的設計模式是:責任鏈和函數選項模式。在日常程序裏是比較常用的。很多開源庫中也有使用。責任鏈模式-----責任鏈模式(Chain of Responsibility Pattern)是一種行爲設計模式,它允許對象將請求沿處理程序鏈進行傳遞。程序鏈既可以處理請求,也可 ⌘ Read more
系統設計:設計類似 WhatsApp 的應用**
在這個系統設計場景中,我們被要求設計一個類似 WhatsApp 的消息應用程序。雖然在實際的討論中可能會重點討論該應用程序的一個或多個功能,但在本文中,我們將對系統的架構進行一個高層次的概述,然後可以根據需要深入探討具體的領域。明確功能需求通過向業務方提問來縮小範圍,因爲在一個小時內設計整個 WhatsApp 平臺是不現實的:• 主要用例: 該應用的主要目的是發送、檢查和接收消息,以及閱讀和標記消 ⌘ Read more
Htmx 2-0 發佈:用易懂的 HTML 屬性取代複雜 JavaScript 框架**
作者 \\| Tim Anderson譯者 \\| 王強策劃 \\| Tina用於擴展 HTML 規範的 Htmx 項目發佈了 2.0 版,這是該項目自 2020 年 11 月 發佈 1.0 版以來的第一個主要版本。Htmx 2.0 取消了對 Internet Explorer 的支持,並將擴展項移出了核心存儲庫,這樣每個擴展都可以按照自己的節奏發佈更新了。新版本還刪除了一些已棄用的屬性,並將 HTTP DE ⌘ Read more
萬字解析 mysql innodb 事務實現原理**
0 前言近期在持續學習 mysql innodb 底層技術細節相關內容,繼上期鎖原理篇之後,本期我們以 innodb 中的事務實現原理作爲主題,展開交流探討.有關本篇內容的目錄大綱展示如下:\\| 章節 \\| 小節 \\| 備註 \\|\\| --- \\| --- \\| --- \\|\\| 1 事務基本概念 \\| 1.1 原子性 Atomicity \\| 事務原子性的概念;innodb 如何保證原子性 \\|\\| 1.2 一致性 Co ⌘ Read more
Rust 如何避免 Box 常見的使用陷阱?**
在系統編程的世界裏,有效和安全地管理內存是一個關鍵的挑戰。Rust 以其獨特的內存管理方法脫穎而出,提供了強大的工具來處理這種複雜性。其中一個工具是 BoxT 類型,它以一種與 Rust 的所有權和借用規則無縫集成的方式進行堆分配。本文將深入探討 BoxT 的工作原理、它的優點、在 Rust 編程中的用例以及常見的使用陷阱。理解 BoxTBoxT 類型是 Rust 的智能指針之一,它提供了一種在堆 ⌘ Read more
Vue 單文件組件 SFC
Vue 單文件組件 (Single File Components, SFC) 是 Vue.js 提供的一種組件格式,允許開發者在一個文件中編寫組件的模板、腳本和樣式。SFC 通常以 .vue 文件爲擴展名。以下是 SFC 的工作原理和其各個部分的詳細解釋:SFC 文件結構一個典型的 Vue SFC 文件包含三個部分:模板 (template):定義組件的 HTML 結構。2. 腳本 (scrip ⌘ Read more
Linux 服務管理之 syste
簡介systemd 是一種用於 Linux 操作系統的初始化系統和服務管理器,由 Lennart Poettering 主導開發並在 LGPL 2.1 及其後續版本許可證下開源發佈。自 2010 年代中期以來,systemd 已經廣泛被多數主流 Linux 發行版採用,如 Ubuntu、Fedora、openSUSE、Debian 和 CentOS/RHEL 7 及以後版本,作爲默認的初始化系統取 ⌘ Read more
Rust 中 Future 的 liveness 問題**
引言--Rust 的 futures 與大多數其他語言支持異步計算的方式不同; 除非你定期輪詢它們, 否則它們不能保證取得進展。具體來說, Future 有一個 poll 函數, 它接受一個 Waker, 當 future 可以取得進展時, 它會調用 Waker 的 wake 方法, 然後 "某些東西" 應該再次調用 poll。這主要由執行器 (如 tokio、 embassy 等) 處理, 執行 ⌘ Read more
Golang Context 內部原理一覽**
context\n 包是每個 Go 語言程序員在編程生涯中都會使用到的, 但你們真的瞭解它的內部工作原理嗎 (因爲據說真正的美麗都藏在內在)? 如果你對此感興趣, 可以查看我之前關於 sync.WaitGroup 內部工作原理的博文 鏈接 \n 。本文旨在簡要概覽內部工作原理, 因此我會適當簡化一些細節。如果你想查看全部的實現細節, 或者你更喜歡直接閱讀源代碼而不是博客, 可以 點擊這裏 ⌘ Read more
一文講清楚 localhost 和 127-0-0-1 的區別**
在進行網絡和 Web 開發時,經常會用到 “localhost” 和 “127.0.0.1” ,localhost 和 127.0.0.1 在大多數情況下可以互換使用,但它們在概念上是不同的:localhost 是本機域名。 127.0.0.1 是本機 IP 地址。 localhost 通過系統的 host 文件會自動解析到 127.0.0.1。localhost 和 127.0.0. ⌘ Read more
go 語言調用 shell 命令有這麼兩種方式,都用過了?**
阻塞方式 (需要執行結果) 主要用於執行shell命令,並且返回shell的標準輸出適用於執行普通非阻塞 shell 命令,且需要 shell 標準輸出的//阻塞式的執行外部shell命令的函數,等待執行完畢並返回標準輸出func execshell(s string) (string, error){    //函數返回一個Cmd,用於使用給出的參數執行name指定的程序    cmd := ⌘ Read more
=
Rust 在數據工程領域中的應用**
近年來,數據工程領域發生了重大變化。數據系統日益複雜,對實時處理的需求,以及對可靠性和性能的不斷需求,促使人們尋找更健壯的編程語言。這就是 Rust 的用武之地,Rust 的增長速度非常快:在這些競爭者中,Rust 在 2024 年作爲數據工程師的強大工具出現了,它承諾內存安全性、併發性和高效性。但是,究竟是什麼讓 Rust 成爲數據工程的合適選擇,以及如何在這個領域有效地利用它?Rust 在數據 ⌘ Read more
10 個提高生產力的 Go 小技巧**
最近 Phuong Le 大佬針對日常開發 Go 項目時,總結了一些好用的 Go 小技巧。看了後,感覺對於剛入門 Go 的同學有一定的學習價值。可以挑好的學。應用到自己項目裏。以下內容分享給大家。在開發 Go 生產項目時,我發現自己經常重複編寫代碼和使用某些技術,直到後來回顧自己的工作時才意識到這一點。下面是從總結經驗中挑選的一些有用的代碼片段,希望對大家有所幫助。計時技巧-------如果你對跟 ⌘ Read more
在 Rust 中使用 SQLX 集成 SQLite 數據庫**
SQLite 是一個 c 語言庫,它實現了一個小型、快速、自包含、高可靠性、全功能的 SQL 數據庫引擎,與 Rust 的安全性和性能非常匹配。sqlx crate 是一個很棒的工具,可以提供到各種數據庫 (包括 SQLite) 的異步連接。sqlx 的美妙之處在於它可以在編譯時檢查 SQL 查詢語句以及它與 Rust 異步特性的兼容。在這篇文章中,我們將探索如何使用 sqlx 將 Rust 與 ⌘ Read more
PocketBase:一體化的開源 Go 語言實時後端**
PocketBase 是一個開源的實時後端解決方案,採用單一文件的形式進行分發。它由嵌入式數據庫 (SQLite) 和實時訂閱功能組成,提供了開箱即用的文件和用戶管理功能、方便的管理儀表板 UI 以及簡單的 REST 風格 API。本文將深入探討 PocketBase 的功能、安裝、示例代碼和一些高級的應用技巧。主要特性----嵌入式數據庫PocketBase 內嵌 SQLite 數據庫,這意味着 ⌘ Read more
提高系統的併發能力方案**
面試中經常會被問到如何提高系統的併發能力,針對此問題我整理如下的提高系統併發能力的方案: (1)分流方案:常見的的方案有負載均衡、數據庫拆分 / 集羣、消息隊列(2)導流方案:緩存、CDN(3)系統自身優化:數據庫優化、代碼優化(4)增加資源:增加服務器、CPU、內存等硬件資源1、分流方案——負載均衡    使用負載均衡技術可以將請求分發到多個服務器上進行處理,從而提高系統的併發處理能力 ⌘ Read more
Go: 使用依賴注入實現 Gin 框架路由處理函數的解耦**
在 Go 語言開發中,Gin 是一個非常流行的 Web 框架。其輕量級、高性能的特點,使其成爲許多開發者的首選。然而,在實際項目中,隨着業務邏輯的複雜化,我們往往會遇到代碼耦合嚴重、測試困難等問題。依賴注入(Dependency Injection, DI)是一種有效的解耦手段,能夠幫助我們實現代碼的高內聚、低耦合,從而提升代碼的可維護性和可測試性。本文將探討如何在 Gin 框架中使用依賴注入來解 ⌘ Read more
長文梳理!近年來 GPT 系列模型的發展歷史:從 GPT-1 到 GPT-4o(前世、今生)**
引言--隨着 ChatGPT 的發佈,大語言模型的關注度和數量都在不斷上升, 它引領了人類進入了大模型時代,並且隨着一輪一輪的迭代,最新模型已經進化到了 GPT-4o。在衆多大語言模型中,GPT 系列因其代表性而備受關注,其發展歷程和技術革新值得深入探討。那麼今天帶大家回顧一下近年來 GPT 系列模型的發展。【參考中國人民大學《大語言模型》】GPT 系列模型的基本原理是訓練模型學習恢復預訓練文本數 ⌘ Read more
Go:執行跟蹤變得更加強大**
簡介Go 語言的 runtime/trace 包含一個強大的工具,用於理解和排查 Go 程序。其中的功能允許跟蹤每個 goroutine 在一段時間內的執行情況。然後,使用 go tool trace 命令(或優秀的開源工具 gotraceui)可以可視化和探索這些跟蹤中的數據。跟蹤的魔力在於,它可以輕鬆地揭示程序中其他方式難以看到的東西。例如,在 CPU 概要文件中很難看到併發瓶頸,因爲沒有要採 ⌘ Read more
分庫分表最全詳解 -圖文全面總結-**
大家好,我是 mikechen。分庫分表是大型架構的必備技能,也是大廠重點考察的對象,下面我就全面來詳解分庫分表 @mikechen分庫分表分庫分表是數據庫設計、和管理中的一種策略,主要解決隨着數據量、和併發訪問量的增加而帶來的性能、和擴展性問題。分庫分表,主要就是兩種常用手段:“分庫”、和 “分表”。如下圖所示:分庫(Database Sharding): 將數據按照某種規則,分散到多個獨立的數 ⌘ Read more
Go singlefight 源碼詳解**
寫在前面 通俗的來說就是 singleflight 將相同的併發請求合併成一個請求,進而減少對下層服務的壓力,通常用於解決緩存擊穿的問題。詳解基礎結構----golang.org/x/sync/singleflight singleflight 結構體:type call struct { wg sync.WaitGroup // 這些字段在 WaitGroup 結束前寫入一次 // 只有在 W ⌘ Read more
OpenResty-Lua-Redis-MQ 實現高 QPS 下熱點數據的存取方案**
京東、淘寶首頁每天的訪問量是非常的大,如果不對首頁上的一些熱點數據做技術上的處理就會出現首頁的訪問速度慢,甚至在高併發下無法打開首頁,這些都會嚴重的影響用戶的體驗。首頁常見的熱點數據是輪播圖,下圖是京東和淘寶首頁的輪播圖:    每個用戶打開京東、淘寶網站的首頁都會出現這個輪播圖,由於平臺是國內知名的購物平臺,所以其 QPS 是非常高的;另外這個輪播圖也是可以做更改和替換來達到展示不同的圖 ⌘ Read more
高性能架構設計之緩存策略**
在構建高性能的系統架構時,緩存策略是至關重要的一環。通過合理使用緩存,我們可以顯著減少數據庫的訪問次數,降低網絡延遲,從而提高系統的響應速度和吞吐量。本文將深入探討緩存的類型、使用場景、緩存一致性以及數據同步等關鍵內容。一、緩存類型緩存按照其存儲位置和用途,可以分爲多種類型。以下是幾種常見的緩存類型:本地緩存本地緩存通常指的是進程內的緩存,如 Java 中的 HashMap、ConcurrentH ⌘ Read more
Go:標準庫 bufio 包詳解**
引言在日常開發中,對文件或輸入輸出流進行讀寫操作是非常常見的任務。Go 語言標準庫中的bufio包提供了數據的緩衝讀寫功能,使得讀寫操作更加高效。本文將詳細介紹bufio包的主要功能及其在實際編程中的應用場景。bufio 包概述bufio包主要提供了緩衝讀寫的能力,通過包裝一個io.Reader或io.Writer對象,創建一個帶緩衝的(buffered)讀寫器。使用緩衝可以減少對底層 IO 資源 ⌘ Read more
如何實現 Redis 和 Mysql 中數據雙寫一致性**
在我們的實際開發中,我們用到了 redis 緩存一些常用的數據(如熱點數據)用來提高系統的吞吐量。    但是不可以避免的出現了數據的修改場景,這就導致了數據庫中的數據和 Redis 中出現不一致性的情況。如何保證數據一致性就顯得非常重要了,下面介紹一下保證數據的雙寫一致性的方案。1、先刪緩存再操作數據庫方案    在 redis 一般寫的場景下對數據的更新操作是不推薦使用的,推薦使用刪除 ⌘ Read more
使用 Golang 開發 eBPF 的應用**
大多數時候, 我們在開發軟件或使用軟件時, 都在操作系統的安全邊界內運行。我們甚至不知道 IP 數據包是如何從網絡接口被接收的, 或者當我們保存文件時, inode 是如何被文件系統處理的。這個邊界被稱爲用戶空間, 我們在這裏編寫應用程序、庫和工具。但還有另一個世界, 即內核空間。操作系統內核就駐留在這裏, 負責管理系統資源, 如內存、CPU 和 I/O 設備。通常我們不需要深入到 socket ⌘ Read more
在 Go 中如何讓結構體不可比較?**
最近我在使用 Go 官方出品的結構化日誌包 slog 時,看到 slog.Value 源碼中有一個比較好玩的小 Tips,可以限制兩個結構體之間的相等性比較,本文就來跟大家分享下。在 Go 中結構體可以比較嗎?在 Go 中結構體可以比較嗎?這其實是我曾經面試過的一個問題,我們來做一個實驗:定義如下結構體:type Normal struct { a string B int}使用這個結構體分別聲明 ⌘ Read more
滴滴打車如何找出方圓一千米內的乘客?揭開 GeoHash 的神祕面紗**
背景--不知道大家是否思考過一個問題,在一些場景下(如大家在使用高德地圖打車的時候,鄰近的司機是如何知道你在他的附近並將你的打車通知推送給他去接單的?)是如何實現的?一般來講,大家也許會想到,首先肯定需要知道每位乘客的經緯度 (lng,lat),也即是二維座標(當然這是在絕對理想的情況,不考慮上下坡度)。而在知道了經緯度之後,一個暴力簡單且容易想到的思路就是將經緯度這個「二元組」 都存放在一個「 ⌘ Read more
負載均衡器有什麼用?**
負載均衡器是一種在多個服務器之間分配網絡或應用程序流量的設備或軟件應用程序。其主要目的是確保沒有一臺服務器承擔過多的需求,從而提高應用程序的響應速度和可用性。在計算機發展的早期,負載均衡是一個手動過程。管理員手動配置 DNS 設置,在服務器之間分配流量。專用負載均衡設備的概念出現於 20 世紀 90 年代。思科和 F5 Networks 等公司開始開發硬件負載均衡器,提供更復雜、更自動化的流量分配 ⌘ Read more
Rust 編程範式最佳實踐**
面向對象的 Rust與前面討論的函數式和命令式示例相反,讓我們引入一個新的結構體 FileFilter,它封裝了過濾文件和文件迭代的邏輯。pub struct FileFilter {    predicates: VecBox ⌘ Read more
Go 實現可複用的通用內存緩存**
本文介紹瞭如何在 Go 語言中創建一個可重用的內存通用緩存,並提供了具體的實現代碼和使用示例。Prerequisites安裝 Go go-cache package\n 實現首先,創建一個 cache package,它包含我們正在構建的緩存的代碼。package cacheimport ( "time" "github.com/patrickmn/go-cache")使用泛型實現一 ⌘ Read more
Go:log 庫的全面指南與使用技巧**
引言--在 Go 語言的標準庫中,log包提供了簡單而強大的日誌功能。日誌記錄是軟件開發中不可或缺的一部分,它不僅幫助開發人員調試和排查問題,還在系統運行中提供了寶貴的運行時信息。本文將詳細講解 Go 語言log庫的各種功能及其使用技巧,幫助開發者更好地掌握和應用這一重要工具。log 包簡介-------log包是 Go 語言標準庫的一部分,提供了基本的日誌記錄功能。它支持日誌消息的格式化、日誌輸 ⌘ Read more
深入理解 AI 大模型:參數、Token、上下文窗口、上下文長度和溫度**
隨着人工智能技術的不斷髮展,AI 大模型在各個領域展現出強大的能力,也引起了廣泛關注。在瞭解這些模型時,我們經常會看到諸如「參數」、「Token」、「上下文窗口」、「上下文長度」 和「溫度」等術語。這些術語代表着什麼意思?它們對 AI 大模型有何影響?本文將深入淺出地爲你解析這些概念,並結合實際案例和數據,幫助你理解 AI 大模型的運作機制。Parameter 參數:模型的複雜度和性能指標---- ⌘ Read more
Go 實現雙 buffer id 生成器**
本文通過 Go 實現一個 Leaf——美團點評分佈式 ID 生成系統 雙 buffer 的 id 獲取器。一. 主流程----------主流程看圖似乎步驟非常多,但實際上總結起來就以下三個步驟:客戶端發起請求 id 獲取器從緩存中獲取 如果 id 已經被消耗超過閾值,則重新加載新的號段到內存中 接下來我們來具體看一下 Go 代碼是如何實現的二. 代碼實現-------2.1 S ⌘ Read more
說一說 linux 虛擬機的 ringbuffer 大小由來**
linux 下的網卡 ringbuffer 大小可以通過 ethtool -g eth0 獲取,eth0 是網卡設備名,如果是其他網卡則更換爲對應網卡名即可。\n /data0/src/kvm/qemu-5.2.0$ ethtool -g eth0Ring parameters for eth0:Pre-set maximums:RX: 1024RX Mini: 0RX Ju ⌘ Read more
超級底層:10WQPS-PB 級海量存儲 HBase-RocksDB,底層 LSM 結構是什麼?**
一次穿透:10WQPS/PB 級海量存儲 HBase/RocksDB 的底層 LSM 結構---------------------------------------------LSM tree 是很多數據庫內部的核心數據結構,包括 BigTable,ClickHouse、Cassandra, Scylla, RocksDB,HBase。ClickHouse、Cassandra, Scylla, ⌘ Read more
Go:For-Select-Done 併發設計模式應用**
引言Go 語言支持的併發模型是其一大亮點,它內建的 Goroutine 機制爲構建高性能併發應用提供了基礎。在這種環境下,使用 For-Select-Done 設計模式可以優雅地處理併發任務和通道(Channel)的交互,從而實現高效的數據處理和狀態管理。For-Select-Done 設計模式概述For-Select-Done 模式是一種結構化的方式來處理 Go 中的多個通道讀寫操作,使代碼更加 ⌘ Read more
Netflix 如何打造高可靠在線有狀態系統**
作者 \\| Joseph Lynch譯者 \\| 王強策劃 \\| Tina要點可靠性意味着花錢將故障概率、爆炸半徑和恢復時間都降至零。 大規模可靠服務的構建工作必須在客戶端、服務器和 API 上三管齊下。 可靠的服務器是冗餘的、對負載優化的和被大量緩存的。它們提供快速數據恢復和跨多個雲可用區利用多個複製副本的能力。 可靠的客戶端會持續迭代前進,並使用來自服務器的信號來學習如何重試或對沖請 ⌘ Read more
多模態大模型:基礎架構**
文|龐德公編輯|郭嘉大模型技術論文不斷,每個月總會新增上千篇。本專欄精選論文重點解讀,主題還是圍繞着行業實踐和工程量產。若在某個環節出現卡點,可以回到大模型必備腔調或者 LLM 背後的基礎模型重新閱讀。而最新科技(Mamba,xLSTM,KAN)則提供了大模型領域最新技術跟蹤。若對於具身智能感興趣的請移步具身智能專欄。技術宅麻煩死磕 AI 架構設計。當然最重要的是訂閱 “魯班模錘”。 多模態大型 ⌘ Read more
10 分鐘瞭解 Golang 泛型**
泛型是 Golang 在 1.18 版本引入的強大工具,能夠幫助我們在合適的場合實現簡潔、可讀、可維護的代碼。原文: Go Generics: Everything You Need To Know\n導言可能有人會覺得 Go 泛型很難,因此想要借鑑其他語言(比如 Java、NodeJS)的泛型實踐。事實上 Go 泛型很容易學,本文希望能幫助讀者更好的理解 Go 泛型。 👉注:本文不會將 ⌘ Read more
如何優雅關閉過期訂單?**
如何關閉過期訂單?設計一個關閉過期訂單的系統至關重要:資源管理 通過關閉過期訂單,系統可確保資源(如庫存、資金和人員)得到有效分配,不會被未完成或過期訂單佔用。用戶體驗 該系統允許與客戶就其訂單狀態進行清晰及時的溝通,防止出現混亂和潛在的不滿情緒。通過關閉過期訂單,系統可以集中精力處理有效訂單,提高整體服務效率和速度。運行效率 從活動隊列中刪除過期訂單可減少雜亂和簡化數據處理,從 ⌘ Read more
Rust 中的編程範式:命令式和函數式編程範式**
Rust 是一種多範式編程語言,支持命令式、面向對象和函數式編程風格。風格的選擇通常取決於開發人員的背景和他們要解決的具體問題。隨着 Rust 吸引了來自 C++、Java、Python 和 Haskell 等不同背景的開發人員,它已經形成了自己獨特的風格和習慣用法。這種多樣性是一種優勢,但它也會導致在不同場景中使用哪種風格的不確定性。Rust 當然受到面向對象編程概念的影響,將它與其他面嚮對象語 ⌘ Read more
duckdb: 一個超火的數據庫,背後公司只有 18 人?**
簡介--DuckDB 是一個嵌入式、內存中、SQL OLAP 數據庫管理系統。它提供了一種高效的方式來查詢和分析數據, 可以被集成到各種應用程序或編程語言中。最近非常的 🔥,一個月下載超過 200 萬次。實際上,這家位於荷蘭阿姆斯特丹的小型公司只有 18 人,下面這篇公衆號介紹了它的背景:震驚:開發一款世界矚目的數據庫僅需 18 人。這讓我想起了 clickhous。duckdb 的簡單易用、提供 ⌘ Read more
Zig 分配器的應用**
假設我們想爲 Zig 編寫一個 HTTP 服務器庫 \n。這個庫的核心可能是線程池,用於處理請求。以簡化的方式來看,它可能類似於:fn run(worker: Worker) void {    while (queue.pop()) \\|conn\\| {        const action = worker.route(conn.req.url);        action(conn.req ⌘ Read more
AI 大模型技術的四大核心架構演進之路**
隨着人工智能技術的飛速發展,大模型技術已經成爲 AI 領域的重要分支。本文將深入探討四種關鍵的大模型技術架構:純粹 Prompt 提示詞法、Agent + Function Calling 機制、RAG(檢索增強生成)以及 Fine-tuning 微調技術,揭示它們的特性和應用場景。一、純粹 Prompt 提示詞法:構建直觀交互模式純粹 Prompt 提示詞法是 AI 大模型交互的直接形式,它通過 ⌘ Read more
cassowary: 現代跨平臺的 Go 語言 HTTP 負載測試工具**
在現代互聯網應用程序中,性能和響應速度是決定用戶體驗的關鍵因素。負載測試是確保我們的應用程序在高併發下仍能穩定運行的一種重要手段。本文將帶你瞭解一個現代的跨平臺 HTTP 負載測試工具——cassowary,並展示其安裝和使用方法。什麼是 cassowary?--------------cassowary 是一個用 Go 語言編寫的現代跨平臺 HTTP 負載測試工具。它設計簡潔、易於使用,支持高併 ⌘ Read more
在 Go 中如何優雅的使用 wire 依賴注入工具提高開發效率?上篇**
如果你做過 Java 開發,那麼想必一定聽說或使用過依賴注入。依賴注入是一種軟件設計模式,它允許將組件的依賴項外部化,從而使組件本身更加模塊化和可測試。在 Java 中,依賴注入廣泛應用於各種框架中,幫助開發者解耦代碼和提高應用的靈活性。本文就來介紹下什麼是依賴注入,以及在 Go 語言中如何實踐依賴注入,提高 Go 項目的開發效率和可維護性。什麼是依賴注入?正如前文所述,依賴注入(dependen ⌘ Read more
如何在 Rust 中實現事件循環模式?**
事件循環是編程中的一個基本概念,用作管理異步操作和確保系統響應的機制。它的功能是不斷檢查程序中的新事件或消息,根據需要處理它們,然後繼續檢查更多事件或消息。這種模式對於處理輸入 / 輸出操作、網絡通信和用戶交互等任務至關重要,從而不會阻塞其他代碼的執行。事件循環的重要意義在於它能夠有效地併發處理多個任務,而不依賴於傳統的同步方法,後者可能導致性能瓶頸和應用程序無響應。事件循環使程序在事件發生時異步 ⌘ Read more
基於 Rust 語言實現的去中心化 AI 網絡節點**
在當今的技術世界中,去中心化和人工智能(AI)是兩個極具潛力的發展方向。Gaia 項目正是將這兩者結合起來,創造了一個去中心化的 AI 網絡節點。本文將深入探討 Gaia 項目的技術細節,通過豐富的示例和詳細描述,幫助讀者全面理解並掌握該技術。什麼是 Gaia?---------Gaia 是一個去中心化的人工智能網絡,它旨在通過區塊鏈技術和去中心化網絡架構,提供安全、可靠且高效的 AI 服務。Ga ⌘ Read more
Go: 深入探究 uintptr 類型**
Go 語言作爲一種靜態類型、編譯型語言,其獨特的類型系統爲編程提供了強大的支持。在衆多類型中,uintptr 是一個較爲特殊的類型,它用於存儲指針值的整數表示。本文將詳細介紹 uintptr 的概念、使用場景及其與普通指針類型的區別。uintptr 的定義與特性在 Go 語言中,uintptr 是一個無符號整數類型,其大小足以存儲任意指針的位模式。具體來說,uintptr 的定義如下:type u ⌘ Read more
conmon-rs 服務啓動流程源碼分析**
conmon-rs 是一個用 Rust 編寫的 pod 級別的 OCI 容器運行時監視器,旨在擴展並取代現有的 conmon 功能,不僅監視單個容器,還監視整個 pod。通過 UNIX 域套接字處理新容器和執行進程的請求,提升了管理效率。本文主要分析 conmon-rs 服務的啓動流程。 涉及源碼版本:v0.6.31. 函數入口// conmon-rs/server/src/main.rs:4f ⌘ Read more
如何在 API 設計中執行分頁**
在 API 設計中,分頁對於高效處理大型數據集和提高性能至關重要。以下是六種常用的分頁技術:01 基於偏移的分頁----------這種技術使用 offset 和 limit 參數來定義起點和要返回的記錄數。例如:GET /orders?offset=0&limit=3優點:易於實現和理解。 缺點:由於需要掃描和跳過記錄,因此偏移量較大時效率可能會降低。 02 基於遊標的分頁----- ⌘ Read more
Kafka 如何實現每秒百萬級高併發寫入?**
大家好,我是 mikechen。磁盤順序寫Kafka 採用順序寫入日誌文件的方式,這種方式比隨機寫入快得多。爲什麼採用磁盤順序寫要快很多呢?如下圖所示:一般,完成一次磁盤 I/O(輸入 / 輸出)操作,通常需要經歷以下三個主要步驟:尋道、旋轉、和數據傳輸。尋道:磁頭從當前位置,移動到包含目標數據的軌道,這個過程可能需要幾毫秒時間; 旋轉:盤片旋轉直到目標數據正好位於磁頭下方,通常也需要幾毫秒 ⌘ Read more
乖乖,PG 高可用咱不用主從流複製了,咱試試 patroni
作者:IT邦德中國DBA聯盟(ACDU)成員,10餘年DBA工作經驗,Oracle、PostgreSQL ACECSDN博客專家及B站知名UP主,全網粉絲10萬+擅長主流Oracle、MySQL、PG、高斯及Greenplum備份恢復,安裝遷移,性能優化、故障應急處理微信:jemdbQQ交流羣:587159446公衆號:IT邦德前言 Patroni 用於構建高可用 PostgreSQL 集羣的工 ⌘ Read more
一文了解 Rust 語言中的雙向鏈表**
Rust 作爲一門面向安全性和性能的系統編程語言,提供了強大的內建數據結構支持,其中LinkedList是其標準庫std::collections中一個重要的組成部分。本文將深入探討 Rust 中的雙向鏈表,包括其特性、應用場景以及高效使用方法。什麼是雙向鏈表?--------在講述雙向鏈表之前,我們先簡要回顧下鏈表的概念。鏈表是一種常見的線性數據結構,它由一系列節點組成,每個節點包含數據部分和指 ⌘ Read more
從原理到實踐:完全掌握零拷貝技術**
零拷貝技術是一種優化數據傳輸的技術,旨在減少數據在內存之間的拷貝次數,從而提高數據傳輸性能和降低 CPU 的負載。傳統的數據傳輸方式涉及多次拷貝操作:首先將數據從磁盤讀取到內核緩衝區,然後再將數據從內核緩衝區複製到應用程序緩衝區。而零拷貝技術通過避免不必要的數據拷貝,直接將數據從磁盤讀取或網絡接收到用戶空間應用程序所使用的內存中。它利用了文件描述符、DMA(直接內存訪問)等機制,在內核態和用戶態之 ⌘ Read more
簡易評論系統設計**
需求分析----評論系統是互聯網社區網站的重要組成部分,對增強用戶參與度、提高網站活躍度等方面都具有重要價值。一個簡易的評論系統(在線社區平臺)通常包含以下功能用戶評論:用戶可以對某個產品、主題進行評論,包括文字評論。 評論展示:所有用戶的評論將會在產品或服務頁面下方展示,其他用戶可以查看。 評論的展示有多種組織方式,參考《評論系統的幾種展示結構和存儲設計》,本文主要針對常見的二級嵌套 ⌘ Read more
RAE:通過檢索增強來完成事件提取任務**
Decompose, Enrich, and Extract! Schema-aware Event Extraction using LLMs 大型語言模型(LLMs)在處理自然語言數據方面能力卓越,能從多樣的文本資源中高效提取知識,助力情境洞察與決策支持。但其易產生幻覺的弱點,導致上下文信息失真,引發擔憂。本研究聚焦於利用 LLMs 自動提取事件,創新性地將任務拆分爲事件檢測與事件論 ⌘ Read more
實時數據的處理一致性如何保證?**
摘要:在當今快速發展的數字化世界中,實時數據處理變得至關重要。無論是金融服務、在線零售、社交媒體還是物聯網 (IoT),實時數據流爲企業提供了即時的洞察和決策支持。然而,隨着數據量的激增和處理速度的加快,保證數據的一致性成爲了一個巨大挑戰。 實時數據一致性的定義以及面臨的挑戰 實時數據處理系統如何保障一致性 01 實時數據一致性的定義以及面臨的挑戰數據一致性通常指的是數據在整 ⌘ Read more
五分鐘學 NGINX - 詳解 Nginx 如何處理 HTTP 頭部**
Nginx 作爲高性能的 HTTP 服務器和反向代理服務器,在處理 HTTP 請求時,對 HTTP 頭部的處理是至關重要的一環。接收請求事件模塊     Nginx 使用了一個事件驅動的架構,這使得它能夠高效地處理大量的併發連接。下面是 Nginx 處理 HTTP 請求的詳細流程:1. 建立連接----------- 三次握手:客戶端通過發送 SYN 包開始與 Nginx 建立 TCP ⌘ Read more
給 Rust 新手力薦的《Learning Rust》教程**
引言----作爲一個系統級編程語言,Rust 以其高性能和內存安全著稱。然而對於初學者來說,Rust 的學習曲線比較陡峭。今天我想給大家推薦一本很棒的 Rust 學習教程——《Learning Rust》,它可以幫助 Rust 新手更好地掌握這門語言。創作背景----《Learning Rust》是 GitHub 上的一個開源項目,項目地址爲 https://github.com/QuineDotRead more
內存管理中分頁和分段有什麼區別?**
分頁和分段是操作系統在內存管理中用於有效分配內存和管理進程的兩種基本技術。01 分頁(Paging)-------------分頁是一種無需連續分配物理內存的內存管理方案。進程的地址空間被劃分爲固定大小的塊,稱爲頁,而物理內存被劃分爲固定大小的塊,稱爲幀。關鍵概念頁:進程地址空間的固定大小塊。 幀:物理內存的固定大小塊。 頁表:用於將虛擬地址映射到物理地址的數據結構。頁表中的每個條目對 ⌘ Read more
深入理解一致性 Hash 和虛擬節點**
在分佈式系統中架構中我們經常提到一致性哈希算法,那麼什麼是一致性哈希算法,爲什麼需要一致性哈希算法呢? 1、爲什麼需要一致性哈希算法     假設現在有三臺緩存服務器(緩存服務器 A、緩存服務器 B、緩存服務器 C),現在將數據預熱到這三臺服務器,我們可以使用負載均衡的方法將數據緩存到服務器上,如下圖所示:     通過負載均衡的方式可以把數據均勻的分發到三臺緩存服務器上,在讀取緩存 ⌘ Read more
【網絡協議】精講 UDP 協議特點和報文格式!圖解超讚超詳細!!!**
大家好,我是 風雲說通信 ,深耕無線通信網絡協議領域:    CSDN 博客:https://blog.csdn.net/jly20220520?type=blog    更多藍牙知識,盡在博客專欄:精講藍牙協議棧、精講 BLE 協議棧、Android Bluetooth Stack \\*   更多 3GPP 協議知識,盡在博客專欄:\\*精講 3GPP 協議棧1. UDP 定 ⌘ Read more
*
一文了解 OTA 升級功能**
當今這個年代,大家對於汽車上的 OTA 升級功能都不再陌生,因爲大多數車都支持這一功能,一年當中總會碰到一兩次 OTA 免費升級的推送信息。source:http://it.cha138.com/android/show-77091.html既然 OTA 功能已經這麼普遍,那麼本文就來詳細瞭解 OTA 是什麼?OTA 有什麼用?等等問題。1 什麼是 OTA隨着智能網聯和智能駕駛的快速發展,汽車控制 ⌘ Read more
6 大分庫分表中間件詳解 -圖文全面總結-**
大家好,我是 mikechen。分庫分表是大型架構的必備技能,也是大廠經常考察的重點對象,下面我就全面來詳解分庫分表中間件 @mikechen分庫分表分庫分表:是數據庫水平擴展的一種常見策略,用於處理大規模數據、和高併發請求。如下圖所示:分庫分表,這裏分爲兩個方面,包含:分庫、和分表兩種策略。1、分庫分庫:就是將數據水平分散到多個數據庫實例中,每個數據庫實例可以部署在不同的服務器上,從而減輕單個數 ⌘ Read more
TCP-IP 協議、三次握手、四次揮手詳解**
TCP/IP 協議模型(TCP 協議) 傳輸控制協議是一種面向連接的、可靠的、基於字節流的方式進行有序的無差錯的數據傳輸通訊協議,它負責完成傳輸層所指定的功能,利用重發技術和擁塞控制機制,嚮應用程序提供可靠的通信連接,使它能夠自動適應網上的各種變化。比如:數據報檢測、流量控制、擁塞控制、數據排序、超時重發等TCP/IP 是一個協議族,包括 TCP、IP、UDP、ICMP、RIP、SMTP、ARP、 ⌘ Read more
這些單片機也能運行 Rust 啦!**
隨着 Rust 的快速發展,Rust 在嵌入式中的支持越來越豐富。目前已經有非常多的 Rust 嵌入式項目和 Rust 單片機外設支持庫。理論上來說,目前大部分的 ARM、RISC-V 單片機 都能運行 Rust,但大部分單片機官方沒有編寫 Rust 外設庫,因此用戶暫時無法直接開發 Rust 應用。本文將介紹幾個已經支持 Rust 外設庫的常用單片機,包括 STM、 ESP、 AVR 、NRF ⌘ Read more
高可用存儲架構:集羣和分區**
主備、主從、和主主架構都基於一個共同的前提:主機需要有能力存儲所有數據。然而,主機的存儲和處理容量是有限的。以歷史發展爲例,Intel 386 時代的服務器僅能存儲幾百 MB 數據,到了 Intel 奔騰時代則能夠存儲幾十 GB,而進入 Intel 酷睿多核時代後,服務器的存儲能力增加到了數 TB。儘管從硬件發展角度看,存儲能力的提升速度相當快,但與業務需求的增長速度相比,這種提升還是遠遠不夠。例 ⌘ Read more
【網絡協議】精講 TCP 狀態機!圖解超讚超詳細!!!**
大家好,我是 風雲說通信 ,深耕無線通信網絡協議領域:    CSDN 博客:https://blog.csdn.net/jly20220520?type=blog    更多藍牙知識,盡在博客專欄:精講藍牙協議棧、精講 BLE 協議棧、Android Bluetooth Stack \\*   更多 3GPP 協議知識,盡在博客專欄:\\*精講 3GPP 協議棧今天我們來學習下 ⌘ Read more
*
深入理解分佈式鎖——以 Redis 爲例**
一、分佈式鎖簡介--------1\\. 什麼是分佈式鎖分佈式鎖是一種在分佈式系統環境下,通過多個節點對共享資源進行訪問控制的一種同步機制。它的主要目的是防止多個節點同時操作同一份數據,從而避免數據的不一致性。線程鎖: 也被稱爲互斥鎖(Mutex),主要用於控制同一進程中的多個線程對共享資源的訪問。 進程鎖 進程鎖是用於控制同一臺機器上的多個進程對共享資源的訪問。進程 ⌘ Read more
7 個強大的文字轉語音 TTS 引擎**
文本到語音(TTS)技術讓機器能以人聲般自然地 “說話”,架起了人機溝通的新橋樑。探索這一技術,開源 TTS 引擎以其開放性和經濟性,成爲創新者們的寵兒,爲智能應用注入活力。本文分享 7 個好用的開源文本到語音 (TTS) 引擎,爲讀者在技術選擇上提供清晰的視角和實用的參考。文本到語音 (TTS) 引擎文本到語音(TTS)引擎,是一種將文字信息轉化爲口語表達的智能軟件。它通過自然語言處理(NLP) ⌘ Read more
實戰 Linux I-O 多路複用:藉助 epoll,單線程高效管理 10-000 - 併發連接**
引言--  在應對高併發連接的傳統策略中,普遍採取爲每個連接配置單獨線程或進程的直接方式,管理其 I/O 操作。此法雖直觀易行,但隨業務規模擴張,線程資源需求急劇上升。相反,Linux 下的 I/O 多路複用技術,尤其是epoll,展示了一種高效路徑:單一線程即可監控成千上萬的文件描述符,極大提升了資源使用效率。   I/O 多路複用的場景有很多,也比較實用。通常用法epoll線程 + 線程 / ⌘ Read more
Fastwhisper - Pyannote 實現 ASR - 說話者識別**
前言最近在研究ASR相關的業務,也是調研了不少模型,踩了不少坑,ASR這塊,目前中文普通話效果最好的應該是阿里的modelscope上的中文模型了,英文的話,還是非whisper莫屬了,而且whisper很變態,粵語效果也還不錯,因此,如果實際業務中需要涉及到不同的語言,還是更推薦whisper多一點一、faster-whisper 簡單介紹faster-whisper是使用CTranslate2 ⌘ Read more
圖解支付系統的交易訂單狀態機設計**
大家好,我是隱墨星辰,今天和大家聊聊交易單據狀態機的設計與核心代碼實現。假如你做的是支付、電商等這類交易系統,但沒有聽過狀態機,或者你聽過但沒有寫過,又或者你是使用 if else 或 switch case 來寫交易訂單的狀態推進,建議花點時間看看,一定會有不一樣的收穫。如果你是產品經理,可以考慮推薦給你們的研發同學,說不定能提升系統的健壯性。這篇文章主要講清楚:清楚什麼是狀態機,簡潔的狀態機對 ⌘ Read more
Rust - 性能超越 Kotlin 的跨平臺方案**
現如今很多應用程序,爲了覆蓋儘可能多的用戶羣體會選擇同時在多個主流平臺上進行開發:移動端:iOS,android 桌面端:osx,windows,linux Web 端 所有平臺都基於各自的原生技術開發,雖然用戶體驗好但開發效率卻很低。爲了兼顧用戶體驗和開發效率,市面上誕生了一批跨平臺解決方案:移動端:apache cordova,react native,weex,flutte ⌘ Read more
Go 事件驅動編程:實現一個簡單的事件總線**
前言在當今微服務和分佈式系統盛行的背景下,事件驅動架構(Event-Driven Architecture,EDA)扮演着一個至關重要的角色,此架構的設計使得服務間可以通過事件進行同步或異步通信,替代了傳統的直接接口調用。基於事件的交互方式,促進了服務之間的松耦合,提高系統的可擴展性。發佈 - 訂閱模式是實現事件驅動架構的模式之一,它允許系統的不同組件或服務發佈事件,而其他組件或服務可以訂閱這些事 ⌘ Read more
MySQL 事務篇:ACID 原則、事務隔離級別及事務機制原理剖析**
引言--   衆所周知,MySQL數據庫的核心功能就是存儲數據,通常是整個業務系統中最重要的一層,可謂是整個系統的 “大本營”,因此只要MySQL存在些許隱患問題,對於整個系統而言都是致命的。那此刻不妨思考一個問題: MySQL在接受外部數據寫入時,有沒有可能會發生問題呢?有人也許會笑着回答:“那怎麼可能啊,MySQL在寫入數據時怎麼會存在問題呢”。   的確,MySQL本身在寫入數據時並不會有 ⌘ Read more
微服務 - 分庫分表的自增主鍵 ID 該如何設計?**
一. 前言-----分佈式 ID 是分佈式系統裏面非常重要的一個組成部分,那麼我們在設計分佈式 ID 的時候,需要考慮什麼問題呢?❓簡單結構下是怎麼實現 ID 的控制的? 單實例系統 :通過時間戳,系統內自增,上鎖等方式保證 ID 的唯一性 單數據庫實例 : 通過自增字段(不談性能)實現 ID 的唯一 ❓微服務 + 分庫分表了 ,又該如何進行控制? 問題 : 單個系統沒辦法 ⌘ Read more
優化內存訪問效率:理解 TLB 緩存原理和應用**
TLB 是 Translation Lookaside Buffer(地址轉換後備緩衝器)的縮寫,它是一種硬件緩存結構,用於加速虛擬內存地址到物理內存地址的轉換。在計算機系統中,使用虛擬內存可以使每個程序都有獨立的地址空間,並且能夠更高效地利用系統資源。然而,由於虛擬內存需要通過頁表將虛擬地址轉換爲物理地址,這一過程可能會引起較大的延遲。爲了加速地址轉換過程,TLB 作爲一個特殊的高速緩存被引入。 ⌘ Read more
如何使用 Rust 和 Kafka 進行高效的文件共享?**
在當今相互關聯的世界中,高效的文件共享是許多應用程序的基本需求,特別是在分佈式環境中運行的應用程序。在本文中,我們將探索如何利用 Kafka 和 Rust 的強大功能來構建高效的文件共享系統。構建項目使用以下命令創建一個 Rust 新項目:cargo new rust-kafka在深入實現細節之前,讓我們簡要討論一下 rdkafka,它是 Kafka C API 的 Rust 綁定。rdkafka ⌘ Read more
yq:基於 Go 實現處理 YAML、JSON、XML、CSV、TOML 的命令行工具**
在現代開發和運維的世界中,處理和轉換不同格式的數據文件如 YAML、JSON、XML、CSV 等是日常任務。文件格式的多樣性和複雜性常常給開發者帶來不小的挑戰。在這種情況下,強大的命令行工具能夠極大地簡化工作流程。本文將深入探討一個強大的多功能工具——go yq,它能夠便捷地處理 YAML、JSON、XML、CSV、TOML 以及屬性文件。安裝 go yq--------首先,我們需要安裝 go ⌘ Read more
基於 Zookeeper 實現分佈式鎖實踐**
基於 Zookeeper 實現分佈式鎖實踐1、什麼是 Zookeeper?Zookeeper 是一個分佈式的,開源的分佈式應用程序協調服務,是 Hadoop 和 hbase 的重要組件。引用官網的圖例: 特徵:zookeeper 的數據機構是一種節點樹的數據結構,zNode 是基本的單位,znode 是一種和 unix 文件系統相似的節點,可以往這個節點存儲或向這個節點獲取數據 通過客戶端 ⌘ Read more