引言如大多數哈希映射實現一樣,Zig 的 std.HashMap 依賴於兩個函數:hash(key: K) u64 和 eql(keya: K, keyb: K) bool。其中,哈希函數接收一個鍵並返回一個無符號的 64 位整數作爲哈希碼。相同的關鍵字總是會返回相同的哈希碼。然而,爲了處理不同的鍵可能生成相同哈希碼的情況(即碰撞),我們還需要 eql 函數來確定兩個鍵是否相等。這是一些標準做法, ⌘ Read more
引言如大多數哈希映射實現一樣,Zig 的 std.HashMap 依賴於兩個函數:hash(key: K) u64 和 eql(keya: K, keyb: K) bool。其中,哈希函數接收一個鍵並返回一個無符號的 64 位整數作爲哈希碼。相同的關鍵字總是會返回相同的哈希碼。然而,爲了處理不同的鍵可能生成相同哈希碼的情況(即碰撞),我們還需要 eql 函數來確定兩個鍵是否相等。這是一些標準做法, ⌘ Read more
一、項目介紹------Gobrs-Async 是一款功能強大、配置靈活、帶有全鏈路異常回調、內存優化、異常狀態管理於一身的高性能多線程併發編程和動態編排框架。爲企業提供在複雜應用場景下動態任務編排的能力。針對於複雜場景下,異步線程複雜性、任務依賴性、異常狀態難控制性;二、解決什麼問題--------在開發複雜中臺業務過程中,難免會遇到調用各種中臺業務數據, 而且會出現複雜的中臺數據依賴關係,在這 ⌘ Read more
內存分頁機制是一種操作系統的內存管理技術,將進程的虛擬內存空間劃分爲固定大小的頁面,並在需要時將其映射到物理內存中。操作系統會將輔助存儲器(通常是磁盤)中的數據分區成固定大小的區塊,稱爲 “頁”。當不需要時,將分頁由主存(通常是內存)移到輔助存儲器;當需要時,再將數據取回,加載主存中。相對於分段,分頁允許存儲器存儲於不連續的區塊以維持文件系統的整齊。分頁是磁盤和內存間傳輸數據塊的最小單位。分頁 / ⌘ Read more
隨着雲計算、物聯網(IoT)和遠程辦公等技術的發展,VPN 的重要性更加凸顯,並且現有的網絡帶寬質量也越來越好,很多企業和用戶都選擇了 VPN 解決方案來實現多地的互聯(相對傳統的專線,經濟實惠),很多企業和用戶選擇建設 VPN 主要用於以下幾個場景:雲計算業務的發展:雖然現在 “上雲” 和“下雲” 的爭議仍然不休,並且很多大企業確實在 “下雲”,但是對中小企業和個人來說,前期業務部署雲上確實具備 ⌘ Read more
當我們談到可靠的、高吞吐量的分佈式消息隊列,RocketMQ 必將成爲我們不得不提及的一個話題。作爲一個開放、高度可擴展的消息中間件,RocketMQ 已經在各種場景下得到廣泛的應用,如電商、物流、支付等領域。在該領域中,RocketMQ 以其出衆的運行性能和可靠性優勢,贏得了越來越多企業和開發者的信賴。本文將深入剖析 RocketMQ 的運行原理,從 Producer、Broker、Consum ⌘ Read more
一、引言----(一)垃圾回收 概述垃圾回收(Garbage Collection,GC) 是 Go 語言的核心特性之一,是實現內存自動管理的一種形式。golang 的自動垃圾回收屏蔽了複雜且容易出錯的內存操作,讓開發變得更加簡單、高效。在 Go 語言中,從實現機制上來說,垃圾回收可能是最複雜的模塊了。瞭解垃圾回收的機制,有助於更好地理解 Go 語言的內存管理機制,從而更好的使用 Go 語言進行開 ⌘ Read more
前言構建分佈式系統時,如何對數據進行唯一標識也是一個至關重要的設計。不僅要符合 B-tree 數據結構以維持查詢性能,還要考慮唯一標識的連續性會不會影響系統安全性。在分庫分表的情況下,還要避免唯一標識重複且高效等等需要考慮的點。爲此,市場就出現了很多分佈式 ID 生成方案。本文將詳細介紹九種主流的分佈式 ID 生成策略供大家參考使用。1、UUIDUUID(Universally Unique Id ⌘ Read more
大家好,我是 mikechen。分佈式系統是大型網站架構的必經之路,是處理大規模數據、和高併發請求的關鍵,下面我就全面來詳解分佈式系統 @mikechen分佈式系統分佈式系統:是通過網絡連接的多臺獨立計算機 (比如:物理服務器、虛擬機、或容器) 協同工作,共同完成特定任務的計算系統。一般,具體典型的 4 大特點:可擴展性(Scalability):通過增加更多的節點,可以提高系統的處理能力、和存儲 ⌘ Read more
在構建高性能服務器應用時,理解並正確配置文件描述符(File Descriptor)限制和端口管理至關重要。本文將深入探討 Linux 服務端進程最多能打開多少 socket 連接,以及相關的配置方法。什麼是文件描述符?文件描述符是操作系統用來訪問文件、套接字、管道等資源的索引。每個 socket 連接都會佔用一個文件描述符,因此文件描述符的數量直接決定了服務端能支持的最大連接數。文件描述符限制的 ⌘ Read more
你好,我是柳岸花開。什麼是循環依賴?--------很簡單,就是 A 對象依賴了 B 對象,B 對象依賴了 A 對象。圖片在 Spring 中,一個對象並不是簡單 new 出來了,而是會經過一系列的 Bean 的生命週期,就是因爲 Bean 的生命週期所以纔會出現循環依賴問題。當然,在 Spring 中,出現循環依賴的場景很多,有的場景 Spring 自動幫我們解決了,而有的場景則需要程序員來解 ⌘ Read more
引言--在前面的教程中, 我們介紹瞭如何使用rust-lang/log與envlogger和log4rs實現基本和高級的日誌功能。本文將進一步探討如何使用slog庫構建高性能的分佈式日誌系統, 適用於大規模生產環境。使用slog庫------------slog是一個結構化的、可組合的日誌庫, 專爲高性能和靈活性而設計。它支持各種輸出目標 (如控制檯、文件、網絡) 和過濾器, 並提供了豐富的功能, ⌘ Read more
大家好,我是 mikechen。分佈式算法對於保證分佈式一致性非常的重要,也是構建分佈式的基石,下面我就重點詳解 4 大主流分佈式算法 @mikechenPaxos 算法Paxos 算法是一種用於分佈式一致性的協議,主要解決:分佈式系統中的一致性問題,確保多個節點對共享狀態達成一致。在 Paxos 算法中,有三種角色,分別是:提議者(proposer)、接收者(acceptor)和學習者(lear ⌘ Read more
登錄認證是任何系統中避不開的一個話題,登錄認證隨着系統架構的演變而出現與架構相適應的方案。下面介紹架構演變過程中登錄常客 Cookie、Session、JWT 之間的關係。1、單體架構 單體架構階段下,前端代碼和後端代碼都在一個項目中,也就不存在跨域問題。此時的登錄認證機制採用的是 Cookie 和 Session 的方式進行。認證的方式如下: 用戶訪問的服務器的時候,攜帶服務 ⌘ Read more
隨着分佈式應用越來越廣泛,數據操作的一致性需要由業務方來保證,兩個操作不在同一個事務操作失敗時,無法依靠數據庫事務直接回滾,這時需要業務方手動進行回滾。通過命令模式提供新舊數據初始化後,如果執行後有後續操作失敗,業務方可以通過調用 Undo方法進行回滾,無需再編寫數據庫操作代碼優點是減少了回滾代碼的重複編寫,只要提供新舊數據,通過 Do和 UnDo就可以完成對應操作。並且有些時候可能 Undo 方 ⌘ Read more
引言在數據庫管理和維護的世界裏,如何有效地處理數據庫遷移一直是開發者面臨的一個重要問題。尤其是在使用 Go 語言開發的項目中,雖然傳統的. sql 腳本依然可以用於執行數據庫變更,但許多項目更傾向於使用如 Migrate 這樣的庫來管理數據庫遷移。這篇文章將探討使用 Migrate 庫相對於傳統 SQL 腳本的優勢,解析背後的原因,並通過示例展示其使用方法。Migrate 庫簡介“Migrate” ⌘ Read more
無論是高可用計算架構還是高可用存儲架構,它們的核心設計目標均是在部分服務器出現故障時確保系統能繼續運行。然而,在極端情況下,如機房斷電、火災、地震或洪水等,可能導致一個地點的所有服務器同時出現故障,使得整個業務系統癱瘓。即便依靠其他地區的備份系統,全面恢復業務的時間也可能較長,從半小時到 12 小時不等。備份系統由於平時不提供服務,可能存在許多未被發現的潛在問題。如果業務需求是在這種災難性故障發生 ⌘ Read more
本文是 WebSocket 系列文章的第 2 篇,第 1 篇主要講述概念原理。本文從實戰角度介紹如何使用 WebSocket。Part1 項目簡介本文實戰項目來自 Mastering WebSockets With Go。實現了一個精簡版的 Web 聊天系統,前端採用 HTML+JS,後端用 Go 實現。注意: 本文對原項目做了一點 UI 顏色調整 在本地構建部署後效果如下,先要登錄後創建 We ⌘ Read more
一、什麼是 OAuth 2.0---------------1. 什麼是 OAuth 2.0OAuth 2.0 是一套關於授權的行業標準協議。OAuth 2.0 允許用戶授權第三方應用訪問他們在另一個服務提供方上的數據,而無需分享他們的憑據(如用戶名、密碼)。2. OAuth 2.0 應用場景OAuth 2.0 的應用場景非常廣泛,包括但不限於:第三方應用訪問用戶在其他服務上的信息,例如,一個應用 ⌘ Read more
本文將展示如何使用 Operator SDK\n 搭建一個基本的 k8s Operator。在本文中,您將瞭解如何創建一個新項目,並通過創建自定義資源定義 (CRD) 和基本控制器來添加 API。我們將在 CRD 中添加字段,以包含一些有關期望狀態和實際狀態的信息,修改控制器以調和新資源的實例,然後將 operator 部署到 Kubernetes 集羣。Prerequisites安裝 Oper ⌘ Read more
本文將展示如何使用 Operator SDK[1] 搭建一個基本的 k8s Operator。在本文中,您將瞭解如何創建一個新項目,並通過創建自定義資源定義 (CRD) 和基本控制器來添加 API。我們將在 CRD 中添加字段,以包含一些有關期望狀態和實際狀態的信息,修改控制器以調和新資源的實例,然後將 operator 部署到 Kubernetes 集羣。Prerequisites安裝 Oper ⌘ Read more
什麼是分佈式鏈路追蹤系統?分佈式鏈路追蹤系統是一種用於監控和分析在微服務架構中的服務請求流通過程的工具。隨着現代企業轉向微服務架構,一個業務請求往往會涉及多個微服務的調用。這些調用在不同的服務器、不同的服務實例上可能以複雜的鏈式或網狀模式相互作用,當出現性能問題或錯誤時,很難快速定位問題的根源。分佈式鏈路追蹤系統通過收集、存儲並分析服務間的調用信息,幫助開發者和運維人員理解服務請求的流轉過程,從而 ⌘ Read more
大家好,我是 mikechen。Nginx 是非常重要的負載均衡中間件,被廣泛應用於大型網站架構,下面我就全面來詳解 Nginx@mikechenNginxNginx 是一款輕量級的高性能的 Web 服務器和反向代理服務器,是由俄羅斯的程序設計師 Igor Sysoev 所開發。Nginx 處理高併發能力是十分強大的,能經受高負載的考驗,有報告表明能支持高達 50,000 個併發連接數。Nginx ⌘ Read more
分庫分表背景知識--------問題 1:爲什麼分庫分表?大家都知道,當一個表(比如訂單表) 達到 500 萬條或 2GB 時,需要考慮水平分表。爲啥? 讀寫併發高場景,單服務器單一數據庫 CPU、內存、網絡 IO 壓力大。所以,需要分庫,一個庫拆成多個庫。同時,數據量大,單表存不下,需要分表,一張表拆分成多個表。總之,分庫分表的原因是:數據量大,選分表; 併發高,選分庫; 海量存儲 ⌘ Read more
引入Uber 是一家科技公司,在 2010 年初推出了讓司機與乘客便捷溝通的應用軟件,從而改變了出租車市場。爲了支持業務,Uber 積極利用數據分析和機器學習模型輔助運營。從 Uber 乘車的動態定價到外賣軟件 Uber Eats 的 “餐廳經理(Restaurant Manager)” 儀表板,都使用實時數據進行高效操作。在本文中,請跟隨筆者一起了解 Uber 如何管理其支持實時應用程序的基礎架 ⌘ Read more
在 Go 語言中,空結構體 struct{} 是一個非常特殊的類型,它不包含任何字段並且不佔用任何內存空間。雖然聽起來似乎沒什麼用,但空結構體在 Go 編程中實際上有着廣泛的應用。本文將詳細探討空結構體的幾種典型用法,並解釋爲何它們在特定場景下非常有用。空結構體不佔用內存空間首先我們來驗證下空結構體是否佔用內存空間:type Empty struct{}var s1 struct{}s2 := E ⌘ Read more=
開發人員在使用命令行工具時,經常需要一個簡潔、美觀且功能強大的提示符。Oh-My-Posh 正是爲滿足這一需求而生的一個項目。作爲一個跨平臺和跨 Shell 的提示符渲染器,Oh-My-Posh 以其高定製性和低延遲性脫穎而出。本文將深入探討 Oh-My-Posh 的功能,包括其安裝、配置、使用及其在不同操作系統和 Shell 中的表現。什麼是 Oh-My-Posh?--------------- ⌘ Read more
開場白環境: 處理器架構:arm64 內核源碼:linux-6.6.29 ubuntu 版本:20.04.1 代碼閱讀工具:vim+ctags+cscope 本文主要介紹內存管理中的 HVO(HugeTLB Vmemmap Optimization)特性,通過 HVO 可以節省管理 HugeTLB 頁面元數據(struct page)的 ⌘ Read more
在軟件開發領域,性能是最重要的。作爲開發人員,我們努力編寫的代碼不僅能解決問題,而且能高效、快速地解決問題。在使用 Rust 時尤其如此,Rust 是一種以其高性能而聞名的語言。基準測試,即測試軟件以衡量其性能,是軟件開發的一個關鍵方面。它使我們能夠了解代碼的執行情況以及可以在哪裏進行優化。在 Rust 的世界裏,有一種工具能夠達到這個目的:Criterion。Criterion 是 Rust 中 ⌘ Read more
在學習 Rust 之前,我還真不知道代數數據類型(ADTs)這個概念。從 Rust 文檔中大概瞭解它包含 “求和類型” 和“乘積類型”,看似很簡單,但我打算展開學習一下代數數據類型。先看一段很教科書的定義:抽象數據類型(Abstract Data Types,簡稱 ADTs)是計算機科學中的一種概念,用於在不關心數據表示的具體細節的前提下,定義數據的方法。ADTs 常由 “構造” 或“複合”兩種基 ⌘ Read more
Golang 可以通過啓動 goroutines 來併發執行任務。它們可以通過一種名爲 "通道" 的通信媒介相互通信。話不多說,下面我列舉了幾種不同情況下 channel 的使用以及其適用條件,最後總結出一張 channel table,能夠幫助你快速喫透 channel 的所有要點。Let't go@Nil Channels如果你像創建普通變量一樣創建一個通道,通道將被初始化爲零值。這裏要提到的 ⌘ Read more
圖片的 base64 編碼在多種上下文中都很有用。當需要通過旨在處理文本數據的媒體存儲或傳輸圖片時,它通常會被使用,比如嵌入到網頁或者通過 API 上傳圖片。這篇文章將介紹如何使用 Go 標準庫得到任何圖片的 base64 編碼的值。在 Go 中將圖片轉換爲其 base64 表示很容易。所有你需要做的是將文件讀取爲字節 slice 並使用包 encoding/base64 對其進行編碼。處理本地圖 ⌘ Read more
大家好,我是 ConardLi。 AI 時代,和我們前端開發結合最緊密的就是當下炒的非常火熱的 Web AI 技術了。今天跟大家一起來聊聊本屆 Google I/O 開發者大會上關於 Web AI 的主題分享:《Web AI: On-device machine learning models and tools for your next project》傳統上,人工智能和機器學習模型的計算任 ⌘ Read more
前言假設你的系統裏有 100 萬個用戶,然後你要輪詢重試的獲取每個用戶的身份信息, 如果你還在使用 SpringRetry 和 GuavaRetry 之類的這種單任務的同步重試框架,那你可能到猴年馬月也處理不完, 即使加再多的機器和線程也是杯水車薪, 而 Fast-Retry 正是爲這種場景而生Fast-Retry一個高性能的多任務重試框架,支持百萬級任務的異步重試、以及支持編程式和註解聲明式等多 ⌘ Read more
在併發編程中,互斥鎖是一種基本的同步機制,用於保護共享資源不被多個線程或進程同時訪問,從而避免數據競爭和保證數據的一致性。本文將深入探討互斥鎖的概念、工作原理,並通過 Go 語言的具體實現來展示互斥鎖在實際編程中的應用。互斥鎖的基本概念互斥鎖(Mutex)是最簡單的一種鎖形式,它僅允許一個線程在同一時刻訪問某個資源。當一段代碼被定義爲臨界區時,任何線程在進入該區域前必須先獲得互斥鎖的授權,並在離開 ⌘ Read more
準備工作----首先準備一個 DB 文件,裏面創建一張訂單表workorder,建表語句如下:CREATE TABLE "workorder" ( "orderid" REAL, "orderstatus" REAL, "ordertime" TEXT, "consignstatus" REAL, "consigntime" TEXT, "paytime" TEXT, "post ⌘ Read more
一、golang 操作 redis 1、安裝初始化文件夾 c:\\\\aaa mkdir testredisc:\\\\aaa\\\\testredis go mod init testredis安裝 go get github.com/go-redis/redis/v82、基本使用 package mainimport ( "context" "fmt" "github.com/go-r ⌘ Read more
在軟件開發過程中,可靠且高效的診斷系統是必不可少的組成部分。Rust 社區爲此提供了一個優秀的解決方案:Tracing。Tracing 是由 Tokio 項目維護的一個框架,目的是爲 Rust 程序提供結構化和事件驅動的診斷信息。重要的是,儘管它由 Tokio 維護,但其使用並不強制依賴於 tokio 運行時。本文將深入介紹 Tracing 的使用和特性,幫助開發者更好地利用這一工具提高開發效率。 ⌘ Read more
背景介紹在當今的數字時代,即時通訊(IM)已成爲人們日常溝通不可或缺的一部分。無論是個人用戶還是企業,在不同的應用程序和服務中都需要高效、可靠的即時通訊功能。然而,開發一個既能支持海量用戶又能提供穩定服務的 IM 系統,對於許多開發者來說都是一個巨大的挑戰。問題包括但不限於如何處理大量消息的存儲與傳輸、如何保證消息的實時性與可靠性、以及如何進行高效的用戶和羣組管理等。今天要給大家推薦一個 GitH ⌘ Read more
引言--在 Rust 編程中,日誌是非常重要的一個組成部分。本文將爲大家介紹一款優秀的 Rust 日誌庫—— envlogger,並通過實例講解如何快速上手使用它。創作背景----筆者在學習 Rust 過程中,發現日誌在調試程序、記錄關鍵信息等方面扮演着至關重要的角色。在衆多 Rust 日誌庫中,envlogger 因其簡單易用和強大的功能脫穎而出,深得廣大 Rust 開發者的喜愛。因此,將 en ⌘ Read more
引言--在 Go 語言的衆多標準庫中,arena庫是一個相對較新且不爲人知的部分,還處於試驗階段。這個庫提供了一種管理內存分配的有效方式,尤其適用於處理大量小型對象,能夠顯著減少內存碎片和提高內存使用效率。本文將深入探討arena庫的設計理念、使用方法以及它如何優化 Go 語言程序的內存管理。arena庫概述----------arena庫的核心思想是提供一個連續的內存塊,讓開發者可以在其中快速分 ⌘ Read more
在當下的網絡環境下,我們常常會遇到訪問限制,比如防火牆或者代理限制了我們使用某些協議或訪問互聯網的某個部分。wstunnel 是一個基於 WebSocket 或 HTTP2 協議來轉發流量的工具,其主要目的就是爲了繞過這些限制,讓用戶自由的訪問所需資源。wstunnel 簡介-----------wstunnel 是一個使用 WebSocket 協議穿透防火牆和代理的工具。它允許你隧道化任意流量, ⌘ Read more
table data-sort="sortDisabled" width="578"tbodytrtd valign="top" align="center" width="577" class=""section class=""strong背景/strong/section/td/tr/tbody/table隨着互聯網規模的發展,單機服務已無法滿足業務的需求,分佈式架構應運而生。在分佈式環境下 ⌘ Read more=
使用大型語言模型(LLMs)進行工具學習已成爲增強 LLMs 能力以解決高度複雜問題的一個有希望的範式。儘管這一領域受到越來越多的關注和快速發展,但現有的文獻仍然分散,缺乏系統性的組織,爲新來者設置了進入障礙。因此對 LLMs 工具學習方面的現有工作進行全面調查,從兩個主要方面展開:(1)爲什麼工具學習是有益的;(2)如何實現工具學習,以全面理解 LLMs 的工具學習。根據工具學習工作流程中的四個 ⌘ Read more
引言在 Go 語言的標準庫中,container/list包提供了雙向鏈表的實現。鏈表是一種常見的數據結構,它通過節點的序列實現,每個節點都包含數據及對前一個節點和後一個節點的引用。Go 語言的container/list包提供了操作鏈表的多種方法,如插入、刪除、搜索和移動元素等。本文將深入探討container/list包,解析其實現的內部機制,並通過示例展示如何在 Go 程序中有效地使用此包。 ⌘ Read more
一、跳躍表簡介-------跳躍表SkipList是一種有序的數據結構,是 Redis 有序集合的底層實現之一。跳躍表中,數據被存儲在節點中,每個節點包含一個數據元素和一組指向其他節點的指針。這些指針分佈在不同的層級,用於提升跳躍表的訪問性能。跳躍表支持平均O(log N)、最壞O(N)複雜度的查找性能,並且支持通過順序性操作來批量處理節點。在大部分情況下,跳躍表的效率可以和平衡樹相媲美,並且因爲 ⌘ Read more
什麼是 iptables? 在 Linux 系統中,iptables 是一個強大的防火牆工具,用於配置對 IPv4 數據包過濾規則和網絡地址轉換(NAT)。它允許系統管理員控制進入、離開或經過系統的網絡數據包的流向和處理方式,從而增強系統的安全性、穩定性和性能。iptables 是 Linux 內核中 Netfilter 子系統的一部分,它通過在數據包經過網絡協議棧時應用規則來實現過濾和轉發。通 ⌘ Read more
作者丨 Austin 來源丨 https://zhuanlan.zhihu.com/p/701393483編輯丨 GiantPandaCV宣傳一下我們的工作 I-LLM,(據我們所知)這是第一個在 LLM 上實現了 integer-only 量化的方法,精度逼近浮點,超過 Smooth/Omini/Affine Quant 等 SOTA 方法。https://arxiv.org/abs/2405 ⌘ Read more
請求調頁機制,只要用戶態進程繼續執行,他們就能獲得頁框,然而,請求調頁沒有辦法強制進程釋放不再使用的頁框。因此,遲早所有空閒內存將被分配給進程和高速緩存,Linux 內核的頁面回收算法(PFRA)採取從用戶進程和內核高速緩存 “竊取” 頁框的辦法不從夥伴系統的空閒塊列表。實際上,在用完所有空閒內存之前,就必須執行頁框回收算法。否則,內核很可能陷入一種內存請求的僵局中,並導致系統崩潰。也就是說,要釋 ⌘ Read more
大家好,我是小風哥,今天簡單聊聊動態鏈接庫的實現原理。假設有這樣兩段代碼,第一段代碼定義了一個全量變量 a 以及函數 foo,函數 foo 中引用了下一段代碼中定義的全局變量 b。第二段代碼定義了全局變量 b 以及 main 函數,同時在 main 函數中調用了第一個模塊中定義的函數 foo。接下來編譯器出場,編譯器會把這個兩個源文件編譯成對應的目標文件。目標文件中主要有兩部分,代碼段和數據段,這 ⌘ Read more
大語言模型在現代人工智能領域中扮演着重要角色。Ollama 作爲一個輕量級且可擴展的框架,幫助開發者在本地機器上構建和運行這些模型。Ollama 簡介---------Ollama 是一個簡單、可擴展的框架,旨在幫助開發者構建和運行大語言模型。它提供了一個簡潔的 API,用於創建、運行和管理模型。此外,Ollama 附帶了豐富的預構建模型庫,供開發者在各種應用中輕鬆使用。Ollama 的特性包括: ⌘ Read more
在使用 goroutines 的時候,你肯定遇到過需要處理不同 goroutine 裏面的錯誤的情況,這裏跟大家分享幾點經驗之談,也歡迎大家討論。❌ 在 Waitgroup 中處理有些開發者可能會使用下面的方式:package mainimport ( "errors" "sync" "time")func main() { var wg sync.WaitGroup wg.Add(3) var ⌘ Read more
本文作者爲 360 奇舞團前端開發工程師本篇文章我們將基於Ollama本地運行大語言模型(LLM),並結合ChormaDB、Langchain來建立一個小型的基於網頁內容進行本地問答的RAG應用。概念介紹----先簡單瞭解下這些術語:LLM (A large language model) 是通過使用海量的文本數據集(書籍、網站等)訓練出來的,具備通用語言理解和生成的能力。雖然它可以推理許多內 ⌘ Read more
Goroutine 是 Go 語言中實現併發的重要機制。它們輕量且高效,極大地提升了 Go 程序的併發能力。然而,在實際編程中,我們容易遇到 Goroutine 泄露的問題。這篇文章將詳細探討 Goroutine 泄露的概念、原因、檢測方法及其防範措施。什麼是 Goroutine 泄露?-----------------Goroutine 泄露類似於內存泄露,是指程序中創建的 Goroutine ⌘ Read more
在現實世界的應用中管理併發性可能相當棘手。開發者必須應對併發控制、背壓、錯誤處理等。幸運的是,Rust 提供了異步 / 等待機制,此外還有 Stream API\n。Stream 方法允許我們用一個優雅的抽象定義一個異步操作的流水線,這個抽象解決了常見的用例。 不幸的是,優雅有時掩蓋了複雜性。你能看到一個流管道並理解有多少操作會並行運行嗎?順序如何?我發現這比看起來更棘手,所以很自然地 ⌘ Read more
在現實世界的應用中管理併發性可能相當棘手。開發者必須應對併發控制、背壓、錯誤處理等。幸運的是,Rust 提供了異步 / 等待機制,此外還有 Stream API[1]。Stream 方法允許我們用一個優雅的抽象定義一個異步操作的流水線,這個抽象解決了常見的用例。 不幸的是,優雅有時掩蓋了複雜性。你能看到一個流管道並理解有多少操作會並行運行嗎?順序如何?我發現這比看起來更棘手,所以很自然地 ⌘ Read more
Rust 是一種注重安全、性能和併發的系統編程語言。在異步編程領域,Rust 提供了豐富的生態系統,而 Smol 是該生態中的一顆璀璨明珠。它以其小巧、快速和現代化的特點,在 Rust 異步運行時領域獨樹一幟。本文將深入探討 Smol 的設計理念、核心功能以及如何在 Rust 項目中使用 Smol 來執行異步任務。Smol 的設計哲學----------在異步編程的世界中,效率和易用性是衡量一個運 ⌘ Read more
所有耀眼的成績,都需要苦熬,熬得過,出衆;熬不過,出局大家好,我是「柒八九」。一個「專注於前端開發技術 /Rust及AI應用知識分享」的Coder 此篇文章所涉及到的技術有 1. Rust 2. wasm-bindgen/js-sys/web-sys 3. Web Worker 4. WebAssembly 5. Webpack/Vite配置WebAs ⌘ Read more
週期執行器主要用在同步網絡規則,如 iptables proixer、nettables proixer 中,一旦有新的網絡規則需要增加,就會週期性執行。我們通過一張圖來快速瞭解一下 BoundedFrequencyRunner 的執行流程BoundedFrequencyRunner用於週期性的執行同步方法,並且提供了執行失敗進行重試,內部封裝了運行的限流器type BoundedFrequenc ⌘ Read more
在 Rust 編程語言的世界中,有效的調試是任何成功項目的關鍵組成部分。調試對於理解程序的行爲、識別錯誤來源以及性能優化至關重要。本文將詳細介紹 Rust GDB(GNU Project Debugger),這是一款功能強大的工具,專門用於調試使用 Rust 編程語言編寫的應用程序。Rust GDB 基礎-----------Rust GDB 是 GNU 調試器的擴展,它添加了對 Rust 語言特 ⌘ Read more
作者簡介: 張新誼,西安郵電大學計算機專業研一在讀,目前在學習操作系統底層原理和內核編程。 使用本教程前需有 C 語言的 libbpf 開發經驗,以及 rust 語言基礎。01環境搭建 安裝 Rust 編程環境 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \\| shCargo 是 Rust 的包管理器和構建系統,在安裝 ⌘ Read more=
原文地址:https://icyfenix.cn/immutable-infrastructure/network/linux-vnet.htmlLinux 目前提供的八種名稱空間裏,網絡名稱空間無疑是隔離內容最多的一種,它爲名稱空間內的所有進程提供了全套的網絡設施,包括獨立的設備界面、路由表、ARP 表,IP 地址表、iptables/ebtables 規則、協議棧,等等。虛擬化容器是以 Lin ⌘ Read more
在高併發下,爲了增加系統的併發能力通常都會使用緩存技術來緩存熱點數據,目的是防止大量的請求打到 Mysql 上導致 Mysql 被打垮而崩潰。 假設現在 Mysql 中千萬條數據量並且有幾十萬條是熱點數據,那麼如何實現 Redis 中始終存儲的都是熱點數據呢? 在介紹 Redis 如何持久保留熱點數據之前先說兩種算法:LRU 和 LFU1、LRU 和 LFU 算法LRU:最近最 ⌘ Read more
一、cron 基本使用1、使用舉例package mainimport ( "fmt" "github.com/robfig/cron")//主函數func main() { cron2 := cron.New() //創建一個cron實例 //執行定時任務(每5秒執行一次) err:= cron2.AddFunc("/5 ", print5) if err!=nil{ ⌘ Read more=
隨着互聯網技術的迅速發展,網絡通信對性能和安全性的要求不斷提高。QUIC(快速 UDP 互聯網連接)協議應運而生,它是一種基於 UDP 的、爲 HTTP/3 設計的傳輸層網絡協議。相比於傳統的 TCP,QUIC 提供了更快的建立連接時間、改進的擁塞控制、無隊頭阻塞和更好的多路徑使用等優勢。在 Rust 生態系統中,Quinn 是這一協議最爲重要的實現之一,提供了異步、基於 futures 的 AP ⌘ Read more
故事還得從本週我搞了個 panic 開始說起,在我發佈失敗要排查爲什麼失敗了時,我驚訝的發現我竟然要上容器才能看到 panic 日誌,我工作這麼久還是很少見到這種場面的,經過和基建同學的深入暢談,我要上容器這件事情合不合理拋開不談,但我意識到,雖然大家都有日誌採集,但似乎每家公司的實現卻都略有差異,因此今天就來講講關於日誌採集的一些個人想法。在過去的文章中,我們提到過好幾次關於系統的穩定性建設,而 ⌘ Read more
現在許多商家了吸引顧客都會使用低價的秒殺商品來做活動,下圖展示了京東的秒殺活動頁面: 秒殺活動在開始的時候,用戶根據自己的需要下單自己喜歡的商品,此時服務器瞬間會打入大量的流量進來,如何設計一套可以扛住高併發的秒殺系統來支撐秒殺活動?下面我們具體的做秒殺系統的設計。 1、整體的秒殺設計 秒殺系統中我們使用了 LVS 和 Nginx 來扛住第一波流量,並且在 Nginx ⌘ Read more
引言Go 語言在其 1.18 版本中引入了泛型功能,這是一個具有里程碑意義的更新。此前,Go 開發者常常藉助接口、反射等方法間接實現泛型的需求,這既複雜又影響性能。泛型的引入使得代碼不僅更加靈活,同時也更加高效和類型安全。本文通過解析一段 Go 語言的泛型示例代碼,詳細講解泛型的特性及其在 Go 中的實際應用。Go 語言泛型特性詳解基本語法和定義泛型,或者說參數化類型,是一種在編程時不具體指定其數 ⌘ Read more
1、什麼是短鏈接和長鏈接 上圖是我們經常可以收到的一條流量通知的短信,短信有一個鏈接 A:https://dx.100XX.cn/JG1mEA 這個就是短鏈接;當我們點擊短鏈接 A 之後就會自動的跳轉到鏈接 B https://wap.zj.100XX.cn/szhy/2022/openMiniProgram/index.html?id=8ace47a58414b7d201843b8842ed1 ⌘ Read more
寫在文章開頭------本篇文章算是對go語言系列的一個收尾,通過 go 語言實現一個實現一個簡單的有界協程池。Hi,我是 sharkChili ,是個不斷在硬核技術上作死的 java coder ,是 CSDN 的博客專家 ,也是開源項目 Java Guide 的維護者之一,熟悉 Java 也會一點 Go ,偶爾也會在 C 源碼 邊緣徘徊。寫過很多有意思的技術博客,也還在研究並輸出技術的路上,希 ⌘ Read more
日常的開發中有些接口對冪等性有嚴格的要求,如增加 / 扣減積分、用戶支付 / 退款等場景,如果沒有做接口的冪等性就會造成一定的資損或者用戶投訴等問題。如下是增加積分過程,若接口未做冪等處理,現在由於積分服務響應超時導致 Nginx 重試: 會出現由於積分服務沒有做接口冪等處理,Nginx 重試操作使得積分接口多次被調用,最終會給用戶多加了積分。 那麼導致接口重複執行的來源有 ⌘ Read more
一、channel 的整體結構圖1、channel 結構圖 channel 本質是一個 hchan 這個結構體 type hchan struct { buf unsafe.Pointer // points to an array of dataqsiz elements sendx uint // send index recvx uint ⌘ Read more
短腿子猿的 Go 實驗室,Golang 官方提供了很多 package 來幫助大家提高開發的效率,但是由於函數太多,經常會記不住,這裏開了一個專題來分享官方 package,努力做到每週一更 Golang 中的 image 包提供了基本的圖像類型、顏色模型、以及用於處理圖像的各種函數和接口。以下是一些常用的函數和接口,以及相應的示例。常用類型與接口-------image.Image 接口這是 ⌘ Read more
在併發編程的多任務世界中,Go 語言以其強大的併發特性而獨樹一幟。通道(channels),作爲 Go 併發模型中的核心概念,是連接不同 goroutines 的橋樑,確保了數據在它們之間的流暢傳遞。如果你對 goroutines 已經有所瞭解,那麼現在是深入探索通道的絕佳時機。併發編程:Go 語言的殺手鐧--------------併發性是現代編程中的關鍵特性,它允許程序在同一時間內執行多個任務 ⌘ Read more
大家好,我是漁夫。今天分享主題,基於 Rust 開發的 Readyset,是數據庫緩存層解決方案,主要是加快查詢速度及增強讀取操作的水平擴展能力。 Readyset 介紹ReadySet 它是 Postgres 和 MySQL 的透明數據庫緩存,能夠提供內存鍵值存儲的性能和可擴展性,不需要你重寫應用程序或手動處理緩存失效。ReadySet 還可以將你的最複雜的 SQL 讀取轉換爲閃電般的快速查找 ⌘ Read more
插件可以在解耦的基礎上靈活擴展應用功能,本文介紹瞭如何基於 Golang 標準庫實現插件功能,幫助我們構建更靈活可擴展的應用。原文: Plugins with Go[1]什麼是插件簡單來說,插件就是可以被其他軟件加載的軟件,通常用於擴展應用程序的功能和外觀,插件的開發人員甚至可以不直接修改基礎應用程序。你很可能在日常生活中使用過插件,也許用的是其他名稱,如擴展 (extensions) 或附加 ⌘ Read more
插件可以在解耦的基礎上靈活擴展應用功能,本文介紹瞭如何基於 Golang 標準庫實現插件功能,幫助我們構建更靈活可擴展的應用。原文: Plugins with Go\n什麼是插件簡單來說,插件就是可以被其他軟件加載的軟件,通常用於擴展應用程序的功能和外觀,插件的開發人員甚至可以不直接修改基礎應用程序。你很可能在日常生活中使用過插件,也許用的是其他名稱,如擴展 (extensions) 或附加 ⌘ Read more
一、interface1、interface 作用接口是 Go 語言的重要組成部分,它在 Go 語言中通過一組方法指定了一個對象的行爲 接口 interface 的引入能夠讓我們在 Go 語言更好地組織並寫出易於測試的代碼 golang 中的接口分爲帶方法的接口和空接口 iface: 表示帶方法的接口 eface:表示空接口 2、eface 空接口 空接口 efac ⌘ Read more
大家好,我是 ConardLi。 JavaScript 的生態系統一直以它的變化速度飛快而著稱。在今天快速變化的 JavaScript 框架生態中,稍不留神你就可能錯過許多新東西。每當你覺得自己對最新的工具和技術駕輕就熟時,新的創新浪潮又會帶來一切改變。去一年,JavaScript 框架生態又發生了不小的變化,在今年的 Google I/O 開發者大會中,《Navigating the Java ⌘ Read more
GORM 和 Ent 是 Go 語言中使用廣泛的兩種 ORM(對象關係映射)框架。它們都有助於將數據庫操作從底層 SQL 抽象出來,簡化數據庫交互,但它們的設計理念和使用方式有顯著的不同。本文將詳細介紹 GORM 和 Ent 的不同特點、使用示例,並比較它們在不同場景下的優劣。GORM 簡介-------GORM 是一個易於使用的 ORM 庫,旨在提供簡單、乾淨的 API。它通過反射機制動態處理數 ⌘ Read more
熟悉我的讀者朋友們都知道,我早期是寫 Python 的,現在主力語言是 Go。開始接觸 Go 語言以後,我發現 Go 自帶的 net/http 請求庫不夠好用,好在我沒用 Go 寫過一行爬蟲代碼,平時 net/http 庫用的也就比較少,不是每天都用,也就忍了。最近我在網上衝浪時,無意間發現了 grequests 這個庫,靈感來源於 Python 生態中大名鼎鼎的 requests 庫。顧名思義, ⌘ Read more
命令分發模式 (command dispatcher pattern) 不屬於 23 種經典的設計模式。它是一種不太爲人所知的設計模式, 它主要用於構建可擴展、可插拔的系統架構, 將請求與執行請求的操作對象解耦。它類似於命令模式 (Command Pattern), 但更加靈活和動態。雖然 Command Dispatch Pattern 不屬於那 23 種經典模式, 但它確實是一種很有價值的模式 ⌘ Read more
一、golang gRPC 註冊 nacosgithub 地址 nacos-sdk-go(opens new window) nacos 官網 1、目錄結構 2、pb/person.protosyntax = "proto3";option gopackage = "./person";package pb;message Person { string name = 1; in ⌘ Read more=
當 style 標籤有 scoped 屬性時,它的 CSS 只作用於當前組件中的元素。這類似於 Shadow DOM 中的樣式封裝。它有一些注意事項,但不需要任何 polyfill。它通過使用 PostCSS 來實現以下轉換:style scoped.example { color: red;}/styletemplate divhi/div/template轉換結果:style.exampl ⌘ Read more
簡介「websocket 在前端開發中,是一個必須掌握的技術!你可以不用,但必須掌握!」前幾天,就遇到這樣一個需求,要求界面的數據通過websocket實時推送,並且必須支持「斷網重連、自動心跳」! 自動心跳是定期向服務端發送小型數據包,如果一段時間內服務端沒有收到心跳響應,系統可能會斷開連接。websokect 的 API 非常簡單// 創建ws連接const ws = new WebSock ⌘ Read more
在 Golang 生態系統中,GORM 作爲一個廣泛使用的 ORM 框架,不僅在數據庫操作方面提供了友好的 API 支持,其遷移系統(Migration System)同樣功能強大且易於使用。在本文中,我們將詳細解析 GORM 中的遷移機制,包括自動遷移和手動遷移,同時提供詳盡的代碼示例,幫助開發者全面掌握這一技術。什麼是數據庫遷移?---------在數據庫系統中,遷移是指對數據庫架構進行變更的 ⌘ Read more
項目 1:Pong 遊戲這個項目使用 piston 遊戲引擎和 OpenGL 圖形庫構建 Pong 遊戲,這個遊戲創建兩個球拍,一個在左邊,一個在右邊,還有一個球。有 2 名玩家,他們將能夠用 Y 和 X 鍵和上下箭頭處理左右球拍。github 地址:https://github.com/EleftheriaBatsou/pong-game-rust項目 2:聊天應用程序聊天應用程序是常見的,許多 ⌘ Read more
很多 Git 的操作,都有多種方法達到目的,但其中往往只有一種方法是最佳路徑。 Git 是個超級強大也非常流行的版本控制系統(VCS)。它的設計理念和其他 VCS 非常不同。縱觀整個業界,很多人在用舊的思維方式來解決 Git 的使用問題,有 svn 方式的、p4 方式的、奇怪方式的、錯誤方式的,等等,而不是更新成 Git 的思維方式。雖然 Git 非常靈活,確實可以用這些方式來使用,但其實操作起 ⌘ Read more
0、前言----原項目框架 SpringBoot + MybatisPlus + Mysql1、切換流程------1.1、項目引入 postgresql 驅動包由於我們要連接新的數據庫,理所當然的要引入該數據庫的驅動包,這與 mysql 驅動包類似dependency groupIdorg.postgresql/groupId artifactIdpostgresql/artifac ⌘ Read more
一背景Babel 是一個比較龐大的項目,其子工程就有至少 140 個 (如 babel/plugins/presets/lerna/babel-loader 等),產出的子工具已經是前端開發的基礎設施,對開發效率、代碼質量等有非常高的要求。在本文中,我們將瞭解 Babel 是怎樣進行項目管理的。本文從工程管理、代碼管理、文檔管理、質量管理四個方面對 Babel 項目管理進行拆解分析。工程管理Bab ⌘ Read more
❝ 幸福的三大要素是:有要做的事(something to do)、有要愛的人(someone to love)、有寄予希望的東西(something to hope for) ❞大家好,我是「柒八九」。一個「專注於前端開發技術 /Rust及AI應用知識分享」的Coder前言用過Vite進行項目開發的同學,肯定聽說過,Vite在開發環境和生產環境是兩種不同的資源處理方式。在開發環境 ⌘ Read more
在編寫大數據 SQL 的時候,有時需要進行行列的轉化什麼是行列轉化?如下圖,不同商品在不同月份的銷量數據,有時候我們希望數據和左側一樣的排列,但原始數據卻像右側一樣排列,此時我們需要把右側的列排列轉換成左側的行排列,反之亦然。下面以上面這個例子爲大家介紹一些行列轉換的方式行轉列---使用CASE WHEN適用場景:MySQL、Hive、Spark SQL把行轉換成列最簡單的方式就是使用CASE W ⌘ Read more
在本篇博文中,我們將深入探討如何在 Go 中構建一個可擴展的 Worker pool。該實現可有效地管理 Worker pool,以處理大量請求,同時根據負載動態調整 Worker 的數量。我們還會討論可能出現的問題以及如何避免它們。概覽要實現的 worker pool 應該具有以下功能:根據負載情況動態調整 worker 數量; 具備超時和重試機制處理接收到的請求; 能夠 Grace ⌘ Read more
現如今,主流的 Web API 都採用 RESTful 設計風格,對於接口返回的 HTTP 狀態碼和響應內容都有統一的規範。針對接口錯誤響應,一般都會返回一個 Code(錯誤碼)和 Message(錯誤消息內容),通常錯誤碼 Code 用來定位一個唯一的錯誤,錯誤消息 Message 用來展示錯誤信息。本文就來詳細介紹下,如何將 RESTful API 的錯誤處理進行規範化。錯誤碼爲什麼需要業務錯 ⌘ Read more
一、consul 安裝1、consul 安裝說明 下載 consul:https://releases.hashicorp.com/consul/ 從中選擇版本下載,得到 zip 壓縮包 root@dev:opt# cd /optroot@dev:opt# wget https://releases.hashicorp.com/consul/1.5.2/consul1.5.2linux ⌘ Read more
前言--說到箭頭函數,可能很多人的第一反應就是和普通函數的區別:箭頭函數沒有 this,普通函數的 this 指向依賴它是如何被調用的 箭頭函數沒有 arguments 對象,而是通過剩餘參數(rest parameters)來獲取所有參數的值 箭頭函數沒有 prototype 原型,不能用作構造函數,而普通函數可以 更加簡潔的函數語法 相信一名前端開發者,對於這兩者的區別 ⌘ Read more
官方文檔:https://gorm.io/zhCN/gen/create.html 一、安裝 mysql 1、安裝 mysql拉取 MySQL 鏡像docker pull mysql運行 MySQL 容器docker run --name mysql-server -p 3306:3306 -e MYSQLROOTPASSWORD=123456 -d mysql安裝mysql客戶端brew ⌘ Read more=
Kubernetes 網絡需求在深入研究數據包在 Kubernetes 集羣內部如何流動之前,讓我們首先明確 Kubernetes 網絡的需求。Kubernetes 網絡模型定義了一組基本規則:集羣中的 Pod 應該能夠自由地與任何其他 Pod 通信,而無需使用網絡地址轉換(NAT)。 在集羣節點上運行的任何程序都應該能夠與同一節點上的任何 Pod 通信,而無需使用 NAT。 每個 P ⌘ Read more
這兩日讀了一個實現二維碼生成的庫。其中的 bitset 設計得非常好,就摘抄記錄下來,與大家一起分享。bitset 實現一個可擴展的 bit 集合,可以添加 bit 和查看 bit。它在二維碼生成中,用來將編碼後的內容協助生成位圖,然後通過位圖進行繪製二維碼。二維碼的黑白格子正好用二進制 0 和 1 來表示。 下面開始詳細講解這個功能設計: 一、我們使用一個結構體來存儲 bit 序列。Bits ⌘ Read more
一、引言----在 Go 語言中,匿名函數與閉包是兩個重要的概念,它們增強了 Go 語言的表達力和功能性,使得代碼更加簡潔和強大。 本文將深入探討 Go 語言中的匿名函數與閉包,幫助讀者更好地理解和應用這兩個概念。匿名函數在 Go 語言中提供了一種靈活的方式來定義即用即拋的函數邏輯,減少了命名負擔並且可以直接在代碼中嵌入。閉包則允許匿名函數捕獲並持有其定義時作用域中的變量,使得函數具有狀態,這對於 ⌘ Read more
線程同步----通常在 Go 語言中有兩種方法可以用來做線程同步sync.Cond channel channel 的很好理解,當我們從一個 channel 中接收數據的時候,如果裏面沒有數據,那我們直接就阻塞在那裏了;在這篇文章中就來看看怎麼使用 sync.Cond 完成同步sync.Cond---------「定義結構體和方法」type BlueberryInt struct { ⌘ Read more