Daily Digest

每日新聞摘要

2026年03月13日

今日總結

內容會跟隨語言切換。

📝 今日焦點:Java Weekly 報導 DPoP 採用、Quarkus+Leyden 顯著縮短啟動並彙整生態更新與課程優惠。 🔧 效能最佳化:將 baseline profiles、AOT 與 DEX 重排序納入建構與 CI,可提前烘焙啟動效能並量化改善。 🏗 架構設計:推動 Coroutine 與 Jetpack Compose 採用,權衡與 XML 遷移取捨以提升可讀性與維護性。 ✅ 測試與品質:採用 JUnit 參數化與重複測試提升覆蓋,並正視 Flow 測試摩擦以改善可靠性與工具指引。

01

Java Weekly, Issue 637

Baeldung 作者:baeldung 發布:03-13 10:10

Java Weekly,第 637 期

DPoP 可防止被盜的 OAuth 2.0 bearer token 被重放,Quarkus 3.32 整合 Project Leyden 大幅改善啟動時間。

重點摘要

DPoP 解決 OAuth 2.0 bearer token 被盜後重放的風險。
Quarkus 3.32 整合 Project Leyden,啟動時間分別約提升 78% 與 71%。
列出多項框架與工具更新,並宣傳 Baeldung 春季課程 30% 折扣。

本期 Java Weekly(第 637 期)彙整 Java 與 Spring 生態的重要消息:介紹 DPoP 作為防止 OAuth 2.0 被盜 bearer token 重放的機制,並指出 Keycloak 與 Quarkus 已有支援;報導 Quarkus 3.32 整合 Project Leyden,對小型與大型應用分別帶來約 78% 和 71% 的啟動時間改善。文章同時連結多篇值得閱讀的技術評論與工程部落格,列出 Webinars、Podcast 與與 JDK/工具相關更新,並詳列多個框架與元件的新版本發布。精選:Baeldung 春季課程促銷,課程庫 30% 折扣。

02

Como usar testes parametrizados e testes repetidos no JUnit 5

Medium Kotlin 作者:Leonardo Paulino 發布:03-13 07:12

如何在 JUnit 5 中使用參數化測試與重複測試

撰寫單元測試時,常需要用不同資料集驗證相同行為,或確保在多次執行下行為一致。

重點摘要

參數化測試可用相同測試邏輯驗證多組輸入。
重複測試可多次執行同一測試以檢查穩定性或狀態相關行為。
JUnit 5 提供註解與引數來源以減少重複並擴大覆蓋範圍。

本文介紹在 JUnit 5 中使用參數化測試與重複測試的概念與應用情境,說明為何需要以多組資料驗證相同行為或透過多次執行確認測試穩定性。文章說明這些做法可減少測試程式碼重複、增加輸入覆蓋並幫助發現不穩定(flaky)測試,並說明 JUnit 5 提供的相關支援與實作方式。透過範例,比較何時使用參數化測試或重複測試,並強調採用這些技術能提升測試可讀性與可維護性。

03

Beyond the Checkbox: Baseline Profiles as Core Performance Infrastructure

Medium Kotlin 作者:Sivavishnu 發布:03-13 08:34

超越勾選項:將基線配置視為核心效能基礎設施

從事後偵錯轉為主動工程,掌握 AOT 編譯、Startup Profiles 與 DEX 佈局優化。

重點摘要

把效能管理從被動偵錯改為主動工程化
以 AOT 與 Startup Profiles 在建構階段強化啟動效能
透過 DEX 佈局重排序減少啟動 I/O 與記憶體負擔

作者主張將效能管理從事後偵錯轉為主動工程,將基線配置(baseline profiles)視為核心基礎設施,透過掌握 AOT 編譯、Startup Profiles 與 DEX 佈局優化來改善啟動與執行效能。透過收集代表性執行軌跡並在建構中納入啟動描述、採用基於描述的 AOT 與重排序 DEX,可以在發佈前把可預測的效能「烘焙」進應用,降低上線後的修正成本。文章建議把這些作法整合進持續整合與發佈流程,以實現可量測的啟動改善並把團隊導向主動的效能工程。

04

Kotlin Fundamentals Part 6 — Reading User Input in Kotlin

Medium Kotlin 作者:Kishor Ramani 發布:03-13 08:39

Kotlin 基礎 第六篇:在 Kotlin 中讀取使用者輸入

想要建立互動式的 Kotlin 程式嗎?這篇說明如何讀取使用者輸入!

重點摘要

Kotlin 基礎系列的第六篇,作者 Kishor Ramani
聚焦於在 Kotlin 中讀取使用者輸入以實作互動
文章刊載於 Medium,並提供連結供讀者繼續閱讀

這則短文《Kotlin Fundamentals Part 6 — Reading User Input in Kotlin》由 Kishor Ramani 撰寫,為 Kotlin 基礎系列的第六篇,重點在說明如何讀取使用者輸入以打造互動式的 Kotlin 程式。文章邀請希望從靜態範例進階到可與使用者互動的開發者學習接收與處理輸入的基本概念。作為系列中的一篇,該文將輸入處理視為學習 Kotlin 時的重要基礎技能。文章發表於 Medium,並提供連結供讀者前往原文繼續閱讀完整內容。

05

Kotlin Fundamentals Part 7 — Null Safety — Kotlin’s Superpower ️

Medium Kotlin 作者:Kishor Ramani 發布:03-13 08:41

Kotlin 基礎教學 第七章 — 空值安全:Kotlin 的超能力

