# 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=7810
# next = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog/twtxt.txt&offset=7910
# prev = https://watcher.sour.is?uri=https://feeds.twtxt.net/yue-fang-readfog/twtxt.txt&offset=7710
Twitter 如何優化處理 4000 億事件的流程**
引言Twitter 實時處理大約 4000 億事件,並每天生成一個 PB(petabyte)的數據。Twitter 從多種事件源消費數據,例如分佈式數據庫、Kafka、Twitter 事件總線等。Twitter 訂閱源中的事件調用示例在這篇文章中,我們將嘗試理解:1.Twitter 過去是如何處理事件的,以及那種方法存在哪些問題?2. 是什麼業務和客戶影響促使 Twitter 遷移到新架構?3. ⌘ Read more
用 Go 語言 - Redis 實現分佈式鎖,我還是第一次**
一 爲什麼需要分佈式鎖 共享資源訪問控制: 當多個節點需要同時訪問共享資源時,爲了避免併發寫入導致數據不一致,需要使用分佈式鎖確保同時只有一個節點可以寫入或修改共享資源。避免重複執行: 在分佈式系統中,某些操作可能需要在整個系統中只執行一次,比如定時任務、數據初始化等。爲了避免多個節點同時執行這些操作,需要使用分佈式鎖來確保只有一個節點可以執行。任務協調: 在分佈式任務隊列中,多個節點競爭執行任 ⌘ Read more
藉助 CSS has 實現打開彈窗時自動鎖定滾動**
在平時開發中,經常會遇到這樣一種問題:當打開一個彈窗時,後面的頁面是可以滾動的,演示如下那麼,該如何鎖定頁面的滾動呢?一、傳統的實現方式---------傳統的方式其實也不復雜,就是在打開彈窗時阻止滾動就行了,通常是改變overflow屬性const openModal = () = { document.body.style.overflow = 'hidden'}const closeMo ⌘ Read more
=
Go 一行代碼測量函數的執行時間**
Golang Tips 是翻譯的 Phuong Le @func25[1] 陸陸續續的發表的推文,目前已經發表 70 + 了。我徵得 Phuong Le 的同意後,會逐步把這些推翻翻譯過來,發佈到公衆號上。因爲是推文,可能原作者的內容比較簡單,比如第一個 tip 就一張圖片,我會相應的進行擴充,豐富其內容。 後續也會在 github 建立一個項目,大家都可以參與進行翻譯。我們可以通過 defe ⌘ Read more
如何設計一個無懈可擊的緩存系統?**
大家好,我是 Tom 哥。今天我們通過緩存與數據庫之間的一致性這個老生常談的問題來切入,聊聊如何合理的設計一個緩存系統?如今互聯網應用,無論是 web 還是 app,都基本遵循 "前端 - 後端 - 數據庫" 的架構模型當業務處於起步階段,流量比較小的時候,上述能夠支撐;但隨着業務的擴張,用戶數和流量越來越大,也就需要整個架構支撐起更大的併發量,但我們服務器上的資源總是有限的,當每天流量達到高峯時 ⌘ Read more
常見 Java 代碼缺陷及規避方式**
在日常開發過程中,我們會碰到各種各樣的代碼缺陷或者 Bug,比如 NPE、 線程安全問題、異常處理等。這篇文章總結了一些常見的問題及應對方案,希望能幫助到大家。問題列表空指針異常NPE 或許是編程語言中最常見的問題,被 Null 的發明者託尼 · 霍爾(Tony Hoare)稱之爲十億美元的錯誤。在 Java 中並沒有內置的處理 Null 值的語法,但仍然存在一些相對優雅的方式能夠幫助我們的規避 ⌘ Read more
js-pytorch:開啓前端 - AI 新世界**
嗨, 大家好, 我是 徐小夕。最近在 github 上發現一款非常有意思的框架—— js-pytorch。它可以讓前端輕鬆使用 javascript 來運行深度學習框架。作爲一名資深前端技術玩家, 今天就和大家分享一下這款框架。目前人工智能領域中,深度學習技術正以驚人的速度發展。PyTorch 就是其中一個備受關注的深度學習框架。而 js-pytorch 將 PyTorch 的強大功能帶入了 Ja ⌘ Read more
專爲 Go 語言設計的函數式編程庫 fp-go
背景介紹在編程領域中,函數式編程是一種編程範式,它將計算視爲函數的評估,避免改變狀態和可變數據。然而,Go 語言並沒有內建對函數式編程的支持,這使得在 Go 語言中實現函數式編程變得困難。今天要給大家推薦一個 GitHub 開源項目 IBM/fp-go,該項目在 GitHub 有超過 1.1k Star,用一句話介紹該項目就是:“functional programming library for ⌘ Read more
Otter:探索 Go 語言中高效無鎖緩存庫的實現與應用**
在當今軟件開發的背景下,性能優化已經成爲了一個不可或缺的部分。尤其是在緩存技術這一塊,優秀的緩存機制不僅能大幅提高應用的響應速度,更能夠有效減輕後端系統的壓力。今天,我們要深入探究的是 Otter——這是一個針對 Go 語言設計的高性能無鎖緩存庫。接下來,我們將詳細介紹 Otter 的設計原理、特性與使用方法,並通過實例演示如何在 Go 項目中集成 Otter。Otter 緩存庫概述------- ⌘ Read more
Linux 中 sh 和 bash 有什麼區別?**
寫在前面-------本文主要介紹:什麼是 shell、當前系統默認 shell / 可用 shell 列表,以及 sh 與 bash 之間的區別。什麼是 shell?-------------在計算機科學中,shell 俗稱殼(用來區別於核),是指 “爲使用者提供操作界面” 的軟件(command interpreter,命令解析器)。它類似於 DOS 下的 COMMAND.COM 和後來的 c ⌘ Read more
5 種主流注冊中心技術選型,哪個最香?**
講解 5 種常用的註冊中心,對比其流程和原理,無論是面試還是技術選型,都非常有幫助。對於註冊中心,在寫這篇文章前,我其實只對 ETCD 有比較深入的瞭解,但是對於 Zookeeper 和其它的註冊中心瞭解甚少,甚至都沒有考慮過 ETCD 和 Zookeeper 是否適合作爲註冊中心。經過近 2 周的學習,原來註冊中心除了 ETCD 和 Zookeeper,常用的還有 Eureka、Nacos、 ⌘ Read more
VUE 中常用的 4 種高級特性!**
作者:阿虎兒 https://juejin.cn/post/7225921305597820985provide/injectprovide/inject 是 Vue.js 中用於跨組件傳遞數據的一種高級技術,它可以將數據注入到一個組件中,然後讓它的所有子孫組件都可以訪問到這個數據。通常情況下,我們在父組件中使用 provide 來提供數據,然後在子孫組件中使用 inject 來注入這個 ⌘ Read more
看不懂來打我,vue3 如何將 template 編譯成 render 函數**
前言在之前的 通過 debug 搞清楚. vue 文件怎麼變成. js 文件 文章中我們講過了 vue 文件是如何編譯成 js 文件,通過那篇文章我們知道了,template 編譯爲 render 函數底層就是調用了@vue/compiler-sfc包暴露出來的compileTemplate函數。由於文章篇幅有限,我們沒有去深入探索compileTemplate函數是如何將 template 模塊 ⌘ Read more
DDIA:數據庫導出就變成了流**
我們已經對比了消息代理和數據庫的諸多方面。在傳統上,他們被認爲是兩個完全不同類別的系統,但在之前小節的分析我們看到,基於日誌的消息系統中成功地從數據庫中借鑑了許多經驗。其實,我們也可以有另外一條路,從消息系統中借鑑一些思想,應用到數據庫中。我們在之前提到過,事件(event)是對某個時間點發生的事情記錄。事件可以是一個用戶行爲(如,一次搜索),可以是傳感器數值,但其實也可以是寫入數據庫(write ⌘ Read more
JS 的 AI 時代來了**
近幾年,技術飛速發展,AI 正以前所未有的速度改變着我們的生活。而在這一浪潮中,JS 作爲前端開發的基石,也正在迎來其 AI 時代的新篇章。本文將分享幾個引領 JS 邁向 AI 時代的機器學習庫,探索這些庫的魅力,攜手迎接 JS 的 AI 時代吧!TensorFlow.js-------------TensorFlow.js 是由 Google TensorFlow 團隊開發的開源客戶端 Java ⌘ Read more
使用 gofn 和 pipe 助力 Golang 函數式編程**
今天要介紹的是兩個在函數式編程裏面很有用的 package,通過使用 gofn[1] 和 pipe[2] 庫讓 Go 的函數式編程更強大。Go 的函數式編程由於本質上,Go 並不像 Haskell 或 Erlang 那樣是純函數式語言,但這並不意味着我們不能應用函數式編程的概念來編寫簡潔、可讀和高效的代碼。這正是 gofn 和 pipe 發揮作用的地方。gofn 和 pipegofn:一個在 Go ⌘ Read more
深入理解併發和並行**
1 併發與並行爲什麼操作系統上可以同時運行多個程序而用戶感覺不出來?因爲操作系統營造出了可以同時運行多個程序的假象,通過調度進程以及快速切換 CPU 上下文,每個進程執行一會就停下來,切換到下個被調度到的進程上,這種切換速度非常快,人無法感知到,從而產生了多個任務同時運行的錯覺。併發(concurrent) 是指的在宏觀上多個程序或任務在同時運行,而在微觀上這些程序交替執行,可以提高系統的資源利用 ⌘ Read more
優化 Rust 構建的策略及與 GitHub Actions 合併**
爲什麼 Rust 的構建時間很慢?Rust 是一種高性能且對開發人員友好的編程語言,Rust 因其安全性、速度、併發性和可編程性而在編程界獲得了關注和讚譽。它也被證明是構建企業應用程序的絕佳選擇。與 C/C++ 等語言相比,Rust 對於項目來說更容易上手,因爲 C/C++ 不那麼內存安全,開發人員需要多年的經驗才能開始工作,因此 Rust 被證明是一個更好的選擇。近年來,它也是開發社區中最受歡迎 ⌘ Read more
JavaScript 命名約定最佳實踐**
在開發過程中,遵循標準的命名約定可以提高代碼的可讀性。下面就來看看 JavaScript 中命名約定的最佳實踐。1. 變量的命名約定JavaScript 變量名稱是區分大小寫的,大寫和小寫字母是不同的。比如:let DogName = 'Scooby-Doo';let dogName = 'Droopy';let DOGNAME = 'Odie';console.log(DogName);   / ⌘ Read more
宕機了,Redis 如何避免數據丟失?**
作者:MaccoyCookies 原文:https://juejin.cn/post/7193597571305046071前言------如果有人問你:"你會把 Redis 用在什麼業務場景下?"我想你大概率會說:"我會把它當作緩存使用,因爲它把後端數據庫中的數據存儲在內存中,然後直接從內存中讀取數據,響應速度會非常快。"沒錯,這確實是 Redis 的一個普遍使用場景,但是,這裏也有一 ⌘ Read more
看完就懂的 Hybrid 框架設計方案**
本篇文章探討 “基於 Webview,如何在 App 內實現帶離線包能力的 H5”。在當下這個主題似乎有些過時,但 H5 技術以其良好的跨端一致性,長期來看會佔據一席之地,希望整理一個較完整的方案,從基本的實現原理到業務具體應用,讓不瞭解的同學對 “離線 H5" 有一個較完整的視角。 01前言2009 年,PhoneGap 以 “橋接 Web 與 iPhone SDK 之間縫隙 “的理念橫空出世 ⌘ Read more
專業前端都這麼使用 console?**
console對於前端人員來講肯定都不陌生,相信大部分開發者都會使用console來進行調試,但它能做的絕不僅限於調試。最常見的控制檯方法---------作爲開發者,相信大家對下面 5 個最常見的 console 方法都不陌生控制檯打印結果:今天我要帶大家認識的是一些 console 的高級用法。首先,我們看一下 console 提供了哪些方法,在控制檯打印一下:在 Chrome 123 版本, ⌘ Read more
Redis 是怎麼從單體架構發展到分佈式緩存的?**
Redis 架構是如何一步一步發展到今天的樣子的?2010 年 - 單體 Redis Redis 1.0 於 2010 年發佈,當時的架構非常簡單。它通常用作業務應用程序的緩存。不過,Redis 將數據存儲在內存中。當我們重啓 Redis 時,我們將丟失所有數據,流量將直接導向數據庫。2013 - 持久性----------2013 年發佈的 Redis 2.8 解決了之前的限制。Redis 引 ⌘ Read more
Rust:深入瞭解線程池**
在某些情況下,你需要併發地執行許多短期任務。創建和銷燬執行這些任務線程的開銷可能會抑制程序的性能。解決這個問題的一個辦法是建立一個任務池,並在需要時將它們從這個任務池中取出。任務池的另一個優點是,可用線程的數量可以根據可用的計算資源進行調整,即處理器內核的數量或內存量。這些任務的約束之一是它們不是相互依賴的,也就是說,一個任務的結果不依賴於前一個任務的結果,或者下一個任務不應依賴於當前任務的結果。 ⌘ Read more
寫 html 頁面沒意思,來挑戰 chrome 插件開發**
谷歌瀏覽器插件開發是指開發可以在谷歌瀏覽器中運行的擴展程序,可以爲用戶提供額外的功能和定製化的體驗。谷歌瀏覽器插件通常由 HTML、CSS 和 JavaScript 組成,非常利於前端開發者。 開發者可以利用這些技術在瀏覽器中添加新的功能、修改現有功能或者與網頁進行交互。要開發谷歌瀏覽器插件,開發者通常需要創建一個包含 清單文件(manifest.json)、背景腳本(background sc ⌘ Read more
React 即將推出 Compiler,是時候告別 useMemo-useCallback 了!**
大家好,我是 ConardLi。 最近,React 團隊在他們的官方博客發表了一篇文章,介紹了從上個大版本發佈,到 2024 年 2 月團隊的一些工作內容。其中最讓我驚喜的就是 React Compiler 了。衆所周知,大家在介紹 React 的時候總會說它是一個重運行時的框架,因爲它本身在編譯時並不會做很多針對於渲染的優化動作。這讓開發者在開發階段擁有了很多的靈活性,React 給我們提供了 ⌘ Read more
Go 標準庫中的一個設計敗筆:哨兵錯誤**
大家好,我是煎魚。在 Go 的歷史發展中,總是有或多或少的坑。最近遇到一個跟錯誤類型定義和聲明使用有關的小坑。翻了一圈 Go 社區裏的爭論,發現又是一個暫時無法解決的未解之坑。今天分享給大家,平時開發時也可以給自己避避坑,以免有人亂用。快速背景----在 Go 裏有一種錯誤類型的定義,官方叫做哨兵錯誤(Sentinel errors):哨兵錯誤,常用於在程序中與全局變量的值對比。可以參考最常見的 ⌘ Read more
從 API 到 Agent:萬字長文洞悉 LangChain 工程化設計**
本文作者試着從工程角度去理解 LangChain 的設計和使用。大家可以將此文檔作爲 LangChain 的 “10 分鐘快速上手” 手冊,希望幫助需要的同學實現 AI 工程的 Bootstrap。我想做一個嘗試,看看能不能用盡量清晰的邏輯,給 “AI 外行人士”(當然,我也是)引入一下 LangChain,試着從工程角度去理解 LangChain 的設計和使用。同時大家也可以將此文檔作爲 Lan ⌘ Read more
HTTP 方法和使用場景大全**
HTTP(超文本傳輸協議)方法,也稱爲 HTTP 動詞,定義了可以對資源執行的操作。理解這些方法的使用對於 Web 開發至關重要,因爲它們促進了客戶端和服務器之間的交互。以下是最常用 HTTP 方法的概述:01 GET------用途:GET 方法請求特定資源的表示。它只檢索數據而不改變資源的狀態,使其成爲一個安全且冪等的方法。它主要用於獲取文檔或查詢數據。示例:瀏覽網站,平臺上搜索。02 POS ⌘ Read more
gRPC OTel 鏈路追蹤**
Open-Telemetry 的第三方軟件包合集 包括了多個社區中常用庫的 OpenTelemetry 支持。隨着 OpenTelemetry 的不斷迭代,相信整個鏈路追蹤的生態也會越發完善。gRPC 的鏈路追蹤----------採集 gRPC 的 trace 數據,推薦使用 otelgrpc 。安裝依賴。go get go.opentelemetry.io/contrib/instrument ⌘ Read more
Go 類型安全的 Pool
池(sync.Pool)是一組可單獨保存 (Set) 和檢索 (Get) 的臨時對象集合。存儲在池中的任何項都可能在任何時候自動移除而無需通知。如果池在移除項時持有該對象的唯一引用,那麼這個對象可能會被釋放掉。池能夠確保在多個 goroutine 同時訪問時的安全性。池的目的在於緩存已分配但未使用的對象以便後續複用,減輕垃圾收集器的壓力。也就是說池的功能是爲了重用對象,目的是減輕 GC 的壓力。類 ⌘ Read more
Web 安全 - 同事告訴我 JWT 是明文的---**
一天 “小張” 接到一個需求 “一旦用戶登陸認證成功之後,後續的請求可以攜帶一個令牌,無需再次身份認證”。這時 “小張” 諮詢了資深搬磚工程師 “小李”,憑藉多年的搬磚經驗,同事 “小李” 說到:HTTP 協議是無狀態的,在第一次登陸認證成功後,下一次請求時,服務器也不知道請求者的身份信息。通常有兩種實現方式:一種傳統的做法是在服務器上存儲用戶 session 信息,每次請求時攜帶 sessi ⌘ Read more
淺顯易懂 Linux 的啓動流程**
今天,一起探討操作系統的啓動流程。這個部分比較有意思。因爲在 BIOS 階段,計算機的行爲基本上被寫死了,程序員可以做的事情並不多;但是,一旦進入操作系統,程序員幾乎可以定製所有方面。所以,這個部分與程序員的關係更密切。我主要關心的是 Linux 操作系統,它是目前服務器端的主流操作系統。下面的內容針對的是 Debian 發行版,因爲我對其他發行版不夠熟悉。   1、加載內核    ------- ⌘ Read more
回調函數 -callback- 是什麼?一文理解回調函數-callback-**
一、什麼是回調函數1.1、回調函數的定義和基本概念回調函數是一種特殊的函數,它作爲參數傳遞給另一個函數,並在被調用函數執行完畢後被調用。回調函數通常用於事件處理、異步編程和處理各種操作系統和框架的 API。基本概念:回調:指被傳入到另一個函數的函數。 異步編程:指在代碼執行時不會阻塞程序運行的方式。 事件驅動:指程序的執行是由外部事件觸發而不是順序執行的方式。 1.2、回調函數的 ⌘ Read more
圖解 Linux 文件預讀原理**
概述--本文主要闡述內核 (linux-3.12) 的文件系統預讀設計和實現。所謂預讀,是指文件系統爲應用程序一次讀出比預期更多的文件內容並緩存在 page cache 中,這樣下一次讀請求到來時部分頁面直接從 page cache 讀取即可。當然,這個細節對應用程序透明,應用程序可能的感覺就是下次讀的速度會更快,當然這是好事。文中我們會通過設置幾個情境(順序讀、隨機讀、多線程交織讀)來分析預讀的 ⌘ Read more
分佈式系統 Consul 一致性實現即 Raft 日誌複製原理**
彭榮新,茄子科技老司機一枚,長期專注基礎架構領域,對中間件的的研發和治理以及穩定性保障有豐富的實踐經驗。背景 Consul 是一個非常強大的服務發現和配置管理工具,可以幫助您簡化服務管理流程,提高系統的可用性和可擴展性,是目前非常流行的服務發現和配置管理系統,支持高可用,可擴展,多數據中心的分佈式系統,是很多公司的基礎實施組件,這些架構的優點的背後是基於分佈式協議 raft 的實現,raft ⌘ Read more
Go HTTP 鏈路追蹤**
Open-Telemetry 的第三方軟件包合集 包括了多個社區中常用庫的 OpenTelemetry 支持。隨着 OpenTelemetry 的不斷迭代,相信整個鏈路追蹤的生態也會越發完善。基於 OTel 的 HTTP 鏈路追蹤-------------------基於 OTel 的 HTTP 客戶端和服務端鏈路追蹤實踐。客戶端實現 HTTP client 的鏈路追蹤。package maini ⌘ Read more
Golang 使用 Worker Pool 模式釋放併發性能**
我們都知道 Go 具有卓越的併發特性,Worker Pool pattern(工作池模式)是一種併發設計模式,它用於管理一組工作線程以執行任務。本文用一個例子深入講解如何使用 Worker Pool 模式提升程序的併發性能。拋出問題快速計算一個數字數組中每個數字的平方,並返回結果數組(該數組只包含從 1 到 150 的整數)。Pattern 1 : N routines for N numbers ⌘ Read more
Socket 系統調用深入研究 -TCP 協議的整個通信過程-**
內核態和用戶態-----------通俗的說,用戶空間就是運行着用戶編寫的應用程序的虛擬內存空間。在 32 位的操作系統中,每個進程都有 4GB 獨立的虛擬內存空間,而 0 ~ 3GB 的虛擬內存空間就是用戶空間 。內核空間就是運行着操作系統代碼的虛擬內存空間,而 3GB ~ 4GB 的虛擬內存空間就是內核空間。在 Linux 中(當然 windows 下也有用戶態和內核態的區分,不過一般說用戶態 ⌘ Read more
爲什麼 Rust 適用於遊戲開發?**
Rust 是一種強調內存安全性、高性能和併發性的現代系統編程語言。由於其性能和安全特性,它最近作爲一種非常適合遊戲開發的語言而受到歡迎。由於性能在遊戲開發中至關重要,Rust 的所有權和借用機制確保內存得到適當有效的管理。現代遊戲必須在各種平臺上運行,Rust 的併發特性可以使得代碼從多核 cpu 中獲益。此外,Rust 非常適合創建遊戲引擎,即處理遊戲基本功能的軟件框架,包括用戶輸入、物理模擬和 ⌘ Read more
通過 Zig,學習 C-- 元編程**
儘管 Zig 社區宣稱 Zig 語言是一個更好的 C (better C),但是我個人在學習 Zig 語言時經常會 “觸類旁通”C++。在這裏列舉一些例子來說明我的一些體會,可能會有一些不正確的地方,歡迎批評指正。“元能力” vs “元類型”在我看來,C++ 的增強方式是希望賦予語言一種 “元能力”,能夠讓人重新發明新的類型,使得使用 C++ 的程序員使用自定義的類型,進行一種類似於 “領域內語言 ⌘ Read more
將 Node 應用 Express-js 部署到 Vercel
前言--之前有期視頻介紹過,在 Vercel 上可以免費部署很多應用,包括 Next.js、Nuxt、Remix。除了 Node.js 甚至還支持其他語言,包括 Go、 Python、Ruby,但在 Node.js 中有一個老牌的框架 Express.js,很多應用都是通過 Express.js 創建的,本文將記錄下,如何將 Express.js 應用部署到 Vercel,以及它在 serverl ⌘ Read more
Golang 如何動態解析 JSON
Go 以其簡潔高效而聞名,提供了強大的工具用於處理 JSON 數據。雖然基於結構體的解析很常見,但在某些情況下,JSON 結構是動態的或未知的。在本文章中,我們將探討如何使用 Go 語言中的空接口進行動態 JSON 解析,從而實現靈活性,無需預定義結構體。什麼是 Dynamic JSON Parsing動態 JSON 解析指的是能夠處理具有不同結構的 JSON 數據,適應不同模式而無需嚴格定義。在 ⌘ Read more
使用 Golang 構建你的 LLM API
大語言模型,像 ChatGPT, Llama 等已經席捲全球,從上圖的數據可以看出,ChatGPT 花了 5 天時間就達到了 100 萬用戶。而 Netflix 則花了近 4 年的時間。本文將使用 Gin 和 Langchain 教你快速構建一套 LLM API。GinGin[1] 是一個用於使用 GoLang 構建 API 的現代、快速的 Web 框架。它被設計爲易於使用、高效且性能出色,利用了 ⌘ Read more
一文掌握 Golang Empty Struct 的所有用法**
在 Go 語言中,空結構體被用作佔位符,當我們想要創建一個不攜帶任何數據的類型時。這個概念經常被用來表示特定的行爲,或者將該類型用作類似集合的數據結構。下面是個使用空結構體的例子:package mainimport ( "fmt" "unsafe")// EmptyStruct is an empty struct typetype EmptyStruct struct{}func main() ⌘ Read more
僅需 10 秒,三張圖讓你瞭解 async 和 defer 的區別**
原文:https://dev.to/fidalmathew/async-vs-defer-in-javascript-which-is-better-26gm 作者:Fidal Mathew 譯者:ChatGPT 4 Turbo大家好!希望你們一切安好。這篇文章將探討一個有趣的 Javascript 話題。async 和 defer 是在 HTML 文檔中包含外部 JavaScri ⌘ Read more
【故障現場】MQ 消息亂序造成的業務事故**
問題 & 分析1.1. 案例-------深夜,小艾接到了一通突如其來的電話,是物流系統的負責人曹工焦急的聲音。他火急火燎地反饋了一個嚴重的問題——大批用戶投訴物流信息異常,訂單狀態與實際情況不符,用戶已完成支付,但物流單還是待支付狀態。小艾立刻警覺起來,意識到這個問題可能對公司的業務以及用戶體驗造成重大影響。她一邊安撫曹工的情緒,一邊迅速啓動緊急響應機制,通知 QA 對線上變更進行回滾。隨着回滾 ⌘ Read more
開源版「抖音」,火了!**
大家好,我是小 F~今天給大家介紹一個 douyin 開源項目。 douyin 是一個模仿抖音的移動端短視頻開源項目,它基於 Vue、Vite 實現。使用了最新的 Vue 全家桶技術棧,接口數據通過 axios-mock-adapter 模擬。項目地址:https://github.com/zyronon/douyin效果截圖----運行項目----本項目是基於 Vue 開發的,需要 node ⌘ Read more
~
提示工程中的 10 個設計模式**
我們可以將提示詞定義爲向大型語言模型 (Large Language Model,LLM) 提供的一個查詢或一組指令,這些指令隨後使模型能夠維持一定程度的自定義或增強,以改進其功能並影響其輸出。我們可以通過提供細節、規則和指導來引出更有針對性的輸出,從而使提示詞更加具體。提示詞越具體,輸出就越精確,關於提示工程的更多信息可以參考《解讀提示工程(Prompt Engineering)》以及《Agen ⌘ Read more
Flutter 構建自動化探索與實踐**
前言 在 2022 年年底,我從 0 到 1 主導負責公司的 “商品開發” 移動端項目,並在 2023 年中旬完成了該項目的第一期的需求開發。期間從 Flutter 基礎學起,並在較短時間內完成相關業務功能開發,同時搭建起該項目的整個自動化構建流程,支持一鍵分發 ipa 與 apk,在這個過程中,我學到了 Flutter 的相關知識,同時也瞭解了整個應用程序的分發流程。在此,感謝在這條路上幫助我 ⌘ Read more
系統設計 - 點餐系統服務生態的完整剖析**
在線點餐系統的必要性在線點餐系統不僅僅是爲了滿足飢餓感;它已經成爲我們現代生活方式中不可或缺的一部分。在一個快節奏的世界中,它作爲連接餐廳美食與消費者多樣化偏好的橋樑。除了顯而易見的便利性外,該系統將普通的餐食轉化爲難忘的體驗,提供了豐富的選擇、個性化的互動和無縫的交易。在線點餐系統的藍圖爲了理解在線點餐系統內各種服務的錯綜複雜關係,讓我們勾勒一個草圖,概述各個組件及其相應角色之間的共生關係:餐廳 ⌘ Read more
架構設計:千萬級流量下的數據強依賴降級**
1 背景互聯網場景下,我們經常會面臨一個產品流量從初創時期的小流量到全盛大流量的過程。 這時候,原本的架構設計就顯得很不合理,變成你追求服務穩定性阻礙。 然而這一切並不一定是你的架構能力的問題,而是在小流量場景下,不能過高的去評估容量和架構冗餘性,避免造成不必要的資源和維護人力的浪費。 能做的是爲以後的架構演進提供可擴展性準備,讓原本強依賴數據存儲層的風險可以實現逐層降級。2 強依賴降級過程 ⌘ Read more
Golang 如何實現訪問私有成員**
在 Go 語言編程中,我們都知道首字母小寫的成員表明它是不公開的,即私有的。一般情況下,我們無法直接訪問一個包中的私有成員。然而,Go 語言提供了一些不尋常的手段允許我們在特定情況下繞過這一限制。在這篇文章中,我們將深入探討這些技巧,並通過詳細的說明和代碼示例來展示它們的使用方法。但在此必須提醒:這些方法很少用於生產環境,因爲它們破壞了封裝性,很容易帶來難以發現的 bug 和安全問題。在下文,我們 ⌘ Read more
Rust Web 技術棧**
web 開發領域在不斷髮展,似乎每天都有新的技術和框架出現。但是在這個不斷變化的場景中,有一種語言已經穩步崛起:Rust。Rust 提供了一種獨特的功能組合,滿足了現代 web 開發的需求,使其成爲構建未來 web 應用程序的一個引人注目的選擇。那麼,究竟是什麼讓 Rust 對 web 開發如此特別呢?rust 驅動的技術棧的關鍵組件是什麼?讓我們深入探索 Rust web 開發的框架和庫以及多樣 ⌘ Read more
爲什麼有 HTTPS?因爲 HTTP 不安全!HTTPS 如何實現安全通信?**
爲什麼有 HTTPS?因爲 HTTP 不安全! 現在的互聯網已經不再是 “田園時代”,“黑暗森林” 已經到來。上網的記錄會被輕易截獲,網站是否真實也無法驗證,黑客可以僞裝成銀行網站,盜取真實姓名、密碼、銀行卡等敏感信息,威脅人身安全和財產安全。上網的時候必須步步爲營、處處小心,否則就會被不知道埋伏在哪裏的黑客所 “獵殺”。HTTPS 如何實現安全通信?如何構建出固若金湯的網絡城堡?主要涉及的知識點 ⌘ Read more
別再用 offset 和 limit 分頁了,性能太差!**
本文主要去理解 offset 爲什麼會在大數據量下的查詢帶來性能問題?思考完後,可以在思考下,如果分庫分表,你會這麼去分頁呢? ----------------------------------------------------------------------不需要擔心數據庫性能優化問題的日子已經一去不復返了。隨着時代的進步,隨着野心勃勃的企業想要變成下一個 Facebook,隨着爲機器 ⌘ Read more
10w qps 高併發,如何防止重複下單?**
基礎知識:電商訂單支付核心流程---------------首先,來看看 訂單支付的業務流程和交互流程。圖解:訂單支付的業務流程和交互流程結合下圖來看看 訂單支付的業務流程和交互流程。訂單支付流程, 分爲 大致 的 6 個步驟 :1. 下單 / 結算:下單作爲支付的入口,但並非起點,支付相關的金額等信息全部來至結算,此時訂單處於 未支付 狀態。2. 申請支付:用戶開始申請支付,客戶端調用支付服務, ⌘ Read more
自己動手寫數據庫: 實現基於靜態哈希的索引**
數據庫設計中有一項至關重要的技術難點,那就是給定特定條件進行查詢時,我們需要保證速度儘可能快。假設我們有一個 STUDENT 表,表中包含學生名字,年齡,專業等字段,當我們要查詢給定年齡數值的記錄,如果我們能把所有記錄以年齡字段排序,那麼通過二分查找,我們就能快速定位滿足條件的記錄。如果表中包含 N=1,000,000 條記錄,通過二分查找就能通過大概 logN = 20 次即可,但是要遍歷所有記 ⌘ Read more
Linux 性能優化 - 磁盤 I-O 優化**
文件系統-----------1.1. 文件系統工作原理文件系統是在磁盤的基礎上,提供了一個用來管理文件的樹狀結構。1.1.1. 索引節點和目錄項在 Linux 中一切皆文件 , 文件系統, 本身是對存儲設備上的文件,進行組織管理的機制爲了方便管理,Linux 文件系統爲每個文件都分配兩個數據結構, 索引節點(index node) 和 目錄項(directory entry) 。它們主要用來記錄 ⌘ Read more
一文搞懂七種基本的 GC 垃圾回收算法**
本文整理了七種常見 GC 算法的基本原理,包括 GC 標記 - 清除法、引用計數法、GC 標記 - 複製算法、GC 標記 - 壓縮算法、保守式 GC、分代垃圾回收、增量式垃圾回收 (三色標記法),可以作爲學習 GC 知識的框架。 本文主要是中村成洋、相川光寫的《垃圾回收的算法與實現》一書的讀書筆記,沒有輸出的學習就是一盤散沙。我們要學習 GC 就要系統性地學,形成自己的知識框架,後面再學習其他的 ⌘ Read more
機器學習最優化算法(全面總結)**
導言 對於幾乎所有機器學習算法,無論是有監督學習、無監督學習,還是強化學習,最後一般都歸結爲求解最優化問題。因此,最優化方法在機器學習算法的推導與實現中佔據中心地位。在這篇文章中,小編將對機器學習中所使用的優化算法做一個全面的總結,並理清它們直接的脈絡關係,幫你從全局的高度來理解這一部分知識。 機器學習要求解的數學模型 幾乎所有的機器學習算法最後都歸結爲求一個目標函數的極值,即最優化問題,例 ⌘ Read more
掌握 JavaScript:多種方法生成二維數組**
我經常在面試中問候:你能用 JavaScript 生成一個二維數組嗎?這個問題看似簡單,實際上卻能揭示出面試者對 JavaScript 的熟練程度。就像茴字有多種寫法一樣,生成二維數組也有多種方法。今天,就讓我們一起來探索這個問題背後的答案,揭開生成二維數組的多種祕密。掌握不同的方法不僅能讓我們在面對不同的場景時更加得心應手,還能在面試中展示我們對 JavaScript 的深入理解。畢竟,在編程世 ⌘ Read more
單片機 main 函數結束去哪兒了?**
正常的程序,都不會跳出 main,但是,如果跳出了 main 函數,程序到底去哪兒了,你有相關這個問題嗎?一、問題提出今天在單片機 led 模塊定義函數中看到一個有趣的問題。提問者在進行基本的 C51 編程實驗,編寫了一個簡單的 C51 程序如下:include REGX51.Hvoid test(num) {    switch(num) {        case 1: P20=0; P21= ⌘ Read more
Bun 1-1 發佈:正式支持 Windows;兼容 Node;添加大量新 API
Bun 是一個快速、全能的工具包,用於運行、構建、測試和調試 JavaScript 和 TypeScript,從單個腳本到全棧應用程序。感覺 Bun 就像一個全家桶,什麼都可以乾點。今天 Bun 1.1 發佈,其中一個大亮點是開始正式支持 Windows,還包括兼容 Node.js 和添加大量新 API。Windows 支持----------在 Windows 上安裝 Bun,請使用以下命令 ⌘ Read more
在 PostgreSQL 中強制執行連接順序**
作者Hans-Jürgen Schönig工程師譯者簡介 王志斌PostgreSQL 愛好者校對者簡介 吳偉略CET 中電技術研發工程師,PostgreSQL 愛好者在布拉格舉行的 pgconfeu23 是一個非常出色的活動,在這次活動之後,我決定以博文的形式與大家分享我所介紹的一些情況,或許能對其中的一些話題有所啓發。其中一個想法是 PostgreSQL 處理連接以及連接順序的方式。從內部看 ⌘ Read more
表設計的 18 條軍規**
前言--對於後端開發同學來說,訪問數據庫,是代碼中必不可少的一個環節。系統中收集到用戶的核心數據,爲了安全性,我們一般會存儲到數據庫,比如:mysql,oracle 等。後端開發的日常工作,需要不斷的建庫和建表,來滿足業務需求。通常情況下,建庫的頻率比建表要低很多,所以,我們這篇文章主要討論建表相關的內容。如果我們在建表的時候不注意細節,等後面系統上線之後,表的維護成本變得非常高,而且很容易踩坑。 ⌘ Read more
也來聊聊 Rust 的內部可變性**
“內部可變性”的概念講起來很有迷惑性,理論知識可能很容易將新手繞暈。先來通俗說一下它的用途。其實這東西的產生,是因爲 Rust 的規矩太多,有着嚴格的內存訪問限制。內部可變性是一種變通手段,將 “破例” 的行爲仍然約束在 Rust 可控的範圍。就是說,你想破例也要按我的規則來破例。我們都知道,Rust 的內存安全基於以下規則:給定對象 T,只能有以下情況之一:對該對象有多個不可變引用(&T)(也稱 ⌘ Read more
Rust 中的信號處理:Unix 信號 vs 信號服務器**
如果你正在運行一個服務器,假設服務器需要從磁盤讀取一些文件,比如證書或密鑰。證書經常會發生變化,因此你的服務器必須重新加載它們。如何告訴服務器重新加載這些文件?傳統的方法是使用 Unix 信號,你的服務器偵聽特定的信號,如 SIGUSR1(用戶定義的信號 #1) 或 SIGHUP(掛起信號),並且可以在接收到信號時執行你編寫的任何代碼。因此,你的服務器等待適當的信號,接收它,然後重新加載證書。這種 ⌘ Read more
用 Go 語言實現多協程文件上傳,斷點續傳,試試!**
網上很多文件基本都是多協程下載文件要麼就只有單協程的斷點續傳,這裏給大家寫一個支持有進度條的多協程下載文件,也支持斷點續傳。好了,直接看代碼就好了,小編已加上詳細的解釋與說明package mainimport ( "fmt" "io" "os" "regexp" "strconv" "sync" "github.com/qianlnk/pgbar")/\\* 需求:1. 多協程下載文件2.斷點續連\\* ⌘ Read more
使用 Go 語言打造強大的網絡掃描神器**
在這個信息安全意識日益提高的時代,網絡安全人員需要可靠、靈活且強大的工具來進行日常的網絡掃描和數據收集。在衆多開源項目中,Project Discovery 的 httpx 無疑是一顆璀璨的明星。httpx 是一款能夠執行大量 HTTP 請求的命令行工具,旨在對 Web 服務進行多功能且快速的掃描。它支持 HTTP/2, 支持進行方法、頭等多種格式的複雜查詢,還能檢測 Web 服務器的許多面向安全 ⌘ Read more
一文了解 containerd 中的鏡像加解密**
containerd 中的鏡像解密-----------------------OCI 鏡像規範中,一個鏡像是由多層鏡像層構成的,鏡像層可以通過加密機制來加密機密數據或代碼,以防止未經授權的訪問。如下圖所示。OCI 鏡像加密原理主要是在原來的 OCI 鏡像規範基礎上,添加了一種新的 mediaType,表示數據文件被加密;同時在 annotation 中添加具體加密相關信息。鏡像層沒加密前的原 ⌘ Read more
Threejs 地圖 3D 可視化**
作者:Defineee https://juejin.cn/post/7247027696822304827前言threejs 小練習,從頭實現如何加載地理數據,並將其映射到三維場景中的對象上。獲取數據在開始繪製圖形前,需要一份包含地理信息數據,我們可以從阿里雲提供的小工具獲取:http://datav.aliyun.com/portal/school/atlas/areaselectoRead more
React 服務器組件:引領下一代 Web 開發潮流**
原文:https://www.builder.io/blog/why-react-server-components 翻譯及潤色:童歐巴大家好,我是童歐巴。在過去十年中,React 及其生態系統經歷了不斷的發展。每一個版本都帶來了新概念、優化乃至範式的轉變,不斷推動着我們對於網頁開發可能性的認識邊界。React 服務器組件(RSC)是至今爲止繼 React Hooks 之後最重要的變革。然而, ⌘ Read more
遇到個 MySQL 索引長度限制的問題**
前言我只是創建個索引而已,沒想到還這些遇到個詭異的問題!😱😱話說你平時創建 mysql 時遇到過以下創建索引報錯的情況嗎?報錯提示如下Specified key was too long; max key length is 767 bytes//需要添加索引的字段的長度太長,超過了767字節 🚩什麼?索引長度限制?我從沒遇到過啊,MySQL 還會對索引鍵的長度有限制?是的,一般都不會遇到,不過 ⌘ Read more
抽絲剝繭:從 Linux 源碼探索 eBPF 的實現**
去年學習 eBPF,分享過 幾篇 eBPF 方面的學習筆記 [1],都是面向 eBPF 的應用。爲了準備下一篇文章,這次決定從 Linux 源碼入手,深入瞭解 eBPF 的工作原理。因此這篇又是一篇學習筆記,假如你對 eBPF 的工作原理也感興趣,不如跟隨我的腳步一起。文章中若有任何問題,請不吝賜教。這裏不會再對 eBPF 進行過多的介紹,可以參考我的另一篇 使用 eBPF 技術實現更快的網絡數據 ⌘ Read more
DIY 3 種分庫分表分片算法,自己寫的輪子才吊!**
大家好,我是小富~前言--本文是《ShardingSphere5.x 分庫分表原理與實戰》系列的第六篇,書接上文實現三種自定義分片算法。通過自定義算法,可以根據特定業務需求定製分片策略,以滿足不同場景下的性能、擴展性或數據處理需求。同時,可以優化分片算法以提升系統性能,規避數據傾斜等問題。在這裏,自定義分片算法的類型(Type)統一爲CLASSBASED,包含兩個屬性:strategy 表示分片策 ⌘ Read more
原理剖析: 一文搞懂 Kafka consumer 與 broker 交互機制與原理**
01   前言   AutoMQ 致力於構建下一代雲原生 Kafka 系統,解決過去 Kafka 的諸多痛點問題,引領 Kafka 走向雲原生時代。作爲國內 Kafka 生態的忠實擁護者,我們將持續爲 Kafka 技術愛好者帶來優質的 Kafka 技術內容分享,歡迎關注我們。今天給大家帶來的是 Kafka Consumer 與 Kafka Broker 之間的交互機制解析,並簡要介紹其背後的主要工 ⌘ Read more
如何設計一個排行榜?**
前言--大家好,我是田螺。最近有位星球粉絲問:田螺哥,如何設計一個排行榜?日常開發中,我們經常需要涉及設計排行榜的需求,如禮物排行榜、微信運動排行、王者榮耀段位排行榜等等。今天我帶大家聊聊,排行榜如何設計。數據庫的 order by-------------很多小夥伴,一提到排行榜,就想到數據庫的order by。其實這個思路是沒有錯的,我們假設用order by來實現一個簡單的微信運動步數排行榜 ⌘ Read more
Redis 怎樣保證數據安全?**
問題:Redis 默認是沒有設置密碼調研:Redis 默認沒有設置密碼是因爲它的設計目標是追求高性能和低延遲。當 Redis 配置文件中啓用密碼後,客戶端連接 Redis 時需要進行密碼驗證。這個驗證過程會增加 CPU 的負載,並可能導致鏈接響應時間變長,從而影響整體系統性能。特別是在處理大量併發連接時,密碼驗證可能會成爲系統的瓶頸。此外,如果 Redis 和客戶端位於不同的機器上,並且兩者之間的 ⌘ Read more
Go 語言中怎麼使用依賴注入?**
01 介紹在 Go 語言項目開發中,我們處理組件層級之間的依賴關係時,通常我們會先在依賴層級的代碼中實例化被依賴層級,然後調用它的方法,即依賴方需要主動獲取被依賴方。但是,當被依賴層級的代碼發生變化時,依賴層級的代碼也需要修改,耦合性比較高,代碼不方便擴展。所謂依賴注入,即依賴方不再需要主動獲取被依賴方,而是被依賴方主動傳遞給依賴方。本文我們介紹 Go 語言怎麼使用依賴注入。02 Go 語言使用依 ⌘ Read more
3 種發佈策略 - 基於 API 的基礎架構**
部署與發佈在決定發佈策略之前,我們必須區分兩個重要概念:部署和發佈。部署涉及將功能完全推進生產環境,因爲您現在在系統中運行了一個進程。儘管已經部署,但新功能並未通過與生產系統的交互活躍或執行。有各種方法可以實現此分離。發佈涉及以受控的方式激活新功能,從而允許您控制引入新功能的風險。Thoughtworks Technology Radar 對部署和發佈之間的區別有很好的解釋: 對於許多組織來說, ⌘ Read more
Zig 中的類型對齊**
在 Zig 中,每種類型都有一個對齊方式,當從內存加載或向內存存儲該類型的值時,內存地址必須能被這個數平均整除。可以使用 @alignOf 查找任何類型的對齊方式。比如 @alignOf(u32) 會返回 4。對齊取決於 CPU 架構,但始終是 2 的冪次,且小於 1 << 29。在 Zig 中,指針類型有一個對齊值。如果該值等於底層類型的對齊方式,則可以從類型中省略:const std = @i ⌘ Read more
萬字詳解,帶你徹底掌握 WebSocket 用法(至尊典藏版)**
一、  簡介------1.1 什麼是 WebSocketWebSocket 是一種協議,用於在 Web 應用程序和服務器之間建立實時、雙向的通信連接。它通過一個單一的 TCP 連接提供了持久化連接,這使得 Web 應用程序可以更加實時地傳遞數據。WebSocket 協議最初由 W3C 開發,並於 2011 年成爲標準。1.2 WebSocket 的優勢和劣勢WebSocket 的優勢包括:實時性 ⌘ Read more
案例:用 PostgreSQL 實現可擴展模糊搜索**
要說時下最流行、最優雅、功能最強大的數據庫必然離不了 PostgreSQL,很多企業將其基礎架構的數據庫都遷移成了 PostgreSQL。本文我們就學習一個實踐案例,使用 PostgreSQL 構建起全新的支撐搜索系統,實現快速模糊搜索,即時呈現結果。概述在 Levels.fyi 是一個在線招聘網站。其架構中要求可以實現處理月度千萬搜索,並且 p99 的查詢性能的目標不高於百分之二秒(20ms)。 ⌘ Read more
分佈式系統模式 - Write-Ahead Log
在分佈式系統中,節點之間複製數據對於確保用戶服務連續性至關重要。正如 CAP 定理所總結的,根據在故障情況下數據一致性是否關鍵,或者是否優先考慮可用性,需要做出設計選擇。考慮 CP 的情況,有一種稱爲狀態機複製的技術可以實現容錯性,同時也能保證強一致性。在狀態機複製中,諸如鍵值存儲之類的存儲服務在多臺服務器上進行復制,並且用戶輸入按照相同的順序在每臺服務器上執行。其中的關鍵實現技術是在多臺服務器上 ⌘ Read more
WASM 與 Rust:革命性的組合**
WebAssembly (Wasm) 和 Rust 已經成爲一個強大的組合,改變了軟件工程的面貌。Wasm 是一種二進制指令格式,可以在 web 瀏覽器上高性能的執行,爲 web 應用程序提供接近本機的速度。Rust 與 Wasm 的無縫集成,可以專注於性能和內存安全,這樣就創建了一個強大的組合。WebAssembly 是一個底層虛擬機,運行用 C、C++ 和 Rust 等語言編寫的代碼。它爲在 ⌘ Read more
如何使用 Router 爲你頁面帶來更快的加載速度**
引言React-Router 在 6.4 版本中 Release 了一系列 loaderFunction、defer 等 Data Apis,將數據獲取和頁面渲染進行分離從而帶來更好的用戶體驗。今天這篇文章就來和大家一起來探索 Data Apis 是如何爲我們的頁面帶來更好的用戶體驗,Why is the data apis better?通常在以往的頁面渲染中,無論是服務端渲染還是客戶端渲染都無 ⌘ Read more
十年前的微信消息收發架構長啥樣?**
2023 年,微信及 WeChat 的 DAU(月活用戶)達到 13.4 億,微信已經是很多人工作、生活中不可或缺的一個環節。從 2011 年 1 月 21 日上線至今,微信已經走過了 13 個年頭,其背後的技術基座與架構也發生了巨大的變化。 這些變化背後,所折射的也正是中國互聯網高速發展的黃金年代。騰訊雲開發者社區特別策劃了「十年前的技術」系列,帶大家回顧那些明星項目背後最初的技術架構。好的架 ⌘ Read more
Vite 的實現原理,確實很巧妙**
vite 是新興的構建工具,它相比 webpack 最大的特點就是快。那它是如何做到這麼快的呢?因爲 vite 在開發環境並不做打包。我們創建個 vite 項目:npx create-vite安裝依賴,然後把服務跑起來:npm installnpm run dev瀏覽器訪問下:本地是 main.tsx 引入了 App.tsx,並且還有 react 和 react-dom/client 的依賴:用 ⌘ Read more
深入理解 Go 併發,靈活的 goroutine 模型與調度策略**
在go中,協程co-routine被改爲goroutine,一個goroutine只佔幾 kb,因此可以有大量的goroutine存在,另一方面goroutine 的調度器非常靈活,本文給大家介紹下Go併發的方法之goroutine模型與調度策略,感興趣的朋友一起看看吧單進程操作系統早期的單進程操作系統,可以理解爲只有一個時間軸,CPU 順序執行每一個進程 / 線程,這種順序執行的方式,CPU 同 ⌘ Read more
Zig defer 慣用法**
原文地址:Zig defer Patterns[1]裏面講述了 defer 除了做資源回收外,其他的一些慣用法,裏面有幾個有趣的點。第一點是這個:errdefer comptime unreachable文中稱這個是 Zig 的巔峯用法😅, errdefer unreachable 還比較好理解,即在執行出錯時,執行 unreachable ,那加上 comptime 呢?其實這是阻止 Zig ⌘ Read more
最具研讀價值的 Go 源碼之一:context 包**
前言你瞭解 Context 中的回溯鏈和樹結構嗎?想知道 Context 如何觸發級聯取消嗎?本文將換個角度聊一聊 golang 中的 context,讓你真正理解什麼是 Context。context 包中的代碼雖然只有 600 多行,但已經成爲了併發控制、超時控制的標準做法,可以說是真正的短小而精悍,是十分值得研讀的 Go 源碼之一。本文首先從整體的視角解析了 context 的主要接口和函數 ⌘ Read more
3 個超酷的 Node-js 新功能!**
介紹下 Node.js 近期更新的 3 個功能,每個都很實用哦!自帶熱更新--------開發模式下,每次代碼的修改我們期望無需重啓代碼即可看到最新的變化,nodemon 模塊在這個場景已經是標配功能了。有時只是寫一個簡單的腳本,做些測試或其它場景可能不太需要第三方模塊,此時 Node.js “自帶熱更新” 功能就再合適不過了!一個 --watch 標誌搞定這個場景。該標誌首次添加於 Node.j ⌘ Read more
GitHub WebHook 使用教程**
什麼是 WebHook-----------WebHook 直譯是網絡鉤子,可以把 WebHook 看做一種通知方式,只要發生關注的事件,就會發送通知到我們指定的 Web 服務。使用 WebHook 可以讓我們在關注的事件發生時收到通知,而不是不斷輪訓 API 確認事件是否發生,GitHub 允許我們配置 WebHook ,它允許我們配置某個倉庫發生某個事件時,通知指定的外部服務。比如當指定倉庫有 ⌘ Read more
微服務架構下的 9 大經典隔離策略**
01前言單體應用中,一個組件的故障往往會拖垮整個系統。而微服務架構的一個好處便在於更好的容錯性——微服務之間可以實現更好的故障隔離,單個服務內的內存泄露等故障不容易影響其他服務。但微服務架構由於服務數變多也帶來了複雜度的問題,由此引來了經典的服務治理問題,這也是許多程序員走上架構師方向的必由之路。微服務中的隔離策略,便是其中的關鍵,本文將詳解 9 大隔離策略的具體做法,爲你的系統可用性添磚加瓦。 ⌘ Read more
Rust 的 5 個自動驗證工具**
自動驗證是一種有助於檢查程序是否滿足某些屬性的技術,例如內存安全性和避免在運行時錯誤。此外,自動驗證工具使你能夠驗證併發代碼的正確性,這很難手工測試。自動驗證對 Rust 特別重要,因爲它可以幫助確保正確使用 unsafe 的代碼。在這篇文章中,我們將討論五個最常用的 Rust 驗證工具,以及它們如何幫助你構建更可靠的軟件。1,cargo-fuzz我們將討論的第一個工具是 cargo-fuzz,它 ⌘ Read more
教你如何在 Linux 系統中查看系統日誌**
\\*大家好,我是中文妹。\\*Linux 系統提供了強大的日誌功能,可以記錄系統和應用程序的各種事件和錯誤信息。系統日誌對於故障排除和性能監控非常重要。一、使用命令行工具查看系統日誌使用 journalctl 命令查看系統日誌:journalctl 命令是 systemd 日誌管理器的客戶端工具,它可以查看 systemd 生成的日誌。通過以下命令可以查看所有日誌信息:journalctl這會列出所有日 ⌘ Read more
*
聊聊支付流程的設計與實現邏輯**
一、業務背景------通常在業務體系中,都會或多或少的涉及到支付相關的功能;對於一些經驗欠缺同學來說,最緊張的就是面對這類支付結算的邏輯,因爲流程中的任何細節問題,都可能引發對賬異常的情況;錯誤發生之後,再想去修復流程,花費的時間成本又是高昂的,還牽扯錯誤數據的調平問題,最終很可能引發亂賬算不清的結果,然後需要人工介入手動處理;在支付場景中,不但涉及諸多的複雜業務,結算規則,超長的流程,第三方對 ⌘ Read more
使用 Rust 實現 Windows 服務**
如果你需要在 Windows 下運行你的 Rust 應用,並希望你的應用以服務形式運行,那麼這篇文章可能幫助到你。 windows-service-rs 是一個爲管理和實現 Windows 服務提供便利的庫。 本節描述了實現作爲 Windows 服務運行的程序的步驟,要了解此類程序的完整源代碼,請查看 examples 文件夾。 每個 Windows 服務都必須實現一個服務入口函數 fn(a ⌘ Read more
POSTGRESQL 哈希索引性能**
作者簡介Laurenz Albecybertec 公司工程師譯者簡介 王志斌PostgreSQL 愛好者校對者簡介 崔鵬PostgreSQL 愛好者在 PostgreSQL 中有很多種索引類型,其中哈希索引是最廣泛被忽視的。最近有人問我一個關於哈希索引性能的問題,這讓我意識到了這一點。是時候探索一下這個鮮爲人知的 PostgreSQL 角落並進行一些基準測試了! 哈希索引的歷史------- ⌘ Read more