技術棧演進觀察
長期以來 Java EE 由 Spring + Struts2 + MyBatis/Hibernate 主導。Spring 不僅是 Java 框架,其 IoC/AOP 思想影響了 C# 等生態。Spring Boot 進一步簡化配置,但濫用註解帶來運行時開銷:
- 編譯期註解 (如
@Controller):掃描一次,零運行開銷,首選。
- 運行期註解 (如
@ResponseBody):每次請求反射處理,消耗資源。
判斷註解生命週期:Ctrl+點擊 查看 @Retention(RetentionPolicy.RUNTIME/CLASS/SOURCE)。
單例與併發的真相
- Spring Bean 默認單例,單例本身無併發問題,除非引入可變共享狀態。
- Web 請求天然隔離:每請求一線程,獨立 Request/Response,參數對象無需共享。
- 慎用 prototype:大量原型 Bean 通常意味著設計錯誤,應改用方法參數傳遞。
MyBatis 效能反思
- 頻繁創建 ResultMap/Bean 映射,不如直接用
Map 或 JDK 原生集合,減少 GC 壓力。
- 必須檢查事務代理生效:開啟 Debug 日誌,確認每請求複用同一
SqlSession,否則連接池耗盡、事務失效。
- 能不用 MyBatis 就不用,直寫 JDBC/SQL 模板往往更可控、更高效。
Web 架構核心原則
| 原則 | 錯誤做法 | 正確做法 |
| Servlet 映射 | / 攔截所有靜態資源 | *.do *.action 僅攔截業務請求 |
| 靜態資源 | JS/CSS 寫在 JSP/HTML 內聯 | 獨立文件 + CDN + 瀏覽器緩存 (文件級緩存) |
| 數據交互 | 頻繁 AJAX 切換分類 | 一次性加載全量數據,前端 JS 篩選/搜索 |
| 查詢優化 | 分頁查詢以為能加快單次速度 | 數據庫按索引掃描,LIMIT 不減少掃描行數 |
關鍵技術選型心法
- NIO/Netty:高併發長連接首選,多線程 Socket 難超越。
- ZooKeeper:分布式協調註冊中心標準解。
- Maven 管理 Web 模塊:Web 項目嵌入 Maven,而非 Maven 項目轉 Web。
- 客戶端能做的別讓服務端做:客戶端資源無限,服務端資源有限。
- 少發請求 = 好代碼:除非即時業務,否則合併請求、緩存結果。
對象本質與 RPC 本質
除基本類型,一切皆對象。API 選擇無絕對優劣,需實測。
序列化 = 文件 IO + 傳輸 + JVM 重構對象。
RPC = 代理序列化參數 → 網絡傳輸 → 反序列化調用 → 序列化返回 → 反序列化結果。
給年輕開發者的建議
- 深入理解 JDK 集合、併發、類加載、JVM 內存模型 基石。
- 閱讀優秀框架源碼 (Spring、Netty、Disruptor),學習設計模式落地。
- 不盲目追新技術,解決業務問題才是核心價值。
- 建立性能基準測試體系,用數據說話。
- 上一篇文章: Maven Archetype 常見 Bug:Source Folder 錯誤標記與修復方案
- 下一篇文章: Java Web 中 Socket 多線程長連接通訊完整實現
Copyright ©
程式碼之家 All Rights Reserved