Skip to main content

Command Palette

Search for a command to run...

#software-development

Articles tagged with #software-development

  1. Lesson 23: 系統的緩衝區-Queue 佇列與非同步處理 (Asynchronous)

    佇列 佇列的實作工具非常多,舉凡AWS SQS、RabbitMQ、Kafka…等。 佇列的特性,其實是一個非常強大的系統緩衝區,應用層面非常廣。 什麼是佇列? 佇列可以想像成,在既有流程中外,有另一個”水管”,來連接原有的資料流(或邏輯過程),其中 呼叫方將資料 推(Push)到水管中,接受方(監聽) 從水管中將資料拉(Pull)出處理 為什麼佇列是「強大的緩衝區」? 在同步處理中,系統像是一

    Mar 23, 20262 min read6
  2. Lesson 22: 快取災難預防:快取穿透 、擊穿與雪崩

    我們在上一篇文章中介紹了基本的Cache Aside Pattern,也補充了在Database 主從分離架構下可能造成Cache的異常,並一同介紹了:延遲雙刪 以及 CDC。 我們這個章節要來談談Cache還有哪些問題 快取穿透 (Cache Penetration) 定義 請求的資料 不在快取中,也不在資料庫中。 每次請求都會穿過快取,直接打到 DB,但 DB 也查不到資料,導致無法回寫快取。如果有惡意攻擊者使用大量不存在的 ID 進行攻擊,DB 會瞬間承受巨大壓力。 常見場景 惡意攻擊:...

    Jan 16, 20263 min read25
  3. Module 4: 效能優化與系統緩衝

    序 當系統架構逐漸成形、程式碼品質也趨於穩定後,下一個遲早會浮現的現實問題:撐得住嗎? 也許在開發環境一切順暢,但一上線就開始出現以下情境: 使用者一多,API 回應時間明顯變慢 尖峰流量來臨時,資料庫 CPU 飆高、連線數耗盡 某個外部服務偶爾變慢,卻拖垮了整個系統 記憶體持續成長,最後只剩一句「Out of Memory」 這些問題,不是功能寫錯,而是系統沒有「緩衝能力」。 在 Module 4 中,我們將視角從「單一請求的正確性」,提升到「整體系統在壓力下的行為」。我們需要開始...

    Dec 29, 20251 min read7
  4. Lesson 19: 工廠模式 與 建造者模式

    工廠模式 在 SOLID 的課程後,我們已經知道「依賴注入」的重要性:我們不應該在類別內部直接 new 依賴的物件。 但問題來了:「那到底誰負責 new?」 總得有人負責把物件生出來吧?如果到處散落著 new, 當需求變更時,我們還是要改一堆地方。 在Lesson 17 開放封閉 (OCP) 的時候我們有說道:利用策略模式來進行解偶,並利用”工廠模式”來決定策略的選擇(實作 實例化物件),但當時對於工廠模式並沒有去詳細說明,這裡我們一起來看看工廠模式的相關細節。 核心概念:為什麼需要「工廠」 ...

    Dec 24, 20255 min read14
  5. Lesson 18: SOLID 實戰篇 (3):完結LSP、ISP 與 魔王DIP

    關於LSP 接下來進到L了,這裡的L指的就是里氏替換原則 (LSP , Liskov Substitution Principle),這是許多後端工程師覺得最「抽象」的一個原則,但它其實是判斷「繼承 (Inheritance) 是否被濫用」最重要的標準。 什麼是里式替換 (LSP)? 「子類別 (Subclass) 必須能夠替換掉它們的父類別 (Base Class),且程式的行為不會發生錯誤。」 簡單來說,如果程式碼依賴於一個父類別(或介面),那麼隨便塞一個該父類別的「子類別」進去,程式都...

    Dec 23, 20254 min read13
  6. Lesson 17: SOLID 實戰篇 (2)-開放封閉 (OCP) - 擁抱變化而不修改舊碼

    接下來我們來講講SOLID的O - OCP,開放封閉原則。 核心觀念定義 如果說 SRP 是為了整理程式碼,那麼 OCP 就是為了保護程式碼。它是防止「新需求搞壞舊功能」的最強盾牌。 “Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.” — Bertrand Meyer 「軟體實體應該對『擴充』開放,但對『修改』封閉。...

    Dec 21, 20253 min read11