「會寫 HelloWorld ≠ 掌握 Java」。本文將經典檢核清單升級至 Java 17/21 LTS 標準,涵蓋語言核心、JVM、工具鏈、工程化能力五大維度,作為進階開發者自我檢視與面試準備依據。
| 項目 | 必會指標 | 加分項 |
|---|---|---|
| 基礎語法 | 變數、流程控制、陣列、註解、模組聲明 | Pattern Matching (instanceof/switch/record)、Sealed Class、Text Blocks |
| 面向物件 | 封裝/繼承/多型、介面預設/靜態方法、Record、Enum 進階 | Value-based Class 設計、不可變物件模式 |
| 泛型 | 型別參數、通配符 `? extends/super`、PECS 原則、型別擦除影響 | 可變參數堆污染、泛型方法型別推導、Reifiable Types |
| 集合框架 | List/Set/Map/Queue 體系、並發集合 (CHM, CWS)、Stream API (中間/終端操作、並行流) | 自訂 Collector、Spliterator、Primitive Stream (IntStream) |
| 異常處理 | 檢查/非檢查異常、try-with-resources、多重 catch、異常鏈、自訂異常 | 錯誤碼 vs 異常決策、Vavr Either/Result 模式 |
| 並發基礎 | Thread/Runnable、synchronized/volatile、wait/notify、JUC (AQS、Lock、Condition、Semaphore、CountDownLatch、CyclicBarrier、Phaser)、ThreadLocal、CompletableFuture、ExecutorService、ForkJoinPool、虛擬執行緒 (Java 21) | 非阻塞演算法、VarHandle、Structured Concurrency (JEP 453) |
| IO/NIO | InputStream/OutputStream、Reader/Writer、Files/Paths、Channel/Buffer/Selector、Memory-mapped File、try-with-resources 管理 | NIO.2 非同步通道、FileSystems SPI、IO_URING (JDK 內建) |
| 模組系統 (JPMS) | module-info.java、requires/exports/opens/uses/provides、服務載入、強封裝、遷移策略 | 自動模組、未命名模組、jlink 定製運行時映像 |
| 領域 | 核心知識點 | 實戰技能 |
|---|---|---|
| 記憶體模型 | 堆/堆外/元空間/代碼快取、分代/區域化、TLAB、物件佈局 (Header/Instance Data/Padding)、壓縮指標 | -Xms/Xmx/Xmn/MetaspaceSize、Native Memory Tracking、Off-heap 排查 |
| GC 理論與調優 | 可達性分析、SafePoint、STW、Parallel/G1/ZGC/Shenandoah 原理、記憶體屏障、記憶體集/記住集 | GC 日誌分析 (GCeasy/JFR)、參數調優、分配率/晋升率測量 |
| 類載入機制 | 雙親委派、Bootstrap/Extension/Application ClassLoader、模組類載入器、熱部署/熱替換原理 | 打破雙親委派 (OSGi/SpringBoot)、ClassNotFound/NoClassDefFundebug、Arthas 診斷 |
| JIT 編譯 | C1/C2/Graal、熱點偵測、內聯、逃逸分析、標量替換、去優化、Code Cache | -XX:CompileThreshold、PrintCompilation、JITWatch 分析 |
| 診斷工具箱 | jcmd/jstat/jmap/jstack/jhsdb、JFR/JMC、Arthas、async-profiler、HeapDump/ThreadDump 分析 | 線上 CPU 火焰圖、記憶體洩漏鏈鎖定、死鎖/活鎖定位 |
| 維度 | 必會工具/實踐 | 進階指標 |
|---|---|---|
| 建構 | Maven/Gradle 多模組、Wrapper、依賴管理 (BOM/平台)、Profiling、發布到 Nexus/Artifactory | Gradle Configuration Cache、Composite Build、依賴替換規則 |
| 測試 | JUnit 5 (參數化/巢狀/動態)、Mockito/AssertJ、Testcontainers、Spring Test、JaCoCo 覆蓋率門檻 | Contract Testing (Pact)、Mutation Testing (PIT)、ArchUnit 架構測試 |
| 靜態分析 | SpotBugs、Checkstyle (Google/Alibaba 風格)、PMD、SonarQube Quality Gate | Error Prone、NullAway、自訂規則 |
| 版控/分支策略 | Git Flow / Trunk-Based Development、Conventional Commits、Rebase vs Merge、Git Hooks (Husky) | Monorepo 工具 (Bazel/Turborepo)、Gerrit Code Review |
| CI/CD | GitHub Actions/GitLab CI/Jenkins、建構/測試/掃描/鏡像構建/部署流水線、快照/發布版本區分 | Gradle Build Scan、Kepler/Keptn 持續驗證、Canary/Blue-Green 部署 |
| 容器化 | Dockerfile 最佳化 (多階段、非 root、層快取)、jlink 精簡 JRE、Spring Boot 3 / GraalVM Native Image | Distroless/Chainguard 基礎鏡像、SBOM 生成、Cosign 簽名驗證 |
| 可觀測性 | Micrometer + Prometheus/Grafana、OpenTelemetry Java Agent、結構化日誌 (Logback/Log4j2 JSON)、Trace ID 傳遞 | eBPF 級別追蹤、持續剖析、SLO/SLI 定義與告警 |
| 得分區間 | 等級 | 建議行動 |
|---|---|---|
| 90-100 | 專家 | 輸出技術部落格/開源/內部分享、推動團隊工程化升級 |
| 75-89 | 高級工程師 | 補齊短板 (通常是 JVM/架構/工程化)、帶領專案攻關 |
| 60-74 | 中級工程師 | 系統補完集合/並發/JVM、建立個人知識庫、參與 Code Review |
| <60 | 初/中級 | 制定半年學習計畫、找導師、重點攻克語言核心 + 單元測試 |
技術棧更新快,核心內功慢。把清單變成週期性複習計畫 (如每季複習一欄),配合實戰專案刻意練習,才能在「會用」與「精通」之間拉開差距。