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

Java 進階核心知識體系:EJB 生命週期、設計模式、JVM 調優、分佈式架構面試精華

     編輯:Java 相關知識

EJB 核心機制深度解析

Bean 實例生命週期與池化/緩存策略

Bean 類型管理機制核心狀態流轉關鍵回調
Stateless Session Bean實例池不存在 → 就緒 (池中) → 服務調用 → 就緒@PostConstruct, @PreDestroy
Stateful Session Bean緩存 + 激活/鈍化不存在 → 活躍 (緩存) ↔ 鈍化 (磁盤/數據庫序列化) → 移除@PostConstruct, @PreDestroy, @PrePassivate, @PostActivate
Entity Bean (BMP/CMP)緩存 + 激活/鈍化同 Stateful,但狀態持久化到 DBejbLoad, ejbStore, ejbActivate, ejbPassivate
Message Driven Bean實例池類似 Stateless,由容器驅動消息監聽@PostConstruct, @PreDestroy

激活/鈍化算法:MRU (最近最常用) 或 NRU (最近未用)。緩存大小限制實例上限,溢出觸發鈍化 (序列化存儲)。

EJB 類型體系

  • Session Bean:Stateless / Stateful
  • Entity Bean:BMP (Bean 管理持久化) / CMP (容器管理持久化) — JPA 取代
  • Message Driven Bean (MDB):異步消息消費

客戶端調用 EJB 標準流程


// 1. JNDI 環境屬性
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
props.put(Context.PROVIDER_URL, "http-remoting://localhost:8080");

// 2. 查找 Home/Remote 接口 (EJB 3.x 直接查 Bean 接口)
Context ctx = new InitialContext(props);
MyBeanRemote bean = (MyBeanRemote) ctx.lookup("ejb:/myapp/MyBean!com.example.MyBeanRemote");

// 3. 調用業務方法
bean.doBusiness();

事務管理技術棧

  • JTA (Java Transaction API) — 應用層事務邊界控制 (UserTransaction)
  • JTS (Java Transaction Service) — JTA 的 CORBA/OTS 映射實現
  • XA (X/Open 分佈式事務) — 資源管理器 (DB、MQ) 協議
  • 容器管理事務 (CMT) — 声明式 @TransactionAttribute,推薦

EJB 3.x 簡化:不直接實現 Home/Remote 接口

接口實現類由容器動態生成 (動態代理/字節碼增強),開發者只寫 Bean 類 + 業務接口,運行時容器織入攔截器、事務、安全、遠程調用邏輯。

Java 核心語言機制面試高頻點

Overload vs Override

  • Overload (重載):同類中,方法名相同,參數列表不同 (類型/個數/順序) 返回類型可不同
  • Override (重寫):子父類中,簽名完全相同,返回類型协变、拋出異常收窄、訪問權限放大

Constructor 不能 Override,可 Overload

子類構造器首行隱式/顯式 super(...),保證父類初始化完成。初始化順序:父類靜態 → 子類靜態 → 父類實例塊/字段 → 父類構造器 → 子類實例塊/字段 → 子類構造器。

多態實現機制

編譯期靜態綁定 (重載) + 運行期動態分派 (重寫,基於 vtable/interface table)。invokedynamic 支持動態語言。

同步 vs 異步

  • 同步:調用者等待結果,共享數據需鎖/同步工具類
  • 異步:調用者不等待,回調/Future/CompletableFuture/Reactive Streams,適用耗時 IO、解耦

Heap vs Stack

  • Stack:線程私有、棧幀 (局部變量、操作數棧、幀數據)、LIFO、存基本類型和引用、生命週期隨方法
  • Heap:線程共享、對象實例/數組、GC 管理、分代 (Young/Old)、OOM 主戰場

Forward vs Redirect

ForwardRedirect
發起方服務端內部客戶端 (瀏覽器)
請求對象共享同一 request新 request
地址欄不變變為目標 URL
速度快 (一次網絡往返)慢 (兩次)
適用同應用內跳轉、權限檢查後轉發跨應用、POST 後防重複提交、SEO 友好

assert 斷言

開發/測試開啟 (-ea),生產關閉。用於「不可能為假」的前置/後置條件檢查,非業務邏輯控制流。

