JCConf 2024
這次難得公司贊助參加 conference,看了些有興趣的議程,紀錄一下有印象的內容跟一些額外查詢的資料。
Java 21 and Beyond: State of Loom and Amber
一位外國講者 Jose PAUMARD,以聯播(錄影)的方式演講,在 youtube 有 JEP Café 系列影片。
主要分享了:
Concurrency and Structured Concurrency
- Java 5 提供 Concurrency, 跑在 Platform thread 上會受到硬體 thread 上限的限制,且有 thread 洩漏的風險。
- Java 21 提供 Structured Concurrency,在 Virtual thread 上執行時不阻塞 Platform thread,且能在預期範圍內執行,防止資源 洩漏問題。
Object Oriented Programming and Data Oriented Programming
沒有記下來說了什麼,用 ChatGPT 來做 summary
比較項目 | 物件導向程式設計 (OOP) | 資料導向程式設計 (DOP) |
---|---|---|
核心概念 | 將軟體設計圍繞在物件上,將資料和行為(方法)綁定在一起。 | 專注於資料的結構及其操作,強調高效的資料處理。 |
抽象 | 強調透過類別和物件進行抽象,使程式碼更具模組化和可重用性。 | 強調資料結構和記憶體中的資料佈局,優化效能和快取效率。 |
資料封裝 | 推崇封裝,隱藏內部細節,只暴露必要的介面。 | 鼓勵直接暴露資料,並以優化資料存取模式的方式操作資料。 |
狀態管理 | 物件維護內部狀態,行為依據物件狀態變化。 | 資料通常與行為分離,使狀態管理更加明確和可控。 |
效能 | 由於抽象的開銷及物件分散可能導致效能損失和快取未命中。 | 通常在效能上更優,特別是在遊戲和模擬中,透過優化記憶體存取模式提高效能。 |
靈活性與重用性 | 高度靈活,可透過繼承、多型性和設計模式進行重用。 | 在程式碼重用上較為僵硬,因為緊密依賴於特定資料結構和存取模式。 |
擴展性 | 適合具有高度抽象和模組化需求的複雜應用。 | 在效能要求高的應用中擴展性良好,特別是對於資料區域性和快取一致性需求高的情況。 |
理解難易度 | 對熟悉此設計的人來說較易理解,並且與實際世界中的實體關係類似。 | 需要深入了解硬體和記憶體存取來編寫高效能程式,因此理解難度較高。 |
設計模式 | 擁有豐富的設計模式(如 Singleton、Factory、Observer)來解決常見問題。 | 正式的設計模式 較少,但通常針對特定效能需求優化演算法和資料佈局。 |
學習曲線 | 對初學者來說較容易,因為它與現實世界中的物件和實體映射直觀。 | 學習曲線較陡,需要了解記憶體架構及硬體效能優化的知識。 |
模組化 | 強調模組化,促進易於維護和擴展的程式碼。 | 模組化依然存在,但更多是功能性的,專注於資料轉換的隔離。 |
除錯與測試 | 由於清晰的物件邊界和狀態封裝,測試和除錯較為容易。 | 由於資料操作的底層特性及可能的副作用,除錯可能較困難。 |
並發處理 | 共享物件狀態可能需要複雜的同步機制(如互斥鎖、鎖定)。 | 由於明確的資料控制和較少的隱藏狀態,並行化通常更簡單。 |
應用範例 | 常見於企業應用程式、桌面軟體及需要模組化和抽象的系統。 | 在遊戲、模擬和需要高度效能的即時系統中廣泛使用,因為資料區域性非常重要。 |
Memory API
沒有記下來說了什麼...
Kotlin 2.0 降肉 - Kotlin 的過去、現在以及未來
大多在講 Kotlin 2.0 的新特性、K2 Compiler 內部運作,以及 KMP (Kotlin Multiplatform)。
參考 https://kotlinlang.org/docs/k2-compiler-migration-guide.html
Power Up system design depth along with Amazon Q Developer
Amazon Q 有哪些相關服務
看官方網站
Amazon Q Developer 功能簡介
- 提供多平台 extension, 參考 什麼是 Amazon Q 開發者?
- 能將根據當前專案進行上下文分析,產生 BDD 測試案例,並自動生成測試程式碼。
Amazon Q Developer v.s. Github Copilot
自己只用過 Github Copilot,沒有使用過 Amazon Q Developer,等後續有機會再來試試看,目前看來 Amazon Q Developer 無法生成 unit test code,但有更多針對 AWS 相關服務的支援。
DDD Event Storming
掌握 Feature Toggle 與 OpenFeature 規範:提升開發效率與降低風險
由 LINE Taiwan 的 Backend Engineer Noah Hsu 分享。
主要分享導入情境、Feature Toggle 的實作方式,以及 Line 團隊開源的 Flagship4j ,提
供 On/Off
, A/B Testing
, Canary Release
, White List
等實作方式。
OpenRewrite 與程式重構:提升程式碼品質的利器
簡介了 OpenRewrite 的功能,以一個簡單的範例示範 java 8 到 java 17 的轉換。
Building Event-Driven Architecture with Spring Event and Spring Modulith
主要分享 Spring Event 的使用情境及方式,以及 Spring Modulith 在單體式應用下如何做到模組化解耦,並提供了一個範例專案。