首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 新人成長全棧筆記:從環境搭建到併發核心

     編輯:Java 綜合教學

前言:這不只是筆記,是避坑指南

記錄一次完整的 Java 後端新人入職學習路徑,涵蓋版本控制、項目啟動機制、Maven 核心、網絡編程、併發編程、線程池原理、Spring/MyBatis 事務等實戰核心。內容密度大,建議收藏分模塊消化。

一、 雙版本控制協作:SVN + Git 實戰

環境鏈路

  • 安裝 SVN / Git / Maven(修改 settings.xml 鏡像倉庫)
  • Eclipse 配置 JDK 與 Maven 路徑
  • 建立個人 Git 倉庫,熟練 clone/branch/checkout/merge/push/pull 流程
  • 基本 Linux 命令 + SSH 登線上環境查日誌
# 克隆並跟蹤遠程 master
git clone <repo-url>

# 創建並切換特性分支
git branch feature-xxx
git checkout feature-xxx

二、 項目啟動三板斧:antx / AutoConfig / JVM 調優

配置隔離藝術

antx.properties 存儲所有佔位符值,作為 AutoConfig 輸入,實現「配置與代碼分離、一套代碼多環境部署」。核心流程:編譯前替換模板佔位符 → 生成環境專屬配置 → 運行期不改代碼切換環境。

Ali-Tomcat 關鍵機制:啟動後、部署前二次掃描 auto-config.xml 完成佔位符替換,故無需重新構建即可生效。

JVM 核心參數速查表

參數含義經驗值建議
-Xms / -Xmx堆初始/最大值設為相同值避免震蕩,通常 1:1 或 1:2,小於物理內存 1/2
-Xmn新生代大小官方建議堆的 3/8,影響 GC 頻率與停頓
-XX:SurvivorRatioEden:Survivor 比默認 8 (即 8:1:1),大對象直接進老年代
-XX:PermSize / MaxPermSize永久代/元空間JDK8+ 改為 Metaspace,防止 OOM
-Xss線程棧大小256K-1M,小應用 128K 足夠,影響線程數上限
-XX:+UseFastAccessorMethods基本類型訪問優化開啟
-XX:+DisableExplicitGC禁用 System.gc()謹慎開啟,需測試
-XX:MaxTenuringThreshold對象晉升年齡默認 15,調大可增加新生代存活率

實戰案例:PermGen OOM → 調整 -XX:PermSize=128m -XX:MaxPermSize=256m 解決。

三、 Maven 核心知識體系

坐標與繼承

  • GAV:groupId:artifactId:version 唯一標識構件
  • 父 POM:子模塊繼承依賴/插件/屬性,特殊元素(dependencies/developers/plugins/resources)合併而非覆蓋
  • relativePath:非標準目錄結構時指定父 POM 位置

聚合與依賴

  • 聚合:父 POM <packaging>pom</packaging> + <modules> 定義子模塊,**順序敏感**(被依賴模塊必須前置)
  • 依賴調解:路徑最短優先 → 聲明順序優先
  • SNAPSHOT vs RELEASE:開發期用快照版自動拉取最新,發布用穩定版鎖定版本

Settings.xml 雙層生效

全局 ${maven.home}/conf/settings.xml + 用戶 ~/.m2/settings.xml,用戶級優先,合併生效。

四、 Socket 網絡編程基石

通信流程

  1. Server 監聽端口
  2. Client 發起連接
  3. Server accept() 阻塞等待,返回 Client Socket
  4. 雙向通過 getInputStream()/getOutputStream() 交換數據流

多線程改造

單線程阻塞於 accept(),改為主線程循環 accept() + 每連接派發獨立 Worker 線程處理 I/O,用完關閉 Socket。

五、 併發編程核心:鎖、同步、協作

synchronized 進階

  • 可重入:同一線程可重複獲取同一對象鎖,支持父子類同步方法調用
  • 鎖對象語義:synchronized(this) 鎖實例;synchronized(Class.class) 鎖類;synchronized(non-this) 鎖指定對象
  • vs volatile:volatile 保可見性、不保原子性、無阻塞;synchronized 保原子性+可見性、有阻塞

JUC 核心組件

組件核心特性適用場景
ReentrantLock可重入互斥鎖,支持公平/非公平、可中斷、超時獲取、條件變量替代 synchronized 精細控制
ReadWriteLock讀共享/寫獨享,支持降級(寫→讀),不支持升級讀多寫少場景
Condition將 wait/notify 綁定到 Lock,一個 Lock 可多個 Condition複雜等待/通知協議

六、 線程間通信經典模式

  • wait/notify/notifyAll:必須在同步塊中調用,wait 釋放鎖進入等待池,notify 喚醒進入鎖池
  • sleep vs wait:sleep 不釋放鎖、可指定時間自醒;wait 放鎖、需 notify 喚醒
  • join:底層用 wait,主線程等待目標線程結束
  • 生產者-消費者:List 容量 1,雙重檢查條件防虛假喚醒,多生產多消費用 notifyAll

七、 線程池深度解析

七大核心參數

ThreadPoolExecutor(
  corePoolSize,      // 核心線程數,任務來才創建,除非 prestart
  maximumPoolSize,   // 最大線程數,隊列滿才擴容
  keepAliveTime,     // 非核心線程閒置存活時間
  TimeUnit,          // 時間單位
  workQueue,         // 任務隊列(有界/無界)
  threadFactory,     // 線程工廠
  handler            // 拒絕策略
)

執行流程

  1. 線程數 < core → 新建線程執行
  2. 線程數 ≥ core → 入隊列
  3. 隊列滿 → 新建線程(至 maximum)
  4. 達 maximum 仍滿 → 執行拒絕策略
  5. 非核心線程閒置超時 → 回收至 core

關鍵方法

  • execute(Runnable):無返回值提交
  • submit(Callable):返回 Future 可獲結果
  • shutdown():平滑關閉,處理完隊列任務
  • shutdownNow():立即中斷,返回未執行任務列表

阻塞隊列實現

ArrayBlockingQueue(有界)/ LinkedBlockingQueue(無界),底層用 ReentrantLock + Condition 實現「滿等待/空等待」。

八、 Spring 與 MyBatis 事務整合

MyBatis 核心價值

  • SQL 與代碼分離(XML 映射)
  • 封裝 JDBC 樣板代碼(連接/會話/關閉/異常)
  • 手寫 SQL 靈活控制性能,適合複雜查詢

事務管理機制

  • MyBatis:SqlSession 管理連接與事務,可自管(共享 Session)或外部管(Spring 代理)
  • Spring:DataSourceTransactionManager + AOP 聲明式事務
  • @Transactional:僅生效於 public 方法,傳播行為默認 REQUIRED
// 常用傳播行為
REQUIRED      // 有事務加入,無則新建
REQUIRES_NEW  // 掛起當前,新建獨立事務
NESTED        // 嵌套事務(需 JDBC 3.0+ Savepoint 支持)

總結與建議

這份筆記串起了 Java 後端從「能跑起來」到「懂原理」的關鍵鏈路。建議新人:動手搭環境 → 讀源碼看實現 → 壓測調參數 → 寫總結輸出,知其然更知其所以然,才是成長捷徑。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved