博客 / 列表

唐青楓 - C#.NET FluentValidation 全面解析:優雅實現對象驗證

簡介 FluentValidation 是一個基於“流式 API”(Fluent API)的 .NET 驗證框架,用於在應用層對模型(DTO、ViewModel、Entity 等)進行聲明式驗證。 核心優勢: 高可讀性:通過鏈式方法配置驗證規則,邏輯清晰; 可複用:將驗證代碼從業務邏輯中分離,易於單元測試; 豐富的內置規則:郵箱、長度、正則、多字段聯動、集合驗證

c# , .net

唐青楓 - C#.NET Configuration 全面解析:從多環境到強類型綁定實戰

簡介 ASP.NET Core 的配置系統旨在提供統一、靈活的方式來讀取應用程序設置。它具備以下特點: 支持多種配置源:JSON、XML、INI、環境變量、命令行、內存、用户機密、數據庫、自定義等; 層級合併與覆蓋:後添加的配置源會覆蓋前面的同名鍵; 鍵名稱統一:默認使用“冒號”分隔的層級鍵(如Logging:LogLevel:Default); 與DI 整合:通過IConfigurat

c# , .net

唐青楓 - C#.NET SqlKata 使用詳解:優雅構建動態 SQL 查詢

簡介 在複雜項目中,為了保持 SQL 靈活性與可讀性,開發者往往需要手寫大量拼接字符串或使用 ORMs 附帶的 LINQ,但兩者各有侷限:手寫拼接易出錯、難以維護;LINQ 在某些場景下生成的 SQL 不夠直觀或性能不佳。 SqlKata 是一款輕量級、數據庫無關的查詢構建器(Query Builder),提供—— 流式 API,鏈式調用拼裝 SQL 可切換編譯器,支

c# , .net

唐青楓 - C#.NET FluentSqlKata 全面解析:基於鏈式語法的動態 SQL 構建

簡介 在使用 SqlKata 構建 SQL 時,雖然其鏈式 API 強大靈活,但仍需通過字符串或匿名字段進行表與列的映射,缺乏對實體類型和字段的靜態檢查。FluentSqlKata 基於 SqlKata,提供了一套基於表達式的強類型查詢構建能力,能夠: 通過 Lambda 表達式指定實體與列,更安全、可重構 保留 SqlKata 的所有特性與多數據庫編譯器支持 在運行時動態構造 ORDER

c# , .net

唐青楓 - C#.NET ArrayPool 深入解析:高性能內存池的實現與應用

簡介 ArrayPoolT 是 .NET 中一個高性能的內存管理工具,位於 System.Buffers 命名空間。它通過重用數組而非頻繁分配新數組,顯著減少 GC(垃圾回收)壓力,提升內存敏感型應用的性能。特別適合處理大型數組和臨時緩衝區。 工作原理圖解 背景與動機 GC 和大對象開銷:頻繁分配與釋放大數組(特別是超過 LOH 閾值 ~85 KB 的數組)會導致大量垃圾回收壓力和內存碎片化

c# , .net

唐青楓 - C#.NET NCrontab 深入解析:輕量級 Cron 表達式解析器

簡介 NCrontab 是 .NET 平台下功能完備的 Cron 表達式解析與調度計算庫,用於處理類似 Unix Cron 的時間調度邏輯。它不依賴外部系統服務,純託管實現,是構建定時任務系統的核心組件。 解決的關鍵問題 Cron 表達式解析:將字符串表達式轉換為可計算的時間模型 時間序列生成:計算下次執行時間或生成時間序列 跨平台支持:純 .NET 實現,無操作系統依賴 輕量高效:無外

c# , .net

唐青楓 - C#.NET PeriodicTimer 深入解析:高效異步定時器的正確打開方式

簡介 在異步編程中,常見的定時任務通常使用 System.Timers.Timer、System.Threading.Timer 或者循環中配合 Task.Delay。 這些方式或需要顯式管理回調線程、或需編寫複雜的取消邏輯,或容易因累積延遲導致執行不準。 PeriodicTimer(.NET 6+ 引入於 System.Threading)提供了一個基於 IAsyncDisposable

c# , .net

唐青楓 - C#.NET Cronos 實戰:優雅解析與執行 Cron 表達式

