考到除草證照 5 級 !! 吉伊家長含淚喝采
那天早上,廣播突然響起 ——「各位家長請注意!吉伊寶寶順利考取除草證照 5 級!」不到三秒,家長們已經刷了滿滿的貼圖,含淚喝采
這則喜訊,像是一場同步播放的快閃演出,正在教室自習的悄悄看了手機,忍不住笑到被同桌戳了一下;咖啡廳裡打工的,拉花時多畫了一片草葉致敬;剛進辦公室的設計師,立刻在筆記本上畫了「五級除草王」的手繪海報;外送路上的長,順路把好消息送到各個巷口;還有剛下班的夜班便利商店店員,抱著零食袋邊走邊笑說:「值得熬夜等這條消息!」
如果你覺得這畫面很熟悉,那是因為它就像程式世界中的「觀察者模式(Observer Pattern)」—— 一個事件發生,所有「訂閱」它的人會同時收到通知,不用一個個去問。
同一個消息,在不同的心裡綻放成各自的顏色。
如果你覺得這畫面很熟悉,那是因為就是程式世界中的 觀察者模式(Observer Pattern) —— 當一個事件發生,所有訂閱它的人會同時收到通知,不用一個個去問。
🪵 廣播器情境想像有一台「家長廣播器」,只要一播送,所有家長都會同時聽到並作出反應 ...
序列化魔法:從記憶體城堡到數位信件
Serialization&Deserialization從記憶體城堡到數位信件狀態的保存與重生一一對應的映射關係兩大 JSON 操作流派Newtonsoft.Json 的古典魔法:JObject 與 JArraySystem.Text.Json 的現代魔法:JsonObject 與 JsonArrayNewtonsoft.Json:經典範例Test.JsonNewtonSoft vs Text.Json空 list 序列化後還是 []Refit 的 api_response 無法 deserialze 原因探討summary在數位世界中,序列化(Serialization) 和 反序列化(Deserialization) 就像是一對魔法師,負責在不同的資料形式之間進行轉換。想像一下,您有一個複雜的 C# 物件,裡面包含各種屬性、巢狀結構,甚至是陣列——這些資料存在於程式的記憶體中,就像是一座精美的城堡,但這座城堡只有您的程式看得懂
當您需要將這些資料傳送給其他系統,或是儲存到檔案中時,就需要將它們「打包」成一種通用的格式。這就是序列化的魔法:
1234567891011// 原始的 ...
Url Encode
在瀏覽器輸入網址時,是否有注意過上面的編碼跟想像的不太一樣呢?
舉個例子:
有一個電商網站,允許用戶搜索商品,並對搜索結果進行分頁和排序
原始提交的搜尋:https://www.example.com/search?q=電視機&brand=大同&price=1000-2000&page=1&sort=price_desc
編碼後:https://www.example.com/search?q=%E9%9B%BB%E8%A6%96%E6%A9%9F&brand=%E5%B0%8F%E7%B1%B3&price=1000-2000&page=1&sort=price_desc
那如果直接把尚未編碼的 URL 在瀏覽器直接發 Request 會怎麼樣?
其實有一個很簡單的測試方法,直接在 Google 中文搜尋後,上面的瀏覽器 URL Bar 就會顯示:
https://www.google.com/search?q=火車快飛&sca_esv=88708a24d6188b8d&sca_upv=1&rl ...
Certificate
在數位世界的浩瀚星海中,有一種神秘的語言穿梭於不同的系統之間,它就是 JSON。今天,讓我們踏上一場探索編碼奧秘的旅程,揭開 Unicode 轉義背後的故事。
先前提到的加密通信中,人類會有 發公鑰 或 交換公鑰 的行為,但實務上,除非這個人走到你旁邊,手寫這一段公鑰交給你,否則你無法確信這一段到手的公鑰訊息被動過甚麼手腳
所以人類又想到了,我們引入 “第三方公證人”吧 (考駕照也是要到駕訓班認證過,上交幾隻雞腿,然後才能拿到駕照上路吧)
當有一個傢伙他想要發布公鑰時,他就要走進這個公正的機關 (CA Certificate Authority),在這個世界做資料驗證與證書頒發
於是就有了 “證書”(Certificate) 的概念
Certificate證書包含:1.持有人姓名2.發證機關3.證書效期4.證書持有人公鑰5.其他訊息6.Signature…
以最生活化的例子果然還是 “HTTPS” 了吧,平時瀏覽網站時總會看到一個鎖在瀏覽器上,表示 “該網站是經由公正CA認證過的”
比如
今天 yolin.io 向 CA 機構申請一張證書:
1.填上 ...
Bouncy Castle
不知道大家有沒有使用過 Bouncy Castle,我自己是在串接金流時誤打誤撞碰到,想當年(也才半年…)對 C# 加密、證書、簽章…都還沒甚麼概念的情況下,在網路上找到這個 Package,But…看名字還不太敢用,畢竟NuGet Gallery的 Candidate 多如腿毛 (這就是所謂的第一印象嗎?),猶豫許久,後來發現公司專案也經有人引入並且使用過後,才鬆了一口氣…
加解密、簽章、證書等等處理,Bouncy Castle 像瑞士刀一樣,引用 Utilities,抽一把武器來用解決你的需求,且後來發現,原來他是一個跨語言的套件(想想好像也合理),直接 Google 搜可能還會看到一堆 Java 的 Sample
Demo現在有點難自己寫出來,所以先拿別人的Code來練習
取自 :
https://blog.darkthread.net/blog/bouncy-castle/https://gist.github.com/therightstuff/aa65356e95f8d0aae888e9f61aa29414https://en.wikipedia.org/wiki/RS ...
EF Core - 快取
🌊 DbContext 是什麼? — 它就是你的「臨時記事本」
在 Entity Framework Core(EF Core)裡,DbContext 是一個很關鍵的角色,背後有兩個重要概念:
它是工作單位(Unit of Work)
它自帶一級快取(First-Level Cache)
當你在一個業務流程裡使用 DbContext 時,它幫你做三件事:
✅ 變更追蹤(Change Tracking)
追蹤每個被載入的 Entity 誰改了什麼,幫你記錄要更新的欄位。
✅ 一級快取(First-Level Cache)
相同主鍵的資料,只要查過一次就放在 DbContext 的快取中,後續查詢就直接從快取拿,不會再打資料庫。
✅ 單一交易(Single Transaction)
呼叫 SaveChanges() 時,會把所有變更一次送到資料庫並用同一個交易包起來,確保一致性。換句話說,DbContext 就像一個臨時記事本(背包 🧳),把這段流程需要用到的資料和變更都記錄起來,最後一次打包送到資料庫。
🌊 EF Core 的一級快取是什麼?所謂「快取」,指的是 ...
Asynchronous Programming - 第十二章:章魚的八爪例外:多執行緒的捕獲術
章魚實驗一:沒 await,什麼都接不到實驗二:用 .Result 或 .Wait() 阻塞取得結果實驗三:使用 await 等待結果實驗四:Task 不回傳值也一樣多個 Task 的例外處理✅ 最佳實踐在深海裡,章魚的八隻腕足總是同時探向不同的方向,纏繞著礁岩、觸碰著漩渦,也悄悄在黑暗中編織出一張未被看見的網。我們的非同步程式,就像這隻章魚,當你派出無數任務游向未知,若沒有好好等待(await),有些錯誤就會像溜走的墨汁般散開,再也無法追溯
若選擇用同步阻塞強行捕捉,例外也會被包裹成難解的聚合結,像是八爪同時纏住獵物卻黏成一團。學會如何等待,如何攤開多執行緒裡潛藏的觸手,才是馴服這隻章魚、看清每一道潛伏例外的唯一方法。
🐙12345678910111213141516public static async Task ExceptionResultTest(){ try { TaskThatThrowsExceptionStringAsync(); } catch(Exception ex) { ...
Asynchronous Programming - 第十一章:未繭之絲:任務才是本體
使用 .NET Async/Await 的常見錯誤正確理解 C# async 與非同步
蠶的軀殼非同步的本質:回傳 Task 才是真的非同步什麼時候可以不加 await?什麼時候一定要?狀態機的工作:記得「下一步要去哪裡」summary在多執行緒的森林裡,有些線,早已抽離了蠶的軀殼,它們不需繭的庇護,也能沿著記憶結點游走。我們誤以為是 await 編織了非同步的絲線,卻忘了真正編織的是那些未繭的任務。只要 Task 尚在,無論繭在與否,線都還在地底延展,繼續牽動著下一個狀態機的呼吸
非同步的核心是 Task 或 Task<T> 型別。只要方法回傳 Task,它就是非同步,因為 Task 代表著「進行中的工作」。是否使用 await 不影響方法本身是否非同步,await 只決定要不要在這裡把結果拿回來、接著做後續的邏輯。await 的本質是「把非同步操作的結果,用同步的方式 等待完成後,接著執行後續的程式碼」。
沒用 await123public Task<int> GetDataAsync() { return GetDataFro ...
Asynchronous Programming - 第十章:未完成的回聲
簡介.NET 4.0 的多工執行利器 –Task
C# 學習筆記:多執行緒 (6) - TPL
派遣出去的夜簡單的建立一個 Task那要怎麼「等他」?等待兩個任務等待結果回傳再繼續跑實驗:觀察 Task 的執行狀態結果與分析summary在每一個任務被派遣出去的夜裡,總有一些聲音,無法即刻歸來。它們在平行的執行緒裡交錯穿行,有的抵達了終點,返回一聲輕快的完成;有的在等待中腐蝕,成為無聲的阻塞;有的半途拋下誓言,消失在取消的荒野裡。你以為程式碼寫好了,流向已然明朗,卻不知每個 Task 都像流浪的信件,封存著可能,也埋藏著未竟
TPL,不只是一套平行的工具,它是一場關於 等待與命運 的實驗,每一個 WaitAll、WhenAny、Result,都是開啟分支與結局的咒語。當結果未歸,回聲仍在。在執行緒的深處,有些任務,終將完成;有些回聲,永遠未完先用最簡單的 Task.Run 建立一個任務,看看它跟一般程式碼的執行順序有什麼不一樣。
1234567891011121314151617static void Main(string[] args){ SimpleTask() ...
Asynchronous Programming - 第九章:平行之風,併發之歌
穿梭林間實驗 : Single Thread / Parallel.For / Task-based測試紀錄Single ThreadParallel.ForTask-based (Concurrency)summary有些風,獨自穿梭林間,沿著樹影與地面爬行,沒有分身,沒有回音,只將時間吹得靜謐有些風,輕輕裂成數萬縷絲線,從山脊滲入溪谷,從枝頭滲入土壤,它們彼此不糾纏,卻同時為大地帶來不同的聲響
也有些種子,懂得在雲後潛伏,等待雨季將它們喚醒;一顆未必只能開一朵花,它可以把等待切碎,併發成無數顆更小的種子,在時間的縫隙裡生根發芽
當我們談論分割與合流,等待與釋放,這片風與影子的地圖,就是平行之風,併發之歌那些藏在核心深處的秘密,終究會在一次又一次的呼吸裡,被我們拆解、重組、散播,直到有一天,學會怎樣用一秒去換取另一秒
用.NET展現多核威力(1) - 從ThreadPool翻船談起
這個實驗透過一個簡單的數學運算(Math.Log10),使用
單執行緒(Single Thread)平行迴圈(Parallel.For)Task-based 併發(async/await + Task. ...