向 NullPointerException 說再見!Kotlin 的空值安全改變了遊戲規則!

重點摘要

消除 NullPointerException
型別層級區分可空性
提供安全處理語法

Kotlin 的 null safety(空值安全)可直接消滅常見的 NullPointerException 來源:透過在型別層級明確區分可為 null 與不可為 null,語言在編譯時就迫使開發者處理可能的空值。Kotlin 提供多種簡潔語法(例如安全呼叫、Elvis 運算子及明確空值檢查或斷言)來安全操作可空值,讓程式意圖更清晰、減少散落在程式碼中的防禦性檢查,並提高應用穩定性與開發者信心。作為一項語言特性,null safety 是 Kotlin 的核心優勢之一,也是許多開發者採用 Kotlin 的重要原因。本文稱之為 Kotlin 的「超能力」,並鼓勵善用這些機制來避免 NullPointerException,撰寫更健全的程式碼。

06

My Hot Take on the State of Android Unit Testing with Flows: It’s a Mess

Medium Kotlin 作者:RAFA 發布:03-13 09:32

我對 Android 使用 Flows 進行單元測試現狀的直率看法:一團糟

Google 很喜歡 Kotlin Flows,但測試它們卻是一團糟。

重點摘要

Google 在 Android 生態推廣 Kotlin Flows
對 Flows 的單元測試目前相當混亂且令人挫折
作者直言批評,呼籲改進與更清晰的實踐

本文由 RAFA 發表,指出儘管 Kotlin Flows 已成為現代 Android 開發的重要機制,但針對 Flows 的單元測試仍然存在問題且令人沮喪。作者觀察到 Google 對 Flows 的推崇,與此同時開發者在測試上卻面臨摩擦與不便。文章以直率的觀點檢視現狀,提醒業界當前的實作與指引不足,並呼籲提供更明確的模式與工具支援,減少團隊在採用 Flows 時遇到的測試負擔,藉此引發開發者間的討論與改進。

07

Jetpack Compose vs. XML: A Comprehensive Comparison

Medium Kotlin 作者:Badr Kouki 發布:03-13 13:58

Jetpack Compose vs. XML:全面比較

Android 開發多年來已顯著演進,而 Jetpack Compose 的出現是其中最重要的進展之一。

重點摘要

Android 開發已顯著演進。
Jetpack Compose 是重要的現代化 UI 解法。
文章比較了 Compose 與傳統 XML 佈局的差異。

本文回顧 Android 開發的演進,並就 Jetpack Compose 與傳統 XML 佈局進行全面比較。文章指出 Jetpack Compose 是一項重要進展,採用現代宣告式 UI 寫法,與以 XML 為主的既有工作流程形成對比。內容探討開發者在遷移或新專案時的實務考量,包括開發體驗、程式碼可讀性與可維護性,並說明兩者在工具支援、學習曲線與與既有程式碼相容性上的差異。目標在於呈現各自優劣與取捨,協助開發者根據專案需求與情境做出適切選擇。

08

Kotlin Coroutines: From Callback Hell to Clean Async Code

Dev.to Kotlin 作者:SuriDevs 發布:03-13 05:09

Kotlin 協程:從 Callback 地獄到乾淨的非同步程式碼

協程讓非同步程式碼看起來像同步的序列化程式碼,能消除巢狀 callback 並集中例外處理。

重點摘要

用 suspend 函數與單一 try-catch 取代多層巢狀 callback。
透過 Dispatchers 與 withContext 指定執行緒,不需手動管理執行緒。
使用結構化併發、async/await、Flow 與正確取消機制避免記憶體外洩並提升可測試性。

作者回顧自己從 callback 為主的 Android 開發轉向 Kotlin 協程的經驗,示範協程如何把多層回呼的繁瑣流程轉成直覺、可讀的 suspend 函數序列,且只需一處 try-catch 即可處理錯誤。文中說明 suspend 的非阻塞特性、Dispatchers(Main/IO/Default)與 withContext 的使用、以及 viewModelScope/lifecycleScope 等與生命週期綁定的結構化併發。也討論 async/await 的平行執行、例外與取消(不可吞掉 CancellationException)、withTimeout、Flow 作為資料流、測試技巧(runTest)與常見錯誤(如 GlobalScope、runBlocking、忘記指定 dispatcher),並提醒何時不適合使用協程。

09

This works.Adaptive GPS Tracking on Android | Engineering Deep Dive

Medium Kotlin 作者:Numesh Dilusha 發布:03-13 06:05

可行方法:Android 上的自適應 GPS 追蹤(工程深度解析)

當使用者距離目的地仍有 50 公里時,如何停止無謂地消耗他們的電量?

重點摘要

自適應 GPS 在距離遠時可降低電力消耗
可透過調整取樣、定位提供者與距離觸發更新來實現
文章以工程深度解析 Android 的實作與取捨

Numesh Dilusha 的這篇文章以工程深度探討 Android 上的自適應 GPS 追蹤,重點在於避免當使用者距離目的地仍有很長距離(例如 50 公里)時持續耗電。文章說明為何高頻率定位會浪費電力,並提出依距離、移動狀態與精準度調整追蹤行為的策略。討論 Android 的實作折衷,例如調整取樣間隔、在不同定位提供者間切換,以及以距離或事件為觸發的更新機制,以在即時性與省電間取得平衡。目標是提供實務導向的模式與考量,幫助工程師在生產應用中實現更省電且可靠的定位機制。