# 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=8010
# next = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog/twtxt.txt&offset=8110
# prev = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog/twtxt.txt&offset=7910
400 行代碼構建一個迷你版 React!**
作者 \\| Zachary Lee 翻譯、整理|編程界 React v19 beta 已經發布。與 React 18 相比,它提供了許多用戶友好的 API,但其核心原則基本保持不變。你可能已經使用 React 有一段時間了,但你知道它的內部工作原理嗎?本文將幫助你構建一個約 400 行代碼的 React 版本,它支持異步更新並可以中斷——這是 React 的核心功能,許多高級 API 都 ⌘ Read more
瀏覽器節能機制導致 Websocket 斷連的巨坑!**
作者:tager 原文:https://juejin.cn/post/7362576319928008755你踩過嗎?瀏覽器節能機制導致 Websocket 斷連的坑~近期,在使用WebSocket(WS)連接時遇到了頻繁斷連的問題,這種情況在單個用戶上每天發生數百次。儘管利用了socket.io的自動重連機制能夠在斷連後迅速恢復連接,但這並不保證每一次重連都能成功接收WS消息。因此,我 ⌘ Read more
解決日誌開關需求:SpringBoot 實現熱插拔 AOP
現在有這麼一個需求:就是我們日誌的開與關是交給使用人員來控制的,而不是由我們開發人員固定寫死的。大家都知道可以用 AOP 來實現日誌管理,但是如何動態的來實現日誌管理呢?AOP 源碼中的實現邏輯中有這麼一個步驟,就是會依次掃描 Advice 的實現類,然後執行。我們要做的就是自定義一個 Advice  的實現類然後,在用戶想要開啓日誌的時候就把 Advice 加到項目中來,關閉日誌的時候就把 Ad ⌘ Read more
Redisson 分佈式鎖的源碼解讀**
之前秒殺項目中就用到了這個 Redisson 分佈式鎖 👇,這篇就一起來看看源碼吧!tryLock 加鎖 流程 // RedissonLock.java@Overridepublic boolean tryLock() {    return get(tryLockAsync());}@Overridepublic RFutureBoolean tryLockAsync() {    retur ⌘ Read more
思考 Rust:爲何摒棄繼承?從函數與方法的區別談起**
在 Rust 中,函數和方法是編寫代碼的基礎,它們在某些方面是類似的,但在本質上有重要的不同。在本文中,我們將探討這些區別,並解釋方法調用的本質及其與普通函數調用的聯繫,以及對 Rust 面向對象的思考。函數 Vs 方法--------首先,定義一個函數和一個方法:函數(Function)函數是一個獨立的代碼塊,它可以接受參數、進行計算並返回一個值。函數不綁定到任何對象或實例。 例子:fn add ⌘ Read more
解讀 Rust 中的高級 trait 與泛型(下)**
原文:An introduction to advanced Rust traits and generics 地址:https://www.shuttle.rs/blog/2024/04/18/using-traits-generics-rust#combining-traits-and-generics 譯者:兔子不咬人標記 trait 還可以改善 crates 庫。例如,鑑於應用或類庫的 ⌘ Read more
解讀 Rust 中的高級 trait 與泛型(上)**
原文:An introduction to advanced Rust traits and generics 地址:https://www.shuttle.rs/blog/2024/04/18/using-traits-generics-rust#combining-traits-and-generics 譯者:兔子不咬人Hello world! In this post we’re goi ⌘ Read more
Lura:基於 Gin 實現的下一代超高性能 API 網關,支持大量插件!**
在快速發展的技術世界中,管理和分發服務變得愈發重要。API 網關作爲一種服務架構模式,爲微服務架構提供了一種高效的管理方式。近年來,Lura(以前稱爲 KrakenD)在開源社區嶄露頭角,以其輕量級和高性能稱爲熱議的焦點。Lura 項目不僅僅是一個 API 網關,它還提供了豐富的中間件,可以幫助開發者在 Linux 環境中更好地管理微服務。接下來我們將深入探討 Lura 的技術架構,以及如何使用其 ⌘ Read more
理解內存的 Rank、位寬以及內存顆粒內部結構**
大家好,我是飛哥!在馮諾依曼體系結構裏,內存是除了 CPU 之外第二重要的設備。如果沒有內存,服務器將完全無法運行。在這一節中,我們來了解下內存的物理結構。如下圖的是一個 16 GB 的筆記本內存條實物的正面和反面圖。其中的每個黑色顆粒也叫一個 Chip。注意下,在正面有着一串字符串標識16 GB 2R\\\\8 PC4-3200AA-SE1-11。在這段標識中,16 GB 很好理解,是內存的容量大小。 ⌘ Read more
一文搞懂 TypeScript 裝飾器**
前段時間爲了開發 HarmonyOS 路由框架,學習了 TypeScript 裝飾器。在學習中發現無論是官方文檔還是線上資料,鮮有文章可以將裝飾器簡單通俗的表達清楚,故而萌生了撰寫此文的想法。當然,作爲一個前端門外漢、TS 初學者,寫這篇文字更主要的還是爲了加深自己對裝飾器的理解。新手上路,難免有不足之處,還請各位看官輕噴。一. 什麼是裝飾器?----------官方文檔上的解釋是: 裝飾器是一 ⌘ Read more
Go 如何編寫出可測試的代碼**
之前寫了幾篇文章,介紹在 Go 中如何編寫測試代碼,以及如何解決被測試代碼中的外部依賴問題。但其實在編寫測試代碼之前,還有一個很重要的點,容易被忽略,就是什麼樣的代碼是可測試的代碼?爲了更方便的編寫測試,我們在編碼階段就應該要考慮到,自己寫出來的代碼是否能夠被測試。本文就來聊一聊在 Go 中如何寫出可測試的代碼。本文不講理論,只講我在實際開發過程中的經驗和思考,使用幾個實際的案例,來演示怎樣從根上 ⌘ Read more
js 如何控制一次只加載一張圖片,加載完成後再加載下一張**
今天看到一個面試題,是關於 img 圖片加載方面的,有必要記錄一下。其實關於這個問題,只要知道圖片什麼時候加載完成就能解決了。通過 onload 事件判斷 Img 標籤加載完成-------------------------實現邏輯:新建一個 Image 對象實例,爲實例對象設置 src 屬性等,在 onload 事件中添加此實例對象到父元素中,然後將圖片地址數組中的第一個元素剔除,繼續調用此方 ⌘ Read more
內存一致性模型**
在計算機科學中, 當然只有 兩件難事 [1] : 緩存失效、命名和漏掉一個錯誤。但是在計算機科學的高草叢中還隱藏着另一個難題: 按順序看事物。無論是 排序 [2] 、 亂序 [3] 還是 發推文 [4] , 按順序看事物都是一個歷史悠久的挑戰。一個常見的排序挑戰是內存一致性, 即定義並行線程如何觀察其共享內存狀態的問題。關於內存一致性有許多資源, 但大多數要麼是 幻燈片 [5] (比如 我的 [6 ⌘ [Read more](https://www.readfog.com/a/1735097465556799488)
內存一致性模型**
在計算機科學中, 當然只有 兩件難事 \n : 緩存失效、命名和漏掉一個錯誤。但是在計算機科學的高草叢中還隱藏着另一個難題: 按順序看事物。無論是 排序 \n 、 亂序 \n 還是 發推文 \n , 按順序看事物都是一個歷史悠久的挑戰。一個常見的排序挑戰是內存一致性, 即定義並行線程如何觀察其共享內存狀態的問題。關於內存一致性有許多資源, 但大多數要麼是 幻燈片 \n (比如 我的 [6 ⌘ [Read more](https://www.readfog.com/a/1735097465556799488)
監控 Kafka,這 10 個指標請考慮!**
大家好,我是君哥。使用消息隊列可以幫助我們實現系統解耦、流量管控等功能。但使用過程中可能會遇到各種各樣的問題,比如系統資源使用率高、集羣節點宕機等,進而影響我們生產業務正常開展。爲了不讓消息隊列失控,增加監控是非常必要的。今天來聊一聊 Kafka 有哪些重要的監控指標。1 基礎指標------基礎指標是監控系統常見的監控指標,這裏介紹 4 個方面:CPU、內存、硬盤、網絡 I/O 等資源使用情況, ⌘ Read more
CTO 說:Service 層接口,就是多此一舉!**
今天我們要探討的問題是:Service 層需要接口?現在結合我參與的項目以及閱讀的一些項目源碼來看。如果「項目中使用了像 Spring 這樣的依賴注入框架,那可以不用接口」!先來說說爲什麼使用了依賴注入框架以後,可以不使用接口!不需要接口的理由------------我整理了支持 Service 層和 Dao 層需要加上接口的理由,總結下來就這麼三個:1、可以在尚未實現具體 Service 邏輯的 ⌘ Read more
使用 OpenTelemetry 實現 Golang 服務的可觀測系統**
這篇文章中我們會討論可觀測性概念,並瞭解了有關 OpenTelemetry 的一些細節,然後會在 Golang 服務中對接 OpenTelemetry 實現分佈式系統可觀測性。Test Project我們將使用 Go 1.22 開發我們的測試服務。我們將構建一個 API,返回服務的名稱及其版本。我們將把我們的項目分成兩個簡單的文件(main.go 和 info.go)。// file: main. ⌘ Read more
B 站千萬級長連接實時消息系統的架構設計與實踐**
一、引言----在當今數字娛樂時代,彈幕已經成爲直播平臺上不可或缺的互動元素之一。 用戶通過發送彈幕、送禮等,可以實時在直播畫面上展現自己的想法、評論和互動內容,從而豐富了用戶觀看體驗。在這個過程中,實時向終端推送互動信息,就需要用到長連接。 長連接,顧名思義,是應用存活期間和服務端一直保持的網絡數據通道,能夠支持全雙工上下行數據傳輸。其和請求響應模式的短連接服務最大的差異,在 ⌘ Read more
論文解讀 - MemoryDB: 一種快速且持久的內存優先雲數據庫**
最近在微信羣裏看到 @mwish 分享 Amazon 關於 MemoryDB 的論文: Amazon MemoryDB: A Fast and Durable Memory-First Cloud Database[1],讀完感覺設計思路挺不錯,就將個人在閱讀中認爲論文裏面的一些關鍵要點記錄並分享出來。MemoryDB 是基於 Redis 開發的內存數據庫,主要的目標是解決社區 Redis 在 ⌘ Read more
論文解讀 - MemoryDB: 一種快速且持久的內存優先雲數據庫**
最近在微信羣裏看到 @mwish 分享 Amazon 關於 MemoryDB 的論文: Amazon MemoryDB: A Fast and Durable Memory-First Cloud Database\n,讀完感覺設計思路挺不錯,就將個人在閱讀中認爲論文裏面的一些關鍵要點記錄並分享出來。MemoryDB 是基於 Redis 開發的內存數據庫,主要的目標是解決社區 Redis 在 ⌘ Read more
單元測試中如何解決文件依賴問題**
現如今的 Web 應用程序往往採用 RESTful API 接口形式對外提供服務,後端接口直接向前端返回 HTML 文件的情況越來越少,所以在程序中操作文件的場景也變少了。不過有些時候還是需要對文件進行操作,比如某個 API 接口需要返回應用程序的 ChangeLog,那麼這個接口就可以通過讀取項目的 CHANGELOG.md 文件內容,將其發送給前端。在編寫單元測試時,文件就成了被測試代碼的外部 ⌘ Read more
更新大的 JSON 對象,也能用上增量更新!**
什麼是 JSON Patch--------------JSON Patch\n 是一種用於描述如何對 JSON 文檔進行更改的格式,它使用一系列簡潔的操作指令來指示如何修改 JSON 數據。這些操作包括添加新的數據、刪除舊的數據、替換現有的數據或者移動數據等等。爲什麼使用 JSON Patch----------------在一個大型的 Web 應用程序中,客戶端需要頻繁地與服務器通信,獲取最 ⌘ Read more
更新大的 JSON 對象,也能用上增量更新!**
什麼是 JSON Patch--------------JSON Patch[1] 是一種用於描述如何對 JSON 文檔進行更改的格式,它使用一系列簡潔的操作指令來指示如何修改 JSON 數據。這些操作包括添加新的數據、刪除舊的數據、替換現有的數據或者移動數據等等。爲什麼使用 JSON Patch----------------在一個大型的 Web 應用程序中,客戶端需要頻繁地與服務器通信,獲取最 ⌘ Read more
pping: 被動式 ping,計算網絡時延**
pping  是一個 Linux/macOS/BSD 命令行工具,它通過對活躍連接的被動監測來測量網絡延遲。與  ping  不同,pping  不會注入流量 (主動發送探測包) 來確定 RTT(往返時間)——它報告的是正常應用流量所經歷的每個數據包的 RTT。與只能在發送端點測量 RTT 的傳輸狀態監控工具(如  ss)不同,pping  可以在發送方、接收方或連接路徑上的任何位置測量 RTT( ⌘ Read more
從使用 Rust 構建 SaaS 平臺中學到的東西**
這篇文章分享 Meteroid 團隊使用 Rust 構建 SaaS 項目中學到的東西。Meteroid 是以產品爲主導的雲原生定價和計費的 SaaS 平臺,解決了傳統計費系統的複雜性和侷限性,簡化了複雜計費模型的創建、擴展和維護,自動生成發票,併爲實現 kpi 提供清晰、可操作的見解。它消除了客戶使用和計費之間的差距,確保了準確性和透明度。這篇文章旨在提供他們經驗的高層次概述。爲什麼用 Rust? ⌘ Read more
Go 項目中使用 Base64Captcha 快速實現網站的驗證碼功能,內置多種類型的驗證碼**
在當今世界,網站的安全性變得越來越重要。驗證碼作爲一種簡單而有效的驗證手段,已經被廣泛應用於各種在線平臺。Base64Captcha 是一個開源的 Go 語言庫,它提供了一個簡單、靈活的方式來生成多種形式的驗證碼,包括數字、字母、數字字母組合、算術式、音頻等形式的驗證碼。本文將深入講解 Base64Captcha 庫的使用方法和特點,幫助你在自己的項目中實現驗證碼功能。Base64Captcha ⌘ Read more
build-zig-zon 中一個包的哈希值是怎麼算出來的**
引言作者 Michał Sieroń 最近在思考 build.zig.zon 中的依賴項哈希值的問題。這些哈希值都有相同的前綴,而這對加密哈希函數來說極其不同尋常。習慣性使用 Conda 和 Yocto 對下載的壓縮包運行 sha256sum,但生成的摘要與 build.zig.zon 中的哈希值完全不同。.dependencies = .{    .machfreetype = .{ ⌘ Read more
Golang 實現異步隊列**
源代碼已託管至 Github: https://github.com/gofish2020/easyqueue爲什麼需要異步隊列?----------在高併發系統中,如果同時有大量的請求 / 任務需要進行處理,由於系統的負載能力有限,一次性能夠同時處理的請求 / 任務是有限的。那麼這些任務就需要進行排隊,先來的先處理,後來的後處理。如果超過了整個隊列能夠容納的請求 / 任務,那麼後續的請求 / 任 ⌘ Read more
單元測試中如何解決 MySQL 存儲依賴問題**
在編寫單元測試的過程中,如果被測試代碼有外部依賴,爲了便於測試,我們就要想辦法來解決這些外部依賴問題。在做 Web 開發時,MySQL 存儲就是一個非常常見的外部依賴,本文就來探討在 Go 語言中編寫單元測試時,如何解決 MySQL 存儲依賴。HTTP 服務程序示例假設我們有一個 HTTP 服務程序對外提供服務,代碼如下: main.gopackage mainimport ( "encodin ⌘ Read more
單元測試中如何解決 Redis 存儲依賴問題**
在編寫單元測試時,除了 MySQL 這個外部存儲依賴,Redis 應該是另一個最爲常見的外部存儲依賴了。我在《在 Go 語言單元測試中如何解決 MySQL 存儲依賴問題》一文中講解了如何解決 MySQL 外部依賴,本文就來講解下如何解決 Redis 外部依賴。登錄程序示例在 Web 開發中,登錄需求是一個較爲常見的功能。假設我們有一個 Login 函數,可以實現用戶登錄功能。它接收用戶手機號 + ⌘ Read more
分佈式鎖(Redisson)- 從零開始,深入理解與不斷優化**
作者:大程子的技術成長路 鏈接:https://www.jianshu.com/p/bc4ff4694cf3分佈式鎖場景互聯網秒殺 搶優惠卷 接口冪等性校驗 案例 1如下代碼模擬了下單減庫存的場景,我們分析下在高併發場景下會存在什麼問題package com.wangcp.redisson;import org.springframework.beans.factory ⌘ Read more
WebSocket 協議 - 概念原理**
Part1WebSocket 是什麼 WebSocket 是一種網絡傳輸協議,可以在單個 TCP 連接上進行全雙工通信,它位於 OSI 模型的應用層。WebSocket 與 HTTP 不是同一種協議,雖然兩者都位於 OSI 模型的應用層,並且都依賴底層的 TCP 協議。它們有着各自的協議格式,應用不同的場景。WebSocket 協議本身不依賴於 HTTP 協議,但是在 WebSocket 最初的 ⌘ Read more
批量執行 Redis 命令的 4 種方式!**
前言在我們的印象中 Redis 命令好像都是一個個單條進行執行的,如果有人問你如何批量執行 Redis 命令,你能回答的上嗎,或者說能答出幾種方式呢?最容易想到的是 Redis 的一些批量命令,例如 MGET今天小許就這個問題給大家總結一下!Redis 命令執行過程在瞭解批量執行有哪些方式之前,我們簡單回顧下 Redis 命令執行的過程:爲什麼需要批量執行命令呢?在瞭解批量執行命令有哪些方式之前, ⌘ Read more
日常 Bug 排查 - 連接突然全部關閉**
前言日常 Bug 排查系列都是一些簡單 Bug 的排查。筆者將在這裏介紹一些排查 Bug 的簡單技巧,同時順便積累素材。Bug 現場最近碰到一個問題,一臺機器上的連接數在達到一定連接數 (大概 4.5W) 連接數之後會突然急速下降到幾百。在應用上的表現就是大量的連接報錯,系統失去響應,如下圖所示: 思路思路 1: 第一步肯定是懷疑代碼寫錯了,筆者看了下,使用的是成熟的框架,不是自己操作的連接,那麼 ⌘ Read more
Rust 中的分佈式跟蹤:OpenTelemetry**
在這篇文章中,我們先簡單介紹一下 OpenTelemetry,然後,再來編寫一個在 Rust 中使用 OpenTelemetry 的示例。OpenTelemetry,也被簡稱爲 OTel,是一個開源可觀察性框架,用於檢測、生成、收集和導出測量數據,如跟蹤、度量、日誌。OTEL 爲你提供了一套獨立的 api、sdk、集成和收集器服務。如圖:下面,讓我們來看一下 OpenTelemetry 的關鍵概念 ⌘ Read more
sqlx: 一個優秀的 rust 異步 SQL 庫**
概覽--sqlx 是一個爲 Rust 語言提供的功能齊全的數據庫訪問和查詢構建器庫。它支持多種數據庫, 包括 PostgreSQL、MySQL、SQLite 等。sqlx 的設計目標是成爲 Rust 中最直觀、高效且類型安全的數據庫客戶端。真正的異步。從頭開始使用 async/await 構建,以實現最大的併發性。 編譯時檢查查詢(如果你需要的話)。請注意,sqlx 不是 ORM。 與 ⌘ Read more
Golang 高效處理集合 -Collection- 的庫**
處理集合是構建任何應用程序的重要部分。通常,需要以下幾類操作:轉換:將某個函數應用於集合中的每個元素,以創建一個新類型的新集合; 過濾:選擇滿足特定條件的集合中的元素; 聚合:從集合中計算出單個結果,通常用於彙總; 排序 / 排序:根據某些標準重新排列集合的元素; 訪問:根據其屬性或位置檢索元素的操作; 實用程序:與集合一起工作的通用操作,但不一定完全適合上述分類。 ⌘ Read more
如何使用 Go 語言優雅地實現接口限流**
在衆多 Web 開發中,爲了保障服務器的穩定性,我們常常需要對接口的調用頻率做出限制。而 Go 語言的強大併發性能使其在此領域有出色的表現。本文將向你詳細展示如何利用 Go 語言實現接口限流。限流原理----接口限流的目標是防止接口被過度調用,保護系統資源,包括 CPU、內存和帶寬等。限流通常應用於以下幾種場景:防止 DDoS 攻擊 控制非法爬蟲 公平分配系統資源 限流的實現方式 ⌘ Read more
Redis Pipelining 底層原理分析及實踐**
作者:vivo 互聯網服務器團隊 - Wang FeiRedis 是一種基於客戶端 - 服務端模型以及請求 / 響應的 TCP 服務。在遇到批處理命令執行時,Redis 提供了 Pipelining(管道) 來提升批處理性能。本文結合實踐分析了 Spring Boot 框架下 Redis 的 Lettuce 客戶端和 Redisson 客戶端對 Pipeline 特性的支持原理,並針對實踐過程中遇 ⌘ Read more
一致性緩存理論分析與技術實戰**
0 前言工程實踐場景中,我們通常用數據庫完成數據的持久存儲,而數據存儲側的性能調優也是一個永恆經典的話題. 在一些請求量大、讀多寫少的場景中,一種性能優化方式是考慮在數據庫之上添加一層緩存組件,這樣一方面能減輕數據庫的訪問壓力,一方面也能提升查詢操作的性能.然而由於緩存(如 redis)和數據庫(如 mysql)是兩個獨立的存儲組件,在操作過程中無法在跨組件的基礎上保證 “事務” 的語義,因此不可 ⌘ Read more
關於 zustand 的一些最佳實踐**
前言看過我文章的人,應該知道React狀態管理庫中我比較喜歡使用 Zustand 的,因爲使用起來非常簡單,沒有啥心智負擔。這篇文章給大家分享一下,我這段時間使用 zustand 的一些心得和個人認爲的最佳實踐。優化在 React 項目裏,最重要優化可能就是解決重複渲染的問題了。使用 zustand 的時候,如果不小心,也會導致一些沒用的渲染。舉個例子:創建一個存放主題和語言類型的 storeim ⌘ Read more
單元測試中如何解決 HTTP 網絡依賴問題**
在開發 Web 應用程序時,確保 HTTP 功能的正確性是至關重要的。然而,由於 Web 應用程序通常涉及到與外部依賴的交互,編寫 HTTP 請求和響應的有效測試變得具有挑戰性。在進行單元測試時,我們必須思考如何解決被測程序的外部依賴問題。因此,在 Go 語言中,我們需要找到一種可靠的方法來測試 HTTP 請求和響應。本文將探討在 Go 中進行 HTTP 應用測試時,如何解決應用程序的依賴問題,以 ⌘ Read more
C 語言內存管理:堆區內存的申請、使用與釋放**
編程時,如果開發者預先知道數組的大小,那麼定義數組時就比較容易。例如,一個存儲人名的字符數組,它最多容納 100 個字符,所以您可以定義數組,如下所示:char name\n;但是,如果開發者預先不知道需要存儲的文本長度,就很難預定義字符數組的大小,若數組長度小於存儲的文本長度,就會導致內存溢出。若數組長度遠大於存儲的文本長度,就會導致內存浪費。最好的方式就是根據存儲的文本長度,動態分配數組 ⌘ Read more
C 語言內存管理:堆區內存的申請、使用與釋放**
編程時,如果開發者預先知道數組的大小,那麼定義數組時就比較容易。例如,一個存儲人名的字符數組,它最多容納 100 個字符,所以您可以定義數組,如下所示:char name[100];但是,如果開發者預先不知道需要存儲的文本長度,就很難預定義字符數組的大小,若數組長度小於存儲的文本長度,就會導致內存溢出。若數組長度遠大於存儲的文本長度,就會導致內存浪費。最好的方式就是根據存儲的文本長度,動態分配數組 ⌘ Read more
詳解 C-- 高性能無鎖隊列的原理與實現**
無鎖隊列原理-------------1.1. 隊列操作模型隊列是一種非常重要的數據結構,其特性是先進先出(FIFO),符合流水線業務流程。在進程間通信、網絡通信間經常採用隊列做緩存,緩解數據處理壓力。根據操作隊列的場景分爲:單生產者——單消費者、多生產者——單消費者、單生產者——多消費者、多生產者——多消費者四大模型。根據隊列中數據分爲:隊列中的數據是定長的、隊列中的數據是變長的。(1)單生產者 ⌘ Read more
Golang 實現枚舉的多種方式及最佳實踐**
枚舉提供了一種表示一組命名常量的方式。雖然 Go 語言沒有內置的枚舉類型,但開發者可以通過常量 / 自定義類型來模擬類似枚舉的行爲。枚舉在編程語言中扮演着至關重要的角色,提供了一種簡潔而富有表現力的方式來定義一組命名常量。雖然像 Java 或 C# 這樣的語言提供了對枚舉的內置支持,但 Go 採用了不同的方法。在 Go 中,枚舉並不是一種原生的語言特性,但開發者有幾種技術可供使用,以實現類似的功能 ⌘ Read more
sqlx: 功能強大的數據庫訪問庫**
sqlx[1] 是一個用於擴展標準庫 database/sql 的庫,它提供了一些額外的功能,使得在 Go 中使用 sql 更加方便。sqlx 的目標是保持 database/sql 的簡單性,同時提供更多的功能。sqlx 爲 Go 的標準 database/sql 庫提供了一組擴展。sqlx 中的 sql.Conn、sql.DB、sql.TX、sql.Stmt、sql.Rows、sql.Row ⌘ Read more
sqlx: 功能強大的數據庫訪問庫**
sqlx\n 是一個用於擴展標準庫 database/sql 的庫,它提供了一些額外的功能,使得在 Go 中使用 sql 更加方便。sqlx 的目標是保持 database/sql 的簡單性,同時提供更多的功能。sqlx 爲 Go 的標準 database/sql 庫提供了一組擴展。sqlx 中的 sql.Conn、sql.DB、sql.TX、sql.Stmt、sql.Rows、sql.Row ⌘ Read more
玩轉 RxJS 中的同步、異步編程**
RxJS 是響應式編程的一種實現,響應式編程是一種用於處理異步數據流的編程範式。這不代表 RxJS 只能處理異步數據流,它還能處理同步數據流,但是它的強項是處理更復雜的異步數據流。通常來講,處理異步數據流比處理同步數據流更難。在使用 RxJS 時,需要注意識別當前數據流是同步的還是異步的。若不加以區分,則有可能引入潛在的缺陷。因爲,處理同步或異步數據流可以對應到程序中的同步函數調用和異步函數調用, ⌘ Read more
【操作系統】內存管理概述**
內存管理硬件結構--------常見的內存分配函數有 malloc,mmap 等,但大家有沒有想過,這些函數在內核中是怎麼實現的?換句話說,Linux 內核的內存管理是怎麼實現的?內存管理的目的是管理系統中的內存,俗稱內存橋,換成專業屬於叫 DDR。我們有必要先了解下計算機對內存管理的硬件結構。我們先看下關於地址的一些概念。早期內存的使用方法在計算機早期的發展階段,要運行一個程序,要把計算機程序, ⌘ Read more
萬字長文——在 Go 中如何編寫測試代碼**
在程序開發過程中,測試是非常重要的一環,甚至有一種開發模式叫 TDD(測試驅動開發),先編寫測試,再編寫功能代碼,通過測試來推動整個開發的進行,可見測試在開發中的重要程度。爲此,Go 語言提供了 testing 框架來方便我們編寫測試,本文將向大家介紹在 Go 中如何編寫測試代碼。測試分類在 Go 中,編寫的測試用例可以分爲四類:單元測試:測試函數名稱以 Test 開頭,如 TestXxx、Tes ⌘ Read more
DDD 聚合和表的對應關係是什麼?**
首先:說說什麼是聚合?-----------“聚合”即 “高內聚,低耦合” 中的 “內聚” 之意;聚合是業務和邏輯緊密關聯的實體和值對象組合而成,聚合是數據修改和持久化的基本單元,一個聚合對應一個數據的持久化;聚合在 DDD 分層架構中屬於領域層,領域層包含了多個聚合,共同實現核心業務邏輯,聚合內的實體以充血模型實現個體業務能力,以及業務邏輯的高內聚; 跨多個實體的業務邏輯通過領域服務來實現,跨多 ⌘ Read more
MySQL 用 limit 爲什麼會影響性能?有什麼優化方案?**
作者:Java 小陳 原文:https://www.toutiao.com/article/7279396210157371904Limit 是一種常用的分頁查詢語句,它可以指定返回記錄行的偏移量和最大數目。例如,下面的語句表示從 test 表中查詢 val 等於 4 的記錄,並返回第 300001 到第 300005 條記錄:select  from test where val=4 ⌘ Read more
Go FRP:快速反向代理助您穿越 NAT 或防火牆,輕鬆連接互聯網**
在當前的互聯網架構中,NAT(網絡地址轉換)和防火牆是常見的網絡安全措施,它們爲內網提供了一層保護。然而,這同時也意味着在不進行特別配置的情況下,外部網絡無法直接訪問內網的服務。爲了解決這一問題,Go FRP(Fast Reverse Proxy)應運而生。它是一個快速的反向代理工具,可以幫助您將內網服務安全地暴露到外網,極大地簡化了穿越 NAT 或防火牆的過程。Go FRP 的工作原理----- ⌘ Read more
在 Go 語言中,這樣使用 Json 的**
Encode將一個對象編碼成JSON數據,接受一個interface{}對象,返回[]byte和error:func Marshal(v interface{}) ([]byte, error)Marshal函數將會遞歸遍歷整個對象,依次按成員類型對這個對象進行編碼,類型轉換規則如下:bool類型 轉換爲JSON的Boolean 整數,浮點數等數值類型 轉換爲JSON的Number s ⌘ Read more
一幅動圖,搞定 Elasticsearch 核心基礎原理!**
在大數據時代,實時高效地處理信息成爲了企業和開發者的必需。而在衆多工具中,Elasticsearch 無疑佔據了核心地位。它不僅以實時數據處理能力被高度重視,還因其在搜索與分析方面的強大功能而備受推崇。今天,我們通過一幅清晰的動圖,一起深入探討 Elasticsearch 的工作原理,讓基礎概念不再枯燥,而是動起來。1、Elasticsearch 簡介------------------Elast ⌘ Read more
使用 Ollama 和 Go 基於文本嵌入模型實現文本向量化**
基於 RAG + 大模型的應用已經成爲當前 AI 應用領域的一個熱門方向。RAG(Retrieval-Augmented Generation) 將檢索和生成兩個步驟相結合,利用外部知識庫來增強生成模型的能力 (如下圖來自網絡)。在 RAG 賦能的大模型應用中,關鍵的一步是將文本數據向量化後存儲在向量數據庫中 (如上圖的紅框),以實現快速的相似度搜索,從而檢索與輸入查詢相關的文本片段,再將檢索到的 ⌘ Read more
RabbitMQ 如何保證消息可靠性?**
本篇文章不再介紹 RabbitMQ 具體實現原理,直接介紹如何保證消息的可靠性問題。所謂可靠性,指消息不重不漏。文章導讀----生產者消費者模型--------  生產者 - 消費者模型用於描述兩類進程(生產者和消費者)之間的數據交互。可以被認爲是獨立的服務,生產者負責生成數據,消費者負責處理這些數據。在分佈式系統中,隊列在其中扮演了消息(數據)傳遞的功能。關於消息隊列的作用,一般解讀爲:解耦:生 ⌘ Read more
Golang 如何實現自定義 CDC 工具?**
CDC變更數據捕獲(CDC)是一種跟蹤數據庫更改的技術,允許開發人員捕獲應用於行的插入、更新和刪除。它是數據集成和實時處理任務的重要組成部分。在本文中,我們將討論如何在 Golang 中爲 PostgreSQL、Oracle、MySQL、MongoDB 和 SQL Server 等多個數據庫開發自定義 CDC 工具。通常在 CDC 領域或者說大數據領域都是 java 的生態比較繁榮,比如 Flin ⌘ Read more
SpringBoot 快速實現 api 加密!**
在項目中,爲了保證數據的安全,我們常常會對傳遞的數據進行加密。常用的加密算法包括對稱加密(AES)和非對稱加密(RSA),博主選取碼雲上最簡單的 API 加密項目進行下面的講解。 https://gitee.com/isuperag/rsa-encrypt-body-spring-boot項目介紹該項目使用 RSA 加密方式對 API 接口返回的數據加密,讓 API 數據更加安全。別人無法對提供 ⌘ Read more
介紹一個 Rust 的鍵值存儲庫:keyv**
Keyv 是一個簡單的鍵值存儲庫,旨在簡化鍵值存儲並增加其靈活性,支持多個後端。它爲跨後端鍵值存儲提供了一致的接口。由於支持基於 ttl 的過期,它足夠通用,既可以充當緩存,也可以充當持久鍵值存儲,以適應你的需求。可以在哪裏使用 Keyv?假設你正在處理一個需要緩存用戶會話的高流量 web 服務。keyv 可以快速與 Redis 後端合作,爲你提供內存級的存取速度。或者,假設你正在構建一個需要持久 ⌘ Read more
tsconfig 備忘清單**
前言--使用 ts 已多年,但是貌似對於 tsconfig 總是記憶不清,每次都是 cv 歷史項目,所以寫了這篇備忘錄,希望能幫助到大家。本文總結整理自 Matt Pocock 的一篇文章 3,加以個人理解,並做了一些修改。配置清單----{  "compilerOptions": {    / 基礎選項: /    "esModuleInterop": true,    "skipLibChec ⌘ Read more
當中臺過氣,微服務迴歸單體,DDD 的意義何在?**
2015 年之後,隨着雲原生、微服務、大中臺等一系列技術名詞誕生的同時,還有一個耳熟能詳的名詞 “領域驅動” 也開始被捧上神壇。筆者初次聽到領域驅動是參加一個技術分享會,當時給我的直觀感受就是:好像說了什麼,但又好像什麼都沒說,很多概念很 "形而上學",在天空中飄啊飄,無法落地。 十年過去了,中臺已經過氣,微服務迴歸單體也一度成爲技術圈討論的熱點話題,曾經神壇上雲遮霧繞的 DDD 在今天看來是否 ⌘ Read more
一篇文章帶你弄懂 Python 基礎之進制和數據類型**
一、進制----1、什麼是進制?進制也就是進位計數制,是人爲定義的帶進位的計數方法(有不帶進位的計數方法,比如原始的結繩計數法,唱票時常用的 “正” 字計數法,以及類似的 tally mark 計數)。對於任何一種進制 ---X 進制,就表示每一位置上的數運算時都是逢 X 進一位。十進制是逢十進一,十六進制是逢十六進一,二進制就是逢二進一,以此類推,x 進制就是逢 x 進位。(來自百度)通俗的解釋 ⌘ Read more
Go 未用代碼消除與可執行文件瘦身**
在日常編寫 Go 代碼時,我們會編寫很多包,也會在編寫的包中引入了各種依賴包。在大型 Go 工程中,這些直接依賴和間接依賴的包數目可能會有幾十個甚至上百個。依賴包有大有小,但通常我們不會使用到依賴包中的所有導出函數或類型方法。這時 Go 初學者就會有一個疑問:這些直接依賴包和間接依賴包中的所有代碼是否會進入到最終的可執行文件中呢?即便我們只是使用了某個依賴包中的一個導出函數。這裏先給出結論:不會! ⌘ Read more
SeaweedFS:基於 Go 語言實現次世代的分佈式存儲解決方案**
在如今這個數據爆炸的時代,企業和開發者迫切地需要一個高效可靠的分佈式存儲系統來管理他們海量的數據。SeaweedFS 以其出色的性能和靈活性,成爲了存儲行業的明星產品。在本文中,我們將深入剖析 SeaweedFS 的核心功能、架構細節,並通過示例來展現它在實際中的應用。SeaweedFS 概覽------------SeaweedFS 是一款開源的分佈式存儲系統,專門設計來處理海量的文件以及數據。 ⌘ Read more
用 Go 語言做了一個分佈式限流器, 看看實現的方法與步驟**
項目中需要對 api 的接口進行限流,但是麻煩的是,api 可能有多個節點,傳統的本地限流無法處理這個問題。限流的算法有很多,比如計數器法,漏斗法,令牌桶法,等等。各有利弊,相關博文網上很多,這裏不再贅述。項目的要求主要有以下幾點:支持本地 / 分佈式限流,接口統一 支持多種限流算法的切換 方便配置,配置方式不確定 go 語言不是很支持 OOP,我在實現的時候是按 Java 的思 ⌘ Read more
Go 命令行參數解析工具 pflag 使用**
在使用 Go 進行開發的過程中,命令行參數解析是我們經常遇到的需求。儘管 Go 標準庫提供了 flag 包用於實現命令行參數解析,但只能滿足基本需要,不支持高級特性。於是 Go 社區中出現了一個叫 pflag 的第三方包,功能更加全面且足夠強大。在本文中,我們將學習並掌握如何使用 pflag。特點pflag 作爲 Go 內置 flag 包的替代品,具有如下特點:實現了 POSIX/GNU 風格的 ⌘ Read more
進程監控神器 Supervisor:讓你的 Python 應用穩如老狗!**
作者:Ais137 https://juejin.cn/post/7354406980784373798概述-----Supervisor 是一個 C/S 架構的進程監控與管理工具,本文主要介紹其基本用法和部分高級特性,用於解決部署持久化進程的穩定性問題。問題場景-------在實際的工作中,往往會有部署持久化進程的需求,比如接口服務進程,又或者是消費者進程等。這類進程通常是作爲後臺進程 ⌘ Read more
前端開發中大併發量如何控制併發數**
寫在前面----最近在進行移動端 h5 開發,首頁需要加載的資源很多,一個 lottie 動效需要請求 70 多張圖片,但是遇到安卓 webview 限制請求併發數,導致部分圖片請求失敗破圖。當然圖片資源可以做閒時加載和預加載,可以減輕播放動效時資源未加載的問題。同樣的,業務開發也會遇到需要異步請求幾十個接口,如果同時併發請求瀏覽器會進行限制請求數,也會給後端造成請求壓力。場景說明----現在有個 ⌘ Read more
爲什麼 Rust 需要引入 Partial 語義**
初學 Rust 時,在爲自定義結構體實現 PartialEq Trait 時,誤認爲是用結構體中部分字段來參與相等比較計算,我想有可能也有其他初學者會和我犯同樣的錯誤,這一篇是向初學者介紹 Rust 中 partial 設計用意和解決的問題。在 Rust 中, trait 處理了不是所有值都可以相互比較的情況。PartialEq TraitPartialEq trait 用於定義值相等性的比較。它 ⌘ Read more
React Playground 實現原理揭祕**
大家應該都用過在線寫代碼的工具,比如 vue 的 playground:左邊寫代碼,右邊實時預覽。右邊還可以看到編譯後的代碼:這是一個純前端項目。 類似的,也有 React Playground。那它是怎麼實現的呢?我們自己能實現一個麼?可以的,今天我們來分析下實現思路。首先是編譯:編譯用的 @babel/standalone,這個是 babel 的瀏覽器版本。可以用它實時把 tsx 代碼編譯爲 ⌘ Read more
架構設計中如何應對接口級故障?**
在實際業務運行過程中,有一種故障影響可能沒有那麼大,但發生的概率較高,這就是今天聊的接口級的故障。接口級故障的典型表現就是,系統並沒有宕機、網絡也沒有中斷,但業務卻出現問題了,例如業務響應緩慢、大量訪問超時和大量訪問出現異常(給用戶彈出提示 “無法連接數據庫”)。這類問題的主要原因在於系統壓力太大、負載太高,導致無法快速處理業務請求,由此引發更多的後續問題。最常見的情況就是,數據庫慢查詢將數據庫的 ⌘ Read more
深入淺出 Vite5 中依賴預構建**
引言 大多數同學提到 Vite ,會下意識的反應出 “快”、“noBundle” 等關鍵詞。那麼,爲什麼 Vite 相較於 Webpack、Rollup 之類的會更加快,亦或是大多數同學認爲 Vite 是 "noBundle" 又是否正確呢?接下來,這篇文章和大家一起來深入淺出 Vite 中的核心的 “預構建” 過程。 文章中 vite 版本爲最新的 5.0.0-beta.18。預構建概念-- ⌘ Read more
利用 Java 反射機制提高 Spring Boot 的代碼質量**
作者:happyEnding 原文:https://juejin.cn/post/7293118779781955634保持好的代碼質量和遵守編碼標準是開發可維護和健壯軟件的重要方面。在 Spring Boot 應用程序中,確保始終遵循命名約定、代碼結構和其他質量標準是一項艱鉅的任務,尤其是當項目的複雜性和規模不斷擴大時更是如此。 在本文中,我們將探討如何使用 Java 反射來提高 S ⌘ Read more
微服務架構中的挑戰及應對方式:Outbox 模式**
使用 Outbox 模式保持微服務數據一致性在一個由許多小型服務組成的系統中保持數據一致性是困難的,因爲它們分散在各處。以下是一些常見問題以及如何處理它們的方法:當服務發送消息時,同時更新數據庫和發送消息是棘手的問題。在微服務中發出事件時,我們必須解決如何以事務方式更新數據庫併發出事件的問題。Outbox 模式處理這個問題的簡單方法是使用事務性 Outbox 模式。問題:雙寫問題當我們必須同時更新 ⌘ Read more
用 Golang 做一個永久阻塞,有哪些小技巧 ?**
Go 的運行時的當前設計,假定程序員自己負責檢測何時終止一個 goroutine 以及何時終止該程序。可以通過調用 os.Exit 或從 main() 函數的返回來以正常方式終止程序。而有時候我們需要的是使程序阻塞在這一行。使用 sync.WaitGroup 一直等待直到 WaitGroup 等於 0package mainimport "sync"func main() {    var wg ⌘ Read more
Sqids: 簡短唯一 ID 生成器**
Sqids(發音爲squids, 魷魚)是一個開源庫,允許您從數字中生成簡短的唯一且看起來隨機的標識符, 而且這些 ID 是 URL 安全的,你可以同時編碼幾個數字, 也可以剔除常見的髒話或者政治敏感的單詞。你可以把它想象成一個十進制到十六進制的轉換器,但它還具備一些額外的功能。 比如:https://example.com/Lqj8a0先前它叫做Hashids, 但是由於商標問題,我不得不更改名 ⌘ Read more
Goose:Go 語言漸進式的數據庫遷移工具**
數據庫遷移是軟件開發過程中重要的一部分,隨着業務的發展和需求的變化,數據庫結構經常需要做出調整。Goose 是一個出色的數據庫遷移工具,它通過 SQL 腳本和 Go 函數支持漸進式的數據庫變化。下面是一篇詳細的文章,它將深入介紹 Goose 的用法,並提供豐富的示例幫助你開始使用 Goose。Goose 簡介--------Goose 是一款能夠管理數據庫架構變更的工具,提供了一系列命令來幫助開發 ⌘ Read more
Kubernetes Ingress 打通雲原生微服務路由**
Kubernetes,作爲目前最受歡迎的容器編排平臺,爲微服務架構帶來了諸多好處。今天,我們深入探討 Kubernetes 中的 Ingress 組件,這是一個強大的路由系統,負責處理外部訪問集羣服務的請求。Kubernetes Ingress 概述---------------------Ingress 是 Kubernetes 中的一個 API 對象,它管理外部用戶對服務的訪問,類似於傳統的 ⌘ Read more
Go Heap Profile 怎麼了?**
Go heap profile 是常常用來檢查內存泄露和內存佔用大問題的問題的手段,而且非常常用。而且,我們也經常創建兩個間隔較長的 heap profile, 獲取它們的差值來方便查看內存泄露: Hi, 使用多年的 go pprof 檢查內存泄漏的方法居然是錯的?! [1]今天,度廠的一位同學提出了一個很有意思的案例,讓我們對 heap profile 有了更深的理解。問題: heap prof ⌘ Read more
Go Heap Profile 怎麼了?**
Go heap profile 是常常用來檢查內存泄露和內存佔用大問題的問題的手段,而且非常常用。而且,我們也經常創建兩個間隔較長的 heap profile, 獲取它們的差值來方便查看內存泄露: Hi, 使用多年的 go pprof 檢查內存泄漏的方法居然是錯的?! \n今天,度廠的一位同學提出了一個很有意思的案例,讓我們對 heap profile 有了更深的理解。問題: heap prof ⌘ Read more
在 Kubernetes 上部署 llama3
Ollama 與 OpenWebUI 介紹---------------------Ollama 是一個運行大模型的工具,可以看成是大模型領域的 Docker,可以下載所需的大模型並暴露 API。OpenWebUI 是一個大模型的 Web UI 交互工具,支持 Ollama,即調用 Ollama 暴露的 API 實現與大模型交互:部署方案選型------OpenWebUI 的倉庫中自帶 Ollaw ⌘ Read more
再談 Redis 三種集羣模式:主從模式、哨兵模式和 Cluster 模式**
總結經驗 redis 主從:可實現高併發 (讀),典型部署方案:一主二從 redis 哨兵:可實現高可用,典型部署方案:一主二從三哨兵 redis 集羣:可同時支持高併發 (讀與寫)、高可用,典型部署方案:三主三從一、概述Redis 支持三種不同的集羣模式:主從模式、哨兵模式和 Cluster 模式,各具特色,應對不同的應用場景。初始階段,Redis 採用主從模式進行集羣構建。在此模式中,主 ⌘ Read more
Go 語言實現輕量級全文檢索引擎**
黎明破曉,我在陽光的照射下觀察到一個光鮮亮麗的開源項目——ZincSearch。這並不是一個大型的項目,但是其優雅而堅韌的特質讓我深深着迷。鑄就在 Go 語言的火爐中,ZincSearch 提供了一個輕量級但功能強大的全文索引搜索引擎,這讓我對其深感興趣。ZincSearch 誕生背景---------------在講述 ZincSearch 之前,首先需要了解它的誕生背景。隨着互聯網技術的迅速發 ⌘ Read more
如何編寫異步運行時通用庫?**
如果你正在用 Rust 編寫異步應用程序,在某些情況下,你可能希望將代碼分成幾個子 crate。這樣做的好處是:更好的封裝,在子系統之間有一個 crate 邊界,可以產生更清晰的代碼和定義更良好的 API。不再需要這樣寫:pub(crate)。 更快的編譯,通過將一個大 crate 分解成幾個獨立的小 crate,它們可以併發地編譯。 使用一個異步運行時,編寫異步運行時通用庫的好處是什 ⌘ Read more
Rust 設計模式:使用 Trait 關聯函數和單元結構體實現算法多態**
最近在用 Rust 編寫在一個 NLP 的模塊,需要表達一個算法的多種不同實現,只用單元結構體和 Trait 的關聯函數的抽象方式,可以非常優雅的組織代碼,現在記錄如下。單元結構體是一個沒有字段的結構體,這種結構體被稱作 "單元結構體"(Unit Struct)。單元結構體類似於沒有任何成員的元組(即 (),或說 "unit" 類型),通常用於在類型層面提供一個獨特的標識。struct MyUni ⌘ Read more
Go 語言實現開源優雅的跨平臺 USDT 收付中間件**
Epusdt(全稱:Easy Payment Usdt)是一個由 Go 語言編寫的私有化部署 Usdt 支付中間件 (Trc20 網絡)。站長或開發者可以通過 Epusdt 提供的 http api 集成至任何系統,無需過多的配置,僅僅依賴 mysql 和 redis。通過它,可以實現 USDT 的在線支付和消息回調,均可在優雅和瞬間完成。私有化搭建使得無需額外的手續費和簽約費用,Usdt 代幣直 ⌘ Read more
徹底理解高級 I-O:零拷貝**
大家好,我是小風哥,今天和大家簡單聊聊零拷貝。計算機處理的任務大體可以分爲兩類:CPU 密集型與 IO 密集型。當前流行的互聯網應用更多的屬於 IO 密集型,傳統的 IO 標準接口都是基於數據拷貝的,這篇文章我們主要關注該怎樣從數據拷貝的角度來優化 IO 性能。爲什麼 IO 接口要基於數據拷貝?爲了讓廣大碼農們更好的沉迷於自己的一畝三分地,防止 ta 們分心去關心計算機中的硬件資源分配問題,操作系 ⌘ Read more
“真男人就應該用 C 編程”!用 1000 行 C 代碼手搓了一個大模型,Mac 即可運行,特斯拉前 AI 總監爆火科普 LLM
來自公衆號:InfoQ 編譯 | 核子可樂、Tina徒手用 1000 行 C 語言實現,不依賴龐大的外部庫,Mac 即可運行。   如今這年頭,徒手寫神經網絡代碼已經不算事兒了,現在流行手搓大模型訓練代碼了!這不,今天,特斯拉前 AI 總監、OpenAI 創始團隊成員 Andrej Karpathy 僅用 1000 行簡潔的 C 代碼,就完成了 GPT-2 大模型訓練過程。幾個小時前,A ⌘ Read more
C 語言手撕一個 HashMap
hashmap 之鏈地址法1、定義哈希表 及 哈希桶 結構體include stdio.hinclude stdlib.hinclude string.h// 定義哈希桶的節點結構體typedef struct Node { char key; int value; struct Node next;} Node;// 定義哈希表結構體typedef struct HashMap ⌘ Read more
不得不掌握的性能測試監控神器 -nmon 工具詳解**
做性能測試時候進行結果收集和監控是我們必須要進行的一個步驟,所以選擇一個好的監控工具能幫我們省事省心。我們今天給大家介紹的監聽工具 nmon,就是一個非常強大而且市場上也非常主流應用的一個監控工具。前言做性能測試時候進行結果收集和監控是我們必須要進行的一個步驟,所以選擇一個好的監控工具能幫我們省事省心。我們今天給大家介紹的監聽工具 nmon,就是一個非常強大而且市場上也非常主流應用的一個監控工具。 ⌘ Read more
Redis 緩存的常用設計模式**
Redis 緩存的常用設計模式: 一. 寫操作: 以 Redis 統一視圖爲準:先更新緩存,後更新數據庫。 1) Write Through Pattern 直寫模式:     首先將數據寫入緩存,再將數據立即同步到數據庫。 2) Write Behind Pattern 寫後模式:     首先將數據寫入緩存,再將數據異步的批量同步到數據庫 ⌘ Read more
基於 Redis 實現內部消息服務通信**
前言先說一下爲什麼要有這個東西,用消息中間件的好處就不用說了,日常開發中還是有很多場景需要用到消息傳遞的,消息的topic如何管理,如何約束topic,重要的topic消費記錄、歷史消息等就是這個sdk需要做的。本質上只是一層對消息中間件的封裝。這次只是拋磚引玉只引入redis的三種消息類型,pubsub、queue以及stream。擴展其他中間件按着代碼思路一樣。望各路大佬賜教架構設計一個消息服 ⌘ Read more
一文掌握線程池實現原理**
線程池簡介-----Java 在使用線程執行程序時,需要調用操作系統內核的 API 創建一個內核線程,操作系統要爲線程分配一系列的資源;當該 Java 線程被終止時,對應的內核線程也會被回收。因此,頻繁的創建和銷燬線程需要消耗大量資源。此外,由於 CPU 核數有限,大量的線程上下文切換會增加系統的性能開銷,無限制地創建線程還可能導致內存溢出。爲此,Java 在 JDK1.5 版本中引入了線程池。線 ⌘ Read more
利用 Go 操控 Etcd:構建強一致性系統的祕訣**
etcd 是一個開源的、高可用的分佈式鍵值(key-value)存儲系統,它主要用來共享配置和服務發現。etcd 由 CoreOS 團隊開發,是以 Go 語言編寫的。etcd 採用了 Raft 協議來處理日誌複製以提供強一致性和高可用性,它成爲很多分佈式系統和雲原生技術(如 Kubernetes)中的基礎組件。etcd 的核心特性包括:簡潔的鍵值存儲:etcd 提供 HTTP/JSON API,允 ⌘ Read more
微服務最全詳解 -萬字圖文總結-**
大家好,我是 mikechen。微服務是大型網站的必經之路,也是進階架構的必備節能,而且大廠也特別喜歡考察微服務,下面我就全面來詳解微服務 @mikechen 最新 mikechen 原創超 30 萬字《阿里架構師進階專題合集》和《最全大廠 Java 面試題答案合集》,請關注本公衆號【mikechen 的架構筆記】,後臺回覆:資料,即可領取。微服務-------微服務是一種架構模式,它提倡將單一 ⌘ Read more
高併發最全詳解 -圖文全面總結-**
大家好,我是 mikechen。高併發在大型架構佔據非常重要的位置,所以掌握好高併發就很重要了,無論是想拿高薪或進大廠,本篇我就全面來詳解高併發 @mikechen最新 mikechen 原創超 30 萬字《阿里架構師進階專題合集》和《最全大廠面試題及答案總結》,請關注本公衆號【mikechen 的架構筆記】,後臺回覆:資料,即可領取。高併發高併發是指系統在同一時間內處理大量併發請求的能力,比如: ⌘ Read more
不可思議的快!加速 Docker 中構建 Golang 應用**
這些天我在工作中正在進行一個 GoLang 項目。這與我們通常使用的 Java 和 Spring Boot 應用程序有很大不同, 感覺很不錯:)。和我們所有的其他組件一樣, 這個 GoLang 項目也需要被封裝在一個容器中, 才能在 Kubernetes 集羣中執行。所以我編寫了一個 Dockerfile:構建階段FROM golang:1.22.1-alpine AS buildWORKDIR ⌘ Read more
高效併發編程利器:掌握無鎖編程的精髓**
無鎖編程是一種併發編程的技術,旨在避免使用傳統的鎖機制來保護共享數據。相比有鎖編程,無鎖編程可以提供更高的併發性能和可伸縮性。在無鎖編程中,線程或進程通過使用原子操作、CAS(Compare-and-Swap)等技術來實現對共享數據的訪問和修改,而不需要依賴互斥鎖。無鎖編程常用於高併發場景,如網絡服務器、多線程應用程序等。它可以減少線程之間的競爭和阻塞,並且能夠充分利用多核處理器的計算能力。然而, ⌘ Read more