GC 核心原理

  • 可達性分析 (GC Roots:棧局部變量、靜態字段、常量、JNI 引用、同步鎖持有者)
  • 三大算法:標記-清除、標記-整理、複製
  • 分代假說:Young (Eden+S0+S1, Minor GC, 複製) / Old (Major/Full GC, 標記-整理)
  • 收集器:Serial/Parallel/CMS/G1/ZGC/Shenandoah — 延遲 vs 吞吐權衡
  • System.gc() 僅建議,不保證執行

連接池機制

啟動預創建 (minIdle) → 借用標記忙 → 歸還標記閒 → 空閒超時驅逐 (minEvictableIdleTime) → 定時驗證 (validationQuery) → 最大等待 (maxWait) 防饑餓。

switch 支持類型

Java 14+:int、short、char、byte、String、enum、封裝類。long/float/double/boolean 不支持。模式匹配 (JEP 305/406) 持續增強。

設計模式實戰分類

創建型 (5)

Singleton (單例)、Factory Method (工廠方法)、Abstract Factory (抽象工廠)、Builder (建造者)、Prototype (原型)

結構型 (7)

Adapter (適配器)、Bridge (橋接)、Composite (組合)、Decorator (裝飾器)、Facade (外觀)、Flyweight (享元)、Proxy (代理)

行為型 (11)

Chain of Responsibility (責任鏈)、Command (命令)、Interpreter (解釋器)、Iterator (迭代器)、Mediator (中介者)、Memento (備忘錄)、Observer (觀察者)、State (狀態)、Strategy (策略)、Template Method (模板方法)、Visitor (訪問者)

J2EE 經典模式 (Core J2EE Patterns)

  • Session Facade — Session Bean 封裝 Entity Bean 訪問,減少網絡調用
  • Message Facade — MDB 實現異步處理
  • Business Delegate — 隱藏遠程查找/異常處理
  • Service Locator — 緩存 JNDI 查找
  • Transfer Object (DTO) — 批量傳輸數據減少遠程調用
  • Data Access Object (DAO) — 抽象持久化邏輯

Web 容器 vs EJB 容器 vs JNDI/JMS/JTA/JAF/RMI-IIOP

組件職責典型實現
Web 容器Servlet/JSP 生命週期、請求分發、Session 管理Tomcat, Jetty, Undertow
EJB 容器事務、安全、并發、持久化、遠程調用、生命週期WildFly, GlassFish, WebLogic
JNDI命名/目錄服務,資源查找 (DataSource, EJB, JMS)容器內嵌
JMS消息模型:Point-to-Point (Queue) / Pub-Sub (Topic)ActiveMQ, RabbitMQ, Kafka (非標準)
JTA分佈式事務邊界 (UserTransaction) + XA 協議協調Narayana, Atomikos, Bitronix
JAF數據內容處理 (DataHandler, CommandMap) — 已較少用JavaBeans Activation Framework
RMI-IIOPJava 遠程調用 + CORBA 互操作 — gRPC/REST 取代JDK ORB

WebLogic 運維核心配置

  • 內存:set MEM_ARGS=-Xms2g -Xmx4g (啟動腳本)
  • 模式:開發模式 (熱部署、寬鬆安全) vs 生產模式 (PRODUCTION_MODE=true)
  • 核心配置:config.xml (Domain 級)、config/jms/, config/jdbc/
  • 部署目錄:Domain/servers//applications/,Web 應用結構符合 Servlet 規範
  • EJB 發布描述符:ejb-jar.xml, weblogic-ejb-jar.xml, CMP 額外 weblogic-cmp-rdbms-jar.xml
  • SSL:Demo 密鑰庫 → 生產換 CA 證書,配置單向/雙向認證
  • 控制台查看已發布 EJB:Deployments 列表
  • MDB 持久化 vs 非持久化:前者保證消息不丟 (容器重啟後重投),後者高性能但可丟失

CORBA 本質

OMG 標準:IDL (接口定義語言) + 語言映射 + GIOP/IIOP 協議。目標:異構語言、異構 OS、異構進程間透明調用。Java RMI-IIOP 實現 CORBA 互操作。現代微服務用 gRPC/Protobuf/REST 替代。

快速排序 Java 實現 (標準庫 Dual-Pivot QuickSort 變體)


public static void quickSort(int[] a, int left, int right) {
    if (left >= right) return;
    int pivot = a[(left + right) >>> 1];
    int i = left, j = right;
    while (i <= j) {
        while (a[i] < pivot) i++;
        while (a[j] > pivot) j--;
        if (i <= j) swap(a, i++, j--);
    }
    quickSort(a, left, j);
    quickSort(a, i, right);
}