簡介 Cronos 是一個專為 .NET 設計的輕量級、高性能 cron 表達式解析庫,由 Hangfire 團隊開發。相比其他 cron 庫,它專注於提供精確的時區處理和高效的計算算法,特別適合需要跨時區調度的現代應用。 在 .NET 應用中需要使用 Cron 表達式驅動定時任務時,系統自帶的定時器並不支持直接解析 Cron 語法。 雖然有 Quartz.NET 等重量級調度框架,但在只需

c# , .net

唐青楓 - 循環插入太慢?試試 C#.NET SqlBulkCopy,一次導入上百萬數據

簡介 SqlBulkCopy 是 .NET 中針對 SQL Server 的高性能批量數據導入類,通過最小化網絡往返和利用 SQL Server 的批量加載機制,實現遠超傳統 INSERT 語句的性能(通常快 10-100 倍)。它通過利用 SQL Server 的批量插入機制(BCP,Bulk Copy Protocol),顯著提高了數據導入的效率,特別適合大數據量場景。 背景和作用 在 .NE

c# , .net

唐青楓 - php 設計模式詳解

簡介 PHP 設計模式是對軟件開發中常見問題的可複用解決方案,通過標準化的結構提升代碼的可維護性、擴展性和複用性。 創建型模式(對象創建) 關注對象的創建過程,解決 “如何靈活、安全地生成對象” 的問題。 單例模式(Singleton) 意圖:確保一個類僅有一個實例,並提供全局訪問點。 適用場景:全局配置、數據庫連接池、日誌管理器(需共享狀態)。 實現要點: 私有構造函數(禁止外部實例化

設計模式 , php

唐青楓 - Git 實戰:一文讀懂 git push -u origin main 命令

簡介 命令的完整語法結構 git push -u origin main 其實等價於: git push --set-upstream origin main 分為三個部分: 部分 含義 git push 推送(push)本地提交到遠程倉庫 origin 遠程倉庫名稱(默認是 origin,指克隆時的默認遠程)

Git

唐青楓 - Git 提交時神秘的 create mode 100644 到底是什麼?一文告訴你答案!

簡介 上下文:它出現在哪裏? 常見於以下命令輸出中: $ git show 輸出示例: diff --git a/src/test.txt b/src/test.txt new file mode 100644 index 0000000..7f3e5a4 --- /dev/null +++ b/src/test.txt @@ -0,0 +1,2 @@ hello world $ git comm

Git

唐青楓 - 為什麼 .gitignore 不生效?其實你忘了用 git rm --cached!

簡介 命令格式: git rm --cached file 意思: 從 Git 的 索引(index,暫存區) 中移除文件,但保留工作區中的實際文件。 也就是説: 文件仍然留在硬盤(工作區); 但不再被 Git 跟蹤(tracked)。 file...:要移除的文件或目錄路徑。可以指定多個文件,或使用通配符(如 *.log)。 常用選項: --cached:僅從索引移除(必

Git

唐青楓 - Linux awk 命令詳解

簡介 awk 是 Linux 中強大的文本處理工具,廣泛用於模式匹配掃描,數據提取,文本操作。 使用場景: 解析日誌文件 彙總數據 格式化文本輸出 從文件中提取指定的信息 歷史 awk 由三個人共同創造的,以三個人的 last name 的首字母組成 Alfred V. Aho Peter J. Weinberger Brian W. Kernighan 基本語法 awk '

awk , Linux

唐青楓 - Linux sed 命令詳解

簡介 sed 的全稱是:Stream Editor 流編輯器,在 Linux 中是一個強大的文本處理工具,可以處理文件或標準輸入流。 基本語法 sed [options] 'command' file 通過管道傳輸入流: echo "text" | sed 'command' 常用子命令 文本替換(s) sed 's/old/new/' file # s代表文本替換 # old表示被替換的舊文

sed , Linux

唐青楓 - Linux Supervisor進程控制系統完全教程

一、簡介 Supervisor是一個進程控制系統,它使用户能夠監視和控制類unix操作系統進程。它通過提供基於配置或事件啓動、停止和重新啓動進程的機制,幫助管理應該在系統中連續運行的進程。對於需要控制和監視Linux或其他類unix操作系統上多個進程的狀態的開發人員和系統管理員來説,Supervisor特別有用。 監督程序通常作為後台守護進程運行,並充當負責管理多個進程的集中實體。它可用於管理各種

supervisor , Linux