【網絡協議】精講 UDP 協議特點和報文格式!圖解超讚超詳細!!!
大家好,我是 風雲說通信 ,深耕無線通信網絡協議領域: CSDN 博客:https://blog.csdn.net/jly20220520?type=blog 更多藍牙知識,盡在博客專欄:精講藍牙協議棧、精講 BLE 協議棧、Android Bluetooth Stack * 更多 3GPP 協議知識,盡在博客專欄:*精講 3GPP 協議棧1. UDP 定 ⌘ Read more
一文了解 OTA 升級功能
當今這個年代,大家對於汽車上的 OTA 升級功能都不再陌生,因爲大多數車都支持這一功能,一年當中總會碰到一兩次 OTA 免費升級的推送信息。source:http://it.cha138.com/android/show-77091.html既然 OTA 功能已經這麼普遍,那麼本文就來詳細瞭解 OTA 是什麼?OTA 有什麼用?等等問題。1 什麼是 OTA隨着智能網聯和智能駕駛的快速發展,汽車控制 ⌘ Read more
6 大分庫分表中間件詳解 -圖文全面總結-
大家好,我是 mikechen。分庫分表是大型架構的必備技能,也是大廠經常考察的重點對象,下面我就全面來詳解分庫分表中間件 @mikechen分庫分表分庫分表:是數據庫水平擴展的一種常見策略,用於處理大規模數據、和高併發請求。如下圖所示:分庫分表,這裏分爲兩個方面,包含:分庫、和分表兩種策略。1、分庫分庫:就是將數據水平分散到多個數據庫實例中,每個數據庫實例可以部署在不同的服務器上,從而減輕單個數 ⌘ Read more
TCP-IP 協議、三次握手、四次揮手詳解
TCP/IP 協議模型(TCP 協議) 傳輸控制協議是一種面向連接的、可靠的、基於字節流的方式進行有序的無差錯的數據傳輸通訊協議,它負責完成傳輸層所指定的功能,利用重發技術和擁塞控制機制,嚮應用程序提供可靠的通信連接,使它能夠自動適應網上的各種變化。比如:數據報檢測、流量控制、擁塞控制、數據排序、超時重發等TCP/IP 是一個協議族,包括 TCP、IP、UDP、ICMP、RIP、SMTP、ARP、 ⌘ Read more
這些單片機也能運行 Rust 啦!
隨着 Rust 的快速發展,Rust 在嵌入式中的支持越來越豐富。目前已經有非常多的 Rust 嵌入式項目和 Rust 單片機外設支持庫。理論上來說,目前大部分的 ARM、RISC-V 單片機 都能運行 Rust,但大部分單片機官方沒有編寫 Rust 外設庫,因此用戶暫時無法直接開發 Rust 應用。本文將介紹幾個已經支持 Rust 外設庫的常用單片機,包括 STM、 ESP、 AVR 、NRF ⌘ Read more
高可用存儲架構:集羣和分區
主備、主從、和主主架構都基於一個共同的前提:主機需要有能力存儲所有數據。然而,主機的存儲和處理容量是有限的。以歷史發展爲例,Intel 386 時代的服務器僅能存儲幾百 MB 數據,到了 Intel 奔騰時代則能夠存儲幾十 GB,而進入 Intel 酷睿多核時代後,服務器的存儲能力增加到了數 TB。儘管從硬件發展角度看,存儲能力的提升速度相當快,但與業務需求的增長速度相比,這種提升還是遠遠不夠。例 ⌘ Read more
【網絡協議】精講 TCP 狀態機!圖解超讚超詳細!!!
大家好,我是 風雲說通信 ,深耕無線通信網絡協議領域: CSDN 博客:https://blog.csdn.net/jly20220520?type=blog 更多藍牙知識,盡在博客專欄:精講藍牙協議棧、精講 BLE 協議棧、Android Bluetooth Stack * 更多 3GPP 協議知識,盡在博客專欄:*精講 3GPP 協議棧今天我們來學習下 ⌘ Read more
深入理解分佈式鎖——以 Redis 爲例
一、分佈式鎖簡介——–1. 什麼是分佈式鎖分佈式鎖是一種在分佈式系統環境下,通過多個節點對共享資源進行訪問控制的一種同步機制。它的主要目的是防止多個節點同時操作同一份數據,從而避免數據的不一致性。線程鎖: 也被稱爲互斥鎖(Mutex),主要用於控制同一進程中的多個線程對共享資源的訪問。 進程鎖 進程鎖是用於控制同一臺機器上的多個進程對共享資源的訪問。進程 ⌘ Read more
7 個強大的文字轉語音 TTS 引擎
文本到語音(TTS)技術讓機器能以人聲般自然地 “說話”,架起了人機溝通的新橋樑。探索這一技術,開源 TTS 引擎以其開放性和經濟性,成爲創新者們的寵兒,爲智能應用注入活力。本文分享 7 個好用的開源文本到語音 (TTS) 引擎,爲讀者在技術選擇上提供清晰的視角和實用的參考。文本到語音 (TTS) 引擎文本到語音(TTS)引擎,是一種將文字信息轉化爲口語表達的智能軟件。它通過自然語言處理(NLP) ⌘ Read more
實戰 Linux I-O 多路複用:藉助 epoll,單線程高效管理 10-000 - 併發連接
引言– 在應對高併發連接的傳統策略中,普遍採取爲每個連接配置單獨線程或進程的直接方式,管理其 I/O 操作。此法雖直觀易行,但隨業務規模擴張,線程資源需求急劇上升。相反,Linux 下的 I/O 多路複用技術,尤其是epoll,展示了一種高效路徑:單一線程即可監控成千上萬的文件描述符,極大提升了資源使用效率。 I/O 多路複用的場景有很多,也比較實用。通常用法epoll線程 + 線程 / ⌘ Read more
Fastwhisper - Pyannote 實現 ASR - 說話者識別
前言最近在研究ASR相關的業務,也是調研了不少模型,踩了不少坑,ASR這塊,目前中文普通話效果最好的應該是阿里的modelscope上的中文模型了,英文的話,還是非whisper莫屬了,而且whisper很變態,粵語效果也還不錯,因此,如果實際業務中需要涉及到不同的語言,還是更推薦whisper多一點一、faster-whisper 簡單介紹faster-whisper是使用CTranslate2 ⌘ Read more
圖解支付系統的交易訂單狀態機設計
大家好,我是隱墨星辰,今天和大家聊聊交易單據狀態機的設計與核心代碼實現。假如你做的是支付、電商等這類交易系統,但沒有聽過狀態機,或者你聽過但沒有寫過,又或者你是使用 if else 或 switch case 來寫交易訂單的狀態推進,建議花點時間看看,一定會有不一樣的收穫。如果你是產品經理,可以考慮推薦給你們的研發同學,說不定能提升系統的健壯性。這篇文章主要講清楚:清楚什麼是狀態機,簡潔的狀態機對 ⌘ Read more
Rust - 性能超越 Kotlin 的跨平臺方案
現如今很多應用程序,爲了覆蓋儘可能多的用戶羣體會選擇同時在多個主流平臺上進行開發:移動端:iOS,android 桌面端:osx,windows,linux Web 端 所有平臺都基於各自的原生技術開發,雖然用戶體驗好但開發效率卻很低。爲了兼顧用戶體驗和開發效率,市面上誕生了一批跨平臺解決方案:移動端:apache cordova,react native,weex,flutte ⌘ Read more
Go 事件驅動編程:實現一個簡單的事件總線
前言在當今微服務和分佈式系統盛行的背景下,事件驅動架構(Event-Driven Architecture,EDA)扮演着一個至關重要的角色,此架構的設計使得服務間可以通過事件進行同步或異步通信,替代了傳統的直接接口調用。基於事件的交互方式,促進了服務之間的松耦合,提高系統的可擴展性。發佈 - 訂閱模式是實現事件驅動架構的模式之一,它允許系統的不同組件或服務發佈事件,而其他組件或服務可以訂閱這些事 ⌘ Read more
MySQL 事務篇:ACID 原則、事務隔離級別及事務機制原理剖析
引言– 衆所周知,MySQL數據庫的核心功能就是存儲數據,通常是整個業務系統中最重要的一層,可謂是整個系統的 “大本營”,因此只要MySQL存在些許隱患問題,對於整個系統而言都是致命的。那此刻不妨思考一個問題: MySQL在接受外部數據寫入時,有沒有可能會發生問題呢?有人也許會笑着回答:“那怎麼可能啊,MySQL在寫入數據時怎麼會存在問題呢”。 的確,MySQL本身在寫入數據時並不會有 ⌘ Read more
微服務 - 分庫分表的自增主鍵 ID 該如何設計?
一. 前言—–分佈式 ID 是分佈式系統裏面非常重要的一個組成部分,那麼我們在設計分佈式 ID 的時候,需要考慮什麼問題呢?❓簡單結構下是怎麼實現 ID 的控制的? 單實例系統 :通過時間戳,系統內自增,上鎖等方式保證 ID 的唯一性 單數據庫實例 : 通過自增字段(不談性能)實現 ID 的唯一 ❓微服務 + 分庫分表了 ,又該如何進行控制? 問題 : 單個系統沒辦法 ⌘ Read more
優化內存訪問效率:理解 TLB 緩存原理和應用
TLB 是 Translation Lookaside Buffer(地址轉換後備緩衝器)的縮寫,它是一種硬件緩存結構,用於加速虛擬內存地址到物理內存地址的轉換。在計算機系統中,使用虛擬內存可以使每個程序都有獨立的地址空間,並且能夠更高效地利用系統資源。然而,由於虛擬內存需要通過頁表將虛擬地址轉換爲物理地址,這一過程可能會引起較大的延遲。爲了加速地址轉換過程,TLB 作爲一個特殊的高速緩存被引入。 ⌘ Read more
如何使用 Rust 和 Kafka 進行高效的文件共享?
在當今相互關聯的世界中,高效的文件共享是許多應用程序的基本需求,特別是在分佈式環境中運行的應用程序。在本文中,我們將探索如何利用 Kafka 和 Rust 的強大功能來構建高效的文件共享系統。構建項目使用以下命令創建一個 Rust 新項目:cargo new rust-kafka在深入實現細節之前,讓我們簡要討論一下 rdkafka,它是 Kafka C API 的 Rust 綁定。rdkafka ⌘ Read more
yq:基於 Go 實現處理 YAML、JSON、XML、CSV、TOML 的命令行工具
在現代開發和運維的世界中,處理和轉換不同格式的數據文件如 YAML、JSON、XML、CSV 等是日常任務。文件格式的多樣性和複雜性常常給開發者帶來不小的挑戰。在這種情況下,強大的命令行工具能夠極大地簡化工作流程。本文將深入探討一個強大的多功能工具——go yq,它能夠便捷地處理 YAML、JSON、XML、CSV、TOML 以及屬性文件。安裝 go yq——–首先,我們需要安裝 go ⌘ Read more
基於 Zookeeper 實現分佈式鎖實踐
基於 Zookeeper 實現分佈式鎖實踐1、什麼是 Zookeeper?Zookeeper 是一個分佈式的,開源的分佈式應用程序協調服務,是 Hadoop 和 hbase 的重要組件。引用官網的圖例: 特徵:zookeeper 的數據機構是一種節點樹的數據結構,zNode 是基本的單位,znode 是一種和 unix 文件系統相似的節點,可以往這個節點存儲或向這個節點獲取數據 通過客戶端 ⌘ Read more
Zig HashMap 原理介紹上篇
引言如大多數哈希映射實現一樣,Zig 的 std.HashMap 依賴於兩個函數:hash(key: K) u64 和 eql(keya: K, keyb: K) bool。其中,哈希函數接收一個鍵並返回一個無符號的 64 位整數作爲哈希碼。相同的關鍵字總是會返回相同的哈希碼。然而,爲了處理不同的鍵可能生成相同哈希碼的情況(即碰撞),我們還需要 eql 函數來確定兩個鍵是否相等。這是一些標準做法, ⌘ Read more
京東商城高性能多線程併發編程與動態編排框架
一、項目介紹——Gobrs-Async 是一款功能強大、配置靈活、帶有全鏈路異常回調、內存優化、異常狀態管理於一身的高性能多線程併發編程和動態編排框架。爲企業提供在複雜應用場景下動態任務編排的能力。針對於複雜場景下,異步線程複雜性、任務依賴性、異常狀態難控制性;二、解決什麼問題——–在開發複雜中臺業務過程中,難免會遇到調用各種中臺業務數據, 而且會出現複雜的中臺數據依賴關係,在這 ⌘ Read more
Linux Kernel:內存分頁機制核心原理
內存分頁機制是一種操作系統的內存管理技術,將進程的虛擬內存空間劃分爲固定大小的頁面,並在需要時將其映射到物理內存中。操作系統會將輔助存儲器(通常是磁盤)中的數據分區成固定大小的區塊,稱爲 “頁”。當不需要時,將分頁由主存(通常是內存)移到輔助存儲器;當需要時,再將數據取回,加載主存中。相對於分段,分頁允許存儲器存儲於不連續的區塊以維持文件系統的整齊。分頁是磁盤和內存間傳輸數據塊的最小單位。分頁 / ⌘ Read more
一鍵輕鬆搭建和管理 VPN(WireGuard)的方案,輕鬆實現安全互聯,Star 12-2K!
隨着雲計算、物聯網(IoT)和遠程辦公等技術的發展,VPN 的重要性更加凸顯,並且現有的網絡帶寬質量也越來越好,很多企業和用戶都選擇了 VPN 解決方案來實現多地的互聯(相對傳統的專線,經濟實惠),很多企業和用戶選擇建設 VPN 主要用於以下幾個場景:雲計算業務的發展:雖然現在 “上雲” 和“下雲” 的爭議仍然不休,並且很多大企業確實在 “下雲”,但是對中小企業和個人來說,前期業務部署雲上確實具備 ⌘ Read more
圖解 RocketMQ 運行原理
當我們談到可靠的、高吞吐量的分佈式消息隊列,RocketMQ 必將成爲我們不得不提及的一個話題。作爲一個開放、高度可擴展的消息中間件,RocketMQ 已經在各種場景下得到廣泛的應用,如電商、物流、支付等領域。在該領域中,RocketMQ 以其出衆的運行性能和可靠性優勢,贏得了越來越多企業和開發者的信賴。本文將深入剖析 RocketMQ 的運行原理,從 Producer、Broker、Consum ⌘ Read more
GO 語言學習筆記: 垃圾回收機制剖析
一、引言—-(一)垃圾回收 概述垃圾回收(Garbage Collection,GC) 是 Go 語言的核心特性之一,是實現內存自動管理的一種形式。golang 的自動垃圾回收屏蔽了複雜且容易出錯的內存操作,讓開發變得更加簡單、高效。在 Go 語言中,從實現機制上來說,垃圾回收可能是最複雜的模塊了。瞭解垃圾回收的機制,有助於更好地理解 Go 語言的內存管理機制,從而更好的使用 Go 語言進行開 ⌘ Read more
九種主流的分佈式 ID 生成策略
前言構建分佈式系統時,如何對數據進行唯一標識也是一個至關重要的設計。不僅要符合 B-tree 數據結構以維持查詢性能,還要考慮唯一標識的連續性會不會影響系統安全性。在分庫分表的情況下,還要避免唯一標識重複且高效等等需要考慮的點。爲此,市場就出現了很多分佈式 ID 生成方案。本文將詳細介紹九種主流的分佈式 ID 生成策略供大家參考使用。1、UUIDUUID(Universally Unique Id ⌘ Read more
分佈式系統最全詳解 -萬字圖文總結-
大家好,我是 mikechen。分佈式系統是大型網站架構的必經之路,是處理大規模數據、和高併發請求的關鍵,下面我就全面來詳解分佈式系統 @mikechen分佈式系統分佈式系統:是通過網絡連接的多臺獨立計算機 (比如:物理服務器、虛擬機、或容器) 協同工作,共同完成特定任務的計算系統。一般,具體典型的 4 大特點:可擴展性(Scalability):通過增加更多的節點,可以提高系統的處理能力、和存儲 ⌘ Read more
探索 Linux 服務端進程的 Socket 連接極限
在構建高性能服務器應用時,理解並正確配置文件描述符(File Descriptor)限制和端口管理至關重要。本文將深入探討 Linux 服務端進程最多能打開多少 socket 連接,以及相關的配置方法。什麼是文件描述符?文件描述符是操作系統用來訪問文件、套接字、管道等資源的索引。每個 socket 連接都會佔用一個文件描述符,因此文件描述符的數量直接決定了服務端能支持的最大連接數。文件描述符限制的 ⌘ Read more
深入剖析 Spring 框架:循環依賴的解決機制
你好,我是柳岸花開。什麼是循環依賴?——–很簡單,就是 A 對象依賴了 B 對象,B 對象依賴了 A 對象。圖片在 Spring 中,一個對象並不是簡單 new 出來了,而是會經過一系列的 Bean 的生命週期,就是因爲 Bean 的生命週期所以纔會出現循環依賴問題。當然,在 Spring 中,出現循環依賴的場景很多,有的場景 Spring 自動幫我們解決了,而有的場景則需要程序員來解 ⌘ Read more
Rust 日誌高級實戰: 使用 rust-lang-log 與 slog 構建高性能分佈式日誌系統
引言–在前面的教程中, 我們介紹瞭如何使用rust-lang/log與envlogger和log4rs實現基本和高級的日誌功能。本文將進一步探討如何使用slog庫構建高性能的分佈式日誌系統, 適用於大規模生產環境。使用slog庫————slog是一個結構化的、可組合的日誌庫, 專爲高性能和靈活性而設計。它支持各種輸出目標 (如控制檯、文件、網絡) 和過濾器, 並提供了豐富的功能, ⌘ Read more
分佈式算法最全詳解 -4 大主流算法圖解-
大家好,我是 mikechen。分佈式算法對於保證分佈式一致性非常的重要,也是構建分佈式的基石,下面我就重點詳解 4 大主流分佈式算法 @mikechenPaxos 算法Paxos 算法是一種用於分佈式一致性的協議,主要解決:分佈式系統中的一致性問題,確保多個節點對共享狀態達成一致。在 Paxos 算法中,有三種角色,分別是:提議者(proposer)、接收者(acceptor)和學習者(lear ⌘ Read more
揭祕 Cookie、Session、JWT 之間的關係
登錄認證是任何系統中避不開的一個話題,登錄認證隨着系統架構的演變而出現與架構相適應的方案。下面介紹架構演變過程中登錄常客 Cookie、Session、JWT 之間的關係。1、單體架構 單體架構階段下,前端代碼和後端代碼都在一個項目中,也就不存在跨域問題。此時的登錄認證機制採用的是 Cookie 和 Session 的方式進行。認證的方式如下: 用戶訪問的服務器的時候,攜帶服務 ⌘ Read more
Go 命令模式實戰
隨着分佈式應用越來越廣泛,數據操作的一致性需要由業務方來保證,兩個操作不在同一個事務操作失敗時,無法依靠數據庫事務直接回滾,這時需要業務方手動進行回滾。通過命令模式提供新舊數據初始化後,如果執行後有後續操作失敗,業務方可以通過調用 Undo方法進行回滾,無需再編寫數據庫操作代碼優點是減少了回滾代碼的重複編寫,只要提供新舊數據,通過 Do和 UnDo就可以完成對應操作。並且有些時候可能 Undo 方 ⌘ Read more
數據庫遷移:爲什麼現代 Go 項目更傾向於使用 Migrate 庫
引言在數據庫管理和維護的世界裏,如何有效地處理數據庫遷移一直是開發者面臨的一個重要問題。尤其是在使用 Go 語言開發的項目中,雖然傳統的. sql 腳本依然可以用於執行數據庫變更,但許多項目更傾向於使用如 Migrate 這樣的庫來管理數據庫遷移。這篇文章將探討使用 Migrate 庫相對於傳統 SQL 腳本的優勢,解析背後的原因,並通過示例展示其使用方法。Migrate 庫簡介“Migrate” ⌘ Read more
業務高可用的保障:異地多活架構
無論是高可用計算架構還是高可用存儲架構,它們的核心設計目標均是在部分服務器出現故障時確保系統能繼續運行。然而,在極端情況下,如機房斷電、火災、地震或洪水等,可能導致一個地點的所有服務器同時出現故障,使得整個業務系統癱瘓。即便依靠其他地區的備份系統,全面恢復業務的時間也可能較長,從半小時到 12 小時不等。備份系統由於平時不提供服務,可能存在許多未被發現的潛在問題。如果業務需求是在這種災難性故障發生 ⌘ Read more
WebSocket 協議 - 實戰
本文是 WebSocket 系列文章的第 2 篇,第 1 篇主要講述概念原理。本文從實戰角度介紹如何使用 WebSocket。Part1 項目簡介本文實戰項目來自 Mastering WebSockets With Go。實現了一個精簡版的 Web 聊天系統,前端採用 HTML+JS,後端用 Go 實現。注意: 本文對原項目做了一點 UI 顏色調整 在本地構建部署後效果如下,先要登錄後創建 We ⌘ Read more
深入理解 OAuth 2-0:原理、流程與實踐
一、什麼是 OAuth 2.0—————1. 什麼是 OAuth 2.0OAuth 2.0 是一套關於授權的行業標準協議。OAuth 2.0 允許用戶授權第三方應用訪問他們在另一個服務提供方上的數據,而無需分享他們的憑據(如用戶名、密碼)。2. OAuth 2.0 應用場景OAuth 2.0 的應用場景非常廣泛,包括但不限於:第三方應用訪問用戶在其他服務上的信息,例如,一個應用 ⌘ Read more
使用 Golang 構建你的第一個 k8s Operator
本文將展示如何使用 Operator SDK
分佈式鏈路追蹤系統設計
什麼是分佈式鏈路追蹤系統?分佈式鏈路追蹤系統是一種用於監控和分析在微服務架構中的服務請求流通過程的工具。隨着現代企業轉向微服務架構,一個業務請求往往會涉及多個微服務的調用。這些調用在不同的服務器、不同的服務實例上可能以複雜的鏈式或網狀模式相互作用,當出現性能問題或錯誤時,很難快速定位問題的根源。分佈式鏈路追蹤系統通過收集、存儲並分析服務間的調用信息,幫助開發者和運維人員理解服務請求的流轉過程,從而 ⌘ Read more
Nginx 最全詳解 -萬字圖文總結-
大家好,我是 mikechen。Nginx 是非常重要的負載均衡中間件,被廣泛應用於大型網站架構,下面我就全面來詳解 Nginx@mikechenNginxNginx 是一款輕量級的高性能的 Web 服務器和反向代理服務器,是由俄羅斯的程序設計師 Igor Sysoev 所開發。Nginx 處理高併發能力是十分強大的,能經受高負載的考驗,有報告表明能支持高達 50,000 個併發連接數。Nginx ⌘ Read more
美團面試:百億級分片,如何設計基因算法?
分庫分表背景知識——–問題 1:爲什麼分庫分表?大家都知道,當一個表(比如訂單表) 達到 500 萬條或 2GB 時,需要考慮水平分表。爲啥? 讀寫併發高場景,單服務器單一數據庫 CPU、內存、網絡 IO 壓力大。所以,需要分庫,一個庫拆成多個庫。同時,數據量大,單表存不下,需要分表,一張表拆分成多個表。總之,分庫分表的原因是:數據量大,選分表; 併發高,選分庫; 海量存儲 ⌘ Read more
PB 級數據秒級響應:Uber 實時數據平臺架構演進
引入Uber 是一家科技公司,在 2010 年初推出了讓司機與乘客便捷溝通的應用軟件,從而改變了出租車市場。爲了支持業務,Uber 積極利用數據分析和機器學習模型輔助運營。從 Uber 乘車的動態定價到外賣軟件 Uber Eats 的 “餐廳經理(Restaurant Manager)” 儀表板,都使用實時數據進行高效操作。在本文中,請跟隨筆者一起了解 Uber 如何管理其支持實時應用程序的基礎架 ⌘ Read more
Go 中空結構體的用法,我幫你總結全了!
在 Go 語言中,空結構體 struct{} 是一個非常特殊的類型,它不包含任何字段並且不佔用任何內存空間。雖然聽起來似乎沒什麼用,但空結構體在 Go 編程中實際上有着廣泛的應用。本文將詳細探討空結構體的幾種典型用法,並解釋爲何它們在特定場景下非常有用。空結構體不佔用內存空間首先我們來驗證下空結構體是否佔用內存空間:type Empty struct{}var s1 struct{}s2 := E ⌘ Read more
Oh-My-Posh: 最可定製且低延遲的跨平臺 - 跨 Shell 提示符渲染器
開發人員在使用命令行工具時,經常需要一個簡潔、美觀且功能強大的提示符。Oh-My-Posh 正是爲滿足這一需求而生的一個項目。作爲一個跨平臺和跨 Shell 的提示符渲染器,Oh-My-Posh 以其高定製性和低延遲性脫穎而出。本文將深入探討 Oh-My-Posh 的功能,包括其安裝、配置、使用及其在不同操作系統和 Shell 中的表現。什麼是 Oh-My-Posh?————— ⌘ Read more
深入理解 Linux 內核之 HVO-HugeTLB Vmemmap Optimization-
開場白環境: 處理器架構:arm64 內核源碼:linux-6.6.29 ubuntu 版本:20.04.1 代碼閱讀工具:vim+ctags+cscope 本文主要介紹內存管理中的 HVO(HugeTLB Vmemmap Optimization)特性,通過 HVO 可以節省管理 HugeTLB 頁面元數據(struct page)的 ⌘ Read more
使用 Criterion 對 Rust 代碼進行基準測試
在軟件開發領域,性能是最重要的。作爲開發人員,我們努力編寫的代碼不僅能解決問題,而且能高效、快速地解決問題。在使用 Rust 時尤其如此,Rust 是一種以其高性能而聞名的語言。基準測試,即測試軟件以衡量其性能,是軟件開發的一個關鍵方面。它使我們能夠了解代碼的執行情況以及可以在哪裏進行優化。在 Rust 的世界裏,有一種工具能夠達到這個目的:Criterion。Criterion 是 Rust 中 ⌘ Read more
認識代數數據類型 ADTs:Rust 枚舉類型很強
在學習 Rust 之前,我還真不知道代數數據類型(ADTs)這個概念。從 Rust 文檔中大概瞭解它包含 “求和類型” 和“乘積類型”,看似很簡單,但我打算展開學習一下代數數據類型。先看一段很教科書的定義:抽象數據類型(Abstract Data Types,簡稱 ADTs)是計算機科學中的一種概念,用於在不關心數據表示的具體細節的前提下,定義數據的方法。ADTs 常由 “構造” 或“複合”兩種基 ⌘ Read more
快速喫透 Golang Channels 使用技巧
Golang 可以通過啓動 goroutines 來併發執行任務。它們可以通過一種名爲 “通道” 的通信媒介相互通信。話不多說,下面我列舉了幾種不同情況下 channel 的使用以及其適用條件,最後總結出一張 channel table,能夠幫助你快速喫透 channel 的所有要點。Let’t go!Nil Channels如果你像創建普通變量一樣創建一個通道,通道將被初始化爲零值。這裏要提到的 ⌘ Read more
如何將圖片編碼成 base64?
圖片的 base64 編碼在多種上下文中都很有用。當需要通過旨在處理文本數據的媒體存儲或傳輸圖片時,它通常會被使用,比如嵌入到網頁或者通過 API 上傳圖片。這篇文章將介紹如何使用 Go 標準庫得到任何圖片的 base64 編碼的值。在 Go 中將圖片轉換爲其 base64 表示很容易。所有你需要做的是將文件讀取爲字節 slice 並使用包 encoding/base64 對其進行編碼。處理本地圖 ⌘ Read more