線程實現與同步關鍵字

  • 實現:繼承 Thread / 實現 Runnable / Callable + FutureTask / 線程池 ExecutorService
  • 同步:synchronized (對象鎖/類鎖) / ReentrantLock / volatile (可見性) / ThreadLocal (線程封閉)
  • stop() 強制釋放鎖 → 數據不一致;suspend() 持鎖阻塞 → 死鎖。禁用,用 interrupt() + 標誌位 + wait/notify 或 Condition。

內存洩漏 Java 視角

GC 管理下「洩漏」指:對象不再被業務使用,但 GC Roots 仍可達。典型:

  • 集合類持有引用未清理 (List/Map 添加不刪除)
  • 靜態集合緩存無過期策略
  • 監聽器/回調未移除 (addListener 無 removeListener)
  • ThreadLocal 未 remove() (線程池線程復用導致)
  • 連接/流/文件句柄未關閉 (最終化器延遲/失效)

排查:Heap Dump + MAT/Eclipse Memory Analyzer → 支配樹 → GC Roots 路徑。

序列化機制

  • 實現 Serializable 標記接口,serialVersionUID 顯式聲明
  • ObjectOutputStream.writeObject() / ObjectInputStream.readObject()
  • transient 跳過字段,Externalizable 完全自控
  • 反序列化構造對象不調用構造器,直接分配內存填充字段
  • 安全風險:Gadget Chain (Commons Collections 等) → 禁用不可信反序列化、用 JSON/Protobuf 替代

異常處理體系

  • Throwable → Error (系統級、不可恢復) / Exception (應用級)
  • Exception → RuntimeException (編程錯誤、無需聲明) / Checked Exception (環境錯誤、強制處理)
  • try-catch-finally / try-with-resources / multi-catch (Java 7+) / 异常鏈 (cause)
  • 最佳實踐:異常轉換保留棧跡、業務異常帶錯誤碼、統一攔截記錄、避免異常控制流程

UML 核心圖譜

  • 用例圖 — 需求
  • 類圖/對象圖/包圖 — 靜態結構
  • 序列圖/協作圖/時序圖 — 交互流程
  • 狀態圖/活動圖 — 行為建模
  • 組件圖/部署圖 — 物理實現

常用類/包/接口速查

類別代表
IOBufferedReader/Writer, FileReader/Writer, InputStream/OutputStream, Files (NIO.2)
集合ArrayList, HashMap, HashSet, ConcurrentHashMap, Collections
并发ExecutorService, CompletableFuture, CountDownLatch, CyclicBarrier, Semaphore
網絡URL, HttpURLConnection, HttpClient (Java 11+), InetAddress, Socket
日期時間LocalDateTime, ZonedDateTime, Instant, DateTimeFormatter (java.time)
包java.lang, java.util, java.io, java.nio, java.net, java.time, java.sql, javax.sql
接口Runnable, Callable, Comparable, Comparator, Serializable, Closeable, AutoCloseable

JSP 動作指令與 Struts/JDO

jsp:include (動態包含)、jsp:forward、jsp:useBean/setProperty/getProperty、jsp:plugin。
Struts 1.x (ActionForm/Action/struts-config.xml) → Struts 2 (Interceptor/ValueStack/OGNL) → Spring MVC 取代。
JDO (Java Data Objects) — 對象持久化標準,JPA 統一。現代直接用 JPA/Hibernate/MyBatis。

C/S vs B/S 架構演進

維度C/S (Client/Server)B/S (Browser/Server)
部署客戶端安裝、升級困難零安裝、瀏覽器即入口、無縫升級
網絡局域網、專線廣域網、互聯網、移動網絡
安全強控制、物理隔離零信任、身份為邊界、加密傳輸
架構胖客戶端、邏輯前置瘦客戶端、邏輯後置、API 化
復用組件級復用難服務級/微服務復用、前端組件庫
維護整體升級、風險高灰度發布、藍綠部署、回滾秒級
用戶體驗原生富交互、高性能Web 技術趨近原生 (PWA、WebAssembly、WebGPU)

趨勢:B/S 全面佔領,C/S 退守工業控制、專業設計、高頻交易、離線優先等細分場景。Electron/TAURI/PWA 模糊邊界。

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