# Twtxt is an open, distributed microblogging platform that # uses human-readable text files, common transport protocols, # and free software. # # Learn more about twtxt at https://github.com/buckket/twtxt # # This is an automated Yarn.social feed running feeds v0.1.0@72e53a9 # Learn more about Yarn.social at https://yarn.social # # nick = yue-fang-readfog # url = https://feeds.twtxt.net/yue-fang-readfog/twtxt.txt # type = rss # source = https://www.readfog.com/feed # avatar = https://feeds.twtxt.net/yue-fang-readfog/avatar.png#vb4wqhdj5rsuracksspo5ewnd47jagkxwt5c4n4hh67ohxqtio5a # description = # updated_at = 2023-12-08T07:23:44Z # 2023-11-01T07:08:54Z **10 種頂流聚類算法 Python 實現**
來源:海豚數據科學實驗室 機器學習雜貨店聚類或聚類分析是無監督學習的經典問題。它通常被用作數據分析技術,用於發現數據中的有趣模式,例如基於其行爲的客戶羣。有許多聚類算法可供選擇,對於所有情況,沒有單一的最佳聚類算法。相反,最好探索一系列聚類算法以及每種算法的不同配置。在本教程中,你將發現如何在 Python 中安裝和使用頂級聚類算法。完成本教程後,你將知道:聚類是在輸入數據的特徵空間中查找自然組的 ⌘ [Read more](https://www.readfog.com/a/1717353955166621696) 2023-11-01T07:27:51Z **一文搞懂使用 Buildpack 替代 Dockerfile 進行容器鏡像構建**
Hello folks,我是 Luga,今天我們來聊一下雲原生生態核心技術—— 鏡像構建,即 “基於 Buildpack 進行 Kubernetes Cluster 中容器鏡像的構建、部署” 。     通常而言,在現代的雲原生交付領域中,3 樣東西發揮着至關重要的作用:即 Efficiency(效率)、Speed(速度)以及 Simplicity(簡捷性)。而 Buildpacks(構 ⌘ [Read more](https://www.readfog.com/a/1717355146626830336) 2023-11-01T10:13:36Z **如何實現 Linux 服務 Crash 後自動重啓?**
概述--近期碰到了一個 Linux Systemd 服務 Crash, Crash 後需要人工介入重啓. 那麼, 有沒有辦法如何實現 Linux 服務 Crash 後自動重啓?Systemd-------Systemd Restart---------------Systemd 允許你對服務進行配置,以便在服務崩潰時自動重啓。一個典型的單元文件是這樣的:[Unit]Description=Tail ⌘ [Read more](https://www.readfog.com/a/1717365575490048000) 2023-11-01T10:28:11Z **Go 的異步編程:使用 Futures 與 Promises**
開場白---大家好!我是 [lincyang]。今天我們將探討 Go 語言中的異步編程,特別是如何使用 Futures 與 Promises。引言--在現代軟件開發中,異步編程是一種常見的編程範式,用於提高程序的性能和響應速度。Go 語言提供了多種異步編程的方法,其中 Futures 與 Promises 是非常有用的工具。Go 的異步編程基礎----------Go 語言使用 goroutine ⌘ [Read more](https://www.readfog.com/a/1717366492691009536) 2023-11-01T10:28:02Z **Envoy 基於文件和 API 的動態配置方式**
前面我們和大家學習了 Envoy 的基礎知識,使用靜態配置來認識了 Envoy,但實際上 Envoy 的閃光點在於其動態配置,動態配置主要有基於文件和 API 兩種方式。基於文件的動態配置---------Envoy 除了支持靜態配置之外,還支持動態配置,而且動態配置也是 Envoy 重點關注的功能,本節我們將學習如何將 Envoy 靜態配置轉換爲動態配置,從而允許 Envoy 自動更新。Envo ⌘ [Read more](https://www.readfog.com/a/1717366482763091968) 2023-11-01T10:27:17Z **Kprobes 應用實例分析:從源碼到調試方法全面解讀**
一、Kprobe 簡單介紹-------------kprobes Kretprobes 是 linux 系統的一個動態調試機制,使用它可以向內核添加探針(Probe),在代碼執行前或執行後觸發一個回調函數。這個機制通常用於調試內核代碼,跟蹤應用程序執行或收集性能統計信息。通過使用 kprobe,開發人員可以在不影響系統運行邏輯的情況下,對操作系統進行深入的分析和調試。它的基本工作機制是:用戶指定 ⌘ [Read more](https://www.readfog.com/a/1717366436297543680) 2023-11-01T10:26:35Z **【迎難學字】Zig 語言編程入門十例**
Zig 是一種系統編程語言,它旨在提供高性能、安全性和可靠性,並且具有現代編程語言的特性。Zig 語言簡介:設計目標:Zig 的設計目標之一是將底層系統編程和高級應用開發結合起來。它旨在爲開發者提供對硬件的直接控制以及高級抽象的能力,以滿足各種編程需求。 安全性: Zig 鼓勵編寫安全的代碼,通過提供內存安全和錯誤處理的機制來減少常見的編程錯誤。它在語言層面上支持可選的內存安全、空指針檢查和 ⌘ [Read more](https://www.readfog.com/a/1717366391651274752) 2023-11-01T10:30:50Z **深入淺出 GDB 調試器**
前言GDB 全稱 GNU symbolic debugger,它是誕生於 GNU 開源組織的(同時誕生的還有 GCC、Emacs 等)UNIX 及 UNIX-like 下的調試工具,是 Linux 下最常用的程序調試器,GDB 支持調試多種編程語言編寫的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。但是在實際應用中,GDB 更常用來調試 C 和 C++ 程序。雖然 ⌘ [Read more](https://www.readfog.com/a/1717366658960560128) 2023-11-02T03:45:42Z **一文搞懂 Linux 網絡 Phy 驅動**
概述--上圖來自 瑞昱半導體 (RealTek) 的 RTL8201F 系列網卡 PHY 芯片手冊。按 OSI 7 層網絡模型劃分,網卡 PHY 芯片 (圖中的 RTL8201F) 位於物理層,對應的軟件層就是本文討論的 PHY 驅動層;而 MAC 位於 數據鏈路層,也是通常軟件上所說的網卡驅動層,它不是本文的重點,不做展開。另外,可通過 MDIO 接口對 PHY 芯片進行配置(如 PHY 芯片寄 ⌘ [Read more](https://www.readfog.com/a/1717431767630188544) 2023-11-02T03:43:59Z **新手向:Go 語言發送郵件簡易教程**
\*概述電子郵件是應用程序中常見的功能之一, Go 語言內置了對 SMTP 協議的支持, 可以方便地用 Go 語言編寫程序來發送電子郵件。本文將簡單介紹如何使用 Go 語言的 net/smtp、net/mail 等標準包來發送電子郵件。主要內容包括 發送郵件簡介 構建郵件內容 連接 SMTP 服務器 發送包含附件的郵件 設置抄送與密送 使用模板發送郵件 示例: ⌘ [Read more](https://www.readfog.com/a/1717431659375202304) 2023-11-02T03:42:20Z **Go 通道機制與應用詳解**
一、概述Go 語言(也稱爲 Golang)是一個開源的編程語言,旨在構建簡潔、高效和可靠的軟件。其中,通道(Channel)是 Go 併發模型的核心概念之一,設計目的是爲了解決不同協程(Goroutine)間的數據通信和同步問題。通道作爲一個先進先出(FIFO)的隊列,提供了一種強類型、線程安全的數據傳輸機制。在 Go 的併發編程模型中,通道是一個特殊的數據結構,其底層由數組和指針組成,並維護着一 ⌘ [Read more](https://www.readfog.com/a/1717431555579809792) 2023-11-02T03:41:35Z **go 官方自帶限流庫超詳細教程來了,開發者必備**
golang.org/x/time/rate 是 Go 語言官方提供的一個限流庫,用於在程序中限制特定操作的速率。該庫使用了令牌桶算法,可以通過設置一個速率限制 r(即每秒可以執行的操作數)和一個容量 b(即令牌桶的大小)來控制操作的速率。下面是該庫的詳細使用教程。1.Allow(l Limit) bool: 該方法用於檢查是否可以處理一個事件(或一個令牌),返回一個布爾值。如果令牌桶中有足夠的令 ⌘ [Read more](https://www.readfog.com/a/1717431508210388992) 2023-11-02T03:47:29Z **Go etcd 的依賴問題終於解決了**
大家好,我是煎魚。前幾年非常高頻的接觸到這一堆微服務相關組件:grpc + grpc-gateway + etcd + protobuf + protoc-gen-go,一開始都是相安無事,逐步跟進新版本。這不,幺蛾子就來了。寫這些組件的開發大佬(或公司)都不在一起,各自爲政,各有各的想法、喜歡、規範... 因此會出互相不兼容,甚至出現了卡脖子的情況。各種兼容問題------當 etcd 是 v3 ⌘ [Read more](https://www.readfog.com/a/1717431879517442048) 2023-11-02T04:00:39Z **聽說你會架構設計?來,弄一個網盤系統**
引言1.1 青春的旋律---------大家好,我是小❤,一個漂泊江湖多年的 985 非科班程序員,曾混跡於國企、互聯網大廠和創業公司的後臺開發攻城獅。小❤最近發現,以前初高中時代喜歡的很多歌手,各大麴庫平臺的歌曲都開始收費了。比如以前喜歡的音樂才子 VAE,無論是江南夜色下的小橋屋檐,還是煙火絕、客怎眠的關外野店,亦或是紫煙留香、翩若絕影的驚鴻一面。那些動人的旋律都會在某個午睡後的黃昏,或大雨後 ⌘ [Read more](https://www.readfog.com/a/1717432708039282688) 2023-11-02T03:58:42Z **Next-js 的路由爲什麼這麼奇怪?**
Next.js 是 React 的全棧框架,主打服務端渲染,也就是 SSR(Server Side Rendering)。它有一套非常強大但也很奇怪的路由機制。這套路由機制是什麼樣的?爲什麼又說很奇怪呢?我們試一下就知道了。先創建個 Next.js 項目:npx create-next-app@latest執行 create-next-app,輸入一些信息,Next.js 項目就創建好了。進入項目 ⌘ [Read more](https://www.readfog.com/a/1717432585123106816) 2023-11-02T04:08:12Z **TCP 傳輸、重傳及工作原理**
IP 和 MAC 層的內存受限,用於發送數據包。因此,它們都會限制消息的長度。這一限制要求 TCP 在提供給 IP 層之前,將可變長度的字節打包成多個段。每個段的長度應該是合適的。下面是一個簡單的圖示,展示了段是如何通過互聯網發送的。客戶端的 HTTP 層正在向目標服務器發送一個 18 字節的流。當字節 16-18 尚未到達 TCP 層時,字節 12-15 通過了它。TCP 將它們打包成一個段,並 ⌘ [Read more](https://www.readfog.com/a/1717433182787309568) 2023-11-02T04:06:42Z **Linux 用戶必備的 Git 圖形化工具**
Git 是一個免費的開源分佈式版本控制系統,用於軟件開發和其他幾個版本控制任務。它旨在根據速度、效率和數據完整性來處理從小到大的項目。Linux 用戶主要可以通過命令行管理 Git,但是,有幾個圖形用戶界面 (GUI) Git 客戶端可以促進在 Linux 桌面上高效、可靠地使用 Git,並提供大部分(如果不是全部)命令行操作。因此,本文 [1] 下面列出了一些適合 Linux 桌面用戶的帶有 G ⌘ [Read more](https://www.readfog.com/a/1717433088500404224) 2023-11-02T04:05:39Z **ClickHouse - ClickVisual 構建日誌平臺**
越來越多的互聯網公司開始嘗試 ClickHouse 存儲日誌,比如映客、快手、攜程、唯品會、石墨文檔,但是 ClickHouse 存儲日誌缺少對應的可視化方案,石墨文檔開源了 ClickVisual 用於解決這個問題。筆者初步嘗試了一下 ClickVisual,一點小小的實踐經驗,與各位分享。簡介--ClickVisual 官方宣揚的核心功能是:輕量級日誌查詢、分析、報警可視化平臺。報警這塊有更好 ⌘ [Read more](https://www.readfog.com/a/1717433023100719104) 2023-11-03T02:29:41Z **解密 DDD:領域事件 -- 系統解耦的終極武器**
1\. 應用場景假如你是訂單服務的一名研發,正在開發支付成功這個業務功能,在深度學習 DDD 後,你寫出了一組漂亮的代碼。@Transactionalpublic void paySuccess(Long orderId){    // 1. 獲取並驗證訂單聚合根有效性    Order order = this.orderRepository.getById(orderId);    if (or ⌘ [Read more](https://www.readfog.com/a/1717517582356025344) 2023-11-03T02:34:40Z **對強一致存儲系統的思考**
對強一致存儲系統的思考 本文對強一致存儲系統進行思辨: Paxos/Raft 帶來了什麼?又失去了什麼?我們真的需要強一致性存儲系統嗎?我們業務對一致性要求沒到強一致的地步,真的需要 Paxos/Raft 驅動設計存儲系統嗎?我想用 PolarDB-X 話題討論|分佈式數據庫,掛掉兩臺機器會發生什麼 這篇引出本文。在阿里 PolarDB 公衆號中,作者羅列了主備架構的各種痛點,得出了一些結論:• ⌘ [Read more](https://www.readfog.com/a/1717517895899123712) 2023-11-03T02:43:42Z **手把手教你學會寫 DDD(領域驅動設計)項目代碼**
領域驅動設計在 20 多年前就已經提了出來,現在也有很多人提到 DDD,但是很多都是理論分析,沒有手把手的去在項目裏面實踐 DDD。這次開始從 0 寫一個 DDD 的項目來學習 DDD 是如何構建項目的。 還沒讀過 DDD 相關的書的同學建議多去讀一下,裏面有許多的專業術語,不需要讀的太懂。、因爲單純的概念解釋不能形成一個具象的如何實踐代碼的指導。 簡單來講和 DDD 對應的常用的一個模式是 ⌘ [Read more](https://www.readfog.com/a/1717518463215439872) 2023-11-03T02:41:08Z **Go 併發可視化解釋 - sync-Mute**
在學習 Go 編程語言時,您可能會遇到這句著名的格言:“不要通過共享內存來進行通信;相反,通過通信來共享內存。” 這句話構成了 Go 強大併發模型的基礎,其中通道(channels)作爲協程之間的主要通信工具。然而,雖然通道是管理併發的多功能工具,但錯誤地假設我們應該始終用通道替換傳統的鎖定機制,如 Mutex,是一個錯誤的觀念。在某些情況下,使用 Mutex 不僅恰當,而且比通道更有效。在我的 ⌘ [Read more](https://www.readfog.com/a/1717518302550528000) 2023-11-03T02:40:30Z **Rust 開發 WebAssembly 生命遊戲**
使用 Rust 開發 WebAssembly,你需要有一定的編程基礎。需要了解 Rust,瞭解 JavaScript,HTML,和 CSS。本節以生命遊戲爲例進行講解。1,安裝開發環境安裝 Rust 工具鏈,安裝 Rust 參考官網,https://www.rust-lang.org/;安裝 wasm 目標 rustup target add wasm32-unknown-unknown安裝 w ⌘ [Read more](https://www.readfog.com/a/1717518262681571328) 2023-11-03T02:38:47Z **從零用 Rust 編寫正反向代理,四層反向代理 stream-tcp 與 udp- 實現**
wmproxywmproxy是由Rust編寫,已實現http/https代理,socks5代理, 反向代理,靜態文件服務器,內網穿透,配置熱更新等, 後續將實現websocket代理等,同時會將實現過程分享出來, 感興趣的可以一起造個輪子法項目地址----gite: https://gitee.com/tickbh/wmproxygithub: https://github.com/tickbh/ ⌘ [Read more](https://www.readfog.com/a/1717518154735915008) 2023-11-03T02:50:07Z **DDD 實戰:應對併發挑戰,五個技巧讓你輕鬆應對**
在業務開發中,事務一致性核心在於 “原子性”,則併發管理的核心在於 “隔離性”。原子性:一個業務操作被視爲一個不可分割的邏輯單元,要麼全部執行成功,要麼全部失敗回滾; 隔離性:併發業務操作之間要相互隔離,不能互相干擾; 1\. 無處不在的併發 併發管理是指在多個用戶同時訪問、修改同一數據時,如何保證數據的準確性、一致性和完整性的一系列管理措施。併發無處不在是指在當前的業務系統和應用程序 ⌘ [Read more](https://www.readfog.com/a/1717518867655397376) 2023-11-03T02:55:51Z **Incus - 一個現代化、安全且強大的 Linux 系統容器和虛擬機管理器**
背景介紹在現代的 IT 環境中,我們經常會遇到需要管理和運行全套 Linux 系統(比如官方和社區版本的 Ubuntu 鏡像)的問題,這包括在容器或虛擬機中運行。同時,我們也需要一個能夠在單機到數據中心集羣之間進行擴展的解決方案,以便在開發和生產環境中運行工作負載。今天要給大家推薦一個 GitHub 開源項目 lxc/incus,該項目在 GitHub 有超過 1.0k Star,用一句話介紹該項 ⌘ [Read more](https://www.readfog.com/a/1717519228160020480) 2023-11-03T02:53:57Z **Rust 使用 Lettre 庫發送郵件**
Lettre 是一個電子郵件庫,允許創建和發送郵件。它有以下特性:可易用的電子郵件構建器,可插拔的電子郵件傳輸,統一碼支持,安全默認值,異步支持。它使用 sendmail 命令發送郵件,更多詳情請參考 docs.rs。 我們需要用到的郵件場景是郵件申請賬號時使用,它的郵件內容爲文本內容,包含覈驗碼和申請賬號的鏈接,我使用了 QQ 郵箱進行了實測,發送郵件速度還是很快的,郵件內容即支持文本內容,它 ⌘ [Read more](https://www.readfog.com/a/1717519108820537344) 2023-11-03T02:53:18Z **使用 ClickHouse 做日誌分析**
這是我們在 Monitorama 2022 上發表的演講的改編稿。您可以在此處找到包含演講者筆記的幻燈片和此處的視頻。當 Cloudflare 的請求拋出錯誤時,信息會記錄在我們的 requestserror 管道中。錯誤日誌用於幫助解決特定於客戶或網絡範圍的問題。我們,站點可靠性工程師 (SRE),負責管理日誌平臺。我們已經運行 Elasticsearch 集羣很多年了,這些年來日誌量急劇增加。 ⌘ [Read more](https://www.readfog.com/a/1717519067702726656) 2023-11-03T03:05:17Z **Go 是如何精緻得進行內存管理?**
前言Go 語言拋棄 C/C++ 中的開發者管理內存的方式,實現了主動申請與主動釋放管理,增加了逃逸分析和垃圾回收,將開發者從內存管理中釋放出來。所以我們在日常編寫代碼的時候不需要精通內存的管理,它確實很複雜。但是另一方面,如果你掌握了 Go 內存管理的基本概念和知識點,可以讓你寫出更高質量的,更壓榨機器性能的代碼;另外,還能幫助你更快更精準得定位 Bug,快速解決問題。所以,作爲進階的 Go 開發 ⌘ [Read more](https://www.readfog.com/a/1717519821387698176) 2023-11-03T03:04:32Z **DDD 之領域事件(Domain Event)**
領域事件(Domain Event)用於表示領域中重要事務的狀態變化或進展,用於記錄和傳遞發生在領域對象上的信息。定義和作用--------1.1 定義領域事件是領域中重要事務的狀態變化或進展的表示。它可以描述實體的狀態改變、業務操作的結果或領域中某個重要階段的達成等。1.2 作用領域事件在領域驅動設計中具有重要的作用:記錄和傳遞信息:領域事件可以記錄領域中發生的重要事務,形成一個事件溯源的基 ⌘ [Read more](https://www.readfog.com/a/1717519774688317440) 2023-11-03T03:04:31Z **玩轉 Go Slices 切片泛型庫**
大家好,我是 陳明勇,一個熱愛技術,喜歡鑽研技術的程序員。前言在 Go 1.21.0 版本中,引入了 切片泛型庫,它提供了很多有用的函數,特別是在搜索、查找和排序等方面,爲我們開發者提供了諸多便利之處。而本文將會對 slices 庫提供的函數進行介紹,準備好了嗎,準備一杯你喜歡的咖啡或茶,隨着本文一探究竟吧。slicesslices 庫包含的函數可以分爲以下類型:搜索:通過二分查找算法查找指定元素 ⌘ [Read more](https://www.readfog.com/a/1717519773544321024) 2023-11-03T10:48:00Z **goev - 一款基於 Go 語言的高性能、輕量級、非阻塞、I-O 事件驅動網絡框架**
背景介紹在進行 Go 語言的 TCP 網絡編程時,我們通常使用標準庫(go net),但是標準庫的協程壓力較大,因此我們需要一種更輕量級、高性能的非阻塞 I/O 事件驅動網絡框架。goev 就是爲此而生的。用一句話介紹 goev 項目就是:“goev is a lightweight, concise i/o event demultiplexer implementation in Go”。項目 ⌘ [Read more](https://www.readfog.com/a/1717548933243310080) 2023-11-03T10:47:30Z **一文搞懂基於 OpenTelemetry 進行 Kubernetes 全鏈路觀測**
Hello folks,我是 Luga,今天我們來聊一下雲原生生態核心技術—— 可觀測性,即 “基於 OpenTelemetry 進行 Kubernetes 全鏈路觀測” 。基於 OpenTelemetry 徹底改變我們的觀測意識 ---------------------------------     隨着組織越來越多地採用 Kubernetes 來部署和管理應用程序,Kubern ⌘ [Read more](https://www.readfog.com/a/1717548902056562688) 2023-11-03T10:51:00Z **映客基於 Clickhouse 的日誌體系建設實踐**
背景介紹--------作爲線上定位問題和排查故障的重要手段,日誌在可觀測領域有着不可替代的作用。因此,日誌系統需要追求穩定性、性能、成本、易用性、可擴展性等關鍵點。目前我司的日誌系統是基於 ELK 的,支持雲主機、容器日誌採集和特殊分類日誌的綜合採集等功能。但是隨着公司的業務發展,日誌應用場景逐漸遇到了一些瓶頸:數據增長和處理需求增加:業務的不斷擴張和數據量的增加,原有的日誌系統無法滿足現有的數 ⌘ [Read more](https://www.readfog.com/a/1717549121565462528) 2023-11-03T10:54:07Z **微服務基本功:啥是 Oneshot?**
Oneshot 在英文中是 “一擊” 或“一槍”的意思, 形容詞的意思是“一次性的”,名詞的意思是“一次性用品”,在 Rust 生態圈中嚐嚐用作一次性使用的併發原語,在 Go 生態圈中很少使用。這次我把Oneshot的概念引入到微服務框架裏面,用來指代客戶端對服務器一次性的調用,不需要等待服務器的返回。爲啥要引入 Oneshot ?-----------------在微服務框架中,客戶端調用服務端 ⌘ [Read more](https://www.readfog.com/a/1717549318222745600) 2023-11-03T10:52:57Z **信號驅動 IO 異步 IO 的對比理解刨析- epoll 的 ET-LT**
一. 談信號驅動 IO  (對比異步 IO 來看)-----------------------------信號驅動 IO 對比 異步 IO 進行理解信號驅動 IO: 內核將數據準備好的時候, 使用 SIGIO 信號通知應用程序進行 IO 操作通知應用程序處理 IO, 是開始處理 IO,          這個時候還是存在阻塞的,將數據從內核態拷貝進入到用戶態的過程至少是阻塞住的 ⌘ [Read more](https://www.readfog.com/a/1717549244801454080) 2023-11-06T03:19:50Z **Go 語言 Context 應用全攻略:異步編程利器**
\*概述在 Go 語言中,Context(上下文)是一個非常重要的概念,特別是在處理請求時。允許在請求的整個生命週期內傳遞數據、控制請求的取消、處理超時等。本文將介紹 Go 語言中 Context 的使用,幫助更好地理解與處理請求的傳遞與控制。主要內容包括 Context 基礎 Context 創建與傳遞 Context 的超時與取消 Context 的鏈式操作 Conte ⌘ [Read more](https://www.readfog.com/a/1717792528367980544) 2023-11-06T03:24:16Z **【c--】循環數組無鎖隊列的原理與實現**
前言------本文介紹基於循環數組的無鎖隊列的原理與實現。源碼:https://github.com/gopherWxf/c-c-linux-LearningCode/tree/master/3.2.4%E6%97%A0%E9%94%81%E9%98%9F%E5%88%97freequeue在 ZMQ 無鎖隊列的原理與實現一文中,我們已經知道了 ypipe 可以實現一線程寫一線程讀的無鎖隊列,那 ⌘ [Read more](https://www.readfog.com/a/1717792807109890048) 2023-11-07T03:41:07Z **Go 語言併發:釋放程序潛能的魔力**
\*概述在編程領域,處理多任務和併發操作是必不可少的。Go 語言以其簡潔而強大的併發機制而聞名。本文將簡單探討 Go 語言中的併發。從基本概念到併發的優勢,詳細解釋併發的原理,並通過通俗易懂的示例代碼領略 Go 語言併發編程的魅力。主要內容包括 併發與並行的區別 Goroutine:Go 語言輕量級線程的魅力 Channel:實現 Goroutine 間的通信 Select 語句 ⌘ [Read more](https://www.readfog.com/a/1717884463788167168) 2023-11-07T03:48:19Z **使用 Vite 搭建 React 項目**
背景--爲支持公司業務發展,方便業務在非工作時間段在手機端處理部分工作,需要新開發一個 移動飛書 H5 工作臺 系統。很高興能負責此次的項目搭建,讓我有機會從頭到尾地經歷一次項目的搭建過程。在此,我將記錄並分享從項目設計到最終上線的完整步驟,總結搭建過程中遇見過的坑。希望下次有這樣的機會時,能在本次搭建的基礎上,更快地搭建出質量更高的項目。需求概覽----在移動端使用。需要兼容 手機 及 pad。 ⌘ [Read more](https://www.readfog.com/a/1717884917228081152) 2023-11-07T03:42:59Z **開發微服務的 9 個最佳實踐**
大家好,我是不才陳某~微服務架構是一種演進的模式,從根本上改變了服務器端代碼的開發和管理方式。這種架構模式涉及將應用程序設計和開發爲鬆散耦合服務的集合,這些服務通過定義良好的輕量級 API 進行交互以滿足業務需求。它旨在通過促進持續交付和開發來幫助軟件開發公司加速開發過程,微服務架構模式從根本上改變了服務器端代碼的開發和管理方式。如果我們談論其基本特徵,則特定的微服務本身充當應用程序,與其他微服務 ⌘ [Read more](https://www.readfog.com/a/1717884581757161472) 2023-11-07T03:42:17Z **Rust 併發編程番外篇: Mutex 內部實現**
Mutex 是最常用的一種同步原語,它提供了互斥鎖的功能, 多線程可以互斥訪問共享數據以及通過鎖保護臨界區。Rust 標準庫提供了 Mutex 的實現,接下來我們看看它是怎麼實現的。Mutex 的定義---------Mutex包含三個字段。一個是內部實現的鎖 (sys::Mutex),根據不同的操作系統,可能選擇不同的實現。 一個是poison,用來標記鎖是否被破壞,是否中毒了。 最後一個是da ⌘ [Read more](https://www.readfog.com/a/1717884537052172288) 2023-11-07T03:41:49Z **在 Rust 中實現依賴注入**
依賴注入簡單地說,就是類應該依賴於抽象,例如數據源的抽象,而不是具體的實現。這意味着類將依賴於接口而不是真正的類。這有幾個好處:1,在不更改客戶端代碼的情況下,很容易將一個實現轉換爲另一個實現。2,由於接口通常只覆蓋類的總 API 的一小部分,因此可以精確地確定哪個類可以訪問哪些方法和功能。例如,如果有一個數據源類,可以有一個讀接口和一個寫接口,也可以有兩個接口的組合。然後,每個客戶端可以根據需要 ⌘ [Read more](https://www.readfog.com/a/1717884507529515008) 2023-11-07T04:06:06Z **gRPC 爲什麼這麼快?**
RPC(Remote Procedural Call, 遠程過程調用)之所以被稱爲 remote,因爲在微服務架構下,RPC 可以實現遠程服務之間的通信。從服務調用者的角度來看,它就像一個本地函數調用。下圖說明了 gRPC 的數據流。步驟 1:客戶前端發出 REST 調用。請求體通常爲 JSON 格式。 步驟 2-4:訂單服務(gRPC 客戶端)接收 REST 調用,對其進行轉換,然後向支付 ⌘ [Read more](https://www.readfog.com/a/1717886035517607936) 2023-11-07T04:08:52Z **Go 語言插件開發:Pingo 庫實踐**
概述在 Go 語言 的生態系統中,插件化開發是一個非常重要的話題。插件化開發允許你將應用程序劃分爲可獨立編譯和部署的模塊,這些模塊可以在運行時加載到主應用程序中,實現了應用程序的靈活性和可擴展性。本文將介紹如何在 Go 語言 中使用 Pingo 庫進行插件化開發,通過實例詳細演示 Pingo 的用法,幫助開發者快速掌握插件化開發的技巧。主要內容包括 瞭解插件化開發 安裝 Pingo 庫 ⌘ [Read more](https://www.readfog.com/a/1717886210203029504) 2023-11-07T04:08:51Z **一文搞懂 “支付 · 清結算 · 賬務” 全局**
大家對外賣都很熟悉,因爲會經常點外賣,我們以外賣場景爲例,分析外賣的整個交易鏈路,從用戶下單、商家接單、分配騎手、騎手取餐、配送到用戶取餐,從訂單、計價、配送、清分、記賬、結算到付款,講清楚每個環節的邏輯和內容。從一張外賣的小票入手進行分析,研究支付微觀層面的業務流轉、單據的生成等支付細節,最後抽象出一個可通用的支付清結算體系架構出來。4.1 一張小票看下面外賣盒上的紙質小票:牛肉拌飯 1 份一共 ⌘ [Read more](https://www.readfog.com/a/1717886208998215680) 2023-11-07T11:15:51Z **[Go 工具庫] 輕量級 - 零依賴故障容錯工具庫 Failsafe-go**
一、前言Failsafe-go 是一個用於構建容錯 go 應用程序的庫。它的工作原理是用一個或多個彈性策略組合可執行邏輯,這些策略可以根據需要進行組合和組合。策略包括重試、斷路器、速率限制器、超時、隔板和回退。1.1 速率限制器速率限制器可以限制執行速率,以防止系統過載。Failsafe-go 支持兩種類型的速率限制器:平滑和 Bursty。平滑速率限制器允許每個時間段的最大執行次數,使用漏桶方法 ⌘ [Read more](https://www.readfog.com/a/1717913073185034240) 2023-11-07T11:34:52Z **數十萬定時任務,如何高效觸發定時和超時**
項目產品中,大家都會有 "定時任務" 和 "定時超時" 的需求,初始階段,我們基本都是用少數的一些 timer,即使是任務量越來越大的時候,我們就難免維護着大量的 timer,或者進行了大量低效的掃描。定時任務使用場景: 當訂單一直處於未支付狀態時,如何及時的關閉訂單 (已經使用)如何定期檢查處於退款狀態的訂單是否已經退款成功 (後期重構使用)設計方案: 整個 Redis 當做消息池,以 KV ⌘ [Read more](https://www.readfog.com/a/1717914269412069376) 2023-11-07T11:34:25Z **Rust 另一個網絡框架 Ntex**
Ntex 是一個強大而務實的框架。從所有的意圖和目的來看,這是一個微型框架。如果你已經是一名 Rust 程序員,你可能會很快發現它似曾相識,即使你來自另一種編程語言,你也應該發現 Ntex 很容易上手。使用 Ntex 開發的應用程序生成的執行文件中內嵌 HTTP 服務器。您也可以將其放在另一個 HTTP 服務器(如 nginx)後面。內嵌的 HTTP 服務器可以提供 HTTP/1 和 HTTP/2 ⌘ [Read more](https://www.readfog.com/a/1717914241478004736) 2023-11-07T11:34:07Z **go 的 sort 包真心強大,但你真的會用嗎**
讀書的時候,最重要的是成績的排序;工作的時候是能力,金錢的排序;戀愛的時候,也有對愛的排序。這些都是走過的路,是已經確定的排序。 對於做後端的同學,對數據的排序一定不會陌生。比如在一個分頁查詢商品信息的頁面,需要根據商品的創建時間倒序排列,也就是最新創建的商品排在最前面。這個需求實現起來很簡單,只需要使用 sql 的排序語句就可以實現select from product order by c ⌘ [Read more](https://www.readfog.com/a/1717914222414893056) 2023-11-07T11:31:29Z **一文徹底搞透分佈式一致性**
分佈式系統下的數據一致性可以分爲兩大類:事務一致性:當多個節點進行操作時,所有節點最終達成的狀態都是一致的。這需要通過協調來保證操作的正確性,避免出現數據不一致的情況; 副本一致性:數據的多個副本之間保持一致性,這需要保證在對數據進行修改時,所有副本都能夠及時更新,避免數據出現不同步的情況; 定義都比較抽象,舉個例子感受一下:事務一致性:電商平臺使用優惠券下單場景: 下單 ⌘ [Read more](https://www.readfog.com/a/1717914056579452928) 2023-11-07T11:29:28Z **一口氣把 SSH 原理搞懂了**
來源:https://www.cnblogs.com/cjsblog/p/9476813.htmlSSH(Secure Shell,安全外殼)是一種網絡安全協議,通過加密和認證機制實現安全的訪問和文件傳輸等業務。傳統遠程登錄或文件傳輸方式,例如 Telnet、FTP,使用明文傳輸數據,存在很多的安全隱患。隨着人們對網絡安全的重視,這些方式已經慢慢不被接受。SSH 協議通過對網絡數據進行加密和驗證, ⌘ [Read more](https://www.readfog.com/a/1717913929506721792) 2023-11-07T11:29:04Z **WasmGC:給 GC 語言的高效絲滑 WebAssembly 垃圾回收**
在互聯網時代,在瀏覽器中運行新世界成了一個新的目標。爲了實現這個目標,之前的 JS+Web 控件,flash、傳統的 Web 2.0,甚至 html 5 技術顯然都不夠。在這種情況下 WebAssembly 應運而生。將傳統編程語言編譯成字節碼,然後交給 WebAssembly 在瀏覽器中執行,可以實現在瀏覽器中真真切切的高效、安全的富應用執行。讓傳統只能在本地電腦上執行的大型應用程序,比如大型遊 ⌘ [Read more](https://www.readfog.com/a/1717913904432123904) 2023-11-07T11:28:24Z **Linux 怎麼防止 ssh 被暴力破解**
來源:Linux 開源社區SSH 是一種廣泛使用的協議,用於安全地訪問 Linux 服務器。大多數用戶使用默認設置的 SSH 連接來連接到遠程服務器。但是,不安全的默認配置也會帶來各種安全風險。具有開放 SSH 訪問權限的服務器的 root 帳戶可能存在風險。尤其是如果你使用的是公共 IP 地址,則破解 root 密碼要容易得多。因此,有必要了解 SSH 安全性。這是在 Linux 上保護 S ⌘ [Read more](https://www.readfog.com/a/1717913863267127296) 2023-11-07T11:28:04Z **七張圖解鎖 Mybatis 整體脈絡,讓你輕鬆拿捏面試官**
本文筆者計劃從全局角度來對 Mybatis 的整體架構及進行一次回顧和總結,希望能幫助你更加透徹的理解 Mybatis。1 前言----MyBatis是一款ORM(Object-Relational Mapping)框架,其主要用於將Java對象與關係數據庫之間進行映射,憑藉其輕量性、穩定性以及廣泛的開源社區其受到了廣大開發者的追捧。那MyBatis爲我們做了哪些事情呢?其實,總結來看主要有如下幾 ⌘ [Read more](https://www.readfog.com/a/1717913841812213760) 2023-11-07T11:27:20Z **goroutine 源碼分析,直擊併發底層實現**
\*概述Go 語言中的 goroutine 是一種輕量級線程, goroutine 之間通過 channel 進行通信。使用 goroutine 可以方便地編寫併發程序。本文將介紹 goroutine 的使用方法、調度原理、同步處理及實戰案例等內容。1、goroutine 簡介goroutine 是 Go 語言提供的輕量級線程, 具有以下特點 每個 goroutine 佔用內存很小, 只有 2KB ⌘ [Read more](https://www.readfog.com/a/1717913795883536384) 2023-11-07T11:39:15Z **Linux 孤兒進程與殭屍進程產生及其處理**
在探討這個問題之前,我們先來弄清什麼是進程。進程 (Process) 是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。程序是指令、數據及其組織形式的描述,進程是程序的實體。進程是一個具有獨立功能的程序關於某個數據集合的一次運行活動。它可以申請和擁有系統資源,是一個動態的概念,是一個活動的實體。它不只是程序的代碼,還包括當前的活動,通過程序計 ⌘ [Read more](https://www.readfog.com/a/1717914545268297728) 2023-11-07T11:38:21Z **Rust UPnP 的介紹和簡單使用**
閒來無事,看了下路由器的後臺管理界面,發現這個頁面: 百度百科的名詞解釋:UPnP,Universal Plug and Play,中文是 “通用即插即用”,這是一套網絡協議,該協議的目標是使家庭網絡和公司網絡中的各種設備能夠相互無縫連接,並簡化相關網絡的實現。UPnP 通過定義和發佈基於開放、因特網通訊網協議標準的 UPnP 設備控制協議來實現這一目標。UPnP 的基本組件爲服務、設備和控制點 ⌘ [Read more](https://www.readfog.com/a/1717914488751099904) 2023-11-07T11:37:37Z **可觀測性數據收集集大成者:Vector**
如果企業提供 IT 在線服務,那麼可觀測性能力是必不可少的。“可觀測性” 這個詞近來也越發火爆,不懂 “可觀測性” 都不好意思出門了。但是可觀測性能力的構建卻着實不易,每個企業都會用到一堆技術棧來組裝建設。比如數據收集,可能來自某個 exporter,可能來自 telegraf,可能來自 OTEL,可能來自某個日誌文件,可能來自 statsd,收集到數據之後還需要做各種過濾、轉換、聚合、採樣等操作 ⌘ [Read more](https://www.readfog.com/a/1717914443028992000) 2023-11-07T11:36:36Z **如何實現異步通知的重試機制**
工作中經常要和第三方做對接,比如支付、電子合同等系統。操作成功之後,第三方會發送異步的通知,返回最終的處理結果,使用異步而不是使用同步通知,是爲了加快系統響應速度,防止線程阻塞。任務處理完成後通過異步的通知,發送給對應的服務端。之前對接微信支付,完成支付後,微信發送一個異步通知給服務端,服務端根據支付通知修改狀態,通知規則看到以下的一段話。其中有段話: 重新發送通知,直到成功爲止(在通知一直不成 ⌘ [Read more](https://www.readfog.com/a/1717914378801614848) 2023-11-07T11:35:42Z **Go 的元編程:代碼生成與 AST 操作**
大家好!我是 [lincyang]。今天我們要一起探討 Go 語言中的元編程,特別是代碼生成和抽象語法樹(AST)操作。元編程是一種編程範式,它允許我們在編譯時或運行時動態地生成或修改代碼。代碼生成的概念與應用什麼是代碼生成?代碼生成是一種編程技術,通過它,程序可以自動地生成源代碼。這在很多場景下都非常有用,比如:ORM 映射、協議緩衝區(Protocol Buffers)等。爲什麼需要代碼生成? ⌘ [Read more](https://www.readfog.com/a/1717914322368303104) 2023-11-08T03:08:00Z **Go 新手步步爲贏:併發編程通信指南**
\*概述Go 語言在併發通信方面有着獨特的 CSP 併發模型。Go 語言主要通過 Channel 實現 Goroutine 間通信, 也支持共享內存和原子操作方式。本文將通過示例闡述 Go 語言的各種併發通信方式。主要內容包括 併發通信機制 Channel 通信詳解 共享內存通信 原子操作通信 通信方式選用指南 Channel 通信示例 一、併發通信機制Go 語言支 ⌘ [Read more](https://www.readfog.com/a/1717972977129197568) 2023-11-08T03:07:10Z **你需要知道的 32 個 Rust 庫 - 4**
19,Getset以前的 Java 程序員會喜歡這個 crate。Getset crate 包含用於生成 getter 和 setter 方法的過程性宏。use getset::{CopyGetters, Getters, MutGetters, Setters};[derive(Getters, Setters, MutGetters, CopyGetters, Default)]pub str ⌘ [Read more](https://www.readfog.com/a/1717972925417623552) 2023-11-08T03:12:24Z **得物雲原生全鏈路追蹤 Trace2-0 - 採集篇**
0xcc 開篇2020 年 3 月,得物技術團隊在三個月的時間內完成了整個交易體系的重構,交付了五彩石項目,業務系統也進入了微服務時代。系統服務拆分之後,雖然每個服務都會有不同的團隊各司其職,但服務之間的依賴也變得複雜,對服務治理等相關的基礎建設要求也更高。對服務進行監控是服務治理、穩定性建設中的一個重要的環節,它能幫助提早發現問題,預估系統水位,以及對故障進行分析等等。從 2019 年末到現在, ⌘ [Read more](https://www.readfog.com/a/1717973254109499392) 2023-11-08T03:10:39Z **徹底理解進程、線程、多進程與多線程及其優缺點**
首先,從定義開始,先看一下教科書上 進程和線程定義:進程:資源分配的最小單位。線程:程序執行的最小單位。心中默唸,啥啥啥,寫的這是啥。1、進程--------進程是程序執行時的一個實例,即它是程序已經執行到課中程度的數據結構的彙集。從內核的觀點看,進程的目的就是擔當分配系統資源(CPU 時間、內存等)的基本單位。舉例說明進程:想象一位有一手好廚藝的計算機科學家正在爲他的女兒烘製生日蛋糕。他有做生日 ⌘ [Read more](https://www.readfog.com/a/1717973144104439808) 2023-11-08T03:10:22Z **1-8w 字詳解 SQL 優化**
很多朋友在做數據分析時,分析兩分鐘,跑數兩小時?在使用 SQL 過程中不僅要關注數據結果,同樣要注意 SQL 語句的執行效率。本文涉及三部分:SQL 介紹 SQL 優化方法 SQL 優化實例 1、MySQL 的基本架構1)MySQL 的基礎架構圖左邊的 client 可以看成是客戶端,客戶端有很多,像我們經常你使用的 CMD 黑窗口,像我們經常用於學習的 WorkBench,像企 ⌘ [Read more](https://www.readfog.com/a/1717973126035378176) 2023-11-08T03:26:08Z **一個易用的消息訂閱發佈系統 - Pubsub-js**
本文作者系 360 奇舞團前端開發工程師簡介--隨着軟件架構越來越複雜,如何有效地解決各個模塊之間的通信問題變得尤爲重要。一種常見的解決方案就是採用消息訂閱發佈機制。在這種模式下,每個模塊只需要關注自己要發送或接收的消息,而不必關心其他模塊的內部實現。今天要介紹的 pubsub.js 就是一個非常實用的消息訂閱發佈庫。它具有使用簡單、性能高效、支持多平臺等優點,可以很好地滿足各種需求。基本使用 ⌘ [Read more](https://www.readfog.com/a/1717974118074257408) 2023-11-08T03:26:35Z **Rust Websocket 設置心跳**
WebSockets 是一種先進的技術。它可以在用戶的瀏覽器和服務器之間打開交互式通信會話。服務端可以主動給客戶端推送消息。相比於 HTTP,使用 Websocket,你可以從服務器主動向客戶端發送消息,而無需客戶端通過輪詢服務器的方式以獲得響應。它基於 TCP,可以從 HTTP 升級爲 Websocket。常見的應用場景就是媒體聊天,彈幕,協同編輯,基於位置的應用,體育實況更新、股票基金報價實時 ⌘ [Read more](https://www.readfog.com/a/1717974146813628416) 2023-11-09T04:24:25Z **使用 GO 語言開發跨平臺桌面應用**
Energy 是 Go 基於 CEF(Chromium Embedded Framework) 開發的框架,內嵌 CEF 二進制,用於構建 Windows、Mac OS X 和 Linux 桌面應用程序。項目簡介 energy 是 Go 基於 CEF(Chromium Embedded Framework) 開發的框架,內嵌 CEF 二進制 使用 Go 和 Web 端技術 (HTML ⌘ [Read more](https://www.readfog.com/a/1718068382077652992) 2023-11-09T04:23:06Z **端到端全能加密平臺 - Phase**
Phase 是一個開源(核心)的端到端可自託管的全能加密平臺,用於在你的基礎架構中供開發人員管理祕鑰和環境變量。功能特性----控制檯:無縫創建、管理、輪換機密數據和環境變量的儀表盤 保護您的密鑰:通過 24 個單詞的助記符短語保持自己的根密鑰的自主性 密鑰管理:差異化、版本控制和時間點恢復 RBAC:每個應用程序、每個環境的細粒度、基於角色和密碼的訪問控制 服務令牌:使用 ⌘ [Read more](https://www.readfog.com/a/1718068299296772096) 2023-11-09T04:22:40Z **內核是如何給容器中的進程分配 CPU 資源的?**
現在很多公司的服務都是跑在容器下,我來問幾個容器 CPU 相關的問題,看大家對天天在用的技術是否熟悉。容器中的核是真的邏輯核嗎? Linux 是如何對容器下的進程進行 CPU 限制的,底層是如何工作的? 容器中的 throttle 是什麼意思? 爲什麼關注容器 CPU 性能的時候,除了關注使用率,還要關注 throttle 的次數和時間? 和真正使用物理機不同,Linux ⌘ [Read more](https://www.readfog.com/a/1718068271871266816) 2023-11-10T02:39:17Z **Go 語言如何在終端打開實現進度條處理數據**
在 Go 語言中,可以使用第三方庫如pb(progress bar)來在終端上實現進度條以處理數據。這個庫可以幫助您更容易地在終端中顯示進度信息。使用pb庫的示例來顯示數據處理的進度條首先,您需要安裝pb庫:go get github.com/cheggaaa/pb/v3接下來,使用以下代碼示例來實現一個數據處理的進度條:package mainimport (    "fmt"    "ti ⌘ [Read more](https://www.readfog.com/a/1718152364506058752) 2023-11-10T02:44:33Z **Go 如何解決併發中的競爭狀態**
\*概述在 Go 語言中,實現併發編程是其強大功能之一。然而,隨之而來的是競爭狀態(Race Condition)問題,這是在多個 Goroutine 併發訪問共享資源時可能遇到的一種常見錯誤。本文將介紹競爭狀態的概念、示例代碼以及解決方案,幫助理解並避免在 Go 開發的程序中出現競爭狀態的問題。主要內容包括 1. 競爭狀態簡介 2. 共享資源與競爭條件 3. 競爭狀態的示例 ⌘ [Read more](https://www.readfog.com/a/1718152696056352768) 2023-11-10T02:43:49Z **2023 年軟件工程師的 Mac 工具箱**
MacOS 上有許多優秀的生產力軟件和工具,加上更貼近 Linux 的使用習慣,贏得許多開發者的青睞,Windows PC 雖然無所不能,出於將工作和娛樂分開的目的,本人的 PC 已經完全變成了「Steam 啓動器和原神啓動器」了( 原神,啓動!🤓) ❝ 「TL;DR(Too Long,Don‘t read - 太長不讀」) ❞文章篇幅較長,直接列一個省流概括,, 如果有精力還是建議 ⌘ [Read more](https://www.readfog.com/a/1718152649661059072) 2023-11-13T04:13:32Z **Go 的插件機制:動態加載與卸載**
大家好,我是 [lincyang]。今天,我們要深入探討 Go 語言的插件機制,特別是動態加載與卸載的相關技術。Go 語言的插件系統提供了一種將編譯好的代碼作爲插件動態加載到 Go 程序中的能力,這爲程序的擴展性和模塊化提供了極大的便利。Go 插件機制概述---------Go 語言從 1.8 版本開始引入了插件系統(plugin package),允許用戶動態加載預編譯的代碼庫。這些代碼庫以.s ⌘ [Read more](https://www.readfog.com/a/1718430085463248896) 2023-11-13T04:10:35Z **最大化 Rust 代碼的性能 - 內存優化及構建配置**
內存優化除了優化算法和數據結構之外,內存優化是編寫高效 Rust 代碼的另一個重要方面。已知容量時指定容量在 Rust 中,可以將 Vec 類型用於動態數組。當向 Vec 添加元素時,它會自動管理底層緩衝區,並在必要時重新分配它。但是,這個重新分配過程涉及分配新內存、複製現有元素和釋放舊緩衝區。爲了避免不必要的重新分配,你可以使用 withcapacity 方法預先分配一個具有初始容量的 Vec。 ⌘ [Read more](https://www.readfog.com/a/1718429899810770944) 2023-11-13T04:16:12Z **併發與並行:Go 語言中的異曲同工**
\*概述在 Go 語言中,經常聽到併發(Concurrency)和並行(Parallelism)這兩個概念;它們雖然看似相近,但卻有着不同的內涵。本文將探討併發與並行的區別,通過實例代碼演示,幫助讀者深刻理解這兩者在 Go 語言中的應用場景及實現方式。1. 併發與並行:概念辨析在計算機開發領域,併發 和 並行 這兩個概念經常被混淆使用,但它們有着明確的區別。簡而言之,併發 是指任務在時間上重疊執行, ⌘ [Read more](https://www.readfog.com/a/1718430252759355392) 2023-11-14T03:12:38Z **爲什麼使用 Golang 而非 Rust 開發桌面應用?**
MoonGuard 團隊選擇 Golang 而不是 Rust 作爲他們的 Krater 桌面應用程序,因爲 Golang 中更容易進行內存管理、類型安全和 ORM 支持。使用 Rust 和 Tauri 時面臨的一些挑戰包括:難以理解 Rust 的所有權和借用規則、 其嚴格的類型安全有時會限制開發速度、 難以爲 SQLite 找到合適的 ORM, 以及測試非常複雜。 項目進行 ⌘ [Read more](https://www.readfog.com/a/1718516850688626688) 2023-11-14T03:12:37Z **萬字解析 go 語言分佈式消息隊列 nsq**
0 前言本期和大家一起探討一款完全基於 go 語言實現的分佈式消息隊列——nsq.有關於消息隊列 Message Queue 的概念及作用,大家可以參考我之前發表的文章——萬字長文解析如何基於 Redis 實現消息隊列,這些基礎知識本文不再贅述.nsq 是一款基於 go 語言開發實現的分佈式消息隊列組件,在 golang 世界中擁有着很高的認可度和流行性,截止今日在 github 上的 stars ⌘ [Read more](https://www.readfog.com/a/1718516849809920000) 2023-11-14T03:45:18Z **帶你深度瞭解 unsafe-Pointer**
一、前言相信看過 Go 源碼的同學已經對 unsafe.Pointer 非常的眼熟,因爲這個類型可以說在源碼中是隨處可見:map、channel、interface、slice… 但凡你能想到的內容,基本都會有 unsafe.Pointer 的影子。看字面意思,unsafe.Pointer 是 “不安全的指針”,指針就指針吧,還安不安全的是個什麼鬼?二、指針爲了更深入瞭解 unsafe.Point ⌘ [Read more](https://www.readfog.com/a/1718518905403707392) 2023-11-14T03:46:43Z **DDD 死黨:查詢模型的本質**
1\. 查詢模型的本質 查詢模型的本質就是:爲不同的應用場景選擇最合適的存儲引擎,充分發揮各個存儲引擎的優勢。在系統中,讀接口的數量遠超寫接口,但我深信:== 再簡單的寫也是複雜,再複雜的讀也是簡單。==爲什麼呢?因爲,想做好查詢只需爲不同的應用場景選擇最合適的存儲引擎,從而充分發揮底層存儲引擎的優勢,然後所面對的高性能、高併發等技術問題就迎刃而解了。如下圖所示:面對一個查詢請求,我們需要:接受並 ⌘ [Read more](https://www.readfog.com/a/1718518995249893376) 2023-11-14T09:34:22Z **Log - 一個簡潔且多彩的 Go 語言日誌庫**
背景介紹在日常的開發工作中,我們經常需要記錄程序運行過程中的各種信息,以便於我們瞭解程序的運行狀態,發現並解決問題。然而,標準的日誌庫通常功能單一,輸出格式單調,缺乏人性化的設計,使得我們在查看日誌時需要花費大量的時間和精力。因此,我們需要一個功能強大,易於使用,輸出格式豐富多彩的日誌庫,來提高我們的開發效率。今天要給大家推薦一個 GitHub 開源項目 charmbracelet/log,該項目 ⌘ [Read more](https://www.readfog.com/a/1718540867556446208) 2023-11-14T09:33:49Z **Golang 不可不知的 7 個併發概念**
併發性支持是 Golang 最重要的原生特性之一,本文介紹了 Golang 中和併發性相關的 7 個概念。原文: Golang: 7 must-know concurrency related concepts[1]併發是 Go 編程語言的基本特性,意味着程序可以同時執行多個任務。Golang 的併發獨特而強大,其內置的輕量級協程 (goroutine) 和通道 (channel) 支持創建可 ⌘ [Read more](https://www.readfog.com/a/1718540833003769856) 2023-11-14T09:33:16Z **Goroutine 和 coroutine 區別,這一篇就夠了**
\*概述Goroutine 和 Coroutine 都是在編程中用於實現併發的概念,但它們有着不同的實現方式、特性和用途。本文將探討這兩種併發模型的區別,通過具體的示例代碼演示它們的使用和特點。一、什麼是 Goroutine1.1 定義 GoroutineGoroutine 是 Go 語言中的輕量級線程,由 Go 的運行時系統負責管理。與傳統線程相比,Goroutine 更輕便、更高效,能夠更好地支 ⌘ [Read more](https://www.readfog.com/a/1718540798296952832) 2023-11-14T09:48:41Z **快速掌握 9 種 UML 圖,5 分鐘上手,附 10 張實操案例!**
作者:tontom 原文:Java 知音狀態圖(statechar diagram) 活動圖(activity diagram) 用例圖(use case diagram) 類圖(class diagram) 對象圖(subject diagram) 時序圖(sequence diagram) 協作圖(communication diagram) ⌘ [Read more](https://www.readfog.com/a/1718541768426885120) 2023-11-15T02:54:05Z **如何用 Rust 構建一個簡單的 Kafka 生產者和消費者應用程序**
在這篇文章中,我們將構建一個簡單的 Rust 應用程序,由生產者和消費者組成,使用來自 Hacker News 的搜索數據。先決條件Rust 1.66 or later VSCode Docker 建立一個新的 Rust 項目在本例中,我們將利用 Cargo 的工作區特性。工作區包含多個應用程序或庫,但可以從頂層目錄編譯。讓我們開始吧,創建包含所有源代碼的項目目錄。$ mkdir ⌘ [Read more](https://www.readfog.com/a/1718606280898220032) 2023-11-15T02:53:32Z **無緩衝通道:Go 語言同步之道**
\*概述在 Go 語言中,通道(Channel)是一種強大的併發原語,而無緩衝的通道更是引人注目。無緩衝的通道具有精準同步的特性,它在發送和接收數據時會強制等待對方準備好,從而實現了協程之間的高效同步。本文將探討 Go 語言中無緩衝通道的特性、用法和實際應用。1. 無緩衝通道無緩衝通道是指通道在創建時沒有預留存儲空間,發送和接收操作必須同時發生,否則會導致阻塞。下面是一個簡單的無緩衝通道的例子pac ⌘ [Read more](https://www.readfog.com/a/1718606245961764864) 2023-11-15T02:57:35Z **TCMalloc 內存分配器如何減少內存碎片?**
前言------前文說過 TCMalloc 的基本原理,ThreadCache、PageHeap、PageMap 之類的,有了這些組件,基本算的上一個現代化的內存分配器了。但對於 TCMalloc 來說,這些只是萬里長征第一步,實現一個高性能的內存分配器還有很長的路要走。本文圍繞着如何減少內存碎片這一問題,來看看 TCMalloc 對這方面的考量。什麼是內存碎片?------------這基本上是 ⌘ [Read more](https://www.readfog.com/a/1718606500285485056) 2023-11-15T06:51:44Z **全網最細!列存高效更新技術介紹**
列存具有「讀友好,寫不友好」的特點。這個特點使列存和 AP 數據庫彷彿王八看綠豆一樣——對上眼了。因爲 AP 數據庫正好重視讀性能(大查詢吞吐量),不重視寫性能(能容忍 T+1h/1d 更新)。於是,列存順理成章地霸佔了 AP 數據庫的存儲底座。近年來,隨着業務的發展,越來越多的業務場景霸道地要求 AP 數據庫必須具備實時分析能力。爲此,AP 數據庫必須把上游 TP 數據庫產生的寫入和更新實時地導 ⌘ [Read more](https://www.readfog.com/a/1718621231935229952) 2023-11-15T06:50:51Z **Rust 併發控制之 Barrier**
Rust 有很多種控制併發的方式,Barrier(屏障)是其中一種用來同步多線程計算的方式。今天拿代碼來簡單看下。比如我們要多線程計算,期望所有線程都計算完畢再輸出最終結果。常規多線程代碼示例可以用線程 join 來等待use std::sync::{Arc, Mutex};fn main() {    let numthreads = 10;    let mymutex = Arc::new( ⌘ [Read more](https://www.readfog.com/a/1718621176489676800) 2023-11-16T03:20:37Z **只改一個參數讓 Golang GC 耗時暴降到 1-30!**
👉導讀Golang GC 問題的處理網上有比較多的參考文章與教程,本文則聚焦在一次實際業務場景中遇到的問題,並將問題排查處理的全過程詳細地做了整理記錄,相信對各位 Gopher 有較大參考價值。👉目錄1 問題現象2 確定原因3 根因分析 4 刨根問底 5 解決方案6 問題解決7 總結 01問題現象 最近有調用方反饋,在使用我們提供的某接口一段時間後,超時率的毛刺比較多,有時候成功率會 ⌘ [Read more](https://www.readfog.com/a/1718698547058151424) 2023-11-16T03:23:49Z **從 4 萬行代碼降到 1-8 萬,騰訊視頻竟然用 DDD 做架構重構?**
👉導讀DDD 的指導思想很多時候較爲晦澀,與實際業務中的架構設計場景往往較難結合理解。本文通過引入架構映射等方式將二者結合,試圖給出一套量化評估方法並通過騰訊視頻一起看系統的實踐案例說明如何應用。👉目錄1 領域驅動2 軟件架構3 架構映射4 視頻一起看5 效果評估 6 幾點說明 在上一篇文章《研發深惡痛絕,業界持續熱捧,DDD 到底是啥?》中,我們展開闡述了 DDD 理論的發展背景與現實問題, ⌘ [Read more](https://www.readfog.com/a/1718698748509523968) 2023-11-16T03:22:11Z **Go 語言 Channel 進階:巧妙運用超時機制**
\*概述在 Go 語言中,Channel(通道)是一種強大的工具,而超時機制則爲併發編程增添了更多控制的手段。本文將討論 Go 語言中 Channel 超時機制的特性、用法以及如何在併發程序中精準地掌握等待時間。1. 超時機制基礎超時機制是通過 time.After 和 select 結合使用來實現的。以下是一個簡單的例子package mainimport ( "fmt" "time")fun ⌘ [Read more](https://www.readfog.com/a/1718698645500563456) 2023-11-16T03:26:00Z **HBase 詳細介紹及原理解析!**
最近公司新項目用到 HBase,學習了一下,順便整理了筆記記錄一下!覺得有收穫,希望幫忙點贊,轉發下哈,謝謝,謝謝文章很長,所以筆記內容會同步到個人網站:http://hardyfish.top/,方便閱讀查看!基本介紹HBase 官網:https://hbase.apache.org/ Apache HBase 是 Hadoop 中一個支持分佈式的、可擴展的大數據存儲的數據庫。 當需要對 ⌘ [Read more](https://www.readfog.com/a/1718698885196648448) 2023-11-16T03:24:40Z **IT 架構必須掌握的 7 種軟件模型**
官方網站 www.itilzj.com 文檔資料: wenku.itilzj.com 類圖    類圖是最常見的 UML 圖形,用來描述類的特性和類之間的靜態關係,一個類包含三個部分,類的名稱,類的屬性列表,類的方法列表之間有 6 種靜態關係關聯,關聯,依賴,聚合,組合,繼承,泛化,而相關的一組類及其關係,用一張圖畫出來就是類圖,類圖主要是在詳細設計階段化,如果內圖已經設計出來了,那麼開發工程師只 ⌘ [Read more](https://www.readfog.com/a/1718698802195566592) 2023-11-17T03:58:40Z **【Rust 實戰】初探!使用 Slint 開發 Android 計算器**
Slint 1.3 增加了對 Android app 的支持,本篇文章將通過一個簡單的案例 —— 計算器,來探討下如果目前採用 Slint 編寫 Android 是否可用於生產。本篇文章安裝工具鏈和編譯都是在 Windows 系統上操作的,且默認你已經安裝了 Rust。0x01 準備工具鏈 如果要編譯 Android 項目,還需要一些簡單的配置:安裝 Android SDK 和 Android ⌘ [Read more](https://www.readfog.com/a/1718791537255616512) 2023-11-17T04:03:16Z **一篇文章讓你真正搞懂 epoll 機制**
1.epoll 簡介epoll 是 Linux 內核爲處理大批量文件描述符而作了改進的 poll,它能顯著提高程序在大量併發連接中只有少量活躍的情況下的系統 CPU 利用率。epoll 可以理解爲 event poll,它是一種事件驅動的 I/O 模型,可以用來替代傳統的 select 和 poll 模型。epoll 的優勢在於它可以同時處理大量的文件描述符,而且不會隨着文件描述符數量的增加而降低 ⌘ [Read more](https://www.readfog.com/a/1718791826731798528) 2023-11-17T04:02:48Z **讓 Vite 跑在瀏覽器中,前端又更進了一波**
背景--stackblitz頻繁出現在React和webpack官方文檔推薦之前我寫過兩篇文章介紹什麼是stackblitz, 其實本質上是屬於webContainer技術, 如果你沒有看過之前的文章,建議你先去看看,再接着看下面的內容會更好最近的更新-----在關注stackblitz推特時候發現有一個小更新,叫做:vite-plugin-terminalgithub 地址:https://gi ⌘ [Read more](https://www.readfog.com/a/1718791797855064064) 2023-11-17T04:02:47Z **Linux 內核 CFS 調度器:實現高效多任務處理**
FS 調度器(Completely Fair Scheduler)是 Linux 操作系統中的一種進程調度器,用於管理和分配 CPU 時間給各個運行的進程。它採用紅黑樹數據結構來維護進程的就緒隊列,並使用虛擬時鐘來進行公平的時間片分配。CFS 調度器通過動態地計算每個進程的虛擬運行時間,以及維護一個近似最小優先級隊列,從而保證了公平性和高效性。CFS 調度器在多核處理器環境下有效地利用了 CPU ⌘ [Read more](https://www.readfog.com/a/1718791797024591872) 2023-11-17T04:02:21Z **盤點史上最全的 Linux Shell 文本處理工具!**
來源:Linux 開源社區今天給大家分享日常工作中常用到的 shell 文本處理工具,可以說是史上最全了,大家掌握住這些工具,可以在日常運維工作中起到事半功倍的作用!本文將介紹 Linux 下使用 Shell 處理文本時最常用的工具: find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk;提供的例子和參數都是最常用和最爲實用的;對 shell 腳 ⌘ [Read more](https://www.readfog.com/a/1718791769244667904) 2023-11-17T04:02:15Z **深入理解 Linux 進程原理及實現機制**
普通人的視角,進程就是正在運行着的程序。進程是計算機中正在運行的程序的實例,每個進程都有自己的獨立內存空間和執行上下文,包括程序計數器、寄存器、棧等,進程的創建通過操作系統的調度器完成。當一個程序被執行時,操作系統會爲它分配一塊內存空間,並將程序加載到這塊內存中。這樣,該程序就成爲一個獨立的進程了。進程之間是相互獨立運行的,它們不會直接訪問其他進程的內存空間。爲了實現不同進程之間的通信,操作系統提 ⌘ [Read more](https://www.readfog.com/a/1718791763320213504) 2023-11-17T04:11:58Z **golang-etcd 實現的服務註冊和服務發現**
etcd是一個功能強大、可靠性高、易用性好的分佈式鍵值存儲系統,可以幫助用戶在分佈式環境中存儲和同步關鍵數據,並實現高可用性和數據一致性。強大的觀察和通知功能,使其成爲一個非常適合用於作爲配置管理中心或者服務註冊 / 發現模塊的選擇。一下是基於etcd實現的服務註冊 / 發現1 服務註冊package mainimport ( "context" "fmt" "log" " ⌘ [Read more](https://www.readfog.com/a/1718792374235271168) 2023-11-17T04:11:00Z **Go 語言代碼斷行規則詳解**
一、Go 代碼斷行概念代碼斷行,或稱爲代碼換行,是編程中一個很常見但卻經常被忽視的細節。它涉及到如何在代碼行結束時添加換行符,使代碼展示爲多行結構。代碼斷行不僅影響代碼的可讀性和美觀性,還可能與編程語言的語法、編譯器行爲、以及工具鏈交互有關。在 Go 語言中,這個概念尤爲重要,因爲 Go 有其獨特的斷行規則和工具支持。爲什麼需要代碼斷行?----------可讀性代碼斷行首先是爲了提高代碼的可 ⌘ [Read more](https://www.readfog.com/a/1718792313296228352) 2023-11-17T04:10:09Z **架構可擴展架構如何設計?**
1 架構設計複雜度模型:【業務複雜度】:業務過的複雜度,主要體現在難以理解、難以擴展,例如業務數量多 (微信)、業務流程長 (支付)、業務之間關係複雜。【質量複雜度】: 高可用、高性能、成本、安全等質量屬性的要求。【業務複雜度和質量複雜度是正交的】可擴展的定義:可擴展的複雜度模型:可擴展可以拆分爲可擴展和可伸縮,其中的可擴展表示系統的適應能力,包含可理解和可複用兩部分;可伸縮表示可以通過增加資源來 ⌘ [Read more](https://www.readfog.com/a/1718792259798929408) 2023-11-17T04:09:36Z **Go 如何實現責任鏈模式**
責任鏈模式(Chain of Responsibility)是一種行爲設計模式,其主要思想是創建多個對象並通過每個對象對其封裝的方式檢查一個順序,然後決定哪一個對象應該處理這個請求。這種模式可以動態地修改處理順序。簡單來說,責任鏈模式就是一個對象鏈對請求進行處理,但實際的處理者是其中的一個對象,而不是全部。在責任鏈模式中,請求者並不知道處理者是哪一個,只知道請求在責任鏈中被處理了。處理者也 ⌘ [Read more](https://www.readfog.com/a/1718792225506299904) 2023-11-17T04:08:13Z **揭祕系列: Goroutine 調度器**
現在不要擔心理解上面的圖片,因爲我們將從非常基礎的知識開始。Goroutines 分佈在線程中,由 Goroutine 調度器在幕後處理。根據我們之前的討論,我們知道一些關於 Goroutines 的事情:• 從原始執行速度來看,Goroutines 不一定比線程更快,因爲它們需要一個實際的線程來運行。•Goroutines 的真正優勢在於上下文切換、內存佔用、創建和拆除的成本等方面。你可能之前聽 ⌘ [Read more](https://www.readfog.com/a/1718792139065888768) 2023-11-17T04:07:11Z **Rust 編程基礎之條件表達式和循環**
1.if 表達式if 表達式允許根據條件執行不同的代碼分支, 以下代碼是一個典型的使用 if 表達式的例子: fn main() {    let number = 3;    if number < 5 {        println!("condition was true");    } else {        println!("condition was false"); ⌘ [Read more](https://www.readfog.com/a/1718792073155547136) 2023-11-17T04:06:50Z **解密 B 樹與 B - 樹:構建穩定可擴展的數據結構**
前言:在計算機科學中,B 樹(英語:B-tree)是一種自平衡的樹,能夠保持數據有序。這種數據結構能夠讓查找數據、順序訪問、插入數據及刪除的動作,都在對數時間內完成。B 樹,概括來說是一個一般化的二叉查找樹(binary search tree),可以擁有多於 2 個子節點。與自平衡二叉查找樹不同,B 樹爲系統大塊數據的讀寫操作做了優化。B 樹減少定位記錄時所經歷的中間過程,從而加快存取速度。B ⌘ [Read more](https://www.readfog.com/a/1718792051177394176) 2023-11-17T04:05:50Z **Go 如何實現長連接**
科普        長連接,也被稱爲持久連接,是對同一個服務器的多次請求,使用相同的 TCP 連接來發送。這與短連接(每一個請求建立一個新的 TCP 連接)形成對比。長連接可以減少建立和關閉連接的時間開銷,提升網絡通信效率。例如在 HTTP/1.1 中,默認就是採用長連接的方式,大大提高了 web 頁面的加載速度。客戶端和服務器之間建立的 TCP 連接在傳輸完數據之後並不立即斷開,而是可以繼續被用 ⌘ [Read more](https://www.readfog.com/a/1718791988194676736) 2023-11-17T04:05:22Z **釋放無鎖隊列的力量:探索用循環數組實現無鎖隊列**
一、前言在計算機科學領域,隊列是一種常見的數據結構,用於在多線程或多進程環境中進行有效的消息傳遞和任務調度。然而,傳統的隊列實現通常使用鎖來保護共享資源,這可能導致性能瓶頸和可伸縮性問題。爲了克服這些限制,無鎖隊列應運而生。無鎖隊列通過採用特殊的算法和數據結構,使多個線程可以併發地訪問隊列,而無需使用鎖來保護共享資源。其中,基於循環數組的無鎖隊列是一種經典的實現方式。本文將深入探討基於循環數組的無 ⌘ [Read more](https://www.readfog.com/a/1718791959657680896) 2023-11-17T04:04:37Z **滴滴 Redis 異地多活的演進歷程**
爲了更好的做好容災保障,使業務能夠應對機房級別的故障,滴滴的存儲服務都在多機房進行部署。本文簡要分析了 Redis 實現異地多活的幾種思路,以及滴滴 Redis 異地多活架構演進過程中遇到的主要問題和解決方法,拋磚引玉,給小夥伴們一些參考。Redis 異地多活的主要思路業界實現 Redis 異地多活通常三種思路:主從架構、Proxy 雙寫架構、數據層雙向同步架構。\*主從架構------------ ⌘ [Read more](https://www.readfog.com/a/1718791912095322112) 2023-11-17T04:04:08Z **深入剖析 Linux 系統調用原理與實現機制**
系統調用,顧名思義,說的是操作系統提供給用戶程序調用的一組 “特殊” 接口。用戶程序可以通過這組 “特殊” 接口來獲得操作系統內核提供的服務,比如用戶可以通過文件系統相關的調用請求系統打開文件、關閉文件或讀寫文件,可以通過時鐘相關的系統調用獲得系統時間或設置定時器等。從邏輯上來說,系統調用可被看成是一個內核與用戶空間程序交互的接口——它好比一箇中間人,把用戶進程的請求傳達給內核,待內核把請求處理完 ⌘ [Read more](https://www.readfog.com/a/1718791881395113984) 2023-11-20T03:17:07Z **Go 每日一庫之 goose — 數據庫版本管理工具**
goose 是一個用 go 語言編寫的數據庫版本管理的命令行工具。其 github 地址如下:https://github.com/pressly/goose什麼是數據庫版本管理?-----------數據庫版本管理,其實就是對數據表結構的演進的管理。比如,我們有一個用戶表 user,如下:create table if not exists user (  id int autoincrecem ⌘ [Read more](https://www.readfog.com/a/1719060714288680960) 2023-11-20T03:16:22Z **使用 Rust GATs 改進代碼和應用程序性能**
Rust 引入了泛型關聯類型 (GATs) 來解決某些泛型模式方面的限制。在 GATs 之前,Rust 有關聯類型,使類型與特徵相關聯。然而,這些並沒有直接綁定到實現類型的泛型參數上。GATs 增強了這一概念,它允許關聯類型依賴於 trait 的泛型參數。GATs 在很多情況下都很有用,包括迭代器模式和 Futures 以及異步編程。在這裏,異步庫可以利用 GATs 來定義具有關聯類型的特徵,這些 ⌘ [Read more](https://www.readfog.com/a/1719060667189792768) 2023-11-20T03:16:05Z **Go 語言硬件加速:多核並行化的妙用**
\*概述隨着計算機硬件架構的演進,多核處理器已經成爲當今主流。在這個背景下,如何充分利用多核心處理器的性能,提高程序的併發度成爲了一個關鍵問題。本文將探討在 Go 語言中如何實現多核並行化,充分發揮硬件潛力,提高程序的執行效率。1. Go 語言併發基礎在討論多核並行化之前,先回顧一下 Go 語言中的併發基礎知識。1.1 GoroutineGoroutine 是 Go 語言中的輕量級線程,由 Go 運 ⌘ [Read more](https://www.readfog.com/a/1719060649912406016) 2023-11-20T03:24:39Z **如何使用 Github Action 管理 Issue**
前言--很多小夥伴打開 github 上的倉庫都只使用Code查看代碼,或者只是把 github 當成一個代碼倉庫,但是 github 還提供了很多好用的功能。其中,GitHub Action 就是一個很好用的功能,本文將通過幾個管理Issue的示例帶大家瞭解 GitHub Action:什麼是 Github Action-----------------github 給所有用戶都提供了臨時可用的 ⌘ [Read more](https://www.readfog.com/a/1719061188701163520) 2023-11-20T03:23:46Z **解密 SSE,像 ChatGPT 一樣返回流式響應**
我們知道目前的 HTTP/1.1 採用的是標準的請求 - 響應模型,客戶端主動發請求,服務端被動地返回響應。這種模型在客戶端需要實時獲取結果的場景下是不合適的,因爲這意味着客戶端需要不斷地輪詢,所以最好的做法是服務端生成結果之後,主動推送給客戶端。比如 ChatGPT,它在生成內容時,也是生成一部分,就主動向客戶端推送一部分。而在這個過程中,客戶端不需要做任何事情,只需等待 ChatGPT 服務端 ⌘ [Read more](https://www.readfog.com/a/1719061133423382528) 2023-11-20T03:23:11Z **AutoGPT 放棄使用向量數據庫?**
AutoGPT 放棄使用向量數據庫,對某些人來說,可能會有些出乎意料。因爲從一開始,向量數據庫就被認爲可以幫助 AI 代理管理長期記憶。是最初的想法發生了變化嗎?到底發生了哪些變化?讓我們從一些背景知識和 AutoGPT 的誕生說起。AutoGPT 的願景AutoGPT 在 3 月 30 日發佈時,引發了 ChatGPT 熱潮的巔峯。這是一個令人震撼的 AI 項目,激發了開發者對於像 ChatGP ⌘ [Read more](https://www.readfog.com/a/1719061096543916032) 2023-11-20T03:22:18Z **Canal 介紹和使用指南**
Canal 是阿里開源的一款 MySQL 數據庫增量日誌解析工具,提供增量數據訂閱和消費。使用 Canal 能夠實現異步更新數據,配合 MQ 使用可在很多業務場景下發揮巨大作用。Canal 簡介canal 是阿里開源的一款 MySQL 數據庫增量日誌解析工具,提供增量數據訂閱和消費。使用 Canal 能夠實現異步更新數據,配合 MQ 使用可在很多業務場景下發揮巨大作用。工作原理MySQL 主備複製 ⌘ [Read more](https://www.readfog.com/a/1719061041117237248) 2023-11-20T03:21:37Z **微服務基本功:增加便利的監控服務指標**
log、metrics、trace 是我們觀測和監控微服務的三大法寶,而對於 metrics,我們嚐嚐採集服務的指標,把它們推送到 Prometheus、InfluxDB 等時序數據庫中,並使用 Grafana 展示出來。如果你有相應的這些基礎架構平臺,那沒有問題。但是如果你缺乏這些基礎的監控平臺,而且有時候也只是臨時想監控一下服務的指標,那麼 rpcx 給你提供了一個極簡的方法,你只需在 rpc ⌘ [Read more](https://www.readfog.com/a/1719060997516398592) 2023-11-20T03:20:38Z **【Go 標準庫】詳解 net-http 包實現原理**
一、前言Go 語言自帶的 net/http 包提供了 HTTP 客戶端和服務端的實現,實現一個簡單的 http 服務非常容易,其自帶了一些列結構和方法來幫助開發者簡化 HTTP 服務開發的相關流程,因此我們不需要依賴任何第三方組件就能構建並啓動一個高併發的 HTTP 服務器。HTTP 中客戶端與服務器建立連接發送請求與響應,這個過程可以描述爲如下圖。Server 端需要有 router 、hand ⌘ [Read more](https://www.readfog.com/a/1719060935874809856) 2023-11-20T03:26:48Z **通道技巧,關閉通道後還能繼續用**
\*概述在 Go 語言中,通道(Channel)是一種強大的併發機制,但很多開發者在關閉通道後是否還能使用存在疑惑。本文將探討在關閉通道後繼續利用通道的技巧,解釋其原理,並通過實例代碼演示在實際應用中的巧妙用法。1. 通道關閉的基本原理在 Go 語言中,通過 close 函數可以關閉一個通道。關閉通道後,將不能再向通道發送數據,但仍然可以從通道接收數據。這是因爲關閉通道後,接收者仍然可以讀取通道中已 ⌘ [Read more](https://www.readfog.com/a/1719061324204445696) 2023-11-21T02:51:30Z **eBPF helper 函數的設計與實現**
您是否想爲內核添加一個新的 eBPF 輔助(helper)函數,但不知道從何入手?或者,您是否曾遇到過類似於 R2 type=ctx expected=fp, pkt, pktmeta, mapvalue 的 eBPF verifier 報錯?本文將從代碼層面對 eBPF 輔助函數在內核中的設計與實現進行深入淺出的分析。相信在閱讀本文後,您不僅能夠輕鬆應對由於錯誤調用輔助函數導致的 eBPF ve ⌘ [Read more](https://www.readfog.com/a/1719149699655634944) 2023-11-21T02:51:03Z **Redis 事件機制是如何實現的?**
前言我們都知道,Redis 是單線程(非嚴謹),你是否想過,一個線程要如何處理來自各個客戶端的各種請求呢?它忙的過來嗎?沒錯,它還真的能忙過來,並且還井井有條。其中多虧了 IO 多路複用,而不僅僅是它,事件機制在其中也是一個不錯的設計。PS:Redis 高版本已經支持多線程處理某些事情,爲了簡化,這裏不做討論,故下文出現的單線程僅是描述那些必須單線程執行的場景。嘗試思考首先,讓我們來思考一下,如果 ⌘ [Read more](https://www.readfog.com/a/1719149671722618880) 2023-11-21T02:49:11Z **Glibc-Malloc 和 TCMalloc 基本設計原理 及 Glibc-malloc-Jemalloc-TCMalloc 性能差異**
當前業界的主流分配器 jemalloc 以及 tcmalloc 因其性能優勢被廣泛應用,很好奇底層的實現細節,因爲從宏觀上來看內存分配器的作用無非就是分配內存而已,很簡單,用戶需要多少內存,拿多少內存不就行了嗎?google 和 facebook 何必花費大功夫分別搞了一個 tcmalloc 和 jemalloc 呢?越簡單的東西向底層追溯越複雜。。。做基礎軟件的同學應該是深有體會,一個普普通通, ⌘ [Read more](https://www.readfog.com/a/1719149553897279488) 2023-11-21T03:02:00Z **Robius:用 Rust 開發多平臺應用**
01\. 項目簡介Robius 是一個完全開源的、去中心化的、由社區驅動的項目,旨在讓 Rust 成爲多平臺應用開發的理想選擇。Robius 組織還作爲一個非正式的工作組:一個友好、公開的空間,收集並討論與改善和進一步推動 Rust 中的應用開發體驗相關的資源。 有問題嗎?想加入我們嗎?想貢獻嗎?請加入我們在 Matrix 聊天平臺上的 Robius 社區。02. 我們的願景我們相信 Rust 編 ⌘ [Read more](https://www.readfog.com/a/1719150360164143104) 2023-11-21T03:01:21Z **20 個 Go 編程最佳實踐**
在本教程中,我們將探討 Golang 中的前 20 個最佳編碼實踐。這將幫助你編寫有效的 Go 代碼。20: 使用適當的縮進------------良好的縮進使你的代碼易讀。一致地使用製表符或空格(最好是製表符),並遵循 Go 的縮進標準。package mainimport "fmt"func main() {    for i := 0; i < 5; i++ {        fmt.Pri ⌘ [Read more](https://www.readfog.com/a/1719150319178452992) 2023-11-21T03:00:43Z **純 C 語言實現協程框架,底層原理與性能分析**
協程不是系統級線程,很多時候協程被稱爲 “輕量級線程”、“微線程”、“纖程(fiber)” 等。簡單來說可以認爲協程是線程裏不同的函數,這些函數之間可以相互快速切換。協程和用戶態線程非常接近,用戶態線程之間的切換不需要陷入內核,但部分操作系統中用戶態線程的切換需要內核態線程的輔助。協程是編程語言(或者 lib)提供的特性(協程之間的切換方式與過程可以由編程人員確定),是用戶態操作。協程適用於 IO ⌘ [Read more](https://www.readfog.com/a/1719150279875727360) 2023-11-21T06:36:07Z **互斥鎖與讀寫互斥鎖的妙用**
\*概述在併發編程中,控制共享資源的訪問是至關重要的。Go 語言提供了兩種主要的互斥鎖,即 sync.Mutex(互斥鎖)和 sync.RWMutex(讀寫互斥鎖)。本文將討論這兩種鎖的使用方式、原理和適用場景,並通過實例代碼演示它們在併發環境中的正確應用。1. sync.Mutex(互斥鎖)1.1 互斥鎖基本使用互斥鎖用於保護共享資源,確保同一時刻只有一個 Goroutine 可以訪問。下面是一個 ⌘ [Read more](https://www.readfog.com/a/1719163831527247872) 2023-11-21T06:36:48Z **萬能的異步處理方案**
作者:三火哥 原文:https://juejin.cn/post/72660878432390840901 前言----良好的系統設計必須要做到開閉原則,隨着業務的不斷迭代更新,核心代碼也會被不斷改動,出錯的概率也會大大增加。但是大部分增加的功能都是在擴展原有的功能,既要保證性能又要保證質量,我們往往都會使用異步線程池來處理,然而卻增加了很多不確定性因素。 由此我設計了一套通用的異步處 ⌘ [Read more](https://www.readfog.com/a/1719163874162348032) 2023-11-21T06:38:44Z **一文搞懂 Linux 內核內存常見分配方式**
在 Linux 操作系統中,內存分配是一個重 要的任務。正確地管理和分配內存對於系統的性能和穩定性至關重,Linux 採用了一種靈活且高效的內存分配方式,通過多種機制來滿足不同程序的內存需求。一、malloc--------alloc 是 C 庫實現的函數,C 庫維護了一個緩存,當內存夠用時,malloc 直接從 C 庫緩存分配,只有當 C 庫緩存不夠用;通過系統調用 brk,向內核申請,從堆空間 ⌘ [Read more](https://www.readfog.com/a/1719163995712229376) 2023-11-22T03:16:15Z **Go 語言 RPC 實戰:打造自己的遠程調用服務**
\*概述在分佈式系統中,遠程過程調用(RPC)是一種關鍵的通信方式,而 Go 語言提供了強大的 RPC 支持,使得在網絡間實現函數調用變得更加便捷。本文將探討 Go 語言中 RPC 的基礎概念、實現方式,並通過示例代碼演示如何模擬遠程過程調用系統。1. RPC 基礎概念1.1 什麼是 RPCRPC 是一種遠程過程調用的協議,允許程序調用其他地址空間(通常是網絡上的另一臺機器)的過程。它隱藏了底層通信 ⌘ [Read more](https://www.readfog.com/a/1719241853731180544) 2023-11-22T03:16:11Z **Go vs Rust:文件上傳性能比較**
在本文中,主要測試並比較了 Go—Gin 和 Rust—Actix 之間的多部分文件上傳性能。設置所有測試都在配備 16G 內存的 MacBook Pro M1 上執行。軟件版本爲:• Go v1.20.5 • Rust v1.70.0 測試工具是一個基於 libcurl 並使用標準線程的自定義工具,能夠發送多部分請求。資產目錄中有 100,000 個文件。每個文件的大小都是確切的 1 ⌘ [Read more](https://www.readfog.com/a/1719241849762320384) 2023-11-22T03:16:10Z **DDD 落地:從美團抽獎平臺,看 DDD 在大廠如何落地?**
美團抽獎平臺 DDD 架構實操之路-----------------作者:文彬、子維,美團點評資深研發工程師,畢業於南京大學,現從事美團外賣營銷相關的研發工作。至少 30 年以前,一些軟件設計人員就已經認識到領域建模和設計的重要性,並形成了一種潮流,後來由 Eric Evans 將其命名爲領域驅動設計(Domain-Driven Design,簡稱 DDD)。在互聯網開發環境中,DDD 似乎顯得有 ⌘ [Read more](https://www.readfog.com/a/1719241848190504960) 2023-11-22T03:09:57Z **Redission 分佈式鎖原理分析**
一、前言----我們先來說說分佈式鎖,爲啥要有分佈式鎖呢? 像 JDK 提供的 synchronized、Lock 等實現鎖不香嗎?這是因爲在單進程情況下,多個線程訪問同一資源,可以使用 synchronized 和 Lock 實現;在多進程情況下,也就是分佈式情況,對同一資源的併發請求,需要使用分佈式鎖實現。而 Redisson 組件可以實現 Redis 的分佈式鎖,同樣 Redisson 也是 ⌘ [Read more](https://www.readfog.com/a/1719241457387278336) 2023-11-22T03:08:47Z **SpringBoot 攔截器與統一功能處理**
前言------Spring AOP 是一個基於面向切面編程的框架,用於將橫切性關注點(如日誌記錄、事務管理)與業務邏輯分離,通過代理對象將這些關注點織入到目標對象的方法執行前後、拋出異常或返回結果時等特定位置執行,從而提高程序的可複用性、可維護性和靈活性。但使用原生 Spring AOP 實現統一的攔截是非常繁瑣、困難的。而在本節,我們將使用一種簡單的方式進行統一功能處理,這也是 AOP 的一次 ⌘ [Read more](https://www.readfog.com/a/1719241383834914816) 2023-11-22T03:18:01Z **DDD 落地:從騰訊視頻 DDD 重構之路,看 DDD 極大價值**
騰訊視頻 DDD 重構之路-------------作者:劉嘯南DDD 的指導思想很多時候較爲晦澀,與實際業務場景下的架構設計往往難以緊密結合。本文嘗試通過引入架構映射等方法,將二者相互融合,旨在提供一套量化的評估體系,並通過騰訊視頻一起看系統的實踐案例闡述如何運用。本文將以騰訊視頻一起看系統的架構重構實踐爲例,展示一套具有參考價值的領域建模、架構設計與量化評估標準。01 領域驅動-------1 ⌘ [Read more](https://www.readfog.com/a/1719241964789010432) 2023-11-22T03:20:28Z **通道多路複用:Go 語言併發編程的黃金法則**
\*概述在 Go 語言中,通道是一種強大的併發原語,而多路複用則是一項強大的技術,使得能夠同時處理多個通道的數據,提高程序的併發性能。本文將討論 Go 語言中通道的多路複用特性、用法以及如何巧妙地同時處理接收和發送多個通道的數據。1. 多路複用基礎多路複用是通過 select 語句實現的,它允許在多個通道之間進行非阻塞的選擇。先來看一個簡單的例子package mainimport ( "fmt" ⌘ [Read more](https://www.readfog.com/a/1719242118929682432) 2023-11-22T03:19:26Z **從一個秒殺案例來看消息隊列的作用**
今天我們探討一種廣泛使用的中間件:消息隊列。消息隊列由來已久,通常用於不同系統之間的通信。下圖以星巴克的工作方式爲例,來說明消息隊列的概念。 在星巴克,收銀員接受訂單並收錢,然後把顧客的名字寫在咖啡杯上,交給下一個步驟。咖啡製作師拿起訂單和杯子製作咖啡。然後,顧客到櫃檯領取咖啡。這三個步驟同步進行。收銀員只需將訂單以咖啡杯的形式放入,無需等待訂單完成。咖啡製作師只需將製作完成的咖啡放在櫃檯上,就 ⌘ [Read more](https://www.readfog.com/a/1719242053973544960) 2023-11-22T03:27:34Z **提升您的 Go 應用性能的 6 種方法**
如果您的應用程序在 Kubernetes 中運行,請自動設置 GOMAXPROCS 以匹配 Linux 容器的 CPU 配額-------------------------------------------------------------------Go 調度器 可以具有與運行設備的核心數量一樣多的線程。由於我們的應用程序在 Kubernetes 環境中的節點上運行,當我們的 Go 應用程 ⌘ [Read more](https://www.readfog.com/a/1719242565926096896) 2023-11-22T03:23:55Z **細聊 Go 高級併發用法 - singleflight**
什麼是 singleflight Singleflight 是 Google 開源的一個 Go 語言庫,主要用於控制對共享資源的重複請求,防止服務器被同時高併發訪問所引發的 "雪崩" 問題。具體來說,當多個相同的請求(例如訪問同一個數據或地址)在同一時間發生時,Singleflight 會將這些請求合併爲一個。實際上,只有一個請求會被執行,然後這個請求的結果將被所有其他的請求共享。這個庫的主要應 ⌘ [Read more](https://www.readfog.com/a/1719242335972331520) 2023-11-22T03:32:20Z **Astro,這個前端框架有點不一樣!**
前端技術日新月異,最初的靜態網站逐漸被由服務端生成的網站所取代,後來又逐漸向客戶端渲染的應用轉變。不過客戶端渲染也存在一些問題,如加載時間變長和搜索引擎優化難度等。Astro 這個新的前端框架結合了服務端渲染和客戶端渲染的優點,可以更好地解決這些問題。本文就來介紹一下這兩年爆火的前端框架 Astro,它在兩年的時間新增了 30k+ star:這個前端框架,有點不一樣。Astro 基本概念----- ⌘ [Read more](https://www.readfog.com/a/1719242865707683840) 2023-11-22T03:32:58Z **可視化管理 Node-js 版本,太好用了!**
在日常開發中,我們可能會經常遇到不同項目需要使用不同版本的 Node.js 的情況。雖然社區已經有了很多成熟的 Node.js 版本管理工具,比如 nvm。但是,這些工具基本都是基於 shell 的交互式命令的,用起來可能不太直觀便捷:比如在 macOS 平臺需要安裝支持 arm64 架構的版本的 node,nvm 就沒辦法通過命令(nvm ls -remote)來查看;而在 Windows 平臺 ⌘ [Read more](https://www.readfog.com/a/1719242905916379136) 2023-11-22T09:25:27Z **多任務多場景問題解決方案與實踐**
1 多任務多場景問題概述------------1.1 背景介紹面向 C 端用戶提供服務的應用,特別是業務範圍廣、規模大的,普遍存在多任務多場景問題,多任務,也稱多目標,是綜合衡量用戶體驗的多個指標,如搜推算法場景中常見的點擊率、轉化率、收藏率等;多場景,用戶可以在多個場景內表達不同興趣,產生多種不同的行爲模式,如激發興趣的推薦 Feed 流場景,滿足需求的搜索場景等。多任務多場景給算法系統的優化 ⌘ [Read more](https://www.readfog.com/a/1719265082529124352) 2023-11-22T09:27:22Z **kafka 原理看這一篇就夠了**
爲何使用消息隊列l 異步。接口方式實現多個系統協作,如圖 A 系統作爲用戶請求接收方,需要調用多個系統的接口,這些接口還有可能是在 A 系統裏同步調用,所以最後的接口耗時是多個系統接口耗時的總和;mq 方式則可以異步發送消息給 mq,mq 再發送給其他多個系統,多個系統並行且異步的接收消息。當然,mq 方式實現有一個前提是用戶的請求不需要立即返回請求結果,例如用戶發送一個查詢請求就不適合 mq 方 ⌘ [Read more](https://www.readfog.com/a/1719265202636165120) 2023-11-22T09:26:26Z **10 個令人驚歎的 Go 語言技巧,讓你的代碼更加優雅**
在開發生產項目的過程中,我注意到經常會發現自己在重複編寫代碼,使用某些技巧時沒有意識到,直到後來回顧工作時才意識到。爲了解決這個問題,我開發了一種解決方案,對我來說非常有幫助,我覺得對其他人也可能有用。以下是一些從我的實用程序庫中隨機挑選的有用且多功能的代碼片段,沒有特定的分類或特定於系統的技巧。1\. 追蹤執行時間的技巧如果你想追蹤 Go 中函數的執行時間,有一個簡單高效的技巧可以用一行代碼實現, ⌘ [Read more](https://www.readfog.com/a/1719265143563587584) 2023-11-22T09:43:37Z **Go 內存分配:結構體中的優化技巧**
在使用 Golang 進行內存分配時,我們需要遵循一系列規則。在深入瞭解這些規則之前,我們需要先了解變量的對齊方式。Golang 的unsafe包中有一個函數Alignof,簽名如下:func Alignof(x ArbitraryType) uintptr對於任何類型爲v的變量x,AlignOf函數會返回該變量的對齊方式。我們將對齊方式記爲m。現在,Golang 確保m是滿足變量x的內存地址 % ⌘ [Read more](https://www.readfog.com/a/1719266224793292800) 2023-11-22T09:42:51Z **圖解 Linux select 機制_從內核到應用(精華篇)**
前言:select 機制已經被很多人都講解過,select 使用起來也不是特別難,爲什麼還要花時間再次講解 select 機制?在回答這個問題之前,我們先問一下自己,是否有足夠的信心保證在使用 select 編程時不出錯,select 機制雖然看起來簡單,實際在使用時有很多坑,當我們沒有從原理上真正理解 select 機制時,我們隨時會掉入這些坑,所以這篇文章我儘量把 select 實現原理和細節 ⌘ [Read more](https://www.readfog.com/a/1719266177207865344) 2023-11-22T09:42:22Z **動態併發控制:sync-WaitGroup 的靈活運用**
\*概述在併發編程中,控制主程序等待所有 Goroutine 完成任務是一項關鍵任務。Go 語言提供了 sync.WaitGroup 來解決這一問題。本文將講解 sync.WaitGroup 的使用方法、原理以及在實際項目中的應用場景,用清晰的代碼示例和詳細的註釋,助力讀者掌握併發編程中等待組的使用技巧。1. 基本使用1.1 初始化和添加計數package mainimport ( "fmt" ⌘ [Read more](https://www.readfog.com/a/1719266146587348992) 2023-11-22T09:38:41Z **Go 實現接口冪等方案設計**
冪等(idempotent)這個詞來源於數學運算,其中的含義是做一次和做多次的效果是一樣的,即該操作可以重複進行,卻不會改變系統的狀態。在計算機科學中,它們的含義一樣:某個接口或函數,無論調用一次還是調用多次,產生的副作用都是相同的。例如,HTTP 的 GET、PUT、DELETE、HEAD 和 OPTIONS 這些方法都是冪等的,當你向這個 URL 發出一個請求,無論做一次或者做多次,結 ⌘ [Read more](https://www.readfog.com/a/1719265914842615808) 2023-11-23T03:34:29Z **深入理解 Linux 進程間通信**
作者簡介:程磊,某手機大廠系統開發工程師,閱碼場榮譽總編輯,最大的愛好是鑽研 Linux 內核基本原理。一、進程間通信的本質什麼是進程間通信?爲什麼要有進程間通信?爲什麼能進程間通信?1.1 爲什麼要通信--------------我們先拿人來做個類比,人與人之間爲什麼要通信,有兩個原因。首先是因爲你有和對方溝通的需求,如果你都不想搭理對方,那就肯定不用通信了。其次是因爲有空間隔離,如果你倆在一起 ⌘ [Read more](https://www.readfog.com/a/1719333598571630592) 2023-11-23T03:31:13Z **Go 併發陷阱:死鎖、活鎖和飢餓**
\*概述在併發編程中,死鎖、活鎖和飢餓是三個極爲重要且需要警惕的概念。它們代表了程序因爲併發衝突而陷入無法繼續執行的狀態。本文將討論 Go 語言中死鎖、活鎖和飢餓的概念、原因,以及如何通過合理的設計和使用併發控制機制來避免這些問題。1. 死鎖(Deadlock)1.1 什麼是死鎖死鎖是指兩個或多個進程無限期地等待對方釋放資源,而導致程序無法繼續執行的狀態。在 Go 語言中,死鎖通常發生在通道或互斥鎖 ⌘ [Read more](https://www.readfog.com/a/1719333392870379520) 2023-11-23T03:31:01Z **用戶層網絡緩衝區(固定內存,ringbuffer,chainbuffer)**
1:網絡緩衝區理解---------1.1:理解背景我們在網絡編程時,通常以五元組,一個 fd 標識一個連接(套接字 fd)。》每個連接其實有接收消息和發送消息的功能。》內核爲每個連接分配了固定大小的發送緩衝區和接收緩衝區(套接字緩衝區)。》我們通過相關 api 接口 (如 send(),recv()) 根據五元組標識操作對應緩衝區。以網絡通信爲例理解,個人理解如下:註釋:這裏套接字 fd 對應的 ⌘ [Read more](https://www.readfog.com/a/1719333380026372096) 2023-11-23T03:30:58Z **令人驚訝的 Rust 基準測試框架:Divan**
Divan 是一個快速舒適的 Rust 代碼基準測試框架,讓我們通過例子來學習它。新建一個 Rust 項目:cargo new divan-exampleCargo.toml 文件的內容如下:[dev-dependencies]divan = "0.1.2"[[bench]]name = "example"harness = false在項目根目錄下創建 benches 目錄,在目錄下創建一個 e ⌘ [Read more](https://www.readfog.com/a/1719333377203605504) 2023-11-23T03:30:57Z **解密存儲引擎 bitcask 的設計原理**
Riak 是一個專注於分佈式存儲的公司,他們想打造一個新的存儲引擎,該引擎要能實現以下幾個目標: 讀寫數據時,延遲要低; 高吞吐量; 能夠在不降低性能的前提下,處理超過內存容量的數據集; 具備從崩潰中快速恢復的能力,並且不丟數據; 簡單的備份和恢復策略; 代碼結構和數據格式相對簡單且易於理解; 即使面臨大數據集,性能依舊不受影響; 擁有簡單的授權機制,能 ⌘ [Read more](https://www.readfog.com/a/1719333375943217152) 2023-11-23T03:30:55Z **高性能網絡編程之 Reactor 網絡模型(徹底搞懂)**
前言--網絡框架的設計離不開 I/O 線程模型,線程模型的優劣直接決定了系統的吞吐量、可擴展性、安全性等。目前主流的網絡框架,在網絡 IO 處理層面幾乎都採用了「I/O 多路複用方案」,這是服務端應對高併發的性能利器。進一步看,當上升到整個網絡模塊時,另一個常常聽說的模式出現了 ---- 「Reactor 模式」,也叫反應器模式,本質是一個事件轉發器,是網絡模塊核心中樞,負責將讀寫事件分發給對應的 ⌘ [Read more](https://www.readfog.com/a/1719333374133374976) 2023-11-23T03:30:53Z **V8 引擎 Promise 源碼全面解讀(深度好文)**
作者:月夕 原文:https://juejin.cn/post/7055202073511460895寫在前面的話------閱讀本文你將收穫什麼?瞭解 V8 Promise 源碼全過程,世界上不再有能困住你的 Promise 題目,我就是這麼肯定這篇文章的乾貨 僅僅瞭解或者實現了 Promise/A+ 規範,這與 JavaScript 的 Promise 中間還有很大的差距 ⌘ [Read more](https://www.readfog.com/a/1719333371745767424) 2023-11-24T02:44:04Z **一個超級精簡高可移植的 shell 命令行 C 實現**
一. 前言  在嵌入式開發中, 一般需要使用 shell 命令行來進行交互。在一些資源非常受限的平臺比如 8 位單片機平臺,則各種開源的 shell 框架都顯得過於大和複雜。此時實現一個超級精簡的 shell 命令行則顯得很必要。我們這裏就來實現一個,方便以後快速集成到任何平臺中使用。有幾點開發前提:考慮可移植性,不使用任何編譯器擴展。考慮可移植性,不依賴任何的庫函數,僅依賴 stdint 的數據 ⌘ [Read more](https://www.readfog.com/a/1719421023280009216) 2023-11-24T02:45:49Z **Go 語言項目命名規範(2023 年最新版)**
在 Go 語言中,良好的命名規範是構建清晰、可讀和可維護代碼的關鍵。本指南旨在幫助你制定一致的命名規範,使你的 Go 項目更加整潔和易於理解。在實際項目開發中,每個項目組的成員開發習慣不一樣,可能會有自己的一些規範,所以這個規範僅供參考。第一章:包命名規範在 Go 中,包是代碼組織的基本單元。包名應該簡短而具有描述性。使用小寫字母: 包名應該使用小寫字母,不要使用下劃線或混合大小寫。 ⌘ [Read more](https://www.readfog.com/a/1719421133697159168) 2023-11-24T02:45:03Z **一文搞懂,redis 單線程執行全貌(深入拆解分析)**
前言\-\-\-\-\-\- 本文參考源碼版本爲 redis6.2redis 6.0 版本之前,採用的是單線程模型,即:一個線程既要負責命令讀寫、解析,又要負責命令執行。但是,仍然能達到極高的併發能力,其終極法寶是優秀的 IO 模型 + 純內存操作 + 優秀的數據結構及算法的設計。redis6.0 及之後的版本,引入了多線程模型,主要目的是分擔主線程的壓力,負責部分 IO 事件讀寫、解析的工作;但是,命令執 ⌘ [Read more](https://www.readfog.com/a/1719421085159624704) 2023-11-24T02:50:05Z **DDD 落地:從網易新聞 APP 重構,看 DDD 的巨大價值**
網易新聞 App 架構重構實踐---------------作者:小智嘉賓:李雲鵬,網易新聞架構技術組工程師,國內首個移動架構模型書籍《移動開發架構設計實戰》作者。10 餘年互聯網行業經驗,擅長移動端架構選型、項目重構與插件開發相關工作。曾就職於世界 500 強核心技術實驗室,作爲第一發明人,申請了 14 項專利和著作權。當前,大多數移動開發團隊將 MVP 作爲業務層的核心架構模式,並在此基礎上實 ⌘ [Read more](https://www.readfog.com/a/1719421401859985408) 2023-11-24T02:52:54Z **掃碼支付是怎麼工作的?**
過去的幾十年,支付技術發生了很大的改變。下圖給我們顯示了 POS 終端的進化。從一開始的紙鈔收銀機,到刷卡機,再到如今的支持刷卡、掃碼和數字錢包的一站式智能手機 POS 機,交易流程被徹底改變了。企業可以從商店的任何位置接受付款和處理訂單。下面我們來看看消費者掃碼支付的工作原理。我們將掃碼支付的流程分爲兩個子流程:商家生成二維碼並顯示在屏幕上 消費者掃描二維碼並付款 01 生成動態二維 ⌘ [Read more](https://www.readfog.com/a/1719421579254927360) 2023-11-24T10:33:22Z **得物商品狀態體系介紹**
一得物的商品體系目前得物的商品分爲三種類型,分別是:新品、商品、草稿。但是隻有商品是可售賣的,新品和草稿都不是可售賣的。 新品有很多種創建的渠道,商品可以由新品選品通過後由系統自動生成,也可以由運營直接創建。而商品草稿是在商品被編輯後創建而來,草稿在更新審覈通過後,會重新覆蓋已有的商品信息。新品新品是企業賣家或個人賣家或者 ISV 等渠道申請的一種不可售賣的商品,需要運營選品審覈、商研審覈通過後 ⌘ [Read more](https://www.readfog.com/a/1719450548963479552) 2023-11-24T10:29:30Z **Go 排序算法探祕:打造通用 qsort 函數**
\*概述快速排序(QuickSort)是一種經典的排序算法,其高效性和廣泛應用使之成爲計算機科學領域的瑰寶。本文將介紹如何在 Go 語言中封裝快速排序函數,使其更易用、更具通用性,並通過示例和代碼解釋,讓讀者深入瞭解其原理和實現。1. 快速排序算法簡介1.1 算法原理快速排序是一種分治策略的排序算法,基本思想是通過選定一個基準元素。將序列分爲兩部分,小於基準的元素放在左邊,大於基準的元素放在右邊,然 ⌘ [Read more](https://www.readfog.com/a/1719450305669730304) 2023-11-24T10:51:31Z **字節一面:post 爲什麼會發送兩次請求?**
作者:程序員小豪 原文:https://blog.csdn.net/ADHERE/article/details/132483843前言------最近博主在字節面試中遇到這樣一個面試題,這個問題也是前端面試的高頻問題,因爲在前端開發的日常開發中我們總是會與 post 請求打交道,一個小小的 post 請求也是牽扯到很多知識點的,博主在這給大家細細道來。同源策略--------在瀏覽器中 ⌘ [Read more](https://www.readfog.com/a/1719451690505179136) 2023-11-24T10:53:36Z **HTTPS 雙向認證原理和實現方式**
雙向認證的含義就是服務端和客戶端都需要驗證對方的身份,相比普通的單向認證多了一些步驟。基礎概念----下面先講一些 https 相關的概念。對稱加密對稱加密是一種加密算法,使用相同的密鑰來加密和解密數據。 這意味着發送和接收方都必須共享相同的密鑰。 對稱加密是加密領域中最快的一種加密方式,因爲它使用的是相對較小的密鑰和簡單的運算。非對稱加密非對稱加密是一種密碼學方法,與對稱加密不同,它使用一對密鑰 ⌘ [Read more](https://www.readfog.com/a/1719451821770117120) 2023-11-24T10:51:52Z **Rust 開發環境最佳設置**
在這篇文章中,我們以 VSCode 作爲 Rust 開發的 IDE。VSCode 是我的首選,因爲它可以在所有主流操作系統上使用,並且具有高度可配置性。在本文中,會涉及到以下內容:安裝 6 個 VSCode 擴展插件; 設置 3 個 Cargo 工具,用於配置自動檢查、格式化和實時加載; 使用 github action 進行持續集成; VSCode 擴展插件1,rust-ana ⌘ [Read more](https://www.readfog.com/a/1719451712409931776) 2023-11-24T10:58:16Z **從 Discord 的做法中學習 — 使用 Golang 進行請求合併**
正如你可能之前看到的,Discord 去年發佈了一篇有價值的文章,討論了他們成功存儲了數萬億條消息。雖然有很多關於這篇文章的 YouTube 視頻和文章,但我認爲這篇文章中一個名爲 “數據服務爲數據服務” 的部分沒有得到足夠的關注。在這篇文章中,我們將討論 Discord 對數據服務的方法,並探討如何利用 Golang 的併發特性來減少特定情況下的數據庫負載。數據服務拯救熱分區如你所知,消息和頻道 ⌘ [Read more](https://www.readfog.com/a/1719452115536023552) 2023-11-24T10:56:44Z **分佈式鎖的各種實現,看完這篇你就懂了!**
前言--今天我們講講分佈式鎖,網上相關的內容有很多,但是比較分散,剛好自己剛學習完總結下,分享給大家,文章內容會比較多,我們先從思維導圖中瞭解要講的內容。什麼是分佈式鎖分佈式鎖是控制分佈式系統之間同步訪問共享資源的一種方式,通過互斥來保持一致性。瞭解分佈式鎖之前先了解下線程鎖和進程鎖:線程鎖:主要用來給方法、代碼塊加鎖。當某個方法或代碼使用鎖,在同一時刻僅有一個線程執行該方法或該代碼段。線程鎖只在 ⌘ [Read more](https://www.readfog.com/a/1719452019478073344) 2023-11-24T10:55:33Z **Rust 生態系統:探索常用的庫和框架**
大家好!我是 lincyang。今天我們來探索 Rust 的生態系統,特別是其中的一些常用庫和框架。Rust 生態系統雖然相比於一些更成熟的語言還在成長階段,但已經有很多強大的工具和庫支持各種應用的開發。常用的 Rust 庫和框架Serde:一個序列化和反序列化的框架。Serde 極其高效,可以處理各種數據格式,如 JSON、YAML 和 Bincode。 use serde ⌘ [Read more](https://www.readfog.com/a/1719451944860356608) 2023-11-24T10:54:39Z **DDD 四層微服務架構**
大家好,我是 Jensen。一個想和大家一起打怪升級的程序員朋友。許久未提筆,這段時間,筆者除了奔忙於公司的一大堆項目交付,還在寫業務代碼的過程中,沉澱出了一套 DDD 風格的微服務基礎框架。作爲一位時不時就斷更的技術自媒體,光打嘴炮是不夠的,總要產出點什麼,所以斷更並不是我本意,再次向大家致歉,爭取個寬大處理。…… 我錯了,下次還敢……《趕緊進入正題吧》0x1微服務搭建思路大家看到的這張架構圖並 ⌘ [Read more](https://www.readfog.com/a/1719451887981400064) 2023-11-27T03:56:13Z **Go 語言 CSP 編程實戰:通道通信技術**
\*概述通信順序進程(Communicating Sequential Processes,CSP)是一種併發編程的形式化理論,由計算機科學家 Tony Hoare 於 1978 年提出。在 Go 語言中,CSP 被廣泛應用,通過通道(Channel)實現了簡單且強大的併發模型。本文將介紹 Go 語言中的 CSP 概念,通過詳細的示例代碼和註釋,理解 CSP 的運作原理和在 Go 中的實現。1. C ⌘ [Read more](https://www.readfog.com/a/1719697353332592640) 2023-11-27T04:00:42Z **Zig 慣用法之命名規則**
一般來說:函數採用 camelCase 類型採用 PascalCase 變量採用 lowercasewithunderscores 這樣當我們看到 filepath 就知道這是一個變量, FilePath 是一個類型。有一個例外的情況,就是返回類型的函數,它們採用 PascalCase ,例如: pub fn ArrayList(comptime T: type) type ⌘ [Read more](https://www.readfog.com/a/1719697634898317312) 2023-11-27T03:59:12Z **Go 語言讀取 YAML 配置文件教程**
在 Go 語言項目中,處理配置文件是一項常見的任務。YAML 是一種易讀易寫的配置文件格式,本教程將指導你如何在 Go 中讀取和解析 YAML 文件。我們將按照章節的形式逐步介紹相關的概念和示例代碼。第一章:引入依賴--------在開始之前,我們需要引入一個 YAML 解析的第三方庫。推薦使用 gopkg.in/yaml.v2。go get gopkg.in/yaml.v2第二章:創建 YAML ⌘ [Read more](https://www.readfog.com/a/1719697540585197568) 2023-11-27T03:57:03Z **Go 打造高效的聊天系統**
\*概述構建一個高效的 Go 語言聊天服務器是一個具有挑戰性而又令人興奮的任務。本文將通過示例代碼和註釋,逐步實現一個功能強大的 Go 語言聊天服務器。通過清晰的項目結構和合理的邏輯劃分,將能夠理解服務器的設計和實現。1. 項目規劃與結構設計1.1 項目規劃在開始構建聊天服務器之前,需要進行項目規劃。明確通信協議、確定服務器功能和定義用戶管理方式是關鍵步驟。1.2 結構設計設計一個清晰的結構是確保項 ⌘ [Read more](https://www.readfog.com/a/1719697406143074304) 2023-11-27T04:02:59Z **小程序原理系列一之 wxss**
平常小程序寫的多一些,簡單總結一下原理。但因爲小程序也沒開源,只能參考相關文檔以及開發者工具慢慢理解了。理解小程序原理的突破口就是開發者工具了,開發者工具是基於 NW.js,一個基於 Chromium 和 node.js 的應用運行時。同時暴漏了 debug  的入口。點開後就是一個新的 devTools 的窗口,這裏我們可以找到預覽界面的 dom。小程序界面是一個獨立的 webview,也就是常 ⌘ [Read more](https://www.readfog.com/a/1719697778667524096) 2023-11-27T04:01:54Z **Linux 程序之可變參數 -- 選項那些事!**
一、linux 應用程序如何接收參數?-------------------1. argc、argvLinux 應用程序執行時,我們往往通過命令行帶入參數給程序,比如ls /dev/ -l  其中參數  /dev/ 、-l 都是作爲參數傳遞給命令 ls應用程序又是如何接收這些參數的?通常應用程序都是從 main 函數開始執行,傳統的 main 函數風格如下:int main(int argc, c ⌘ [Read more](https://www.readfog.com/a/1719697710667370496) 2023-11-27T04:05:24Z **DDD 落地:從阿里單據系統,看 DDD 在大廠如何落地?**
阿里單據系統的 DDD 最佳實踐----------------作者:少嵐,阿里同城履約物流技術團隊本篇以電商購物場景爲背景,探討了領域驅動設計(DDD)在實際應用中的實踐過程。你會發現,DDD 的核心理念在於,通過一系列實用技巧,挖掘出能揭示問題本質的領域模型,並通過模型間的協作解決領域問題,從而駕馭問題領域的複雜性。對於 DDD 愛好者來說,它猶如一個充滿挑戰和智慧的玩具,在深入思考問題本質和 ⌘ [Read more](https://www.readfog.com/a/1719697930620866560) 2023-11-28T02:47:59Z **深入解析 Redis 執行命令流程:I-O 事件、文件事件和客戶端交互**
前言\-\- Redis 怎麼執行命令的呢?面對這個問題想必大部分朋友心裏的答案是:客戶端發送命令給到服務端,服務端收到執行之後再處理將命令執行結果返回給客戶端,簡單來說如下圖: 那麼具體的更細節呢過程?繼續追問的話,能回答上來的還是比較少的,可能跟我之前一樣無法表述出來,或者根本沒深入瞭解學習過。但是從今天開始我們講能輕鬆應對,今天的文章將會深入 Redis 到底是如何執行我們輸入的命令的,看了 ⌘ [Read more](https://www.readfog.com/a/1719783657269465088) 2023-11-28T02:47:03Z **工作中如何打造優雅的 Git 工作流和 Commit 規範!**
前言🤓Git 大家都非常熟悉了,就不做過多介紹,但是如何用好 Git、如何進行合理的分支開發、Merge 你是否有一個規範流程呢?💤不論是一個團隊一起開發一個項目,還是自己獨立開發一個項目,都少不了要和 Git 打交道,這些都是作爲開發者必須要掌握的。每個團隊也許有自己的 Git 工作流,今天小許給你分享一個通用的流程和規範。既然說到 Git 得先有個協同原則📜: 統一使用 Git 作爲版本控制 ⌘ [Read more](https://www.readfog.com/a/1719783598226247680) 2023-11-28T02:46:35Z **linux 調試工具 - gdb**
前言GDB 是 Linux 下非常好用且強大的調試工具。GDB 可以調試 C、C++、Go、java、 objective-c、PHP 等語言。對於一名 Linux 下工作的 c/c++ 程序員,GDB 是必不可少的工具,本篇以 C 語言來調試。GDB 簡介UNIX 及 UNIX-like 下的調試工具。雖然它是命令行模式的調試工具,但是它的功能強大到你無法想象,能夠讓用戶在程序運行時觀察程序的內 ⌘ [Read more](https://www.readfog.com/a/1719783569176498176) 2023-11-28T02:45:49Z **Go: select 實戰指南:協程切換技術**
概述Go 語言的併發編程模型以其簡潔而強大的 goroutine 爲特色。而 select 語句則是在多個通信操作中選擇一個執行的關鍵工具。本文將討論如何使用 select 切換協程,通過清晰的示例代碼,幫助讀者掌握這一重要的併發編程技巧。select 語句的基本結構package mainimport ( "fmt" "time")func main() { ch1 := make(chan s ⌘ [Read more](https://www.readfog.com/a/1719783521058394112) 2023-11-28T02:59:48Z **Rust 中的設計模式:觀察者模式 -Observer-**
觀察者模式介紹觀察者模式是一種軟件設計模式,它允許對象 (通常稱爲主題) 維護一個稱爲觀察者的依賴項列表,並自動通知它們任何狀態更改。許多語言都有這種模式,要麼是內置的,要麼是在標準庫中。1,首先是 Observable,它可以是一個接口,被觀察的對象。被觀察對象擁有一個觀察者列表。2,Observer,觀察者。這也可以是一個接口。3,ConcreteObservable,保存狀態的具體類。如果狀 ⌘ [Read more](https://www.readfog.com/a/1719784401113550848) 2023-11-28T02:55:40Z **深入理解內存映射:加速文件訪問的神奇原理**
前言:內存映射是一種操作系統提供的技術,它將文件的內容映射到進程的虛擬地址空間中,使得進程可以直接讀寫文件而無需通過傳統的 I/O 操作。通過內存映射,文件被視爲內存中的一部分,進程可以像訪問普通內存一樣對文件進行讀寫操作。 在內存映射過程中,操作系統會將文件數據按頁(通常是 4KB)進行劃分,並在物理內存和虛擬地址空間之間建立對應關係。當進程需要訪問文件時,它只需要使用指針來讀寫相應的內存地址 ⌘ [Read more](https://www.readfog.com/a/1719784140558143488) 2023-11-28T10:43:31Z **結合 MySQL 更新流程看 undolog、redolog、binlog**
開篇 tip我們知道日誌的作用不言而喻,無論是線上排查,亦或是性能優化,幾乎都需要從日誌中來獲得信息作爲依據,而 MySQL 中,很多很多的功能也都需要基於日誌實現,比如事務回滾、數據持久化、數據恢復、數據遷移、MVCC 機制.....我們在瞭解具體內容之前,先對三種日誌之間的小總結,涉及到使用場景和文件等,可以把這個當做先前總結,更細的內容在每一章會提及。簡單梳理下日誌是在哪個地方寫入到不同日誌 ⌘ [Read more](https://www.readfog.com/a/1719813575097290752) 2023-11-28T10:42:19Z **探索 Kubernetes 多租戶解決方案**
簡介--Kubernetes 中的多租戶會帶來各種複雜的挑戰,例如安全性、公平性和資源分配。本博客討論了與多租戶相關的挑戰,以及爲名爲 Labs4grabs.io 的基於 Kubernetes 的學習平臺所做的技術選擇。我將探討兩個關鍵技術 vCluster 和 Kubevirt 的需求、優勢和劣勢。這些技術在開發 Labs4grabs.io 的後端時進行了試驗。儘管 vCluster 非常出色, ⌘ [Read more](https://www.readfog.com/a/1719813499372277760) 2023-11-28T10:42:13Z **擊敗 eBPF Uprobe 監控**
這篇文章介紹了一種可以用於監控用戶空間程序的 eBPF 程序。它首先向您介紹了 eBPF 和 uprobes,然後探討了我們在 uprobes 中發現的缺陷,所有演示示例都適用於 Linux 和 x8664 架構。原文地址:Defeating eBPF Uprobe Monitoring[1]簡介--監控系統發生的事情非常重要。eBPF 可以通過將特定程序鉤入各種系統範圍的事件來幫助您在 Linu ⌘ [Read more](https://www.readfog.com/a/1719813493486620672) 2023-11-28T10:40:40Z **我的 “支付內核”,濃縮成了 46 張圖**
內核是看到一個事物的底層框架,無論外界如何變化,這個內核保持穩定和靈活的兼容性 內核不是一成不變的,它可以不斷吸收新的知識,慢慢長大,而我們也隨之不斷蛻變 現在我將這幾年抽象沉澱出來的 “內核” 展示給大家,這將短時間重塑你 “曾經、現在、未來” 的產品之路我的全局內核認識任何事物,都可以從全局出發,從宏觀上把握,心有乾坤,永不偏向 內核 1:從業務上理解支付的關係做事情,記賬務,動資金這個 ⌘ [Read more](https://www.readfog.com/a/1719813396099076096) 2023-11-28T10:39:04Z **太叼了,從 demo、圖文、底層代碼深入底層揭祕 JVM 的工作原理,感覺又行了!**
時間是一種奇妙的存在,它能夠治癒傷痛,也能夠沖淡記憶。有時候,我們會在某個特定的時刻,突然被過去的回憶所觸動,那些曾經的歡笑和淚水在心中重新浮現。然而,隨着時間的推移,這些回憶也會逐漸模糊,變得不再那麼清晰。或許,這正是時間的神奇之處,它讓我們珍惜當下,同時也讓我們學會放下JDK 體系結構圖     相信這張圖大家應該都不陌生, 在剛開始學習 java 得到時候或多或少的都看過, 一起簡 ⌘ [Read more](https://www.readfog.com/a/1719813295593066496) 2023-11-28T10:47:39Z **領域驅動(DDD)- 項目目錄劃分**
DDD(領域驅動設計)項目的目錄結構應該反映其特性和規則,以下是一個常見的 DDD 項目的目錄結構:Application Services DTOsDomain Models (或Entities) Interfaces Exceptions ValueObjects EventsInfrastructure Repository Persistence DataAcces ⌘ [Read more](https://www.readfog.com/a/1719813835248996352) 2023-11-28T10:46:33Z **Rust 的異步編程與 Futures**
大家好!我是 lincyang。今天,我們來探討 Rust 中的異步編程和 Futures。Rust 的異步編程是一個強大的特性,它允許開發者編寫非阻塞的、高性能的應用程序。讓我們一起深入瞭解這一概念及其在 Rust 中的應用。Rust 中的異步編程異步編程是一種讓程序在等待一個長時間操作(如 I/O)完成時能夠繼續執行其他任務的編程方式。在 Rust 中,異步編程是通過async關鍵字和Futu ⌘ [Read more](https://www.readfog.com/a/1719813766234869760) 2023-11-28T10:45:56Z **一條 Update 語句的執行過程是怎樣的?**
前言--通過本文主要了解 Sql 執行流程,包括兩個問題:1. MySQL 的一條 Select 語句是怎麼運行的 2. MySQL 的一條 Update 語句是怎麼運行的 先看第一個問題,這裏做個簡單描述 ,因爲我們着重還是看 Update MySQL 執行一條 Select 語句是怎麼運行的?這個問題大家在面試的時候大家都背過類似的題,而且網上也有很多答案,這裏分享一個大致流程介 ⌘ [Read more](https://www.readfog.com/a/1719813727587504128) 2023-11-28T10:45:35Z **一文搞懂 Go gRPC 服務 Handler 單元測試**
在雲原生時代和微服務架構背景下,HTTP 和 RPC 協議成爲服務間通信和與客戶端交互的兩種主要方式。對於 Go 語言而言,標準庫提供了 net/http/httptest 包,爲開發人員提供了便捷的方式來構建服務端 HTTP Handler 單元測試的測試腳手架代碼,而無需真正建立 HTTP 服務器,讓開發人員可以聚焦於對 Handler 業務邏輯的測試。比如下面這個示例:// grpc-tes ⌘ [Read more](https://www.readfog.com/a/1719813705593622528) 2023-11-28T10:49:40Z **Go 淺析主流日誌庫:從設計層學習如何集成日誌輪轉與切割功能**
前言在現有的日誌庫中,包括 go 1.21.0 引入的 slog 日誌庫,它們通常都支持對日誌文件進行輪轉與切割,只不過這些功能並不直接被內置,而是需要我們主動配置來啓用。本文將探討幾個熱門的日誌庫如 logrus、zap 和官網的 slog,我將分析這些庫的的關鍵設計元素,探討它們是如何支持日誌輪轉與切割功能的配置。 淺析 logrus、zap 和 slog 的設計在對 logrus、zap 和 ⌘ [Read more](https://www.readfog.com/a/1719813962021834752) 2023-11-29T02:54:33Z **面試官:10 億數據如何快速插入 MySQL?**
最快的速度把 10 億條數據導入到數據庫,首先需要和麪試官明確一下,10 億條數據什麼形式存在哪裏,每條數據多大,是否有序導入,是否不能重複,數據庫是否是 MySQL?假設和麪試官明確後,有如下約束10 億條數據,每條數據 1 Kb 數據內容是非結構化的用戶訪問日誌,需要解析後寫入到數據庫 數據存放在Hdfs 或 S3 分佈式文件存儲裏 10 億條數據並不是 1 個大文件,而是被 ⌘ [Read more](https://www.readfog.com/a/1719874667260514304) 2023-11-29T02:53:42Z **DDD 落地:有讚的生產項目,DDD 如何落地?**
一、有贊教育線索資源管理項目背景----------------作者:程英傑,有贊教育在教育行業中,業務流程涵蓋了招生開發、潛在學員信息管理、教務調度、學員溝通、互動輔導以及口碑傳播。首先,在招生開發階段,通過網絡營銷或線下推廣活動收集潛在學員信息,並將其納入信息管理系統。在潛在學員信息管理環節,利用信息資源管理系統對收集的數據進行統一管理,並將潛在學員轉化爲實際學員,爲後續教務調度提供數據支持。 ⌘ [Read more](https://www.readfog.com/a/1719874613733855232) 2023-11-29T02:52:16Z **IOCP 完成端口通俗講義與項目實戰**
什麼是 IOCP 完成端口?--------------我們可以把 IOCP 完成端口(以下統稱 IOCP)理解爲 Windows 下性能最高的網絡編程技術,本文講解該技術的基本知識,以及如何使用該技術開發高性能的網絡軟件。 IOCP 本質上就是 Windows 內核提供的一種請求隊列 + 通知隊列,我們把各種耗時的網絡操作請求投遞到請求隊列,IOCP 具體怎麼去完成這些網絡操作我們不管,IOC ⌘ [Read more](https://www.readfog.com/a/1719874524122550272) 2023-11-29T02:51:00Z **解密 Python 如何調用 Rust 編譯生成的動態鏈接庫**
楔子Rust 讓 Python 更加偉大,隨着 Rust 的流行,反而讓 Python 的生產力提高了不少。因爲有越來越多的 Python 工具,都選擇了 Rust 進行開發,並且性能也優於同類型的其它工具。比如:ruff:速度極快的代碼分析工具,以及代碼格式化工具; orjson:一個高性能的 JSON 解析庫; watchfiles:可以對指定目錄進行實時監控; polars ⌘ [Read more](https://www.readfog.com/a/1719874444433920000) 2023-11-29T03:06:35Z **拉流端直播 xgplayer 使用經驗**
一、背景介紹爲了強化官方驗的心智,平臺要做一版新的質檢直播間,將我們的質檢車間全方位透明的展現給用戶。按照產品的設計來實現的話,其實就是將各個鏡頭的內容同時在一個頁面內進行播放,除了工作時間的直播,還有休息時間的錄播播放。不過直播和錄播的生成都是在後端實現,前端只負責視頻資源的播放。二、前期調研對於簡單的直播場景,我們需要關注的主要是「編解碼格式」和「直播協議」,因爲這兩點直接決定直播能否播放。「 ⌘ [Read more](https://www.readfog.com/a/1719875424648007680) 2023-11-29T03:04:52Z **一篇文章帶你瞭解 Go 語言基礎之併發(channel)**
前言--Hi,大家好,我是碼農,星期八,本篇繼續帶來 Go 語言併發基礎,channel 如何使用。看看 Go 協程如何配合 channel。快來上車叭。爲什麼需要 channel-------------channel 在 Go 中,也叫做管道,是用來多線程之間共享數據的。通常情況下,在 Go 中共享數據用的也是channel,但是在 Go 有兩種共享數據方式。共享內存實現通訊。 通過管道 ⌘ [Read more](https://www.readfog.com/a/1719875316900532224) 2023-11-30T02:17:42Z **不一樣的網絡協議 -------KCP 協議詳解**
1、kcp 的協議特點1.1、RTO 不翻倍RTO(Retransmission TimeOut),重傳超時時間。tcp x 2,kcp x 1.5,提高傳輸速度1.2、選擇重傳TCP 丟包時會全部重傳從該包開始以後的數據,而 KCP 選擇性重傳,只重傳真正丟失的數據包。1.3、快速重傳tcp 重傳模式超時重傳:超過規定的時間 RTO 則重傳快速重傳:收到三個冗餘 ACK,不去等待 RTO ,直接 ⌘ [Read more](https://www.readfog.com/a/1719962946224885760) 2023-11-30T02:25:23Z **一圖看懂 4 種接收實時數據更新的設計**
今天來聊聊 4 種接收實時更新的方法,各有利弊,在設計中酌情選取。01 短輪詢(Short Polling)---------------------這是最基本的方法。客戶端會重複向服務器發送 HTTP 請求。我們來看一個使用場景:我們登錄一個網站,看到一個二維碼,然後我們可以用智能手機掃描二維碼。這個二維碼通常用於特定操作,如身份驗證。應用程序並不知道我們掃描二維碼的確切時間。因此,它會每隔 1 ⌘ [Read more](https://www.readfog.com/a/1719963429634150400) 2023-11-30T02:24:21Z **接口中的大事務,該如何進行優化?**
1 前言----作爲後端開發的程序員,我們常常會的一些相對比較複雜的邏輯,比如我們需要給前端寫一個調用的接口,這個接口需要進行相對比較複雜的業務邏輯操作,比如會進行,查詢、遠程接口或本地接口調用、更新、插入、計算等一些邏輯,將最終接口的返回結果給到前端,而經過這麼一系列的業務邏輯操作,接口對 DB 的操作、對代碼業務邏輯判斷、進行接口調用這些都是需要時間的,而只要這是一個事務操作,每次對數據庫進行 ⌘ [Read more](https://www.readfog.com/a/1719963364545892352) 2023-11-30T02:19:23Z **監控永遠是上報比抓取效率高 -​Telegraf**
簡介Telegraf 是一個基於插件的開源指標採集工具。本身是爲 InfluxDB(一款時序數據庫)量身打造的數據收集器,但是它過於優秀,能夠將抓取的數據寫到很多地方,尤其在時序數據庫領域,很多時序數據庫都能夠與它配合使用。通常,它每隔一段時間抓取一批指標數據(比如機器的 CPU 使用情況,磁盤的 IO,網絡情況,MySQL 服務端的會話數等等)並將他們發送到時序數據庫、消息隊列中或者自定義導出到 ⌘ [Read more](https://www.readfog.com/a/1719963051846897664) 2023-12-01T04:08:46Z **Discord 如何存儲數萬億條消息 — 系統設計的奇妙案例**
2017 年,Discord 團隊分享了他們如何開始使用 MongoDB,但後來將數據遷移到 Cassandra,因爲他們正在尋找一個可擴展、容錯且維護成本相對較低的數據庫。 幾年後,Discord 的 Cassandra 集羣出現了嚴重的性能問題,需要付出越來越多的努力來維護,而不是改進。我們將在這裏介紹什麼……Discord 的 Cassandra 麻煩 改變架構——Scyll ⌘ [Read more](https://www.readfog.com/a/1720060531051696128) 2023-12-01T04:06:50Z **Go 語言中的反射機制**
在 Go 語言的衆多高級特性中,反射(Reflection)是一個強大且複雜的概念。它使得程序能夠在運行時檢查、修改其自身結構。反射在處理接口和類型斷言、開發通用功能或者設計框架時尤爲重要。本文將深入探索 Go 語言中的反射機制,通過具體的示例展示如何使用 reflect 包,讓你能夠在 Go 項目中有效地利用這一強大的工具。Go 反射基礎-------反射的概念反射是指計算機程序在運行時(run ⌘ [Read more](https://www.readfog.com/a/1720060409520689152) 2023-12-01T04:05:25Z **使用 Go 語言創建自己的密碼加密工具**
Go 語言藉助它的簡單性和強大的標準庫,實現一個自己的密碼加密工具非常簡單。在本篇文章中,我們將會結合代碼示例深入探討如何使用 Go 語言的 crypto 包來實現自己的加密工具。首先,我們需要 import 必要的包:package mainimport (    "crypto/aes"    "crypto/cipher"    "crypto/rand"    "fmt"    "io") ⌘ [Read more](https://www.readfog.com/a/1720060320200888320) 2023-12-01T04:03:57Z **Rust 內存佈局**
整型, 浮點型, struct,vec!,enum 本文是對 Rust 內存佈局 [1] 的學習與記錄 struct A {    a: i64,    b: u64,}struct B {    a: i32,    b: u64,}struct C {    a: i64,    b: u64,    c: i32,}struct D {    a: i32,    b: u64, ⌘ [Read more](https://www.readfog.com/a/1720060227586461696) 2023-12-01T04:12:00Z **微服務架構 腳手架形成**
微服務架構實施契機 業務高速發展 業務邏輯耦合 業務場景複雜 用戶規模爆發 研發人員擴張 代碼規模膨脹 實施服務的幾個關鍵點 以服務爲中心,一切都是服務,每個服務都針對單一業務進行封裝,保證功能的單一性和完整性 松耦合性,服務之間功能獨立,能夠獨立部署,服務之間互相依賴 高擴展性,分散資源,團隊協作,可無限擴展,更高的代碼重用率 微服務框架 ⌘ [Read more](https://www.readfog.com/a/1720060733838954496) 2023-12-01T04:16:40Z **如何使用 Rust 進行 TLS 開發?**
TLS 基礎知識TLS 是一種安全協議,有助於在雙方之間建立安全連接。TLS 通過握手來驗證雙方彼此的身份,並就如何加密數據達成一致。如圖:身份驗證:TLS 使用數字證書對參與通信的各方進行身份驗證,數字證書由受信任的第三方頒發,例如證書頒發機構 (CA)。 加密:TLS 使用加密來保護交換的數據,使用的加密算法取決於協商的參數。 完整性:TLS 使用散列函數來確保交換的數據未被篡改。 ⌘ [Read more](https://www.readfog.com/a/1720061027799896064) 2023-12-01T04:16:15Z **TCP 基礎詳解:Telnet 迴音服務器搭建**
\*概述Telnet 迴音服務器是一個簡單而實用的網絡應用,通過 Telnet 協議連接,用戶輸入什麼,服務器就回顯什麼。本文將介紹如何使用 Go 語言創建一個 Telnet 迴音服務器,通過完整的示例代碼和詳細註釋,便於理解 TCP 服務器的基本結構和實現。1. TCP 服務器基礎TCP 協議簡介package mainimport ("fmt""net")func main() { liste ⌘ [Read more](https://www.readfog.com/a/1720061001655750656) 2023-12-01T04:14:45Z **無縫集成 GORM 與 Go Web 框架**
探索 GORM 與流行的 Go Web 框架之間的和諧集成,以實現高效的數據管理----------------------------------------高效的數據管理是每個成功的 Web 應用程序的基礎。GORM,多才多藝的 Go 對象關係映射庫,與流行的 Go Web 框架非常搭配,提供了無縫集成,簡化了數據交互。本指南將帶您探索 GORM 與諸如 Gin、Echo 和 Beego 等 ⌘ [Read more](https://www.readfog.com/a/1720060906688319488) 2023-12-01T04:18:17Z **Go 反射終極指南:從基礎到高級全方位解析**
在本文中,我們將全面深入地探討 Go 語言的反射機制。從反射的基礎概念、爲什麼需要反射,到如何在 Go 中實現反射,以及在高級編程場景如泛型編程和插件架構中的應用,本文爲您提供一站式的學習指南。一、簡介反射是一種讓程序在運行時自省(introspect)和修改自身結構和行爲的機制。雖然這聽起來有點像 “自我觀察”,但實際上,反射在許多現代編程語言中都是一個非常強大和重要的工具。Go 語言也不例 ⌘ [Read more](https://www.readfog.com/a/1720061129904984064) 2023-12-01T04:17:28Z **17 個開源的 Go 語言博客和 CMS 解決方案**
Go 語言,也稱爲 Golang,是一種爲構建高效、可靠和可擴展軟件而設計的開源編程語言。它於 2007 年在 Google 開發,現在廣泛用於開發 Web 應用程序、網絡工具和系統軟件。爲什麼使用基於 Go 的 CMS 解決方案?----------------------這些優勢使 Go 成爲開發可擴展、高性能應用程序的熱門選擇。在使用 Go 構建基於 Web 的解決方案時,其速度是其中一個主 ⌘ [Read more](https://www.readfog.com/a/1720061078237450240) 2023-12-01T04:17:00Z **Gin 如何實現跨域**
什麼叫做跨域    "跨域" 是一個網絡安全的概念,起源於瀏覽器的同源策略。同源策略是一種約定,它是由網景(Netscape)公司提出的一個重要的安全策略。所謂同源是指 "協議 + 域名 + 端口號" 三者相同,只要不同時,就算是不同源。    換句話說,"跨域" 指的是從一個域名的網頁去請求另一個域名的資源。例如,"http://website1.com" 的網頁通過 Ajax 獲取 "http ⌘ [Read more](https://www.readfog.com/a/1720061049039851520) 2023-12-01T04:22:11Z **Rust 併發控制之 Condvar**
上次提到的 Barrier 用到了 Rust 的 condvar 和 mutex,今天來看下 condvar 的用法。文章目錄喚醒順序不保證 虛假喚醒 condvar 即 condition variable(條件變量),是一種線程同步的方式,用於線程間的通信。它可以阻塞(wait)線程,期間不消耗 CPU,直到某個時間發生喚醒(notify)線程。代碼舉例來說:use std::sy ⌘ [Read more](https://www.readfog.com/a/1720061375137550336) 2023-12-01T04:21:33Z **Go 工具鏈詳解之升級版本不用愁的 go tool fix**
go tool fix 作用go tool fix 是 Go 工具鏈中的一個命令,作用是把指定 Go 程序代碼包中的的所有舊版本代碼修正爲新版本的代碼(這裏所說的版本是 Golang 的版本)。升級 Go 版本之後,使用這個命令可以自動對程序進行必要的更改。Golang 的演進過程中,對一些函數和標準庫進行改進是難免的,改進過程中有可能會出現兼容問題,一旦出現了兼容問題,從舊版本升級到新版本的代價 ⌘ [Read more](https://www.readfog.com/a/1720061335086141440) 2023-12-01T04:21:11Z **DDD 之聚合(Aggregate)**
聚合(Aggregate)是領域驅動設計(Domain-Driven Design,簡稱 DDD)中的一個重要概念,用於將一組關聯的領域對象組織在一起。聚合的定義--------聚合是指一組相關聯的領域對象的根實體,由根實體和其內部的實體和值對象組成,並定義了這些對象在業務中的邊界和一致性約束。聚合的根實體是與外部世界交互的入口點,它負責保持聚合內部的一致性,並封裝了其他對象的訪問。聚合的設計 ⌘ [Read more](https://www.readfog.com/a/1720061312265981952) 2023-12-01T04:21:09Z **Gorm 中的遷移指南**
在應用程序開發的不斷變化的景觀中,數據庫模式更改是不可避免的。GORM,強大的 Go 對象關係映射庫,通過遷移提供了一種無縫的解決方案來管理這些變化。本文將作爲您全面的指南,幫助您掌握使用 GORM 進行數據庫遷移和模式管理。我們將深入探討自動遷移、創建和應用遷移,以及在您的 Go 項目中優雅處理不斷髮展的模式需求的策略。GORM 中的自動遷移-----------自動遷移是一個重要的改進,確保您 ⌘ [Read more](https://www.readfog.com/a/1720061309914025984) 2023-12-01T04:21:08Z **go-mongox:簡單高效,讓文檔操作和 bson 數據構造更流暢**
大家好,我是 陳明勇,一個熱愛技術,喜歡鑽研技術的程序員。前言在 Go 語言中使用 MongoDB 官方框架進行集合操作時,深深感到構建 bson 數據是一件非常繁瑣的工作。字段、逗號,括號等符號的排列,讓我感覺彷彿是在進行一場拼圖遊戲。因此我在想,有沒有一個能讓我絲滑,高效操作 MongoDB 的第三方框架呢,遺憾的是,並沒有找到符合我預期的框架,索性我就自己動手開發了一個,這就是 go-mon ⌘ [Read more](https://www.readfog.com/a/1720061309189459968) 2023-12-04T03:41:58Z **用 SpringBoot-Redis 解決海量重複提交問題**
前言在實際的開發項目中, 一個對外暴露的接口往往會面臨很多次請求,我們來解釋一下冪等的概念:任意多次執行所產生的影響均與一次執行的影響相同。按照這個含義,最終的含義就是 對數據庫的影響只能是一次性的,不能重複處理。如何保證其冪等性,通常有以下手段:1、數據庫建立唯一性索引,可以保證最終插入數據庫的只有一條數據。2、token 機制,每次接口請求前先獲取一個 token,然後再下次請求的時候在請求的 ⌘ [Read more](https://www.readfog.com/a/1720330635762044928) 2023-12-04T03:41:22Z **Go 反射之 reflect-TypeOf-- 和 reflect-Type**
\*概述在 Go 語言中,反射是一項強大的特性,它允許程序在運行時動態獲取變量的類型信息,進行類型操作與轉換,甚至能夠對結構體和函數進行反射操作。本文將探討 reflect.TypeOf() 和 reflect.Type,揭示 Go 語言 中反射的奧祕。一、reflect.TypeOf() 函數返回反射 Type 對象reflect.TypeOf() 函數用於獲取一個變量的反射 Type 對象。它接 ⌘ [Read more](https://www.readfog.com/a/1720330597969268736) 2023-12-04T07:16:10Z **使用狀態模式和零大小類型 10 倍提高 Rust api 性能**
在這篇文章中,我們通過一步步實現一個真實項目的例子,來展示如何通過使用泛型、零大小類型及狀態模式 10 倍提高 Rust api 的性能,同時還能防止 API 的使用者濫用 API。這個項目是構建一個密碼管理器的庫。首先,我們定義一個名爲 PasswordManager 的結構體:use std::collections::HashMap;struct PasswordManager {    m ⌘ [Read more](https://www.readfog.com/a/1720344111495614464) 2023-12-04T07:19:04Z **瀏覽器跨 Tab 窗口通信原理及應用實踐**
最近,相信大家一定被這麼個動效給刷屏了:以至於,基於這個效果的二次創作層出不窮,眼花繚亂。基於跨窗口通信的彈彈球:基於跨窗口通信的 Flippy Bird:我也嘗試製作了一個跨 Tab 窗口的 CSS 動畫聯動,效果如下:代碼不多,核心代碼 200 行,感興趣的可以戳這裏:Github - broadcastAnimation[1]當然,本文的核心不是去一一剖析上面的效果具體的實現方式,而是講講其 ⌘ [Read more](https://www.readfog.com/a/1720344294641995776) 2023-12-04T07:16:57Z **2023 年 Go 併發庫的變化**
2023 年來, Go 的併發庫又有了一些變化,這篇文章是對這些變化的綜述。小細節的變化,比如 typo、文檔變化等無關大局的變化就不介紹了。sync.Once---------Go 1.21.0 中增加了和 Once 相關的三個函數,便於 Once 的使用。func OnceFunc(f func()) func()func OnceValueT any T) func() Tfunc Once ⌘ [Read more](https://www.readfog.com/a/1720344161571409920) 2023-12-04T07:40:41Z **慢聊 Golang 的 websocket 使用和實現代碼分析**
前言在[【你不知道的 websocket 協議,這次給你講明白!】](https://mp.weixin.qq.com/s?\_biz=MzkxNjIyMDY4OQ==&mid=2247484242&idx=1&sn=ab1c7e2abe8aec98c92b19b215378f02&chksm=c1527d2cf625f43a634a116cf6856dc17d5956297452ce034f55c ⌘ [Read more](https://www.readfog.com/a/1720345653986562048) 2023-12-05T09:32:26Z **Python 源碼解密協程隊列和線程隊列的實現原理**
本次來聊一聊 Python 的隊列,首先隊列是一種特殊的線性表,具有先進先出(FIFO)的特性,這意味着元素的入隊順序和出隊順序是一致的。 隊列通常用於存儲需要按順序處理的數據,例如任務調度。當然隊列最常見的一個應用場景就是解耦,一個線程不停地生產數據,放到隊列裏,另一個線程從隊列中取數據進行消費。而 Python 也提供了隊列,分別是協程隊列和線程隊列。import asyncioimport ⌘ [Read more](https://www.readfog.com/a/1720443282381705216) 2023-12-05T09:31:02Z **Go 反射深度揭祕之 reflect-Elem-- 方法解析**
\*概述Go 語言中的反射機制提供了強大的工具,能夠在運行時獲取和操作變量的信息。其中,reflect.Elem() 方法是一個重要的利器,通過它能夠獲取指針指向的元素類型,提供更多的靈活性。本文將解析 reflect.Elem() 的方法簽名、作用機制,並通過豐富的示例演示其調用方式。一、Elem() 方法解析方法簽名func (v Value) Elem() ValueElem() 方法是 re ⌘ [Read more](https://www.readfog.com/a/1720443193988845568) 2023-12-05T09:30:15Z **Rust 的 cfg 屬性**
Rust 的 #[cfg()] 屬性是一個強大的功能,它允許開發人員在編譯時根據指定的條件有條件地編譯代碼。它支持在編譯過程中對代碼進行細粒度控制,從而產生更高效和優化的程序。在其核心,#[cfg()] 是一個編譯時屬性宏 (與類函數宏相反)。它允許 Rust 在編譯期間計算謂詞並決定是否包含或排除特定的代碼塊或項。我們將通過多個示例介紹如何表達謂詞以及在何處使用此屬性。條件Rust 提供了幾個內 ⌘ [Read more](https://www.readfog.com/a/1720443144443629568) 2023-12-05T09:38:04Z **介紹 Agency: 使 AI 與 Go 語言無縫對接**
在當今應用開發領域,類似 OpenAI API 等生成式 AI 技術的蓬勃發展正在徹底改變着應用開發的格局。Python 和 JavaScript 等語言已經擁有豐富的資源來支持這些技術,其中 LangChain 就是一個顯著的例子。然而,Go 語言開發者面臨的選擇卻相對有限。LangChainGo,作爲 LangChain 的 Go 語言版本,一直在努力與 Go 的編程理念保持一致,而 Lang ⌘ [Read more](https://www.readfog.com/a/1720443636221579264) 2023-12-06T03:32:28Z **徹底理解零拷貝技術 -DMA、PageCache-**
DMA-------直接內存訪問(Direct Memory Access)什麼是 DMA?在進行數據傳輸的時候,數據搬運的工作全部交給 DMA 控制器,而 CPU 不再參與,可以去幹別的事情。傳統 I/O在沒有 DMA 技術前,全程數據拷貝都需要 CPU 來做,嚴重消耗 CPU。利用 DMA 的 IO利用 DMA 之後:4 次數據拷貝,其中 DMA 和 CPU 分別拷貝 2 次 (CPU 的時間 ⌘ [Read more](https://www.readfog.com/a/1720511231501111296) 2023-12-06T03:31:31Z **Go 反射機制揭祕:輕鬆獲取結構體成員類型**
\*概述Go 語言的反射機制提供了強大的工具,使得在運行時獲取結構體的成員類型成爲可能。本文將介紹如何用反射實現結構體成員類型的獲取,包括結構字段的遍歷、按名稱訪問結構成員、處理匿名字段及內嵌類型,以及解析字段標籤元信息的方法。一、結構字段遍歷值對象及類型對象package mainimport ( "fmt" "reflect")type User struct { ID int Na ⌘ [Read more](https://www.readfog.com/a/1720511172200992768) 2023-12-06T03:41:15Z **Go 項目的簡單部署**
概述--在上一篇筆記記錄了 Gin 實現簡單的註冊登錄和狀態管理。這一篇筆記來分享一下如何將上面的項目打包鏡像和部署,筆記分成三部分,分別是 Web 後端項目 Docker 鏡像的構建、使用 Docker 運行、使用 Docker Compose 和 k8s 部署容器。使用 Ingress 路由規則和 Web 前端的部署運行在下一篇筆記中記錄。構建 Docker 鏡像------------概述構 ⌘ [Read more](https://www.readfog.com/a/1720511784775946240) 2023-12-06T03:40:40Z **DDD 如何落地:去哪兒的 DDD 架構實操之路**
作者:李全黨 / 朱浩曼 來源:技術自由圈本文目錄\-\-\-\-\- 一、架構設計理念與技術  \- 1\. 架構演變路徑  - 2. 架構設計理念- 二、業務系統重構背景  - 1. 業務介紹:酒店基礎信息  - 2. 基礎信息業務架構  - 3. 落地技術中心戰略,償還技術債務  - 4. 系統重構模式選擇- 三、系統重構改造模式與架構選擇  - 系統重構模式選擇    - 1)服務業務戰略 ⌘ [Read more](https://www.readfog.com/a/1720511747585052672) 2023-12-06T03:39:44Z **conc 使用指南**
conc 使用指南conc 是由 sourcegraph 開源的一套友好的結構化併發工具包,其中總結了 sourcegraph 內部在編寫併發代碼時反覆遇到的問題的解決方案。conc.WaitGroup--------------conc 庫中的WaitGroup是作用域併發的主要構建塊。調用其Go方法能夠生成 goroutine,調用其Wait方法可以確保在生成的 goroutine 都退出後再 ⌘ [Read more](https://www.readfog.com/a/1720511688614187008) 2023-12-07T03:19:11Z **一圖瞭解 linux 啓動流程**
linux 啓動的動圖,太形象了。 Linux 系統 iconon 系統的啓動過程可以分爲 5 個階段: 1、內核的引導: BIOS/UEFI:當計算機加電後,首先運行的是 BIOS (基本輸入輸出系統) 或 UEFI (統一可擴展固件接口),它們負責進行硬件檢測、初始化以及啓動引導程序。 引導加載程序(Bootloader):在 Linux 中,最常見的引導加載程序有 GRUB (GNU ⌘ [Read more](https://www.readfog.com/a/1720600993132023808) 2023-12-07T03:18:33Z **Chrome 插件開發指南和實踐**
本文代碼:https://github.com/nyqykk/hello-extensions-react閱讀本文你將瞭解到Chrome 插件整體架構; 如何開發一個 Chrome 插件(Popup 和 Devtools); 如何使用前端框架(React/Vue)進行開發; 如何調試插件; 如何使用 Puppeteer 對插件進行 E2E 測試(本地和 CI 環境)。 ⌘ [Read more](https://www.readfog.com/a/1720600952649650176) 2023-12-07T03:17:22Z **基於 libevent 的 C-- 線程池實現**
1 功能簡介本文利用 libevent,實現一個 C++ 線程池,,可自定義用戶任務類,繼承於任務 task 基類,重寫任務基類的純虛函數實現多態。比如將定義定義處理客戶端的請求任務類,實現對客戶端請求的併發處理。工作隊列:可以理解爲線程的隊列,一個線程同時可以處理一個任務,空閒的線程回從任務隊列取出任務執行。當工作隊列空時,線程會睡眠。 任務隊列:用戶將任務加入任務隊列,然後通知工作隊列, ⌘ [Read more](https://www.readfog.com/a/1720600878350700544) 2023-12-07T03:15:48Z **Go 的事件驅動編程:使用 EventBus 實現**
大家好!我是 [lincyang]。今天我們要探討的是 Go 語言中的事件驅動編程,特別是如何使用 EventBus 來實現這一目標。什麼是事件驅動編程?----------事件驅動編程是一種編程範式,其中應用程序的流程由外部事件(如用戶輸入或系統觸發的事件)來控制。這種方法在 GUI 應用、網絡編程和實時系統中尤爲常見。爲什麼選擇 EventBus?---------------EventBus ⌘ [Read more](https://www.readfog.com/a/1720600779919822848) 2023-12-07T03:27:23Z **Go 的分佈式應用:使用 Raft 算法**
大家好!我是 [lincyang]。今天我們要探討的是如何在 Go 語言中使用 Raft 算法來構建分佈式應用。什麼是 Raft 算法?------------Raft 算法是一種用於管理分佈式系統中的複製日誌的一致性算法。它的主要目標是簡化分佈式系統的構建和理解。爲什麼使用 Raft?-----------Raft 算法相對於其他分佈式一致性算法(如 Paxos)來說,更易於理解和實現,同時也具 ⌘ [Read more](https://www.readfog.com/a/1720601508907683840) 2023-12-07T03:24:42Z **在微服務架構中的數據一致性**
當從傳統的單體應用架構轉移到微服務架構時,特別是涉及數據一致性時,數據一致性是微服務架構中最困難的部分。傳統的單體應用中,一個共享的關係型數據庫負責處理數據一致性。在微服務架構中,如果使用 “每個服務一個數據庫” 的模式,那麼每個微服務都有自己的數據存儲。因此,數據庫在應用程序之間是分佈式的。如果每個應用程序使用不同的技術來管理它們的數據,比如非關係型數據庫,這種分佈式架構雖然在數據管理方面有許多 ⌘ [Read more](https://www.readfog.com/a/1720601340428783616) 2023-12-07T03:24:07Z **老外總結的 14 條 Go 接口最佳實踐,有些不一樣**
最近幾個月,沒事喜歡看看老外寫的技術文章,發現他們的一些思考維度真的有些不太一樣。當然,他們寫的文章大多數沒有國內的那麼卷。今天這篇文章是關於 Go 語言中接口設計的一些最佳實踐,與 Java 等語言不盡相似,但又帶着 Go 語言的特色,可以對照學習,拓展編程思想層面的認知面。以下是在 Go 中使用接口的一些最佳實踐:1、優先小接口:接口是 Go 中的強大工具,但要保持它們小巧並專注於特定任務。這 ⌘ [Read more](https://www.readfog.com/a/1720601303105769472) 2023-12-07T03:22:51Z **Go 標籤實踐手冊,結構體標籤應用全攻略**
\*概述結構體標籤,作爲 Go 語言中獨有的元信息機制,提供了在運行時對結構體字段進行註釋和標記的能力。本文將介紹 Go 語言中結構體標籤的概念、自定義創建和處理、應用場景、標籤信息查詢以及代碼生成場景應用,帶讀者深入瞭解結構體標籤的細節和最佳實踐。一、結構體標籤概念標籤定義和格式解析package mainimport ( "fmt" "reflect")// 定義一個包含標籤的結構體type ⌘ [Read more](https://www.readfog.com/a/1720601223214764032) 2023-12-07T03:22:29Z **用 Rust 和 React 構建一個實時聊天應用 - 1 服務器端**
在本文中,我們將演示如何使用 Rust 和 React 構建一個實時聊天應用程序,該應用程序提供聊天功能,檢查用戶狀態,並指示用戶何時輸入。我們將使用 WebSockets 來啓用客戶端和服務器的雙向通信。實時聊天應用介紹實時聊天應用程序允許用戶通過文本、語音或視頻進行實時交流。這種類型的應用程序需要比其他類型的通信 (如電子郵件或即時通訊) 更即時的消息傳遞。聊天應用程序必須實時工作有以下幾個原 ⌘ [Read more](https://www.readfog.com/a/1720601200582299648) 2023-12-07T03:32:55Z **聊聊 Rust 的併發約束:Send 和 Sync**
不知道你有沒有好奇過,Rust是怎麼控制併發安全的。爲什麼編譯器在編譯時就能發現一些併發安全的問題。今天拿例子聊聊這背後Rust的兩個併發約束trait:Sync和Send,看看它們是怎麼控制併發安全的。文章目錄Send Sync Send----先來看看下邊代碼,嘗試將String類型的引用計數a(RcString)移動到另一個線程中去,會發現編譯器報錯了。use std::{rc: ⌘ [Read more](https://www.readfog.com/a/1720601857159696384) 2023-12-07T03:32:13Z **短鏈服務?用 Nest 自己寫一個**
生活中我們經常遇到需要短鏈的場景。比如一段很長的 url:分享出去很不方便。這時候就可以通過短鏈服務把它縮短:點擊短鏈會跳轉到原鏈接:這種在短信裏很常見:因爲短信是按照字數收費的,太長不但閱讀體驗不好,費用也高。所以都會生成短鏈之後再加到短信裏。那短鏈是怎麼實現的呢?很容易想到的思路是這樣的:用 0、1、2、3、4、5 的遞增 id 標識每個 url,把映射關係存到數據庫裏。這樣訪問短鏈的時候從數 ⌘ [Read more](https://www.readfog.com/a/1720601812640305152) 2023-12-08T07:16:50Z **Go 深度解析 ValueOf-- 與 Value 的神奇魔法**
\*概述Go 語言中,反射機制提供了強大的工具,其中的 reflect 包中的 ValueOf() 和 Value 函數是反射的基礎。本文將介紹這兩個函數的作用機制,探討其在接口值轉換、參數傳遞規律等方面的實際運用。一、ValueOf 函數作用機制package mainimport ( "fmt" "reflect")func main() { // 使用 ValueOf 獲取接口值的反射對 ⌘ [Read more](https://www.readfog.com/a/1720706541196251136) 2023-12-08T07:15:50Z **用 Rust 和 React 構建一個實時聊天應用 - 2 Web 端**
用 React 構建客戶端 UI首先,用 Node.js 創建一個 UI 項目:npx create-next-app@latest --js ui一路選 NO,然後進入 UI 目錄,在項目中添加 Tailwind CSS:npm install -D tailwindcss postcss autoprefixernpx tailwindcss init -p現在,修改 Tailwind 配置文 ⌘ [Read more](https://www.readfog.com/a/1720706478926565376) 2023-12-08T07:14:21Z **你真的懂 HTTP 緩存嗎**
作者:程序員小楊 v1 原文:https://juejin.cn/post/7281088405189427215背景--需求開發中不斷的往項目中添加圖片、字體等這些靜態資源使得項目打包體積越來越大。打包後這些靜態資源佔據了包體積的大部分。基於此,我們準備將靜態資源從項目中移出來放到 oss 雲服務上,這樣項目的體積會縮小很多,打包速度也會快很多但是,想法是好的,但是具體的操作上存在一些 ⌘ [Read more](https://www.readfog.com/a/1720706385177579520) 2023-12-08T07:13:41Z **Go 語言控制協程 -goroutine- 的併發數量,有哪些好的解決方法**
在使用協程併發處理某些任務時, 其併發數量往往因爲各種因素的限制不能無限的增大. 例如網絡請求、數據庫查詢等等。從運行效率角度考慮,在相關服務可以負載的前提下(限制最大併發數),儘可能高的併發。在 Go 語言中,可以使用一些方法來控制協程(goroutine)的併發數量,以防止併發過多導致資源耗盡或性能下降。以下是一些常見的方法:1. 使用信號量(Semaphore):可以使用 Go 語言中的 c ⌘ [Read more](https://www.readfog.com/a/1720706343218810880) 2023-12-08T07:19:29Z **萬字串講 git 版本控制底層原理及實戰分享**
0 前言本期和大家探討編程開發領域中非常重要的一項軟技能——git.本期會探討到的內容包括:• git 底層原理,存儲結構組織形式 • 介紹幾個實用的 git 指令,在瞭解原理的基礎上對底層實現進行推演 可能有同學會疑惑,git 操作指令本身並不複雜,翻來覆去就是幾個常用指令,我們反覆使用做到孰能生巧就可以了,爲啥還要去深究其底層實現原理呢.這裏我想多提些個人觀點——我喜歡工科而非文科 ⌘ [Read more](https://www.readfog.com/a/1720706708646498304)