[Tempest AI News] 技術新聞精華 (2026-04-09)

本期 AI 技術新聞聚焦於 Anthropic 的重大模型發佈與資安風暴,以及 MCP (Model Context Protocol) 生態系的爆炸式增長。從強大的漏洞挖掘模型到開源平台的嚴重 RCE 漏洞,AI 代理的權限管理與安全性正成為開發者關注的焦點。

🚀 重大模型與企業動態

  • Anthropic 推出 Claude Mythos 與 Project Glasswing:發表前沿模型 Claude Mythos,展現極強的資安漏洞挖掘能力,在預覽階段即發現數千個作業系統與瀏覽器的零日漏洞(Zero-day)。由於能力過強,目前僅限於 Project Glasswing 計畫中的少數合作夥伴(如 Apple, Microsoft, Cisco)用於防禦性掃描,暫不對公眾開放。[https://ift.tt/FxJiTH1] / [https://ift.tt/LXoZcFg]
  • Anthropic 營收爆發與算力聯盟:年化營收運行率從 2025 年底的 90 億美元飆升至 300 億美元。為確保長期算力,Anthropic 已與 Google 及博通(Broadcom)建立策略聯盟共同打造 ASIC 晶片。[https://ift.tt/b9rzCEL] / [https://ift.tt/6S1quIp]
  • Claude Managed Agents 公測:提供可組合的 API 套件,旨在降低企業構建與部署雲端托管代理的門檻,將 AI 應用從單一對話轉向複雜的自動化工作流。[https://ift.tt/ObTeGSj]

🛡️ 資安警訊與漏洞分析

  • Flowise 爆發嚴重 RCE 漏洞 (CVE-2025-59528):知名開源 AI 工作流平台 Flowise 的自定義 MCP 節點存在設計缺陷,允許攻擊者執行任意程式碼 (RCE),CVSS 評分達 10 分,影響全球超過 12,000 個實例,官方促請立即更新。[https://ift.tt/Q5v7uGI] / [https://ift.tt/cZ62NVf]
  • Claude Code 原始碼大規模洩漏:由於 npm 套件發布錯誤,約 51 萬行核心源碼意外洩漏,引發對 AI 供應鏈安全的討論。部分駭客已利用此事件分發偽裝成「洩漏工具」的惡意軟體,提醒使用者謹慎下載。[https://ift.tt/ym8UVzg] / [https://ift.tt/8QkSpXO]
  • MCP 伺服器安全性危機:研究發現高達 43% 至 92% 的開源 MCP 伺服器存在指令注入或路徑遍歷漏洞,可能導致 AI 代理讀取 SSH 金鑰或成為生產環境的後門,亟需導入嚴格的運行時安全措施。[https://ift.tt/CkPyAoz] / [https://ift.tt/ysqf2uI]

🛠️ 開發工具與 MCP 生態

  • MCP (Model Context Protocol) 持續擴展:新伺服器湧現,包括針對 Android 遙控 (v1.7.0)、SQL 資料庫安全訪問、JADX APK 分析、以及 Jenkins 自動化部署。Google 亦推出 WebMCP,旨在以結構化方式提升網站對 AI 代理的友善度。[https://ift.tt/Gizroeu] / [https://ift.tt/0ojW47L] / [https://ift.tt/TU8NeEL]
  • Claude Code 進階實踐:開發者分享利用 Markdown 打造個人知識庫、實現零停機資料庫遷移,以及開發 local-plan-viewer 插件以追蹤 AI 思考路徑。同時,針對權限管理,Waymark 等工具被用於攔截危險指令(如 rm -rf)。[https://ift.tt/psRuV9P] / [https://ift.tt/co5uPlF]
  • GitHub Copilot SDK 公開預覽:支援五種主流語言,允許開發者將 Copilot 能力整合進自定義工作流,標誌著從 IDE 插件向基礎設施級工具轉型。[https://ift.tt/CE9sG4F]

🤔 技術反思:Vibe Coding 的興衰

  • 從「氛圍編碼」轉向「規格優先」:社群對 Vibe Coding(憑感覺寫碼)的反思達到頂峰。雖然原型開發極快,但缺乏結構化設計會導致嚴重的「AI 技術債」與安全性風險。工程師呼籲回歸規格驅動開發 (Spec-Driven Development),強調嚴謹的程式碼審查 (Diff Review) 與數學證明般的正確性驗證。[https://ift.tt/kHprlGu] / [https://ift.tt/ioaEf3R]

[Tempest AI News] 技術新聞精華 (2026-04-07)

🚀 Model Context Protocol (MCP) 生態大爆發

  • 協議標準化與快速成長:MCP 已突破 10,000 個伺服器,成為 AI Agent 整合外部工具(DB, Cloud, DevTools)的標準,甚至實現將 AI Agent 轉化為「On-Call 工程師」自動處理生產環境事故。[https://ift.tt/6hkY5eK]
  • 企業級與雲端整合:Microsoft Azure Functions 正式支援 MCP 資源觸發器 (Resource Triggers),讓開發者能直接從雲端函數暴露 MCP 資源。[https://ift.tt/6C8PyZz]
  • 高效開發實踐:出現能跨 17 個資料庫、994 張表的 DB Graph MCP,實現安全且跨 schema 的複雜查詢。[https://ift.tt/eD94yoh]
  • 跨工具鏈連動:Figma 與 VS Code 透過 MCP 實現設計稿直接連動開發環境,大幅縮短 Design-to-Code 迭代週期。[https://ift.tt/noehsI6cAEc]

🤖 Claude Code:從效能退化到源碼洩漏

  • 效能驟降爭議 (Regression):AMD AI 總監透過 7,000 場 session 數據證明,Claude Code 在 2026 年 3 月後思考深度下降 67%,主因是 Anthropic 對思考內容 (Thinking Content) 進行截斷處理,導致模型減少閱讀檔案並增加盲目重寫。[https://ift.tt/Wabh09e][https://ift.tt/0EiVe1n][https://ift.tt/jXRUOgA]
  • 大規模源碼洩漏事件:Anthropic 意外洩漏約 51 萬行 TypeScript 源碼(含 .map 檔),導致其內部對話管理與 Context 視窗處理機制被社群徹底分析,並發現 44 個隱藏功能(如 /buddy 指令)。[https://ift.tt/mOQdATi][https://ift.tt/QYNgir4][https://ift.tt/oEZuGBy]
  • 社群反擊與替代方案:開發者利用洩漏源碼推出 OpenClaude,可對接 DeepSeek, Gemini 等任意 LLM;另有社群釋出 Bash 腳本 patch 修正模型「走捷徑」的懶惰行為。[https://ift.tt/IFGPxB0][https://gist.github.com/roman01la/483d1db15043018096ac3babf5688881]
  • 記憶力強化方案:針對 session 缺乏持久化記憶的痛點,社群開發出 `Alaz` (Rust 實作) 與 `Engram` 等第三方記憶層。[https://ift.tt/HuKfFWi]

🛡️ AI 安全與資安攻防 (Project Glasswing)

  • Mythos 模型與 0-day 威脅:Anthropic 推出強大的 `Mythos` 模型,能大規模發現關鍵零日漏洞,因風險過高禁止公開發布。[https://ift.tt/VZxYt7U]
  • Project Glasswing 聯盟:Anthropic 聯合 Apple, Google, Microsoft, Nvidia 成立資安計畫,利用 Mythos 模型協助修補關鍵基礎設施漏洞,防止 AI 被用於自動化攻擊。[https://ift.tt/aoYuTjh]
  • MCP 供應鏈風險:MCP Java SDK 出現 DNS Rebinding 漏洞 (CVE-2026-35568);同時警示安裝未知 MCP 伺服器可能帶來後門風險,建議使用 OreWatch 等掃描器進行審計。[https://ift.tt/G04NysC][https://ift.tt/ehHtkcF]

💻 Agentic Engineering 與開發趨勢

  • GitHub Copilot CLI 進化:引入 “Rubber Duck” 雙模型審核機制以減少幻覺,並支援 `/fleet` 並行多代理執行,可同時處理 codebase 不同部分。[https://ift.tt/IDRJ1PK][https://ift.tt/P0gZzcX]
  • Vibe Coding 爭議:AI 生成 App 數量激增導致 Apple 嚴厲打擊;BitTorrent 創始人 Bram Cohen 批評此趨勢為「危險的狂熱」,認為缺乏 PDR 指引的 AI 代碼是定時炸彈。[https://ift.tt/tmiF0fu][https://ift.tt/MRH1lVo][https://ift.tt/xhLjM4a]
  • 本地化 Agent 趨勢:開發者開始使用 Gemma 4 或 Qwen 透過 Python Proxy 在本地運行 Claude Code 邏輯,以規避 API 限制並提升隱私。[https://ift.tt/1svrCfk]

💰 算力基礎設施與財務壓力

  • 天文數字的支出:OpenAI 預計 2028 年算力支出將達 1,210 億美元;Anthropic 年化收入雖突破 300 億美元,但仍面臨巨大的算力成本危機。[https://ift.tt/enLSsQZ][https://ift.tt/qKeLU8J]
  • 算力戰略協議:Anthropic 與 Google、Broadcom 達成多吉瓦 (GW) 級別的 TPU 算力協議,以確保 2027 年起可用之次世代算力資源。[https://ift.tt/2uwTxcj]

Java 日報 – 2025 年 6 月 9 日

Java 最新版本與未來發展

  • Java 25 已正式發布。這個版本包含了穩定性增強、尖端功能和 JDK 的創新,持續推動 Java 的演進。
    • 關鍵焦點領域及益處:
      • Stream Gatherers: 支援進階資料處理,讓批次處理更容易。
      • Pattern Matching: 編寫出更簡潔、更有表現力的程式碼。
      • Class File API: 支援現代工具和位元組碼操作。
      • Scripting Enhancements: 加速開發/測試週期,改善入門體驗。
      • Language Simplicity: 對初學者更友善,並支援腳本編寫。
    • 閱讀更多關於 Java 25

Java 與 AI 整合

  • AI 的未來與 Java 緊密相關。對於已經探索過提示詞 (prompts)、API、嵌入 (embeddings) 和函數呼叫 (function calls) 等概念的 Java 開發者,接下來有許多深入 AI 領域的發展方向。
  • 即使不是資料科學家,Java 開發者也能夠利用 LLMs 和 RAG 進行 AI 開發。關鍵在於了解如何整合這些工具。

Java 核心概念與實用技巧

  • 學習資深開發者推崇的 10 個 Java Stream 技巧,讓程式碼更簡潔。這些技巧包括如何有效使用 filter、map、flatMap 和 groupBy 等。
  • Java 繼承 (Inheritance) 是物件導向程式設計的 fundamental pillar,協助開發者撰寫優雅、可重複使用和可擴展的程式碼。
  • Java 多型 (Polymorphism) 是物件導向的 cornerstone,賦予開發者編寫靈活、可維護和可擴展程式碼的能力。它涵蓋編譯時多型 (方法重載) 和執行時多型 (方法覆寫)。
  • Java 抽象類別 (Abstract Classes) 是建構結構化、可重複使用和可擴展程式碼的 game-changer。
  • 了解 Java String Pool,這個隱藏的優化是每個開發者都應該知道的。
  • 理解為什麼 new Integer(100) == new Integer(100) 在 Java 中會返回 false。
  • 一個可以讓你節省 8 小時的 Java 除錯技巧。
  • 如何透過 minimal changes 大幅提升你的 Java 程式碼效能 (例如從 7000ms 縮短到 90ms)。

Java 版本特性比較

  • Java 11、Java 17 和 Java 21 的簡單比較。隨著 Java 的不斷演進,不同長期支援 (LTS) 版本引入了許多新功能和改進。
    • 主要比較點:LTS 支援、String Enhancements、Sealed Classes、Virtual Threads、Pattern Matching for switch、Scoped Values。
    • 特別注意,Java 21 引入了 Virtual Threads 和 Scoped Values,這是舊版本所沒有的。
    • 查看 Java 11 vs 17 vs 21 比較
  • Java 23 的 Record Patterns 可以用更少的程式碼構建 Robust Data Pipelines。這對於處理 JSON 等資料時特別有用,可以簡化大量的 if-else 檢查。

Java 開發實踐與工具

  • Java Web 應用程式的演變。從早期的 Servlets/JSP,Java Web 開發已經發展到今天的反應式微服務和雲原生應用。
    • 介紹了 Struts、JSF、Spring MVC 等關鍵框架,以及 Spring Cloud、Docker、Kubernetes、GraalVM 等工具。
    • 了解這段演變歷程有助於提升架構和設計決策能力。
    • 閱讀 Java Web 應用程式演進史
  • 提供一些幫助你編寫 cleaner Java Code 的 設計技巧,避免未來的痛苦。
  • Fray:一個用於 JVM 的受控併發測試框架。

Java 的歷史與重要性

  • Java 在 2025 年 5 月 23 日迎來了其 30 週年。這門由 Sun Microsystems 於 1995 年推出的程式語言,至今仍然是開發世界中不可或缺的支柱。
    • Java 起源於 Sun 早期為互動式電視和嵌入式設備開發的 “Oak”,設計理念是簡化跨裝置開發並提供比 C++ 更高的安全性和簡潔語法。
    • 隨著 World Wide Web 興起,Java 轉向網路應用,以其「一次撰寫、到處執行」的特性解決跨平台相容性問題。
    • Java 在企業級應用和教育領域迅速普及。
    • 即使經歷 Sun 被 Oracle 收購、OpenJDK 開源等變革,Java 憑藉其穩定性、成熟的生態系 (如 Spring Boot、Jakarta EE) 和強大工具,至今仍是企業開發的首選。
    • 雖然不再是最「時髦」的語言,但在各大開發者調查中,Java 依然與 Python、JavaScript 等新興語言並駕齊驅。Java 以其穩健、靈活和強大的社群證明了它從未過時,對無數開發者而言,它至今仍與 1995 年一樣重要。
    • 閱讀 Java 30 週年的重要意義

Java 日報 – 2025 年 6 月 8 日

深入了解 Java 22 的新特性

Java 持續演進,Java 22 引入了多項旨在提高生產力、增強語言功能和改善原生互操作性的新特性。這些特性將幫助開發者編寫更清晰、更現代且更高效的程式碼。

Java 22 的主要亮點包括:

  • Statements before super():讓建構子邏輯更清晰。
  • Unnamed Patterns/Variables:提升程式碼可讀性,減少冗餘。
  • String Templates:提供現代化的字串處理方式。
  • Stream Gatherers:支援強大的資料處理模式。
  • Foreign Function API:無需 JNI 即可實現快速的原生呼叫。
  • Class-File API:讓建構工具和編譯器更易於構建。

[原文連結 URL: https://ift.tt/gj6kIX2]

Java 基礎:從 Hello World 到控制流程

對於初學者來說,掌握 Java 基礎是建立程式開發生涯的絕佳起點。Java 是一種高階、物件導向的程式語言。它以其 “Write Once, Run Anywhere” (寫一次,隨處執行) 的能力而聞名,這得益於 Java 應用程式的平台獨立性,可以在任何支援 Java 的設備上執行而無需重新編譯。

學習 Java 的重要原因包括:

  • 平台獨立性:Java 在 JVM 上運行,實現跨平台。
  • 高需求:Java 開發者在各行業中持續受到青睞。
  • 強大的函式庫:提供廣泛的 API 和框架。
  • 社群支援:擁有龐大的全球社群支持。

入門 Java 需要安裝 Java Development Kit (JDK) 和一個程式碼編輯器,如 Eclipse、IntelliJ IDEA 或 VS Code。

Java 的基本語法始於 HelloWorld 程式,其中 public class HelloWorld 定義了一個類別,main 是程式的入口點,而 System.out.println 用於將內容印到控制台。Java 是一種 強類型語言,意味著必須為每個變數定義資料類型,例如 int、double、char、boolean。

控制流程是程式的基石,它決定了程式碼如何根據條件判斷或重複執行。Java 中的控制結構包括:

  • If-Else 語句:用於條件判斷。
  • 迴圈 (Loops):例如 for 迴圈和 while/do while 迴圈,用於重複執行任務。

Java 的核心是物件導向程式設計 (OOP),其原則包括封裝 (Encapsulation)、繼承 (Inheritance)、多型 (Polymorphism) 和抽象 (Abstraction)。可以通過定義類別 (Class) 和創建物件 (Object) 來實踐 OOP 概念。

一些簡單的入門級專案可以幫助你有效地學習 Java,例如建立一個計算機應用程式 (使用 Java Swing 或 JavaFX)、一個控制台待辦事項清單應用程式,或一個學生資料庫系統 (使用 Java 和 JDBC)。進階主題則包含 Collections Framework、Exception Handling、Multithreading、File I/O 和 JavaFX 用於 GUI 開發。

此外,字串處理也是 Java 的基礎部分,例如使用字串連接 (Concatenation) 來組合文字或數值。

[Java 教學原文連結 URL: https://ift.tt/fQBtEke] [Java 控制流程原文連結 URL: https://ift.tt/HvgUfi5] [Java 學習歷程原文連結 URL: https://ift.tt/VsJXDRc] [另一位開發者的 Java 歷程原文連結 URL: https://ift.tt/GXsVH78] [Java 字串連接原文連結 URL: https://ift.tt/Lfjw03G] [計時器專案原文連結 URL: https://ift.tt/2MAgiqO]

Java 語言的演進:從 Java 8 到 Java 21

Java 經歷了多次重要的 LTS (長期支援) 版本更新,每個版本都帶來了顯著的改進。

  • Java 8 (2014 年 3 月, LTS):引入了函數式程式設計 (Functional programming)、Streams 和 Lambdas。此外,Java 8 還引入了 CompletableFuture 用於非阻塞的異步操作,以及 Treeification 優化 HashMap 中的雜湊衝突處理,將連結串列轉換為紅黑樹以提高效能。
  • Java 11 (2018 年 9 月, LTS):帶來了現代化的 API、清理和更快的啟動速度。
  • Java 21 (2023 年 9 月, LTS):引入了 Virtual Threads、Pattern Matching 和更好的互操作性。Virtual Threads (專案 Loom) 是一種輕量級執行緒,為處理大量併發和 I/O 密集型工作負載提供了新的解決方案。

Java 10 引入的 var 關鍵字 也引發了討論,關於它作為局部變數類型推斷的便利性與可能導致的可讀性問題。

[Java LTS 演進原文連結 URL: https://ift.tt/43ugBFf] [Java Stream 原文連結 URL: https://ift.tt/ctnpQEb] [CompletableFuture 原文連結 URL: https://ift.tt/heHoDMI] [Java HashMap Treeification 原文連結 URL: https://ift.tt/LgOT9lt] [Java var 關鍵字原文連結 URL: https://ift.tt/vxgs162] [Java Virtual Threads 原文連結 URL: https://ift.tt/BHfnzYG]

Java 中的併發處理 (Multithreading)

在現代 Java 開發中,管理併發是一個必須掌握的技能。Java 提供了多種併發模型:

  • Thread / Runnable:基礎執行緒,適用於教育或一次性後台任務 (Java 1+)。
  • ExecutorService:執行緒池,適用於可重複使用的後台任務和工作佇列 (Java 5+)。
  • ForkJoinPool:分治法,適用於遞歸算法和 CPU 密集型工作負載 (Java 7+).
  • CompletableFuture:異步程式設計,適用於非阻塞任務流程和響應式流 (Java 8+)。
  • Virtual Threads (Loom):輕量級執行緒,適用於大規模併發和 I/O 密集型工作負載 (Java 21+)。

理解這些不同的執行緒處理方法對於建立可擴展和響應迅速的應用程式至關重要。

[Java 執行緒池原文連結 URL: https://ift.tt/izhRDBN] [Java 併發選項原文連結 URL: https://ift.tt/b016MhH] [Java 多執行緒面試問題原文連結 URL: https://ift.tt/qSZhx8E]

成為 Java 全端開發者及實際部署經驗

對於有志於成為 Java 全端開發者的新鮮人來說,需要掌握的核心技能涵蓋了前後端和相關工具。

核心 Java 技能包括:

  • OOP 概念 (繼承、多型、抽象、封裝)。
  • 資料類型、迴圈、條件語句。
  • Collections Framework。
  • Exception Handling。
  • Multithreading (基礎理解)。
  • Java 8 特性:Streams, Lambdas, Functional interfaces, Optional。
  • String, StringBuilder, StringBuffer。

後端技術重點在於 Spring 生態系:

  • Spring Core:依賴注入 (Dependency Injection), Bean 生命週期。
  • Spring Boot:註解 (@RestController, @Autowired, @Service 等)、REST API 創建、CRUD 操作與資料庫互動。
  • Spring Data JPA:@Entity, @id, @GeneratedValue, JpaRepository, Query methods。
  • 可選:Hibernate 基礎。

資料庫方面,SQL 是必須的 (SELECT, JOIN, GROUP BY, ORDER BY 等基礎查詢,以及正規化和 CRUD)。了解如何將資料庫連接到 Spring Boot 是關鍵,常用的關聯式資料庫包括 MySQL 和 PostgreSQL.

前端技術需要基礎的 HTML, CSS (表單, 佈局), JavaScript (函數, 事件, DOM, ES6 特性)。通常會選擇一個現代前端框架如 ReactJS 或 Angular (了解組件, Props, State, 事件處理, Hooks 等),或者使用 Thymeleaf 進行伺服器端模板渲染。

重要的工具和技術包括:

  • Maven/Gradle:建構工具。
  • Git/GitHub:版本控制。
  • Postman:API 測試。
  • Lombok:減少 Java 樣板程式碼,例如自動生成 Getter/Setter。
  • JUnit:基礎單元測試工具。

建議通過創建一個小型專案來實踐這些技能,例如一個員工管理系統或圖書商店應用程式,整合 Spring Boot、前端技術 (React 或 HTML/JS)、MySQL 或 PostgreSQL 資料庫,並將程式碼放在 GitHub 倉庫中。

實際的開發經驗往往涉及部署。將 Java Spring Boot 應用程式 Docker 化 並部署到 AWS EC2 是一個常見的實踐。這涉及創建 Dockerfile 來建構和運行應用程式,使用 Docker Compose 來管理多個容器 (如應用程式和資料庫)。通過 Docker,應用程式變得環境獨立,易於在任何支援 Docker 的伺服器上運行。部署到 AWS EC2 涉及啟動實例、安裝 Docker 和 Docker Compose,克隆專案並使用 Docker Compose 運行。這個過程能學到容器化、環境變數管理、雲端基礎設施管理和調試部署問題等關鍵技能。

在實際部署中,JVM 記憶體調優對於 Spring Boot 應用程式的效能至關重要。

[Java 全端開發者要求原文連結 URL: https://ift.tt/0ChpDIO] [Docker 化 Spring Boot 應用程式到 AWS EC2 原文連結 URL: https://ift.tt/Yqk9x1F] [JVM 記憶體調優原文連結 URL: https://ift.tt/KYbdOza]

提升開發效率的頂級開源工具

除了語言本身,利用優秀的開源工具可以顯著提升 Java 開發流程的效率。

  • Apache Maven:專案建構工具,負責依賴管理、標準化專案佈局和協調建構流程。它自動處理函式庫獲取和更新,並通過約定優於配置來簡化設置。
  • JUnit:用於編寫和運行單元測試的框架。
  • Mockito:單元測試中用於創建模擬對象的框架,可以模擬複雜對象的行為,使測試更加獨立、快速和可靠。它提供靈活的存根 (Stubbing)、驗證 (Verification) 和間諜 (Spying) 功能。
  • Spring Boot:加速 Java 應用程式開發的框架,通過自動配置和預設值,讓你快速建立生產就緒的應用程式。它包含嵌入式伺服器和豐富的生態系統,非常適合微服務和雲原生環境。
  • Gradle:另一個強大的專案建構工具,相比 Maven 更具靈活性,使用基於 Groovy 或 Kotlin 的 DSL 編寫建構腳本。其增量建構功能可以加快開發週期。
  • Lombok:一個 annotation 處理器,通過簡單的註解自動生成 Java 類別中的樣板程式碼,如 Getter、Setter、建構子等。這顯著減少了程式碼量,提高了可讀性和開發速度。
  • Guava:Google 提供的一個 Java 工具函式庫,包含豐富的實用類別,用於處理集合、快取、字串、函數式程式設計等方面。它提供了許多標準庫中沒有但非常實用的功能。
  • SLF4J:一個用於 Java 應用的日誌記錄外觀 (Facade),它允許你在程式碼中獨立於底層日誌實現來進行日誌記錄。你可以輕鬆切換不同的日誌後端 (如 Logback, Log4j),而無需修改應用程式程式碼。它的參數化日誌功能可以提高效能。

這些工具共同構成了現代 Java 開發者工具箱的重要組成部分,幫助你編寫更乾淨、更高效、更易於維護的程式碼。

[頂級開源 Java 工具原文連結 URL: https://ift.tt/CVyifOL]

Java 日報 – 2025 年 6 月 7 日

今日頭條

  • Java 慶祝 30 週年與 Java 25 的發展 Java 語言迎來了它的第 30 個生日。儘管曾多次被預言「死亡」,Java 仍然非常活躍並持續發展。目前有 17 個活躍的 Java Enhancement Proposals (JEPs) 針對 Java 25。這些 JEPs 包括 Module Import Declarations (JEP 511)、Compact Source Files and Instance Main Methods (JEP 512)、Structured Concurrency (第五次預覽,JEP 505)、Flexible Constructor Bodies (JEP 513),以及引入了 Stable Values API 和 Key Derivation Function API (JEP 510)。Instance Main Methods 在 JDK 25 中已從預覽階段轉為最終版本。這些更新顯示了 Java 生態系統正在快速演進。

開發實用技巧

  • 理解 Java Optional 學習如何使用 Java Optional 來避免 NullPointerException 是提升程式碼健壯性的重要一步。Optional 是一個容器物件,用來表示可能為空(null)的值。
  • 常見的 Java 類型轉換 在 Java 開發中,處理不同資料類型並經常需要在 String、數字、日期和集合之間進行轉換是必不可少的。這些轉換在建構 REST APIs、微服務和企業應用程式中尤其重要。
  • 解決 Spring JDBC 的 IncorrectResultSetColumnCountException 使用 Spring 的 JdbcTemplate 時,常見的陷阱是嘗試將多列查詢結果直接映射到自定義的 POJO 類別,這會導致 IncorrectResultSetColumnCountException。queryForList(String sql, Class<T> elementType) 方法僅用於查詢單列並返回 List<T>。若要從數據庫中檢索多列並將每行表示為一個 Map,應使用 queryForList(String sql) 方法,它返回 List<Map<String, Object>>。正確的方法是使用 JdbcTemplate 的 query() 方法配合 RowMapper,特別是方便的 BeanPropertyRowMapper 類別,它可以通過匹配數據庫的列名和 Java 類別的屬性名來工作,節省了編寫自定義 RowMapper 程式碼的麻煩。
    • Resolving Spring JDBC “IncorrectResultSetColumnCountException: Incorrect column count”:https://ift.tt/KOuz8ND
  • Java Diff Utils 指南 Java Diff Utils 是一個輕量級且功能強大的函式庫,用於計算文本資料之間的差異。它支援字元級和行級比較,並能生成統一的 diff 輸出。其主要優點包括簡單性、可擴展性、跨平台和開源。該函式庫常用於版本控制系統和應用補丁。可以將其添加到 Spring Boot 應用程式中,透過 Maven 方便地管理依賴。核心類別如 DiffUtils、Patch 和 UnifiedDiffUtils 都是工具類,無需顯式實例化。該函式庫可用於比較字串列表、生成統一 diff、應用補丁 以及建構並排的 diff 視圖。
  • 在 Java 中偵測有向圖中的迴圈 (DFS 解法) 對於準備 FAANG 面試的開發者來說,在 Java 中使用 DFS 偵測有向圖中的迴圈是一個必備的圖演算法技巧。
  • Flyweight Pattern:Java 設計模式指南 了解 Flyweight Pattern 如何節省記憶體並提升效能。這對於 Java 開發者來說是必讀的設計模式。

架構與生態系統

  • Spring Cloud Kubernetes 3.0.7 Spring Cloud Kubernetes 旨在連接 Spring Boot 微服務與 Kubernetes。目前的版本是 3.0.7。Spring Cloud Kilburn 版本 (2022.0.11) 雖然變化不大,但也值得關注。
  • 使用 Spring AI 在 Java 中建構 AI 應用 人工智慧為軟體應用程式提供了巨大的潛力。透過 Spring AI 1.0,在 Java 中建構自己的 Retrieval Augmented Generation (RAG) 應用程式將變得更容易。可以利用 Spring AI、Elasticsearch 等功能。還提供了在 Java 中建構 AI 應用和代理、以及如何使用 Spring AI 和 Java Virtual Threads 批量發送提示的指南。
  • Spring Pokédex:一個基於 AWS Serverless 的 Spring 應用程式 Spring Pokédex 展示了如何使用 Spring 和 AWS 服務(如 AWS Cognito 進行用戶管理、S3-Presigned URLs 安全上傳圖片、Momento Topics 實現實時通知、Momento Cache 生成分享連結和進行速率限制、CloudFront signed cookies 保護圖片訪問、DynamoDB 存儲掃描歷史)來建構一個現代化的無伺服器事件驅動應用程式。
  • 使用 Java 連接 MongoDB 時的連接超時錯誤 Java 開發者經常與 MongoDB 協同工作。一個常見的問題是連接超時錯誤 (MongoTimeoutException),這發生在 MongoClient 無法在規定時間內連接到伺服器時。這可能由伺服器過載、網路問題或配置錯誤的地址引起。
    • How to Identify the Underlying Causes of Connection Timeout Errors for MongoDB With Java:https://ift.tt/VWsDUu
  • Kotlin Multiplatform 與 Java 在 Android 上的比較 隨著 2030 年的臨近,Kotlin Multiplatform (KMP) 作為一種旨在統一跨平台程式碼庫的技術備受關注。KMP 允許在 Android、iOS、Web 和桌面應用程式之間共享通用業務邏輯,提供程式碼重用、更快的開發週期和現代語言優勢(如 Null 安全和協程)。然而,Java 在 Android 上仍然具有龐大的影響力,擁有遺留程式碼庫、成熟的生態系統和強大的社區支持。專家認為,到 2030 年,KMP 與 Java 將是共存而非完全取代。Java 的 JVM 生態系統將繼續在 Android 開發中蓬勃發展,而 KMP 提供了一種建構真正跨平台應用程式的方式。KMP 採用面臨的挑戰包括工具成熟度、學習曲線、函式庫可用性、效能細微差異以及生態系統和社區規模較小。
  • Java 並非 100% 物件導向 「Java 並非 100% 物件導向」是一個面試官喜歡問的問題。深入理解這一點有助於更好地掌握 Java 的特性。
    • Java is Not 100% Object-Oriented — And Here’s Why Interviewers Love This Question!:https://ift.tt/PhljOsH
  • Java 面試準備 準備 Java 面試時,了解常見的 Java 面試問題非常重要。

最新 JEPs 和更新

  • 以下是一些針對 JDK 25 的 JEPs:
    • JEP 511: Module Import Declarations
    • JEP 512: Compact Source Files and Instance Main Methods
    • JEP 505: Structured Concurrency (5th Preview)
    • JEP 513: Flexible Constructor Bodies
    • Java 25 Introduces Stable Values API for Deferred Immutability and Improved Application Startup
    • Instance Main Methods Move from Preview to Final in JDK 25
    • JEP 510: Key Derivation Function API
    • JEP targeted to JDK 25: 511: Module Import Declarations:https://ift.tt/Ms4fmQ3
    • JEP targeted to JDK 25: 512: Compact Source Files and Instance Main Methods:https://ift.tt/Ms4fmQ3
    • JEP targeted to JDK 25: 505: Structured Concurrency (5th Preview):https://ift.tt/Ms4fmQ3
    • JEP targeted to JDK 25: 513: Flexible Constructor Bodies:https://ift.tt/Ms4fmQ3
    • Java 25 Introduces Stable Values API for Deferred Immutability and Improved Application Startup:https://ift.tt/Ms4fmQ3
    • Instance Main Methods Move from Preview to Final in JDK 25:https://ift.tt/Ms4fmQ3
    • JEP 510: Key Derivation Function API:https://ift.tt/Ms4fmQ3

學習與進階

  • 掌握 Java 物件導向程式設計 (OOP) 本系列文章是關於 Java 中物件導向程式設計的指南,涵蓋了抽象和介面等概念。
  • 函式式程式設計在 Java 8 中的應用 Java 8 引入了 Lambda 表達式、函式式介面 (如 Predicate, Function, Consumer)、Streams API 和方法引用,這些都是函式式程式設計在 Java 中的重要特性。Optional 類別也是其中之一。
  • 結構化併發 (Structured Concurrency) Structured Concurrency 是 Java 中處理併發的一個重要方向。Java 25 中的 JEP 505 是其第五次預覽。
  • Java 中的模式匹配 (Pattern Matching) 模式匹配可以幫助編寫更好、更清晰的程式碼和 API。

社區與活動

  • 六月有一些 Java 相關的線上和線下會議:
    • IntelliJ IDEA Conf (線上, 6 月 3-4 日)
    • J-Spring (荷蘭烏特勒支, 6 月 5 日)
    • Le Paris JUG Java Day (法國巴黎, 6 月 5 日)
    • JConf Méx (墨西哥新墨西哥州, 6 月 7 日)
    • Devoxx Poland (波蘭克拉科夫, 6 月 11-13 日)
    • DevConf (捷克布爾諾, 6 月 12-14 日)
    • JSail Unconference (荷蘭赫默勒姆, 6 月 23-27 日)
    • Voxxed Days Luxembourg (盧森堡蒙多夫萊班, 6 月 19-20 日)
    • Conferences and Events list:https://ift.tt/Ms4fmQ3
  • 可以觀看 Spring Leadership Meeting 的直播。
  • IntelliJ IDEA 2025.2 的早期訪問計劃 (EAP) 已開放。也可以在 IntelliJ IDEA 中試用 Declarative Gradle EAP3。
  • 探索 Java 使用者群體 (JUGs)。
  • Oracle 推出了新的認證考試引擎。

Java 日報 – 2025 年 6 月 6 日

歡迎回到我們的 Java 資訊日報!今天,我們將再次深入探索 Java 世界的脈動,涵蓋從最新的版本資訊到核心程式設計概念,從設計模式到效能優化,以及不斷擴展的框架與工具生態系統。

Java 的韌性與演進:三十而立

Java 程式語言慶祝了它的 30 週年,這是一個重要的里程碑。這個語言最初以 「一次編寫,隨處執行」(write once, run anywhere) 的承諾問世,如今已在技術發展的三個十年中不僅存活下來,而且蓬勃發展。從早期的行動電話市場 (Java ME),到企業應用開發 (Java EE/Jakarta EE),再到現今的雲端原生應用程式和新興的 AI 領域,Java 都證明了它的持久力。

JVM (Java Virtual Machine) 被視為 Java 成功的基石。Spring 框架的創建者 Rod Johnson 稱讚 JVM 是「一個了不起的軟體。它既穩健又高效能,支撐著世界大部分的運行」。Forrester 分析師 Andrew Cornwall 也指出,將 VM 與語言分離,讓其他語言(如 Groovy 和 Kotlin)能以創新的方式使用 Java VM 和位元碼。

Java 生態系統的開放原始碼性質也是其長壽的核心要素。Apache Software Foundation 和 Eclipse Foundation 等組織在許多重要的 Java 專案中扮演了關鍵角色。Sun Microsystems 早年採用的「創新發生在其他地方」的策略,以及將 Java 開源並創建 OpenJDK 專案,使得 Java 即使經歷了 Oracle 的收購和授權模式的變化,依然蓬勃發展。Spring 和 Spring Boot,以及多種 OpenJDK 發行版(如 Temurin),都是充滿活力的生態系統的證明。

Java 的一個顯著成就,是它在不斷演進的同時,依然維持了向下兼容性。儘管語言經歷了現代化,Java 在維護兼容性方面表現出色,許多早期編譯器創建的 Class 文件仍然可以在今天的 VM 上運行。

Java 版本與未來

  • Java 25 即將於 9 月 16 日發布。它帶來了令人印象深刻的功能集,包括 11 個已完成的功能以及 7 個仍在醞釀中的功能。
  • Java 21 是一個 Long-Term Support (LTS) 版本。它是用於開發行動和桌面應用程式的高階、物件導向、基於類別的程式語言。
    • 在 AlmaLinux 10 伺服器上安裝 Java 21 OpenJDK 或 Oracle JDK 的詳細步驟和命令已提供。
    • 您可以學習如何在不同的 Java 版本之間切換預設版本。
    • 也可以設定 JAVA_HOME 環境變數,這對某些 Java 應用程式是必需的。
    • 原文連結 (Java 21 安裝指南): https://ift.tt/R1H6hfW
  • 一些分析師認為,儘管 Java 語言進行了顯著的現代化,但在一些開發者中,它仍被視為有點「老舊」。這主要是因為大部分 Java 開發是現有系統的例行維護,而非全新的綠地開發。Java 現已成為雲端業務的核心支柱,就像 COBOL 對於大型主機一樣。
  • 然而,許多專家認為 Java 的未來是光明的。JVM 在下一波應用程式,特別是釋放生成式 AI 帶來的商業價值方面,將發揮重要作用。儘管 AI 領域是一個挑戰,但 Java 仍在不斷適應並展現出強大的實用韌性。

核心 Java 概念

理解 Java 中的基礎概念對於有效開發至關重要:

  • Static 方法與變數: static 關鍵字用來標示屬於類別本身而非特定物件實例的成員。
  • 不可變 (Immutable) 與可變 (Mutable) 物件: 理解兩者差異對於編寫可靠、執行緒安全且可預測的程式碼至關重要。不可變集合是指創建後無法修改的集合,這種特性有助於創建安全的程式碼。
  • JVM, JRE, 和 JDK: 這些是構成 Java 環境的基本元素。
    • JVM (Java Virtual Machine): 執行 Java 位元碼的引擎。
    • JRE (Java Runtime Environment): 包含 JVM 和執行 Java 應用程式所需核心函式庫的套件,只能用於執行應用程式。
    • JDK (Java Development Kit): 包含 JRE 以及開發工具(如編譯器、建構工具、除錯工具)的完整套件,用於開發和執行 Java 應用程式。
    • 原文連結 (JVM, JRE, JDK 解釋): https://ift.tt/MxDCva1
    • 原文連結 (Java 21 安裝指南,含 JRE/JDK/JVM 解釋): https://ift.tt/R1H6hfW

Java 設計模式

設計模式提供了解決常見程式設計問題的驗證過的方案:

  • 裝飾者模式 (Decorator Pattern): 允許在執行時為物件添加行為,而無需產生過多的子類別。文章使用有趣的比薩類比來解釋。
  • 責任鏈模式 (Chain of Responsibility Pattern): 用於創建彈性且解耦的請求處理器。

Java 效能提升

提升 Java 應用程式的效能是一個持續關注的重點:

  • parallelStream() vs stream(): 理解兩者之間的關鍵差異、它們如何影響效能以及何時使用,對於有效處理集合數據至關重要。
  • CUDA 整合: Java 開發者不再僅限於 CPU 核心。可以透過使用 Compute Unified Device Architecture (CUDA) 和基於 Java Native Interface (JNI) 的整合模式,將 GPU 級別的加速引入企業級 Java 應用程式。這對於解決高吞吐量挑戰非常有用。

Java 框架與工具

Java 生態系統擁有豐富的框架和工具:

  • Spring 框架: Rod Johnson 強調 JVM 始終允許新的語言,且 Java 社群產生了許多出色的開源軟體,有助於創造商業價值。
  • Spring Boot: 是活躍生態系統的一部分。文章探討了 Spring Boot 3.5 與 Java 21 之間的關係。
  • @PropertySource Annotation: 這個 Annotation 用於指示 Spring 從指定位置載入特定的屬性文件。
    • 它通常與 @Configuration 一起使用。
    • 允許從任何位置載入屬性文件。
    • 在 Java 8 及以上版本中可重複使用,以載入多個文件。
    • 支援使用 Spring Expression Language 的 Placeholder。
    • 可以透過 ignoreResourceNotFound = true 忽略找不到的檔案。
    • 如果多個文件定義了同名屬性,後面的定義會覆蓋前面的。
    • 文章提供了多個使用範例。
    • 原文連結: https://ift.tt/Dtupbk1
  • Spring AI: Spring AI 1.0 是一個新的工具包,旨在簡化使用 Spring Boot 將 AI 功能添加到 Java 應用程式的過程。它支援與各種模型(如 EmbeddingModel, ChatModel, ImageModel)和向量儲存 (Vector Store) 的整合。
  • ADK (Agent Development Kit) 與 LangChain4j 整合: ADK Java 目前原生支援 Gemini 和 Claude。將 ADK 與 LangChain4j 整合的工作正在進行中,這將使 ADK Java 能夠存取 LangChain4j 支援的任何模型,包括來自 OpenAI、Anthropic、Mistral 以及通過 Ollama 運行的模型(如 Gemma, Qwen, Phi 等)。
    • 這項整合允許在 ADK 中使用本地 Ollama 模型 或大型供應商模型(如 Anthropic, OpenAI),並支援串流模型。
    • 如果底層的 LangChain4j 模型支援函式調用,工具也將能正常運作。
    • 一個代理程式也可以作為工具使用,這在多代理程式場景中混合使用不同的 LLM 非常有趣。
    • Spring 創始人 Rod Johnson 也發起了 Embabel 專案,這是一個代理程式框架,專注於為 JVM 開發先進的 AI 代理程式,目標是超越 Python 代理程式框架。
    • 另外,也提到了使用 Java 和特定協議 (A2A 和 MCP) 建構多代理程式系統的可能性。
    • 原文連結 (ADK 與 LangChain4j 整合): https://ift.tt/pIOqzT7
    • 原文連結 (Embabel 介紹): https://ift.tt/cwPSav3
    • 原文連結 (多代理程式系統): https://ift.tt/qbWRLOV
  • Java Records: 被描述為編寫資料模型最乾淨的方式,可以避免大量的 boilerplate 程式碼.
  • Java Dockerfiles: Dockerize Java 應用程式是一個重要步驟。編寫高效的 Java Dockerfile 需要理解其目的,即包含用於建構 Docker 映像的指令,定義基礎映像、安裝依賴項以及指定容器啟動時執行的命令.

Java 在業界的應用

Java 在業界有廣泛的應用:

  • 一篇來源分享了將一個擁有 500,000 用戶的 Java Spring Boot 銀行系統重寫為 Go 語言的經驗。
  • 如何在 Java 中使用 DFS 解決檢測無向圖中的環的問題。

總結而言,Java 憑藉其持續的演進、強大的開放原始碼生態系統 以及對向後兼容性的堅持,在不斷變化的技術格局中保持著其重要性和相關性。

Java 日報 – 2025 年 6 月 5 日

Kotlin 與 Spring 深度整合,增強後端開發 JetBrains 和 VMware 的 Spring 團隊宣佈一項策略合作,將深化 Kotlin 程式語言在 Spring 後端開發中的支援。這項倡議旨在簡化 Kotlin 在生產級伺服器端應用程式中的使用,並將雙方工程團隊之間非正式的協作正式化。這次合作將針對幾個關鍵領域:

  • 完整的 Null Safety (空安全):在 Kotlin + Spring 應用程式中預設提供改進的類型安全,無需額外配置。
  • 官方學習材料:為學習 Spring 的開發者提供基於 Kotlin 的教學和指南。
  • 更快的 Reflection (反射):JetBrains 正在開發 kotlinx.reflect,針對如依賴注入和序列化等使用案例進行優化。
  • DSL 增強功能:新的 Bean Registration DSL 是使用 Kotlin 慣用法現代化 Spring 配置的第一步。

雖然有些功能仍在開發中,但 Kotlin 在 Spring 社群中已被廣泛採用。Kotlin 的具名參數 (named parameters)、擴充函數 (extension functions) 和協程支援 (coroutine support) 等功能已幫助其成為後端開發者追求簡潔、富有表現力的程式碼的流行選擇。Spring Framework 的共同創辦人 Juergen Hoeller 表示,他們已將 Kotlin 作為 Spring 應用程式的一等語言來擁抱。Spring Framework 的原始創作者 Rod Johnson remarked 稱讚「Kotlin 和 Spring Boot 是一個非常優雅且強大的技術堆疊」。

根據內部 Spring 使用數據,目前有 27% 的 Spring 開發者在某種程度上使用 Kotlin。Expedia、Atlassian 和 Mercedes-Benz.io 等公司正在 Spring 基礎的系統中積極使用 Kotlin。這次合作預計將透過降低 Kotlin 開發者採用 Spring 的門檻來加速這一趨勢。

原文連結:https://ift.tt/OGqcZsu

JDK 24 發佈,帶來強大新特性 JDK 24 已經發佈,它包含了七個強大的特性,這些特性將改變你編寫 Java 的方式。這是一個重要的升級,Packed with real changes that simplify code, boost performance。Java 24 帶來了效能升級、JVM 改進以及強大的新 API。

原文連結:https://ift.tt/jruXb3K, https://ift.tt/fRoK8Qb

使用 LangChain4j 和 MongoDB Atlas 開發基於 LLM 的 Java 應用程式 一篇文章深入探討了如何使用 Langchain4j、MongoDB Atlas 和本地運行的 Ollama 來構建 AI 聊天機器人。該解決方案利用了 Retrieval-Augmented Generation (RAG) 模式,從你的資料中獲取相關資訊並用於生成準確且具有上下文的回答。

RAG 結合了檢索式方法和生成式語言模型,旨在提高大型語言模型 (LLMs) 回應的事實準確性、相關性和上下文豐富性。它解決了傳統 LLMs 的局限性,例如靜態知識、上下文限制和幻覺 (產生聽似合理但不正確或捏造的資訊)。RAG 的主要優勢包括:

  • 提高了準確性和可靠性。
  • 克服了 LLM 訓練數據限制。
  • 成本效益 (數據變化時無需重新訓練 LLM)。
  • 可解釋性。
  • 支援特定領域的知識庫。
  • 減少幻覺。

MongoDB 作為一個文件型的 NoSQL 資料庫,為構建 RAG 應用程式提供了靈活且可擴展的基礎。其文件導向儲存結構非常適合 RAG 管線中檢索的資訊塊。MongoDB Atlas 支援全文檢索和最重要的向量搜索 (Vector Search),這對於 RAG 中的語義搜索至關重要。其無模式設計和水平擴展性也使其適合處理 RAG 系統中的知識源。在 RAG 架構中,MongoDB 可用於儲存每個段落或片段作為帶有元數據和嵌入向量的文件,用於檢索相關文件,並用於增強 LLM 的回應。

文章提供了一個 Java 實例,展示如何設置 MongoDB 連接、定義 Embedding Store (基於 MongoDB 的向量能力使用 MongoDbEmbeddingStore),配置 Embedding Model (使用 Ollama 的 nomic-embed-text) 和 Chat Language Model (使用 Ollama 的 orca-mini)。它還涵蓋了載入、解析、分割和攝取文件到 MongoDB 的過程,設置 Retriever 進行語義搜索,定義 Assistant 介面並綁定到模型,以及實現互動式聊天迴圈。程式碼範例展示了如何編譯和運行應用程式。

LangChain4j 作為 LangChain 框架的 Java 版本,提供了豐富的工具箱,包括提示模板、聊天記憶體管理、函數調用、Agents 和 RAG。它簡化了將 LLMs 整合到 Java 應用程式的過程。LangChain4j 支援結構化提示詞 (Structured Prompt Engineering),並支援與各種向量資料庫整合進行向量搜索,如 MongoDB Atlas 和 Couchbase。它也允許創建智能代理 (Agents),這些代理可以透過與 LLMs 和外部工具互動來執行任務。

原文連結:https://ift.tt/1qdiKfj, https://ift.tt/41hjnCN

Spring AI 結合 GPT-4o 從圖像中提取結構化數據 一篇文章展示了如何使用 Spring AI 和 OpenAI 的 GPT-4o 模型從圖像中提取結構化數據。這在許多領域都是必需的,例如掃描收據和文件、分析監控系統中的視覺內容。藉助像 OpenAI 的 GPT-4o 這樣多模態 AI 模型的興起,現在可以使用簡單的提示詞直接從圖像中檢索結構化資訊。

文章提供了一個使用 Spring Boot 和 OpenAI 的 GPT-4o 的範例,透過 Spring AI 來計算圖像中不同顏色的氣球數量。它展示了專案設置 (需要 Java 21 和 Spring AI 依賴),定義數據模型來表示 AI 的回應 (如 BalloonColorCount 和 BalloonCountSummary 類),以及一個 Service (BalloonAnalysisService) 使用 Spring AI 的 ChatClient 來向模型發送提示、圖像和使用者顏色列表。這個 Service 構建了一個系統提示來指示 AI 只關注指定的顏色,然後將使用者輸入和圖像文件附加到使用者提示中。AI 的回應會自動映射到 BalloonCountSummary 對象。文章還提供了一個 REST API 控制器 (BalloonImageController) 來處理圖像上傳和顏色過濾,並展示了範例請求和 JSON 輸出。

這個應用程式利用 Spring AI 的 ChatClient 發送:一個系統提示 (指示模型任務)、一個使用者提示 (指定要提取的數據) 以及一個圖像附件,這使得多模態 GPT-4o 模型能夠同時處理文本和視覺內容。Spring AI 在內部處理序列化和回應映射到 Java 類別的過程。

原文連結:https://ift.tt/vqoh1Ed

JVM 與原生編譯:Spring Boot 的新選擇 傳統上,Java 程式碼編譯為字節碼並在 Java Virtual Machine (JVM) 上運行。雖然這種方式運行良好,但也伴隨著啟動慢、記憶體使用量高以及對運行時 JVM 的依賴等權衡。

現在,藉助 Spring Native 和 GraalVM 等工具,可以將 Spring Boot 應用程式編譯為原生可執行文件 (native executables)。這些二進位文件啟動速度快 (毫秒級) 且記憶體使用量顯著降低 (20-40MB),並且無需 JVM 即可運行。這稱為 Ahead-of-Time (AOT) 編譯,程式碼在運行之前被編譯為原生機器指令。

從 Spring Boot 3.x 開始,Spring 正式支援透過 Spring AOT 引擎和 Spring Native (基於 GraalVM) 進行 AOT + 原生圖像編譯。這意味著你可以將 Spring Boot 應用程式編譯為一個自包含的二進位文件。

JVM 與原生編譯的關鍵區別在於對 JVM 的依賴、啟動時間、記憶體使用量和打包方式。原生編譯非常適合微服務、Serverless 函數以及具有短生命週期和高可擴展性需求的應用程式。Java 不再僅僅是「一次編寫,隨處運行」,現在它也**「快速、輕量級且雲端就緒」**。

原文連結:https://ift.tt/DJVw2qS

討論及學習資源

  • 一篇文章詢問 Java 程式設計師工作中令人討厭的部分。 原文連結:https://ift.tt/EeqWbBm
  • 關於在 Java 中查找兩個 Set 的交集的方法。 原文連結:https://ift.tt/Od9rCwN
  • 關於在 Java 中從 List 中刪除重複項的多種方法。 原文連結:https://ift.tt/ROS94mH
  • 關於在 Java 中將 List 轉換為 Map 的多種方法。 原文連結:https://ift.tt/aUqCDyl
  • 提供掌握 Java 中 Command Pattern (命令模式) 的指南,對面試有幫助。 原文連結:https://ift.tt/Esoclwz
  • 提供面試中不可跳過的進階核心 Java 概念。 原文連結:https://ift.tt/UhdxsVm
  • 討論如何設計像高級 Java 開發者那樣處理故障的 Java 架構。 原文連結:https://ift.tt/xV6wRMe
  • 關於 Java 中 NullPointerException (空指針異常) 的最佳實踐。 原文連結:https://ift.tt/6QG7eFJ
  • 一篇文章解釋了為什麼 Java 在 2025 年仍然很重要以及為什麼現在應該學習它。 原文連結:https://ift.tt/SYJ1EOD
  • 關於 Spring Boot 載入 ApplicationContext 失敗的常見原因和修復方法。 原文連結:https://ift.tt/U24zkwv, https://ift.tt/OidQFSn
  • 一本名為**《Cruising Along with Java》** 的書,介紹 Java 9 到 24 的新特性,幫助開發者現代化和模組化應用程式。 原文連結:https://ift.tt/xQBOjzP
  • 使用 Collections.sort 在 Java 中對 List 進行排序。 原文連結:https://ift.tt/1HQZxi7

關於反應式程式設計的討論 有觀點認為反應式程式設計可能已經過時,因為 Spring Boot 結合 Java 21 的虛擬線程 (Virtual Threads) 可以用更簡單的程式碼實現可擴展的併發性。

原文連結:https://ift.tt/F4C3psk

Java 日報 – 2025 年 6 月 4 日

掌握 Java 中的物件導向程式設計 (OOP)

一篇關於如何在實際案例研究中掌握物件導向程式設計四大支柱的文章被分享。這篇文章使用真實程式碼,展示如何應用封裝、抽象、繼承和多型等 OOP 原則來修復一個損壞的 Java 電子商務系統。 https://ift.tt/0vAThGd

深入理解 Java 中的資料型別

Java 中的資料型別指定了變數可以儲存的不同大小和值。Java 中有兩種資料型別:基本資料型別 (Primitive data types) 和非基本資料型別 (Non-primitive data types)。 基本資料型別包括 boolean, char, byte, short, int, long, float 和 double。這些型別由語言預先定義,代表基本值。來源詳細列出了這些型別的位元大小和範圍,例如 byte 是 8 位元帶符號整數,範圍為 -128 到 127。 非基本資料型別是由程式設計師建立的,用於儲存對記憶體中物件的引用。範例包括類別 (Classes)、介面 (Interfaces)、字串 (String) 和陣列 (Arrays)。 在記憶體儲存方面,基本資料型別儲存在棧 (stack) 中,而非基本資料型別儲存在堆 (heap) 中。基本資料型別速度較快,非基本資料型別速度較慢。Java 是一種靜態型別的程式語言,所有變數在使用前都必須聲明其型別和名稱。 https://ift.tt/bosg80u

深入探討 Java Streams 的實作 – 串流建立

自 Java 8 引入 Stream 和 Lambda 以來,它們為 Java 語言帶來了巨大改進。儘管 Stream 是一個介面,其原始意圖是隱藏所有實作細節,但我們可以探索其內部工作原理。 建立 Stream 有幾種方式,直接的方法是使用靜態方法,例如 of, empty, iterate, generate,以及將集合和陣列轉換為 Stream。 使用 Stream.builder() 可以透過 Builder 模式建立 Stream。Builder 實作了 Consumer 介面,可以透過 accept 或 add 方法添加元素。add 方法會呼叫 accept 方法。accept 方法會追蹤第一個元素和元素數量,當有兩個或更多元素時,會將元素添加到 SpinedBuffer 中。SpinedBuffer 是一個不可變、有序的項目集合,包含建構和遍歷兩個階段。 當完成 Stream.Builder 後,呼叫 build() 方法會實例化 Stream,它總是接受一個 Spliterator 和一個指示 Stream 是否平行處理的旗標。StreamBuilderImpl 自身也是一個 Spliterator,當 Stream 包含 0 或 1 個元素時,它會被用作 Spliterator,否則將使用 SpinedBuffer 的 Spliterator。 可以使用 Stream.empty() 建立一個空 Stream,它被設計用來替代 null。這由一個空的 Spliterator 建立。 使用 Stream.of(T t) 可以建立包含單一元素的 Stream。 Stream.ofNullable(T t) 提供了單元素 Stream 的 null 安全保證,如果元素為 null 則返回一個空 Stream。 Stream 可以從陣列建立,可以透過 Arrays.stream 方法或 Stream.of 方法傳遞一個陣列 (或可變參數)。Stream.of 方法會呼叫 Arrays.stream。這個過程涉及指定開始和結束索引來建立 Spliterator。 透過計算也可以生成 Stream,例如使用 Stream.iterate 方法。它透過重複呼叫一個函式來產生 Stream,這個函式使用初始值或前一個結果作為參數。預設情況下,這種 Stream 可能是無限的。iterate 還有一個重載版本,接受一個 Predicate 作為第二個參數,以提供更多控制來指示計算何時結束。 另一個方法是 Stream.generate,它接受一個 Supplier 來生成 Stream。這可以用來提供單一或隨機值。這個 Stream 通常也是潛在無限的。 最後,可以使用 Stream.concat 方法將兩個 Stream 連接起來,建立一個新的 Stream。結果 Stream 如果其中任何一個輸入 Stream 是平行的,也會是平行的。 值得注意的是,Stream 具有 onClose 方法,這意味著它們是 Closeable 和 Autocloseable 資源。這對於從 I/O 資源建立的 Stream 資源管理非常重要。 未來的文章將深入探討 Spliterators, StreamSupport 類別, Pipelines, Operation stages, Stream evaluation 等主題。 https://ift.tt/RBkYOQo

使用 JDBC、DTOs 建立乾淨的 Java 應用程式

一篇關於如何使用 JDBC、DTOs 以及支援雙資料庫來建立乾淨的 Java 主控台應用程式的指南。 https://ift.tt/8dRybEt

Java 開發者的 Maven 教學

為 Java 開發者提供了完整的 Maven 教學,其中包含面試問答。 https://ift.tt/Jv4x2em

現代 Java 解決了過去令人煩惱的 12 個問題

文章探討了現代 Java (自 Java 11 起) 如何解決過去在 Java 開發中遇到的 12 個問題。 https://ift.tt/S95n6fQ

探索 ForkJoinPool 如何驅動 Java 的高效能平行處理

ForkJoinPool 是 Java 中一個專門的 ThreadPoolExecutor,用於高效地使用工作執行緒池執行大量任務。它基於「分而治之」(divide-and-conquer) 原則,將大任務分解為更小的子任務 (fork),由不同執行緒獨立處理,然後合併結果 (join)。這特別適用於容易平行化的 CPU 密集型操作。 ForkJoinPool 的一個突出特點是其工作竊取演算法 (work-stealing algorithm)。每個工作執行緒維護自己的任務雙端佇列 (deque)。執行緒主要處理自己佇列頭部的任務,但如果變為空閒,它會從其他忙碌執行緒的佇列尾部「竊取」任務。這個機制確保執行緒保持忙碌,提供了出色的負載平衡並提高了整體吞吐量。 自 Java 8 起,使用 parallelStream() 時,內部隱式使用了 ForkJoinPool 的靜態 ForkJoinPool.commonPool()。commonPool() 是由 JVM 管理、全域可用的實例,JVM 處理其生命週期。其預設平行度通常設定為可用處理器核心數減一。 commonPool() 是一個共享資源,CompletableFuture 的非同步方法也預設使用它。ForkJoinPool 優化用於 CPU 綁定任務。將長時間運行的 I/O 綁定任務 提交給 commonPool() 可能會導致資源枯竭、效能嚴重下降甚至死鎖。對於 I/O 綁定任務,建議使用獨立的專用 ExecutorService。 總之,ForkJoinPool 為平行任務執行提供了強大框架,特別是對於計算密集型工作負載。理解其機制有助於編寫更高效能的 Java 應用程式。 https://ift.tt/OWAzRlD

在 Adobe ColdFusion 2025 中從 JAR 檔案建立 Java 類別

Adobe ColdFusion 2025 更新後,現在支援使用內建的 createObject() 函數,透過將 JAR 檔案路徑作為第三個參數傳入,從 JAR 檔案載入 Java 類別。這項功能之前只在 Lucee CFML 中支援,現在兩者都相容,使 CFML 程式碼更具可移植性。 過去,若要在 Adobe ColdFusion 中實現獨立類別載入器,需要使用 Mark Mandel 的 Java Loader 等專案。新方法提供了獨立的類別載入器,避免了將 JAR 檔案添加到 this.JavaSettings 或 lib 資料夾可能導致的依賴衝突問題。 https://ift.tt/RFhK6uT

Java 介面簡介

Java 介面定義了一個契約 (contract)。它指定了類別必須實作的方法,類似於藍圖,告訴類別要做什麼,但不說明如何做。 介面不包含方法體,只列出方法簽名。這使得不同的類別可以用不同的方式實作相同的方法。 使用介面的原因包括實現抽象 (Abstraction),可以隱藏實作細節並專注於類別應該做什麼。它們也有助於多型 (Polymorphism),可以使用介面來建立靈活且可重用的程式碼,例如對待實現相同介面的不同類別時可以採用類似的方式。 https://ift.tt/jnHExf6

使用 LLMs 突變 Java 程式碼

一篇研究探討了使用大型語言模型 (LLMs) 來生成 Java 程式碼突變體的方法。研究目標是比較不同 LLMs 在生成突變體方面的能力。選定的 LLMs 具備程式碼能力、支援聊天模式互動並提供可存取的 API,包括 GPT-3.5-Turbo, GPT-4-Turbo (閉源) 以及 CodeLlama-13b-Instruct, StarChat-β-16b (開源)。 提示 (Prompts) 對於引導 LLMs 生成突變體至關重要。研究遵循最佳實踐,提示包含指令、上下文、輸入資料和輸出指示器。指令指示 LLMs 為目標程式碼元素生成突變體,上下文提供了變異測試的概念定義、目標方法及來自真實錯誤的 few-shot 範例。輸入資料指定了要突變的程式碼元素和數量,輸出指示器指定了 JSON 格式。 few-shot 範例來自真實錯誤 (例如 QuixBugs),這有助於 LLMs 學習突變程式碼的上下文和邏輯。 這篇論文可在 arxiv 上獲取。 https://ift.tt/xhMbyVE

無伺服器 Java:2025 年可擴展應用程式的未來

文章探討了無伺服器 Java 作為 2025 年可擴展應用程式的未來趨勢。作者分享了無需伺服器部署 Java 應用程式如何實現比舊的單體應用程式更好的擴展性。 https://ift.tt/FqTcE2a

Netflix 如何運行在 Java 上?

Netflix 的絕大多數後端服務運行在 Java 上。現代 JVM 提供了強大的垃圾收集器,Spring Boot 變得可擴展且可靠。藉助虛擬執行緒和結構化並發,Java 正在重新奪回其在高吞吐量、低延遲系統設計中的地位。 Netflix 的後端核心是聯邦式 GraphQL 架構。這是所有客戶端應用程式與後端資料互動的主要抽象方式。每個後端團隊擁有一個領域圖服務 (Domain Graph Service, DGS),它實現了整體 GraphQL schema 的一個片段。Netflix 的每個 DGS 都是一個 Spring Boot 應用程式,DGS 框架本身是 Spring Boot 的擴展。Netflix 選擇 Spring Boot 是因為它在規模化應用中得到證實,並且是 Netflix 長期使用的技術,同時也具有可擴展性。後端服務擁有圖的一部分,而不僅僅是其內部資料。 客戶端與網關之間使用 HTTP 和 GraphQL 進行通訊。後端服務之間通過 gRPC 進行通訊,這是一種高效能的二進位協議,支援高效的服務間呼叫。 在 JVM 演進方面,Netflix 許多 Java 程式碼庫曾 আটকে 在 JDK 8 上,因為內部框架導致了鎖定。為了解決這個問題,Netflix 自己修補了不相容的庫,並將所有 Java 服務遷移到 Spring Boot。現在,大多數團隊的基準線是 Spring Boot 在 JDK 17 或更高版本上運行。 升級到 JDK 17 帶來了顯著的好處:

  • G1 垃圾收集器 的效能得到顯著提升,花在 GC 上的 CPU 時間減少約 20%。
  • 停頓時間更少、更短,減少了分散式系統中的級聯超時。
  • 更高的整體吞吐量和更好的 CPU 利用率。 隨後,JDK 21 引入的分代 ZGC (Generational ZGC) 改變了局面。它帶來了一個現代的、低停頓的垃圾收集器,並理解物件生命週期。 分代 ZGC 的優勢包括:
  • 即使在高負載下,停頓時間接近於零。
  • 服務不再因 GC 停頓而超時,錯誤率顯著降低。
  • 更少的 GC 停頓減少了集群範圍的壓力。
  • 集群可以運行得更接近 CPU 飽和。
  • 從操作員的角度來看,僅一行配置更改 (從 G1 切換到 ZGC) 帶來了更平滑的行為、更少的警報和更可預測的擴展。 在並發模型方面,傳統的每個請求一個執行緒的模型在高吞吐量系統中會導致高執行緒計數、記憶體使用膨脹和排程開銷。Java 21+ 引入的虛擬執行緒 (Virtual Threads) 解決了這個問題。這些輕量級執行緒由 JVM 排程,允許阻塞程式碼擴展而不會壟斷資源。與 DGS 框架和 Spring Boot 的整合是自動的,解析器可以預設平行運行。 然而,虛擬執行緒存在潛在的死鎖風險,這可能是由執行緒固定引起的。當虛擬執行緒進入同步區塊時,它會被固定到一個實體平台執行緒上。如果許多被固定的虛擬執行緒在持有鎖時阻塞,並且平台執行緒池耗盡,系統可能會死鎖。Netflix 曾遇到過這個問題,但 JDK 24 通過重寫 synchronized 內部機制來避免不必要的執行緒固定,解決了這個問題。 Netflix 也從 RxJava 轉移開。雖然 Netflix 是響應式程式設計的先驅,但混合使用阻塞和非阻塞模型會導致複雜性。虛擬執行緒的引入改變了這種情況,它允許數千個併發阻塞操作而沒有傳統執行緒的開銷。結合結構化並發,開發人員可以使用普通程式碼表達複雜的非同步工作流程,而無需響應式程式設計的回呼地獄。 Netflix 將其後端服務標準化到 Spring Boot Netflix 堆疊 上,這是一個精心策劃的模組堆疊,將公司特定的基礎設施分層到 Spring 生態系統中。這保持了程式設計模型的清晰。該堆疊包括安全整合、可觀察性支援、服務網格整合、gRPC 框架、動態配置和可重試客戶端。Netflix 與 Spring Boot 上游保持緊密對齊,並建立了工具來平滑升級路徑,例如用於處理 javax.* 到 jakarta.* 命名空間遷移的 Gradle 外掛程式。 總之,Netflix 的 Java 架構是現代的,並且不斷地被重新評估和優化。他們通過積極升級堆疊而不是重寫程式碼,突破了 Java 8 的限制。他們採用了 Spring Boot 作為基礎並進行擴展,並採用了 GraphQL、虛擬執行緒和 ZGC。關鍵點在於:Java 作為一個生態系統仍然具有競爭力;擁有平台能提高速度;虛擬執行緒降低了複雜性;調整基礎設施而不是僅僅程式碼提高了可靠性。 https://ift.tt/wnXMHBJ

安全 Java AI Agents:使用 LangChain4j 和 Auth0 FGA 實現 RAG 的授權

AI agents 正在成為建立應用程式的標準,隨之而來的是對強大安全措施的需求。檢索增強生成 (Retrieval-Augmented Generation, RAG) 系統是建立 AI agents 的基石。然而,確保它們只存取和暴露授權資訊是一個關鍵挑戰。 敏感資訊洩露 是 RAG 系統的常見問題,傳統的基於角色的存取控制 (RBAC) 不足以保護 RAG 應用程式。細粒度授權 (FGA) 或基於關係的存取控制 (ReBAC) 在這裡發揮作用。 RAG 系統面臨獨特的安全性挑戰,例如動態上下文、複雜關係、細粒度控制和效能要求。FGA 可以對使用者、群組和文件之間的複雜關係進行建模,處理分層和傳遞性權限,並有效地擴展授權規則。 Auth0 FGA 是 OpenFGA 的 SaaS 版本,一個開源的細粒度授權系統。它是一個用於管理應用程式中存取控制的強大工具。 Java 在建立 AI 應用程式方面並不落後,擁有龐大的開發者社群和豐富的開源框架生態系統。LangChain4j 是一個流行的 Java AI 框架,提供了類似於 Python/JS 生態系統中的 LangChain 和 LlamaIndex 的功能。它正在成為 Java AI 生態系統的 Spring Boot。LangChain4j 提供了與主要 LLMs 整合、統一 API、提示模板、聊天記憶體管理等功能。 文章展示了如何使用 LangChain4j 的「Easy RAG」功能和 Auth0 FGA 建立一個安全的 Java RAG 系統。FGARetriever 類別實現了 ContentRetriever 並根據 FGA 儲存中定義的授權模型過濾文件。它使用 OpenFgaClient 與 FGA 儲存互動並檢查權限。 文章提供了設定 FGA 實例、創建 FGA 模型和元組的詳細步驟,以及測試應用程式的範例。 保護 RAG 系統的常見模式包括前過濾模式 (在搜尋向量資料庫前檢查權限)、後過濾模式 (先搜尋再根據權限過濾結果,範例中使用的模式) 和混合模式。 Auth0 為 GenAI 提供的產品 Auth for GenAI 正致力於保護 GenAI 應用程式中的使用者資訊。 https://ift.tt/PNmHW6i

從零開始建立自己的 JVM 直譯器

文章介紹了建立自己的 JVM 直譯器。展示了 JVM 的圖表,說明了 Java 原始程式碼如何通過 Java 編譯器生成位元組碼,然後由 JVM 中的 Java 直譯器執行。JVM 運行位元組碼。 https://ift.tt/TtZgrse

Java 簡潔程式碼技巧:像專業人士一樣使用 try-with-resources

在編寫 Java 測試時,經常需要處理檔案、串流或資料庫連接等資源。正確管理這些資源對於防止記憶體洩漏或檔案鎖定至關重要。Java 7 引入的 try-with-resources 語句可以幫助編寫更簡潔、更安全的程式碼。 傳統方法 (在 Java 7 之前) 冗長且容易出錯,需要在 finally 區塊中手動關閉資源。如果忘記關閉資源會導致洩漏。 使用 try-with-resources,即使發生例外情況,Java 也會自動在語句結束時關閉資源。這使得程式碼更清晰、更可靠。 對於測試人員來說,使用 try-with-resources 可以確保在處理檔案、日誌、資料庫或 I/O 串流時資源得到妥善關閉,減少資源洩漏的風險並提高測試的健壯性。 可以在一個 try-with-resources 語句中管理多個資源,資源會以聲明順序的逆序關閉。 總之,應對任何實現 AutoCloseable 介面的資源使用 try-with-resources。它簡化了程式碼,提高了測試可靠性,並帶來了更簡潔的程式碼。 https://ift.tt/ZCsj1W6

使用 a2ajava 在 Java 中建立 MCP 伺服器

這是一份指南,介紹如何設定開發環境,使用 Java 建立 MCP (Model Context Protocol) 和 A2A (Agent-to-Agent) 伺服器。指南列出了必要條件 (JDK 11+, IDE, Claude Desktop Client, Git) 和設定步驟,包括 Fork 和 Clone SpringActions 儲存庫,下載 MCP Connector JAR,安裝並配置 Claude Desktop Client,以及運行和驗證伺服器。 https://ift.tt/5Fwn9NW

Azul 和 JetBrains 合作改善 Kotlin 在 JVM 上的效能

Azul 和 JetBrains (Kotlin 程式語言的創造者) 正在合作解決 JVM 的效能瓶頸。他們旨在結合 Azul 的 runtime 優化專業知識和 Kotlin 細粒度的位元組碼控制,以簡化 Kotlin 應用程式的執行堆疊。 合作的重點是 Azul Platform Prime,一個專注於效能的 Java 平台。它具有基於 LLVM 的 Falcon JIT 編譯器和維持低延遲執行的 C4 垃圾收集器。 基準測試顯示,運行在 Azul Platform Prime 上的 Kotlin 應用程式相比標準 OpenJDK 發行版,延遲降低了 23.9%,吞吐量提高了 30.5%。 Azul Platform Prime Stream Builds 可免費下載用於開發和測試。 https://ift.tt/WkAw1ne

Java 30 周年:一門依舊強勁的語言

2025 年 6 月標誌著 Java 誕生 30 周年。它經歷了架構、範式和所有權的變革,但仍然深深植根於全球基礎設施中。 Java 的起源可以追溯到 1991 年 Sun Microsystems 工程師的 Green Project,最初目標是建立互動電視和嵌入式設備的控制系統。雖然早期關於 Applet 的熱潮已經消退,但 Java 在伺服器端開發中的優勢不斷增強,Java EE (現在的 Jakarta EE)、Spring Framework 和 Android 應用程式開發在 2000 年代和 2010 年代推動了其發展。 在雲原生時代,Java 繼續發展。GraalVM、Project Loom (輕量級執行緒) 和雲優化發行版 (如 Azul Platform Prime) 正在重塑其在微服務和高規模環境中的效能形象。 Java 仍然具有相關性的原因包括:穩定性 (企業關鍵工作負載)、工具 (IntelliJ IDEA、Spring Boot)、效能 (JIT 編譯器、自適應 GC、AOT 編譯) 和社群 (數百萬開發者、豐富的共享知識)。 儘管存在 Kotlin、Scala 等 JVM 語言,但 Java 不會很快消失,因為它嵌入得太深、適應性太強且仍在改進。 展望未來,Java 正受到響應式程式設計、AI 和平台多樣性的影響。雖然可能不再是新創公司的預設語言,但其在受監管行業、政府、金融和電信領域的長期生存能力無可匹敵。它的角色已經從潮流引領者轉變為機構支柱。 在 30 歲之際,Java 仍然是業界最經得起考驗和最通用的語言之一。它無處不在,從 ATM 到 Android,從交易系統到雲後端。這種默默無聞的普遍性可能是其最大的優勢。 https://ift.tt/1b4vCHY https://ift.tt/tj0lB4r

Java 日報 – 2025 年 6 月 3 日

機器學習:探索 Tribuo 函式庫

Tribuo 是一個由 Oracle 開發的、可供實際應用、開源的機器學習函式庫。它旨在簡化強固 ML 模型建構與部署。與 Weka 和 Deeplearning4j 等類似函式庫一樣,Tribuo 支援多種機器學習任務,並且易於整合到 Java 應用程式中。

Tribuo 是一個以 Java 為中心的函式庫,支援監督式學習 (如迴歸、分類) 和非監督式學習 (如聚類)。它具有強類型特性,有助於防止執行階段錯誤並確保模型開發的一致性。此外,它還支援匯入和匯出 Open Neural Network eXchange (ONNX) 格式的模型,便於與 TensorFlow 和 PyTorch 等其他 ML 框架整合。Tribuo 的另一個突出特點是 溯源追蹤 (provenance tracking),它記錄資料集、模型參數和訓練設定的中繼資料,提高了透明度和再現性。

文章中提供了一個使用 Tribuo 建構迴歸模型的範例,用於預測葡萄酒品質。這涵蓋了專案設置、載入和分割資料集(使用 CSVLoader 和 TrainTestSplitter)、訓練模型(使用 CART 和 RandomForestTrainer)、評估模型(使用 RegressionEvaluator 計算 MAE、RMSE、R^2 指標) 以及儲存和使用模型進行預測。Tribuo 為將智慧行為嵌入基於 Java 的系統提供了實用工具包。

原文連結:https://ift.tt/1OLXrWQ

Java 語言特性與開發實踐

Lambda 表達式與 Stream API

一篇挑戰文章提供了一個 7 天掌握 Java Lambda 表達式的路線圖,涵蓋語法、函數式介面、Stream、Predicates 等主題。另一篇文章深入探討了 Stream API,介紹其概念、操作(中間操作與終端操作)並提供過濾、映射、排序、歸約等實用範例,以及平行 Stream 的使用。

原文連結:https://ift.tt/wDfE9Hn、https://ift.tt/vjCDonR

Var 關鍵字

文章指出 Java 中的 var 關鍵字並非「懶惰」,而是能使程式碼更整潔。

原文連結:https://ift.tt/WUqYQ7G

Unicode 識別符號

有趣的是,Java 的識別符號可以使用 Unicode 字元,甚至可以使用中文字來命名變數。

原文連結:https://ift.tt/2lEXR3f

核心特性

Java 之所以與眾不同,得益於其一系列核心特性,包括:平台獨立性 (“Write Once, Run Anywhere”,基於位元組碼和 JVM)、物件導向程式設計 (OOP) (類別、物件、繼承、封裝、多型、抽象)、強固與安全 (無指標直接記憶體存取、例外處理、垃圾回收、強類型檢查)、自動記憶體管理 (垃圾回收器)、多執行緒與並行支援、豐富的標準函式庫 (Java API)、高效能 (即時編譯 JIT)、龐大的社群支援與持續演進 以及跨領域的多樣性 (桌面、網頁、行動應用、企業系統)。Java 的設計目標是簡單、安全且平台獨立。

原文連結:https://ift.tt/1nuAxbe、https://ift.tt/9td4UnM、https://ift.tt/bHePInx

記憶體管理

了解 Java 的記憶體管理 (堆疊 Stack vs. 堆 Heap) 對於優化應用程式至關重要。堆疊記憶體用於方法執行和區域變數,每個執行緒有自己的堆疊,存取速度快但大小有限。堆記憶體用於物件和類別實例的動態記憶體分配,由所有執行緒共享,透過垃圾回收器管理,大小較大但存取速度較慢。垃圾回收器自動回收不再被引用的物件使用的記憶體。

原文連結:https://ift.tt/ohrnQvO

核心資料類型

Java 有兩大類資料類型:基本資料類型 (byte, short, int, long, float, double, char, boolean 共 8 種) 和非基本 (參考) 資料類型。

原文連結:https://ift.tt/OQkBEVo

集合框架

有文章提供了 Java 集合框架 (List, Set, Map) 的指南和實際用例。

原文連結:https://ift.tt/OWwmBaZ

Sealed Classes and Interfaces

這是 Java 15+ 中的新特性,提供了受控繼承的能力。

原文連結:https://ift.tt/bXr7Z4k

執行緒模型

文章比較了 Java 中的 Thread-per-Connection 和 Thread-per-Request 模型,解釋了連接 (Connection) 與請求 (Request) 的區別,並提供範例程式碼。Thread-per-Connection 為每個客戶端連接建立一個執行緒,適用於長連接但對大量連接擴展性差。Thread-per-Request 為每個請求建立一個執行緒,適用於請求密集型應用並提供更好的並發處理能力。

原文連結:https://ift.tt/WVuUcCR

Java Proxy 與介面

文章探討了如何使用 Java Proxy 處理資料傳輸物件 (DTO) 中重疊的介面,並控制 JSON 序列化,以避免程式碼重複。

原文連結:https://ift.tt/oe25UdC

框架與生態系

Spring vs. Spring Boot

這兩者之間存在差異。Spring 是一個全面的 Java 框架,適用於需要精細控制的大型企業應用程式。Spring Boot 建構在 Spring 之上,透過自動配置和啟動器依賴項來簡化 Spring 應用程式的設置,並包含嵌入式伺服器,非常適合快速開發微服務和 REST API。

原文連結:https://ift.tt/j2zYKOi

Quarkus:Kubernetes-native Java

Quarkus 是一個為 GraalVM 和 HotSpot 設計的 Kubernetes-native Java 框架。由 Red Hat 開發,基於成熟的函式庫。它旨在解決傳統 Java 框架在雲端原生環境中的問題,如冷啟動時間長和記憶體佔用高。Quarkus 的關鍵特性包括快速啟動時間、低記憶體使用、熱重載、Kubernetes 原生以及提升開發者體驗。它支援原生編譯為小型快速的可執行檔,並簡化了 Docker/Kubernetes 部署。雖然生態系相對 Spring 較不成熟,且存在學習曲線,但它為雲端原生專案中的 Java 開發帶來了效能和簡潔性。

原文連結:https://ift.tt/ZeNOJsU

Spring Cloud 發布

Spring Cloud 2022.0.11 (Kilburn) 版本列車已發布,此版本與 Spring Boot 3.0.20 和 3.1.17 相容。包含多個模組的依賴升級以及安全修復。

原文連結:https://ift.tt/upn4rmy

整合 AI

有文章探討了如何將生成式 AI (如 GPT, Gemini) 與 Java 應用程式整合,用於金融諮詢服務。

原文連結:https://ift.tt/yB3uJvc

開發工具與部署

Docker 和 Kubernetes

關於在 Java 開發中使用 Docker 和 Kubernetes 的文章。

原文連結:https://ift.tt/q9EePzN

PDF 轉文字

文章介紹了如何使用 GroupDocs.Conversion Cloud Java SDK 透過 REST API 輕鬆地在 Java 應用程式中將 PDF 檔案轉換為純文字格式,這有助於內容索引、資料提取和分析。

原文連結:https://ift.tt/3wjXmBd

業界觀察

Java 仍具重要性

有文章探討了為何 Java 在 2025 年仍然重要。

原文連結:https://ift.tt/CzpSlZT

Apple 服務從 Java 遷移至 Swift

Apple 的 Password Monitoring 服務從 Java 遷移到 Swift。文章指出,遷移的原因是需要以高效能方式擴展服務,並解決了 Java 在大規模環境中記憶體管理和垃圾回收的挑戰,以及 JVM 開銷對動態擴展速度的影響。儘管如此,文章也提及 Java 多年來一直是構建關鍵任務服務的基礎。遷移後的 Swift 實現顯示出更好的效能、記憶體使用效率和資源利用率。

原文連結:https://ift.tt/MACqK0j

Java 日報 – 2025 年 6 月 2 日

  • 日誌記錄:超越 System.out.println() 對於剛踏入 Java 專業領域的初學者來說,了解如何進行有效的日誌記錄是重要的一步,它不僅僅是使用 System.out.println() 方法. 原文連結:https://ift.tt/9Q0dAZM
  • 資料庫表格(Models)與實體類別(POJOs)的概念 在 Java 開發中,理解資料庫表格 (Models) 與對應的實體類別 (POJOs) 之間的區別是基礎概念之一. 原文連結:https://ift.tt/hWpSRsL
  • Java Stream 中 90% 開發者錯過的技巧 — flatMap Java Stream API 提供了許多強大的操作,而 flatMap 是一種常被忽略但功能強大的技巧,它可以改變你的 Java 工作流程。 原文連結:https://ift.tt/GP7vy8h
  • 理解 Java 中的 Cycle Sort Cycle Sort 是一種獨特的排序演算法,它最小化了對原始陣列的寫入次數。這使得它在寫入操作成本較高的情況下非常有用。演算法通過在陣列中找到循環來操作。它計算每個元素應該放置的正確位置,並將其移動到該位置。Cycle Sort 的時間複雜度為 O(n²),而空間複雜度為 O(1),因為它是一種原地排序演算法。 原文連結:https://ift.tt/xcC3mfU
  • 重新思考 Java 中的 HTTP 呼叫 文章探討了一種極簡主義的方法來處理 Java 中的 HTTP 呼叫。 原文連結:https://ift.tt/DoQ6Fb1
  • 資料導向與物件導向程式設計在 Java 中的比較 物件導向程式設計 (OOP) 強調通過封裝狀態和行為的物件來建模複雜實體和過程,並強調封裝和多態性等原則。雖然有人認為 OOP 已過時,但它在特定情境下仍然表現出色。文章提供了一個使用 switch 表達式、介面和類別來建模工廠方法的 OOP 範例,同時也指出了這種方法潛在的問題,例如缺乏窮舉檢查、執行時異常的風險以及沒有編譯時保證。 相比之下,資料導向程式設計提倡將資訊建模為不可變的資料並將操作資料的業務邏輯分離。Java 通過 Records、Sealed Classes 和 Pattern Matching 等新功能來更好地支持這種風格。這些功能一起促進了更清晰、更易於維護的程式碼。文章展示了如何利用這些資料導向原則重構工廠方法,實現了更高的編譯時安全性、不變性和清晰的職責分離。 原文連結:https://ift.tt/I5JRQSn
  • Spring 框架的學習挑戰 有開發者分享了學習 Spring 框架的經驗,表示學習 Spring 並不容易。同時也強調 Java 是一種被低估的語言,與 Spring 庫結合使用可以發揮巨大作用。 原文連結:https://ift.tt/ew85y7x
  • Java 記憶體管理秘訣 探討了現實世界中與大學課程不同的 Java 記憶體管理內容。 原文連結:https://ift.tt/YehTIZ8
  • 高級 Java 開發人員的場景題設計模式面試問題 文章提供了針對高級 Java 開發人員的場景題設計模式面試問題,幫助應對實際挑戰。 原文連結:https://ift.tt/aCnocyH
  • Java 字串比較完整指南 這份指南詳細介紹了 Java 中的字串比較,特別是 == 和 .equals() 之間的區別。 原文連結:https://ift.tt/r7RPM2k
  • 如何在 Java (Spring) 的異步執行緒中管理事務 在異步批次操作中正確管理事務對於防止資料損壞、提高系統彈性並簡化除錯至關重要。文章指出,在帶有 @Transactional 的方法內部生成異步工作是錯誤的做法,因為 @Transactional 不會傳播到新執行緒。正確的設計應該是每個執行緒一個事務,即在每個執行緒內部呼叫一個帶有 @Transactional 註解的公共服務方法。此外,文章還提供了使用 TransactionTemplate 的替代方法,以避免 Spring AOP 在自呼叫場景中的限制,並提供對每個執行緒事務邊界的完全控制。 原文連結:https://ift.tt/5K0ohGR
  • 現代化遺留 Java 應用程式:遷移到 Spring Boot 的策略 討論了將基於過時框架的遺留 Java 應用程式現代化並遷移到 Spring Boot 的策略。 原文連結:https://ift.tt/tfOTQ1M
  • Go 與 Java 的比較:生產力和擴展性 有文章從開發者生產力和系統擴展性方面比較了 Go (Golang) 和 Java。 原文連結:https://ift.tt/6ocA0Mf, https://ift.tt/LkMurfe
  • 學習 Java 如何開啟隱藏的架構技能 分享了通過學習 Java 如何發掘並提升架構相關技能的經驗。 原文連結:https://ift.tt/iKPdZDS
  • 2025 年終極 Java DevOps 技術棧:Spring Boot + Docker + Kubernetes + GitHub Actions 文章探討了 2025 年 Java 開發中採用的持續整合/持續部署 (CI/CD) 和 DevOps 實踐,重點介紹了 Spring Boot、Docker、Kubernetes 和 GitHub Actions 的組合。 原文連結:https://ift.tt/R6Udaub
  • 全端開發路線圖:Java 和 Python 路徑 提供了一份全端開發路線圖,涵蓋了 Java 和 Python 兩種技術棧的路徑。 原文連結:https://ift.tt/8rikv4l
  • 容器化 Java 微服務:一種現代架構方法 文章介紹了使用 Docker 進行容器化來構建可擴展和可維護的 Java 微服務架構。容器化帶來了改進的可擴展性、更容易的部署和更好的資源利用率等好處。並提供了設計容器化 Java 微服務架構的步驟。 原文連結:https://ift.tt/9AdtKH3
  • 從 Java 到 Python:開發者的思維轉變 從開發者的視角探討了從 Java 轉向 Python 時的思維轉變。 原文連結:https://ift.tt/hR1a62I
  • 每個軟體開發人員都應該掌握的 Java 最重要主題 列出了在 Java 生態系統中,每個軟體開發人員都應該掌握的關鍵主題。 原文連結:https://ift.tt/9mkWiuY
  • 從 Java 17 升級到 Java 21:部署前必須知道的一切 Java 21 作為下一個長期支援 (LTS) 版本,相較於 Java 17 帶來了性能、語法、併發和安全性方面的重大增強。文章提供了一份升級指南,涵蓋了部署前需要了解的重大變更、JVM 行為更新、函式庫相容性以及遷移最佳實踐。升級到 Java 21 的原因包括其 LTS 支援直到 2029 年以後、增強的性能(例如 Generational ZGC)、現代語法特性(records patterns, pattern matching for switch)、通過 Project Loom 改善的併發性(虛擬執行緒)以及更安全穩定的 API(sealed classes)。文章還指出內部 API 變得更加受限是關鍵的變化之一。 原文連結:https://ift.tt/pKrOPZY