記錄一次完整的 Java 後端新人入職學習路徑,涵蓋版本控制、項目啟動機制、Maven 核心、網絡編程、併發編程、線程池原理、Spring/MyBatis 事務等實戰核心。內容密度大,建議收藏分模塊消化。
settings.xml 鏡像倉庫)clone/branch/checkout/merge/push/pull 流程# 克隆並跟蹤遠程 master
git clone <repo-url>
# 創建並切換特性分支
git branch feature-xxx
git checkout feature-xxx
antx.properties 存儲所有佔位符值,作為 AutoConfig 輸入,實現「配置與代碼分離、一套代碼多環境部署」。核心流程:編譯前替換模板佔位符 → 生成環境專屬配置 → 運行期不改代碼切換環境。
Ali-Tomcat 關鍵機制:啟動後、部署前二次掃描 auto-config.xml 完成佔位符替換,故無需重新構建即可生效。
| 參數 | 含義 | 經驗值建議 |
|---|---|---|
| -Xms / -Xmx | 堆初始/最大值 | 設為相同值避免震蕩,通常 1:1 或 1:2,小於物理內存 1/2 |
| -Xmn | 新生代大小 | 官方建議堆的 3/8,影響 GC 頻率與停頓 |
| -XX:SurvivorRatio | Eden: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 解決。
groupId:artifactId:version 唯一標識構件<packaging>pom</packaging> + <modules> 定義子模塊,**順序敏感**(被依賴模塊必須前置)全局 ${maven.home}/conf/settings.xml + 用戶 ~/.m2/settings.xml,用戶級優先,合併生效。
accept() 阻塞等待,返回 Client SocketgetInputStream()/getOutputStream() 交換數據流單線程阻塞於 accept(),改為主線程循環 accept() + 每連接派發獨立 Worker 線程處理 I/O,用完關閉 Socket。
synchronized(this) 鎖實例;synchronized(Class.class) 鎖類;synchronized(non-this) 鎖指定對象| 組件 | 核心特性 | 適用場景 |
|---|---|---|
| ReentrantLock | 可重入互斥鎖,支持公平/非公平、可中斷、超時獲取、條件變量 | 替代 synchronized 精細控制 |
| ReadWriteLock | 讀共享/寫獨享,支持降級(寫→讀),不支持升級 | 讀多寫少場景 |
| Condition | 將 wait/notify 綁定到 Lock,一個 Lock 可多個 Condition | 複雜等待/通知協議 |
notifyAllThreadPoolExecutor(
corePoolSize, // 核心線程數,任務來才創建,除非 prestart
maximumPoolSize, // 最大線程數,隊列滿才擴容
keepAliveTime, // 非核心線程閒置存活時間
TimeUnit, // 時間單位
workQueue, // 任務隊列(有界/無界)
threadFactory, // 線程工廠
handler // 拒絕策略
)
execute(Runnable):無返回值提交submit(Callable):返回 Future 可獲結果shutdown():平滑關閉,處理完隊列任務shutdownNow():立即中斷,返回未執行任務列表ArrayBlockingQueue(有界)/ LinkedBlockingQueue(無界),底層用 ReentrantLock + Condition 實現「滿等待/空等待」。
SqlSession 管理連接與事務,可自管(共享 Session)或外部管(Spring 代理)DataSourceTransactionManager + AOP 聲明式事務public 方法,傳播行為默認 REQUIRED// 常用傳播行為
REQUIRED // 有事務加入,無則新建
REQUIRES_NEW // 掛起當前,新建獨立事務
NESTED // 嵌套事務(需 JDBC 3.0+ Savepoint 支持)
這份筆記串起了 Java 後端從「能跑起來」到「懂原理」的關鍵鏈路。建議新人:動手搭環境 → 讀源碼看實現 → 壓測調參數 → 寫總結輸出,知其然更知其所以然,才是成長捷徑。