| Bean 類型 | 管理機制 | 核心狀態流轉 | 關鍵回調 |
|---|---|---|---|
| Stateless Session Bean | 實例池 | 不存在 → 就緒 (池中) → 服務調用 → 就緒 | @PostConstruct, @PreDestroy |
| Stateful Session Bean | 緩存 + 激活/鈍化 | 不存在 → 活躍 (緩存) ↔ 鈍化 (磁盤/數據庫序列化) → 移除 | @PostConstruct, @PreDestroy, @PrePassivate, @PostActivate |
| Entity Bean (BMP/CMP) | 緩存 + 激活/鈍化 | 同 Stateful,但狀態持久化到 DB | ejbLoad, ejbStore, ejbActivate, ejbPassivate |
| Message Driven Bean | 實例池 | 類似 Stateless,由容器驅動消息監聽 | @PostConstruct, @PreDestroy |
激活/鈍化算法:MRU (最近最常用) 或 NRU (最近未用)。緩存大小限制實例上限,溢出觸發鈍化 (序列化存儲)。
// 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();
UserTransaction)@TransactionAttribute,推薦接口實現類由容器動態生成 (動態代理/字節碼增強),開發者只寫 Bean 類 + 業務接口,運行時容器織入攔截器、事務、安全、遠程調用邏輯。
子類構造器首行隱式/顯式 super(...),保證父類初始化完成。初始化順序:父類靜態 → 子類靜態 → 父類實例塊/字段 → 父類構造器 → 子類實例塊/字段 → 子類構造器。
編譯期靜態綁定 (重載) + 運行期動態分派 (重寫,基於 vtable/interface table)。invokedynamic 支持動態語言。
| Forward | Redirect | |
|---|---|---|
| 發起方 | 服務端內部 | 客戶端 (瀏覽器) |
| 請求對象 | 共享同一 request | 新 request |
| 地址欄 | 不變 | 變為目標 URL |
| 速度 | 快 (一次網絡往返) | 慢 (兩次) |
| 適用 | 同應用內跳轉、權限檢查後轉發 | 跨應用、POST 後防重複提交、SEO 友好 |
開發/測試開啟 (-ea),生產關閉。用於「不可能為假」的前置/後置條件檢查,非業務邏輯控制流。
System.gc() 僅建議,不保證執行啟動預創建 (minIdle) → 借用標記忙 → 歸還標記閒 → 空閒超時驅逐 (minEvictableIdleTime) → 定時驗證 (validationQuery) → 最大等待 (maxWait) 防饑餓。
Java 14+:int、short、char、byte、String、enum、封裝類。long/float/double/boolean 不支持。模式匹配 (JEP 305/406) 持續增強。
Singleton (單例)、Factory Method (工廠方法)、Abstract Factory (抽象工廠)、Builder (建造者)、Prototype (原型)
Adapter (適配器)、Bridge (橋接)、Composite (組合)、Decorator (裝飾器)、Facade (外觀)、Flyweight (享元)、Proxy (代理)
Chain of Responsibility (責任鏈)、Command (命令)、Interpreter (解釋器)、Iterator (迭代器)、Mediator (中介者)、Memento (備忘錄)、Observer (觀察者)、State (狀態)、Strategy (策略)、Template Method (模板方法)、Visitor (訪問者)
| 組件 | 職責 | 典型實現 |
|---|---|---|
| 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-IIOP | Java 遠程調用 + CORBA 互操作 — gRPC/REST 取代 | JDK ORB |
set MEM_ARGS=-Xms2g -Xmx4g (啟動腳本)PRODUCTION_MODE=true)config.xml (Domain 級)、config/jms/, config/jdbc/Domain/servers//applications/ ,Web 應用結構符合 Servlet 規範ejb-jar.xml, weblogic-ejb-jar.xml, CMP 額外 weblogic-cmp-rdbms-jar.xmlOMG 標準:IDL (接口定義語言) + 語言映射 + GIOP/IIOP 協議。目標:異構語言、異構 OS、異構進程間透明調用。Java RMI-IIOP 實現 CORBA 互操作。現代微服務用 gRPC/Protobuf/REST 替代。
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);
}
synchronized (對象鎖/類鎖) / ReentrantLock / volatile (可見性) / ThreadLocal (線程封閉)stop() 強制釋放鎖 → 數據不一致;suspend() 持鎖阻塞 → 死鎖。禁用,用 interrupt() + 標誌位 + wait/notify 或 Condition。GC 管理下「洩漏」指:對象不再被業務使用,但 GC Roots 仍可達。典型:
remove() (線程池線程復用導致)排查:Heap Dump + MAT/Eclipse Memory Analyzer → 支配樹 → GC Roots 路徑。
Serializable 標記接口,serialVersionUID 顯式聲明ObjectOutputStream.writeObject() / ObjectInputStream.readObject()Externalizable 完全自控| 類別 | 代表 |
|---|---|
| IO | BufferedReader/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: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 (Client/Server) | B/S (Browser/Server) |
|---|---|---|
| 部署 | 客戶端安裝、升級困難 | 零安裝、瀏覽器即入口、無縫升級 |
| 網絡 | 局域網、專線 | 廣域網、互聯網、移動網絡 |
| 安全 | 強控制、物理隔離 | 零信任、身份為邊界、加密傳輸 |
| 架構 | 胖客戶端、邏輯前置 | 瘦客戶端、邏輯後置、API 化 |
| 復用 | 組件級復用難 | 服務級/微服務復用、前端組件庫 |
| 維護 | 整體升級、風險高 | 灰度發布、藍綠部署、回滾秒級 |
| 用戶體驗 | 原生富交互、高性能 | Web 技術趨近原生 (PWA、WebAssembly、WebGPU) |
趨勢:B/S 全面佔領,C/S 退守工業控制、專業設計、高頻交易、離線優先等細分場景。Electron/TAURI/PWA 模糊邊界。