Java面試題(中等)

1.?計算機網絡傳輸層有哪些協議?分別適用于什么場景?
TCP協議(傳輸控制協議)?:面向連接、可靠傳輸,流量控制、擁塞控制。適用于要求數據完整性的場景,如文件傳輸、網頁瀏覽、電子郵件等。
UDP協議?(用戶數據報協議)?:無連接,不可靠但高效,無流量控制、無擁塞控制、開銷小、延遲低。適用于實時性要求高的場景,如視頻會議、在線游戲、DNS查詢等。
2.?多線程的使用場景有哪些?線程開啟多少個合適?判斷標準有哪些?
高并發服務器、IO密集型任務、批量數據處理、異步任務處理、GUI程序保持響應
線程數量設置:??
  • CPU密集型任務:線程數 ≈ CPU核心數 + 1
  • IO密集型任務:線程數 ≈ CPU核心數 * (1 + IO等待時間/CPU計算時間)
  • 通用建議:Runtime.getRuntime().availableProcessors()獲取CPU核心數作為參考
??判斷標準:??
  1. CPU使用率:保持在70%-90%之間較理想
  2. 任務隊列長度:隊列不應持續增長
  3. 響應時間:應在可接受范圍內
  4. 吞吐量:達到最優值后不再隨線程數增加而提升
  5. 系統資源:內存、文件描述符等是否充足
3.?線程池的提交方式有哪幾種?
  • execute(Runnable command):執行無返回值的任務
  • submit(Callable?task):提交有返回值的任務,返回Future對象
  • submit(Runnable task):提交Runnable任務,返回Future
  • submit(Runnable task, T result):提交Runnable任務并指定返回結果
4.?鎖的實現原理介紹一下?
鎖的基本實現原理:??
  1. ??Java對象頭中的Mark Word??
  • 每個Java對象都有一個對象頭,其中包含Mark Word
  • Mark Word存儲了對象的哈希碼、GC分代年齡、鎖狀態等信息
  • 鎖信息就存儲在Mark Word中
  1. ??鎖的升級過程(偏向鎖->輕量級鎖->重量級鎖)??
  • ??無鎖狀態??:對象剛創建時的狀態
  • ??偏向鎖??:只有一個線程訪問時,在Mark Word中記錄線程ID
  • ??輕量級鎖??:多個線程交替訪問,通過CAS操作競爭鎖
  • ??重量級鎖??:多線程競爭激烈時,升級為操作系統層面的互斥鎖
  1. ??同步實現??
  • ??monitorenter??和??monitorexit??字節碼指令
  • 每個對象都有一個監視器鎖(monitor)
  • 進入同步塊時執行monitorenter,退出時執行monitorexit
  1. ??AQS (AbstractQueuedSynchronizer)??
  • Java并發包中鎖的基礎框架
  • 使用一個volatile int state表示鎖狀態
  • 通過CAS操作實現鎖的獲取和釋放
  • 維護一個FIFO隊列管理等待線程
  1. ??CAS (Compare And Swap)??
  • 原子操作,比較并交換
  • 現代CPU提供的指令級原子操作
  • 是樂觀鎖的實現基礎
5.?TCP協議中擁塞控制的主要作用是什么?
TCP擁塞控制的主要作用是:
  1. ??防止網絡過載??:通過動態調整發送速率,避免過多數據同時涌入網絡導致路由器緩沖區溢出和丟包
  2. ??公平性??:確保多個TCP連接能公平共享網絡帶寬資源
  3. ??提高網絡利用率??:在不過載的前提下盡可能充分利用可用帶寬
??擁塞控制算法核心機制:??
  1. ??慢啟動(Slow Start)??
  • 連接開始時,擁塞窗口(cwnd)從1個MSS開始
  • 每收到一個ACK,cwnd增加1個MSS(指數增長)
  • 直到達到慢啟動閾值(ssthresh)或發生擁塞
  1. ??擁塞避免(Congestion Avoidance)??
  • 當cwnd >= ssthresh時,進入線性增長階段
  • 每RTT時間cwnd增加1個MSS
  1. ??快速重傳(Fast Retransmit)??
  • 收到3個重復ACK時,立即重傳丟失的報文段
  • 而不必等待超時
  1. ??快速恢復(Fast Recovery)??
  • 發生快速重傳后,調整ssthresh和cwnd
  • 避免像超時那樣完全從慢啟動開始
6.?String類的常用函數有哪些?列舉十種。
length()、charAt(int index)、substring(int beginIndex)、equals(Object o) contains(String str)、indexOf(String str) toLowerCase()、toUpperCase()、trim() split(String regex)、replace(char oldChar,char newChar)、isEmpty()
7.?String和StringBuffer,StringBuilder的區別有哪些?所有類名包含Buffer的類的內部實現原理是什么?有什么優勢?
特性
String
StringBuffer
StringBuilder
可變性
不可變
可變
可變
線程安全
不可變故線程安全
線程安全(synchronized方法)
非線程安全
性能
高(因不可變)
較低(同步開銷)
最高
使用場景
常量字符串
多線程環境字符串操作
單線程環境字符串操作
繼承關系
Object
AbstractStringBuilder
AbstractStringBuilder
內部實現原理:使用字符數組實現,動態擴容機制(通常2倍)。
優勢:減少內存分配和拷貝次數,提高性能
8.?String字符串的不可變是指哪里不可變?
指String對象創建后其字符數組內容不可變,任何修改操作都會創建新String對象
9.?HTTP協議有哪些字段,列舉3個就可以。
  1. ??通用字段(General Header Fields)?
  • Cache-Control:控制緩存行為
  • Connection:控制連接狀態(如keep-alive)
  • Date:消息產生的日期時間
  1. ??請求字段(Request Header Fields)??
  • Host:請求的目標主機和端口號
  • User-Agent:客戶端信息
  • Accept:可接受的響應內容類型
  • Authorization:認證信息
  1. ??響應字段(Response Header Fields)??
  • Server:服務器信息
  • Set-Cookie:設置Cookie
  • Content-Type:響應體的MIME類型
  • Content-Length:響應體長度
  1. ??實體字段(Entity Header Fields)??
  • Content-Encoding:內容編碼方式
  • Expires:內容過期時間
  • Last-Modified:最后修改時間
10.?Java異常類有哪些?分別管理什么異常?
Error:系統級錯誤,通常由JVM拋出,不建議捕獲
Exception:可處理的異常
11.?Java反射獲取類信息的方式有哪幾種?分別是什么?
class.forName("全限定類名")
類名.class()
對象.getClass()
12.?Java代理的主要方法有哪幾種?列舉代理的使用場景2個。
靜態代理 動態代理 CGLIB代理
AOP實現(如Spring事務管理)
RPC框架調用遠程服務
13.?equals()方法的作用是什么?重寫equals需要注意哪些事項?為什么?
判斷對象邏輯相等性
必須重寫hashCode() 滿足自反性、對稱性、傳遞性、一致性
14.?Java是按值傳遞還是按引用傳遞?什么是引用傳遞,什么是值傳遞,哪些語言支持引用傳遞?
按值傳遞 :基本類型傳遞值副本
按引用值傳遞:對象傳遞引用副本
C++、PHP等
15.?描述java的類初始化順序?如果存在繼承,初始化順序會如何
  1. 父類靜態變量和靜態塊
  2. 子類靜態變量和靜態塊
  3. 父類實例變量和實例塊
  4. 父類構造方法
  5. 子類實例變量和實例塊
  6. 子類構造方法
16.?本地方法棧有什么作用?
為JVM調用本地(Native)方法服務,存儲本地方法調用的狀態
17.?描述Java的雙親委派機制,為什么要用到雙親委派機制
描述:類加載請求先委派給父加載器,只有父加載器無法完成時才自己加載
目的:避免重復加載 保證核心類安全
18.?重寫和重載的區別是什么?
重寫:子類重新實現父類方法,方法簽名相同
重載:同一類中同名不同參的方法
19.?子類構造方法調用父類構造方法的注意事項有哪些?
必須通過super()調用父類構造方法
super()必須是構造方法的第一條語句
20.?子類實例初始化是否觸發發父類實例初始化?
會,創建子類實例會先初始化父類
21.?instanceof關鍵字的作用是什么?
判斷對象是否是某個類或其子類的實例
返回boolean值:true表示是,false表示不是
22.?基本類型的強制類型轉換是否會丟失精度?引用類型的強制類型轉換需要注意什么?
基本類型:大轉小可能丟失精度
引用類型:需注意ClassCastException,應在轉換前用instanceof檢查
23.?重入鎖有哪些?為什么要有重入鎖?
synchronized、ReentrantLock
目的:允許線程多次獲取已持有的鎖,避免死鎖
24.?指令重排序的優點是什么?由什么原因導致的?
優點:提高程序執行效率
原因:編譯器優化、CPU亂序執行
25.?Arrays.sort()的內部原理介紹一下?
基本類型:快速排序
對象類型:TimSort(歸并+插入排序優化)
26.?堆排序的時間復雜度是多少,空間復雜度是多少?
時間復雜度:O(nlogn)
空間復雜度:O(1)
27.?字符串“asdasjkfkasgfgshaahsfaf”經過哈夫曼編碼之后存儲比特數是多少?
28.?CPU高速緩存的優點和缺點有哪些?
優點:減少CPU訪問內存的延遲 提高程序執行速度
缺點:緩存一致性問題 增加了硬件復雜度
29.?線程安全的類有哪些?列舉2個以上就可以
Vector Hashtable StringBuffer
30.?什么是LRU算法?
最近最少使用(Least Recently Used)緩存淘汰算法,淘汰最久未使用的數據
31.?何為Spring Bean容器?Spring Bean容器與Spring IOC 容器有什么不同嗎?
Spring Bean容器??:
  1. ??定義??:
  • 負責管理應用中Bean的生命周期
  • 提供Bean的創建、配置、組裝和管理服務
  1. ??核心功能??:
  • 依賴注入
  • 生命周期管理
  • 作用域管理
  • AOP代理創建
??Spring IOC容器??:
  1. ??定義??:
  • 控制反轉(Inversion of Control)容器
  • 實現依賴注入(DI)模式的核心組件
  1. ??主要實現??:
  • BeanFactory:基礎IOC容器
  • ApplicationContext:擴展了更多企業級功能
??Bean容器與IOC容器的關系??:
  1. ??相同點??:
  • 都負責管理Bean對象
  • 都實現依賴注入功能
  1. ??不同點??:

特性

Spring Bean容器

Spring IOC容器

功能范圍

專注于Bean生命周期管理

更廣泛,包括資源訪問、事件等

實現級別

概念層面

具體接口和實現類

使用場景

泛指Bean管理功能

特指依賴注入實現機制

典型代表

-

BeanFactory, ApplicationContext

??總結??:
  • 兩者在大多數情況下可以互換使用
  • 嚴格來說,IOC容器是實現Bean容器功能的機制
  • ApplicationContext是功能最完整的IOC容器實現
32.?Spring IOC 如何理解?
??定義??:
  • IOC(Inversion of Control):控制反轉
  • 將對象的創建、依賴管理交給容器而非程序員
  1. ??實現原理??:
  • 通過反射機制動態創建和管理對象
  • 維護Bean之間的依賴關系
  • 在適當時候注入依賴
  1. ??核心價值??:
  • ??解耦??:減少組件間的直接依賴
  • ??可維護性??:集中管理對象生命周期
  • ??可測試性??:便于模擬依賴進行測試
  • ??靈活性??:配置變更不影響代碼
  1. ??工作流程??:
    1. 讀取配置(注解/XML)
    2. 創建Bean定義
    3. 實例化Bean
    4. 注入依賴
    5. 初始化Bean
    6. 提供服務
    7. 銷毀Bean
  2. ??主要接口??:
  • BeanFactory:基礎IOC容器
  • ApplicationContext:擴展接口,添加更多企業功能
  • BeanDefinition:描述Bean的元數據
33.?Spring DI 如何理解?
??定義??:
  • 依賴注入,IOC的具體實現技術
  • 容器將依賴關系自動注入到組件中
  1. ??實現方式??:
  • ??構造器注入??:通過構造方法注入
  • ??Setter注入??:通過setter方法注入
  • ??字段注入??:直接注入字段(反射實現)
  1. ??注入類型??:
  • ??按類型注入??:@Autowired(默認按類型)
  • ??按名稱注入??:@Qualifier指定名稱
  • ??強制依賴??:使用required=true
  • ??可選依賴??:使用required=false
  1. ??優勢??:
  • 減少樣板代碼
  • 提高可測試性
  • 降低耦合度
  • 配置靈活
  1. ??相關注解??:
  • @Autowired:自動裝配
  • @Resource:JSR-250標準注解
  • @Inject:JSR-330標準注解
  • @Value:注入簡單值
34.?Spring 中基于注解如何配置對象作用域?以及如何配置延遲加載機制?
  1. ??作用域類型??:
  • ??單例(Singleton)??:默認,每個容器一個實例
  • ??原型(Prototype)??:每次請求創建新實例
  • ??請求(Request)??:每個HTTP請求一個實例
  • ??會話(Session)??:每個HTTP會話一個實例
  • ??全局會話(Global Session)??:Portlet應用專用
  1. ??配置方式??:
@Scope("prototype") // 指定作用域 @Component public class MyPrototypeBean {} // 或使用常量 @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) @Component public class AnotherPrototypeBean {}
??基于注解配置延遲加載??:
  1. ??延遲加載(Lazy Initialization)??:
  • 只有第一次使用時才創建實例
  • 減少應用啟動時間
  • 適用于不立即需要的Bean
  1. ??配置方式??:
@Lazy // 類級別延遲加載 @Component public class MyLazyBean {} @Configuration public class AppConfig { @Bean @Lazy // 方法級別延遲加載 public MyBean myBean() { return new MyBean(); } }
  1. ??組合使用示例??:
@Scope("prototype") @Lazy @Component public class MyLazyPrototypeBean {}
  1. ??注意事項??:
  • 延遲加載的Bean在第一次訪問時會有輕微性能開銷
  • 原型作用域的Bean通常需要配合延遲加載
  • 某些Bean(如基礎設施Bean)不適合延遲加載
35.?Spring 工廠底層構建Bean對象借助什么機制?當對象不使用了要釋放資源,目的是什么?何為內存泄漏?
Spring構建Bean的機制??:
  1. ??反射機制??:
  • Class.forName()加載類
  • Constructor.newInstance()創建實例
  • Field.set()注入屬性
  1. ??動態代理??:
  • JDK動態代理(基于接口)
  • CGLIB代理(基于子類)
  1. ??工廠模式??:
  • BeanFactory接口定義獲取Bean的方法
  • 各種實現類提供具體創建邏輯
  1. ??生命周期管理??:
  • InstantiationAwareBeanPostProcessor
  • BeanPostProcessor
  • InitializingBean/DisposableBean接口
??釋放資源的目的??:
  1. ??防止資源泄漏??:
  • 關閉數據庫連接
  • 釋放文件句柄
  • 清理網絡連接
  1. ??避免內存泄漏??:
  • 移除緩存引用
  • 清理監聽器
  • 斷開對象引用鏈
  1. ??優雅關閉??:
  • 保存狀態
  • 完成未完成的操作
  • 記錄日志
??內存泄漏定義??:
  1. ??概念??:
  • 對象不再被使用但無法被GC回收
  • 導致內存占用持續增長
  1. ??Spring中常見原因??:
  • 未正確實現DisposableBean
  • 靜態集合持有Bean引用
  • 監聽器未正確注銷
  • 線程池未關閉
  1. ??檢測方法??:
  • 內存分析工具(VisualVM, MAT)
  • 監控內存使用情況
  • 分析GC日志
36.?描述Spring MVC處理流程及應用優勢?
  1. 用戶請求-DispatcherServlet
  2. HandlerMapping找到處理器
  3. 調用處理器返回ModelAndView
  4. 視圖解析器解析視圖
  5. 渲染視圖返回響應
Spring MVC優勢??:
  1. ??清晰的職責分離??:
  • 各組件分工明確
  • 易于維護和擴展
  1. ??靈活配置??:
  • 支持注解驅動
  • 多種視圖技術集成
  1. ??強大的數據綁定??:
  • 自動請求參數綁定
  • 支持表單驗證
  1. ??國際化支持??:
  • 本地化解析
  • 主題支持
  1. ??測試友好??:
  • 易于單元測試
  • 支持Mock測試
  1. ??集成能力??:
  • 與其他Spring項目無縫集成
  • 支持RESTful開發
  1. ??擴展性強??:
  • 可自定義各組件實現
  • 攔截器機制靈活
37.?Spring中的事務處理方式及優缺點?
Spring事務處理方式??:
  1. ??編程式事務??:
  • 使用TransactionTemplate
  • 通過代碼顯式控制事務邊界
??優點??:
  • 精確控制事務范圍
  • 靈活處理復雜邏輯
??缺點??:
  • 代碼侵入性強
  • 容易遺漏提交/回滾
??示例??:
transactionTemplate.execute(status -> { // 業務代碼 return result; });
  1. ??聲明式事務??:
  • 使用@Transactional注解
  • 基于AOP實現
??優點??:
  • 非侵入式
  • 配置簡單
  • 減少樣板代碼
??缺點??:
  • 粒度較粗(方法級別)
  • 異常處理需注意
??示例??:
@Transactional public void businessMethod() { // 業務代碼 }
??事務傳播行為??:

傳播行為類型

說明

REQUIRED(默認)

當前有事務則加入,沒有則新建

REQUIRES_NEW

新建事務,掛起當前事務

SUPPORTS

當前有事務則加入,沒有則以非事務執行

NOT_SUPPORTED

以非事務執行,掛起當前事務

MANDATORY

必須在事務中運行,否則拋出異常

NEVER

必須在非事務中運行,否則拋出異常

NESTED

嵌套事務執行

??隔離級別??:
隔離級別
說明
DEFAULT
使用數據庫默認級別
READ_UNCOMMITTED
讀未提交,可能臟讀
READ_COMMITTED
讀已提交,避免臟讀
REPEATABLE_READ
可重復讀,避免臟讀和不可重復讀
SERIALIZABLE
串行化,最高隔離級別
38.?MyBatis應用中#與$有什么異同點?
#{}與${}的區別??:

特性

#{}

${}

處理方式

預編譯處理(占位符?)

字符串替換(直接拼接SQL)

安全性

防止SQL注入

有SQL注入風險

參數類型

自動識別并轉換

原樣輸出

適用場景

參數值

表名、列名等非參數部分

日期處理

自動格式化為數據庫兼容格式

需要手動處理

空值處理

自動處理null

可能引發語法錯誤

??使用示例??:
<!-- 安全的方式 --> <select id="findUser" resultType="User"> SELECT * FROM user WHERE name = #{name} </select> <!-- 不安全但必要的情況 --> <select id="selectByTable" resultType="map"> SELECT * FROM ${tableName} WHERE id = #{id} </select>
??最佳實踐??:
  1. 優先使用#{},防止SQL注入
  2. ${}僅用于動態表名、列名等非參數部分
  3. 使用${}時要確保參數值可信或經過校驗
  4. 復雜SQL可混合使用兩者
39.?MyBatis應用動態SQL解決了什么問題?
動態SQL解決的問題??:
  1. ??條件不確定的查詢??:
  • 根據不同條件拼接不同SQL
  • 避免寫多個相似的SQL語句
  1. ??靈活的表操作??:
  • 動態選擇表名、列名
  • 適應表結構變化
  1. ??批量操作??:
  • 動態生成批量插入/更新語句
  • 簡化批量數據處理
  1. ??避免SQL拼接風險??:
  • 提供安全的動態SQL構建方式
  • 減少手動拼接錯誤
??主要動態SQL元素??:
  1. ??if??:條件判斷
<if test="name != null"> AND name = #{name} </if>
  1. ??choose/when/otherwise??:多選一
<choose> <when test="id != null">AND id = #{id}</when> <when test="name != null">AND name = #{name}</when> <otherwise>AND status = 1</otherwise> </choose>
  1. ??trim/where/set??:處理SQL片段
<where> <if test="state != null">state = #{state}</if> </where>
  1. ??foreach??:循環處理
<foreach item="item" collection="list" open="(" separator="," close=")"> #{item} </foreach>
  1. ??bind??:創建變量
<bind name="pattern" value="'%' + name + '%'" />
??應用示例??:
<select id="findActiveBlogWithTitleLike" resultType="Blog"> SELECT * FROM blog <where> <if test="state != null"> AND state = #{state} </if> <if test="title != null"> AND title like #{title} </if> </where> </select>
40.?hiro框架權限管理時的認證和授權流程描述?
Shiro認證(Authentication)流程??:
  1. ??主體提交認證信息??:
Subject currentUser = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken("username", "password"); currentUser.login(token);
  1. ??委托Authenticator認證??:
  • 調用Realm的doGetAuthenticationInfo方法
  • 獲取認證信息(AuthenticationInfo)
  1. ??憑證匹配??:
  • 使用CredentialsMatcher比較提交的和存儲的憑證
  • 匹配成功完成認證
  1. ??創建已認證主體??:
  • 綁定主體到當前線程
  • 設置認證標志
??Shiro授權(Authorization)流程??:
  1. ??權限檢查觸發??:
subject.checkPermission("user:delete"); // 或 @RequiresRoles("admin") public void deleteUser() {}
  1. ??委托Authorizer授權??:
  • 調用Realm的doGetAuthorizationInfo方法
  • 獲取授權信息(AuthorizationInfo)
  1. ??權限驗證??:
  • 檢查角色/權限是否匹配
  • 不匹配拋出UnauthorizedException
  1. ??訪問控制??:
  • 驗證通過允許訪問
  • 否則拒絕訪問
??關鍵組件??:
  1. ??Subject??:當前操作用戶
  2. ??SecurityManager??:安全管理者
  3. ??Authenticator??:認證器
  4. ??Authorizer??:授權器
  5. ??Realm??:安全數據源
  6. ??SessionManager??:會話管理
??配置示例??:
@Bean public ShiroFilterFactoryBean shiroFilter() { ShiroFilterFactoryBean factory = new ShiroFilterFactoryBean(); factory.setSecurityManager(securityManager()); Map<String, String> filterMap = new LinkedHashMap<>(); filterMap.put("/login", "anon"); filterMap.put("/admin/**", "authc, roles[admin]"); filterMap.put("/**", "authc"); factory.setFilterChainDefinitionMap(filterMap); return factory; } @Bean public Realm realm() { IniRealm realm = new IniRealm("classpath:shiro.ini"); return realm; }
41.?BeanFactory和ApplicationContext有什么區別????
特性
BeanFactory
ApplicationContext
功能定位
基礎IOC容器
企業級擴展容器
加載時機
延遲加載(按需初始化)
啟動時預加載所有單例Bean
國際化支持
不支持
支持(MessageSource)
事件發布
不支持
支持(ApplicationEventPublisher)
AOP支持
需要額外配置
內置支持
資源訪問
基本支持
更豐富的資源訪問方式(ResourceLoader)
自動注冊
不支持BeanPostProcessor自動注冊
支持
典型實現
DefaultListableBeanFactory
ClassPathXmlApplicationContext, AnnotationConfigApplicationContext
性能
啟動快,運行時慢
啟動慢,運行時快
使用場景
資源受限環境
大多數企業應用
42.?請解釋Spring Bean的生命周期??????
實例化-屬性填充-初始化-使用-銷毀?
43.?Spring Bean的作用域之間有什么區別??????
作用域
說明
適用場景
線程安全要求
singleton(默認)
每個容器一個實例
無狀態服務,配置類
必須線程安全
prototype
每次請求創建新實例
有狀態Bean
通常不需要
request
每個HTTP請求一個實例
Web請求相關數據
不需要
session
每個HTTP會話一個實例
用戶會話數據
不需要
application
每個ServletContext一個實例
Web應用全局數據
必須線程安全
websocket
每個WebSocket會話一個實例
WebSocket通信
不需要
44.?使用Spring框架的好處是什么?
Spring框架核心優勢??:
  1. ??輕量級??:
  • 非侵入式設計
  • 最小化應用代碼對框架的依賴
  1. ??IOC/DI??:
  • 松耦合
  • 易于測試和維護
  1. ??AOP支持??:
  • 分離橫切關注點
  • 聲明式服務(事務、安全等)
  1. ??集成能力??:
  • 與各種技術棧無縫集成
  • 一站式解決方案
  1. ??模塊化設計??:
  • 按需選擇模塊
  • 靈活組合
  1. ??簡化開發??:
  • 減少樣板代碼
  • 提高開發效率
  1. ??強大的生態??:
  • Spring Boot
  • Spring Cloud
  • Spring Data等
45.?Spring 中用到了那些設計模式?
  • Spring中常見的設計模式??:
  1. ??工廠模式??:
  • BeanFactory
  • ApplicationContext
  1. ??單例模式??:
  • 默認Bean作用域
  • 應用上下文
  1. ??代理模式??:
  • AOP實現
  • @Transactional
  1. ??模板方法??:
  • JdbcTemplate
  • RestTemplate
  1. ??觀察者模式??:
  • 事件發布/監聽機制
  1. ??適配器模式??:
  • HandlerAdapter
  • AdvisorAdapter
  1. ??裝飾者模式??:
  • Wrapper類
  • 動態代理
  1. ??策略模式??:
  • 資源訪問策略
  • 事務管理策略
46.?Spring 如何保證 Controller 并發的安全?
Spring MVC Controller線程安全保證??:
  1. ??默認行為??:
  • Controller默認是單例
  • 必須設計為無狀態(避免實例變量)
  1. ??安全實踐??:
  • 使用局部變量而非實例變量
  • 使用ThreadLocal保存請求相關狀態
  • 將共享狀態聲明為原型作用域
  1. ??并發工具??:
  • 使用并發集合
  • 同步關鍵代碼塊
  1. ??作用域選擇??:
  • 對有狀態需求使用request/session作用域
  1. ??注解支持??:
  • @Scope("prototype")使Controller成為原型
48.?在 Spring中如何注入一個java集合?
Spring集合注入方式??:
  1. ??XML配置??:
<bean id="collectionBean" class="com.example.CollectionBean"> <property name="list"> <list> <value>Java</value> <ref bean="otherBean"/> </list> </property> <property name="set"> <set> <value>Spring</value></set> </property> <property name="map"> <map> <entry key="key1" value="value1"/> <entry key="key2" ref="otherBean"/> </map> </property>
</bean>

  1. ??注解配置??:
@Component 
public class CollectionBean { @Autowired private List<MyInterface> implementations; @Resource(name = "myMap") private Map<String, Object> map;
} @Configuration 
public class AppConfig { @Bean public List<String> stringList() { return Arrays.asList("A", "B");
} 
@Bean public Map<String, Integer> myMap() {Map<String, Integer> map = new HashMap<>(); map.put("key1", 100); return map; }
}
  1. ??Java Util類注入??:
@Autowired private ResourceLoader resourceLoader;
49.?Spring支持的事務管理類型?
Spring事務管理類型??:
  1. ??編程式事務??:
  • 使用TransactionTemplate
  • 使用PlatformTransactionManager直接管理
  1. ??聲明式事務??:
  • XML配置:
  • 注解驅動:@Transactional
??聲明式事務實現方式??:
  • 基于AOP代理
  • 基于字節碼生成(ASPECTJ)
??事務傳播行為??:
  • REQUIRED, REQUIRES_NEW, NESTED等
??隔離級別??:
  • DEFAULT, READ_UNCOMMITTED等
50.?Spring框架的事務管理有哪些優點?
Spring事務管理優勢??:
  1. ??一致性API??:
  • 統一不同持久化技術的事務API
  • 切換持久化技術不影響業務代碼
  1. ??聲明式支持??:
  • 通過配置管理事務
  • 減少樣板代碼
  1. ??編程式選擇??:
  • 靈活控制事務邊界
  1. ??集成測試??:
  • 易于模擬和測試
  1. ??多種實現??:
  • JDBC, JPA, Hibernate等支持
  1. ??AOP支持??:
  • 非侵入式事務管理
51.?Spring MVC的主要組件?
Spring MVC核心組件??:
  1. ??DispatcherServlet??:前端控制器
  2. ??HandlerMapping??:請求到處理器的映射
  3. ??Controller??:處理業務邏輯
  4. ??ModelAndView??:封裝模型和視圖
  5. ??ViewResolver??:視圖名稱解析
  6. ??HandlerInterceptor??:攔截器
  7. ??HandlerAdapter??:適配不同處理器
  8. ??MultipartResolver??:文件上傳
  9. ??LocaleResolver??:國際化
  10. ??ThemeResolver??:主題解析
52.?SpringMvc怎么和AJAX相互調用的?
Spring MVC與AJAX交互方式??:
  1. ??返回JSON??:
@RestController 
public class AjaxController {@GetMapping("/user") public User getUser() { return new User("John", 30); }
}
  1. ??@ResponseBody??:
@Controller 
public class AjaxController { @RequestMapping("/data")@ResponseBody public String getData() { return "AJAX response"; } 
}
  1. ??Jackson支持??:
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId>
</dependency>
  1. ??前端調用??:
$.get("/user", function(data) { console.log(data.name); });
53.?Mybatis 中#和$的區別?
#{}:預編譯,防止sql注入
${}:字符串替換,有注入風險
54.?mybatis的緩存機制,一級,二級介紹一下?
一級緩存:SqlSession級別
二級緩存:Mapper級別
55.?pringMVC與Struts2的區別?
特性
Spring MVC
Struts2
設計理念
基于方法
基于類
性能
更高
較低
線程安全
方法局部變量
成員變量需注意
攔截器
HandlerInterceptor
獨立攔截器棧
視圖技術
更靈活
主要JSP
集成
與Spring生態無縫
需要額外集成
REST支持
優秀
較弱
配置
注解為主
XML配置為主
56.?mybatis的基本工作流程?
  1. 加載配置:mybatis-config.xml + Mapper XML
  2. 創建SqlSessionFactory
  3. 創建SqlSession
  4. 執行SQL:
  • 獲取Mapper接口代理
  • 解析SQL/參數
  • 執行數據庫操作
  1. 返回結果:結果映射
  2. 關閉會話
57.?什么是MyBatis的接口綁定,有什么好處?
通過Mapper接口與XML映射文件綁定,優點:
  • 類型安全
  • 避免硬編碼
  • IDE支持更好
58.?MyBatis的編程步驟?
  1. MyBatis開發步驟??:
  2. 添加依賴:mybatis.jar + 數據庫驅動
  3. 創建全局配置文件:mybatis-config.xml
  4. 創建實體類
  5. 創建Mapper接口
  6. 創建SQL映射文件(XML或注解)
  7. 獲取SqlSessionFactory
  8. 獲取SqlSession
  9. 獲取Mapper接口實例
  10. 執行數據庫操作
  11. 提交事務/關閉會話
59.?JDBC編程有哪些不足之處,MyBatis是如何解決這些問題的?

JDBC不足

MyBatis解決方案

大量樣板代碼

自動生成/簡化代碼

手動處理連接/異常

自動管理資源

SQL與Java代碼混合

SQL與代碼分離

硬編碼參數/結果映射

自動參數綁定/結果映射

手動處理事務

聲明式事務支持

緩存支持弱

提供一/二級緩存

不同數據庫差異處理復雜

方言支持

批量操作繁瑣

提供批量執行器

60.?MyBatis的優缺點?
MyBatis優點??:
  1. SQL控制靈活
  2. 學習曲線平緩
  3. 輕量級
  4. 動態SQL強大
  5. 與Spring集成好
  6. 性能接近JDBC
??MyBatis缺點??:
  1. SQL工作量大
  2. 移植性較差
  3. 緩存機制較簡單
  4. 復雜映射配置較多

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/92852.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92852.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92852.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Apache 消息隊列分布式架構與原理

消息隊列 基本概念 定義 消息隊列&#xff08;Message Queue, MQ&#xff09;是一種分布式中間件&#xff0c;通過異步通信、消息暫存和解耦生產消費雙方的機制&#xff0c;提供消息的順序性保證、可靠投遞和流量控制能力&#xff0c;廣泛應用于微服務解耦、大數據流處理等場景…

ModernBERT如何突破BERT局限?情感分析全流程解析

自2018年推出以來&#xff0c;BERT 徹底改變了自然語言處理領域。它在情感分析、問答、語言推理等任務中表現優異。借助雙向訓練和基于Transformer的自注意力機制&#xff0c;BERT 開創了理解文本中單詞關系的新范式。然而&#xff0c;盡管成績斐然&#xff0c;BERT 仍存在局限…

股票Level2逐筆成交及十檔訂單簿分鐘級Tick歷史行情數據詳細解析

本地股票數據處理與分析實戰指南 在量化投資與金融數據分析領域&#xff0c;高效處理本地存儲的股票數據是核心能力之一。本文將從數據類型定義、解析流程及實際應用角度&#xff0c;系統介紹如何基于CSV文件管理股票分鐘數據、高頻Tick數據、逐筆數據、Level2歷史行情等多樣化…

面向互聯網2C業務的分布式類Manus Java框架

本文介紹了阿里巴巴推出的分布式類ManusAgent框架——ali-langengine-dflow&#xff0c;旨在解決現有Agent架構在互聯網2C業務場景中的局限性。文章從背景出發&#xff0c;分析了當前主流Agent架構&#xff08;如Manus、字節TARS、AutoGLM&#xff09;存在的問題&#xff0c;如…

Java-82 深入淺出 MySQL 內部架構:服務層、存儲引擎與文件系統全覆蓋

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持續更新中&#xff01;&#xff08;長期更新&#xff09; AI煉丹日志-30-新發布【1T 萬億】參數量大模型&#xff01;Kim…

開發避坑短篇(6):Vue+Element UI 深度選擇器實現表單元素精準對齊的技術實踐

需求 el-form 表單的el-input和el-select默認寬度度不一致&#xff0c;導致不對齊&#xff0c;如下圖。那么如何設置讓el-input和el-select的寬度度一致并對齊&#xff1f;<el-form class"page-form" :model"addForm" :rules"rules" :disable…

rust-參考與借用

參考與借用 在清單4-5中的元組代碼的問題在于&#xff0c;我們必須將String返回給調用函數&#xff0c;這樣我們才能在調用calculate_length之后繼續使用String&#xff0c;因為String已經被移動到了calculate_length中。相反&#xff0c;我們可以提供一個對String值的引用。引…

深入解析HDFS Federation:如何有效解決單NameNode瓶頸問題

HDFS Federation簡介與背景在Hadoop分布式文件系統&#xff08;HDFS&#xff09;的經典架構中&#xff0c;NameNode作為核心組件承擔著整個文件系統的元數據管理職責。這一設計雖然簡潔高效&#xff0c;但隨著數據規模的爆炸式增長&#xff0c;單NameNode架構逐漸暴露出難以克服…

為什么選擇EasyGBS?

作為集 算法倉、算力設備接入、視頻云平臺 于一體的綜合性智能安防監控平臺&#xff0c;EasyGBS有哪些優勢是您的必選理由呢&#xff1f;一、設備與協議的兼容性EasyGBS不挑設備品牌型號。只要支持GB28181、RTSP、ONVIF、RTMP標準協議里的任一種&#xff0c;就能將視頻接入。但…

【形態學變換】——圖像預處理(OpenCV)

目錄 1 核 2 腐蝕 3 膨脹 4 開運算 5 閉運算 6 禮帽運算 7 黑帽運算 8 形態學梯度 形態學變換是一種基于形狀的簡單變換&#xff0c;處理對象是二值化后的圖像。有兩個輸入&#xff1a;原圖像和核&#xff0c;一個輸出&#xff1a;形態學變換后的圖像。基本操作有以下四…

一次“非法指令”(SIGILL)問題的完整調試過程:CPU指令集兼容性探秘

一次"非法指令"問題的完整調試過程&#xff1a;CPU指令集兼容性探秘一、問題概述二、問題現象與初步分析1. 環境與現象2. 官方文檔的線索3. 重現問題4. 懷疑方向&#xff1a;CPU指令兼容性5. 關鍵發現&#xff1a;AVX512指令三、詳細調試過程1. 搭建調試環境 (KVM虛擬…

Node.js - 創建 Express 項目

創建 Express 項目 安裝 npm i -g express-generatorornpm i -g express-generator4# 注意&#xff1a;Windows有可能碰到提示&#xff1a;npm : 無法加載文件 C:\Program Files\nodejs\npm.ps1&#xff0c;因為在此系統上禁止運行腳本。 # 如果碰到這個錯誤&#xff0c;需要…

高并發系統設計面試題

高并發系統設計面試題&#x1f525;&#x1f525;&#x1f525; 超高頻問題&#xff08;幾乎必問&#xff09;讓你設計一個秒殺系統&#xff0c;你會考慮哪些問題&#xff1f;如果你的業務量突然提升100倍QPS你會怎么做&#xff1f;庫存扣減如何避免超賣和少賣&#xff1f;訂單…

【通識】如何看電路圖

1. 電路圖 1.1 基礎概念 電路圖即電原理圖。 電路圖第一種是說明模擬電子電路工作原理&#xff0c;用圖形符號表示電阻器、電容器、開關、晶體管等實物&#xff0c;用線條把元器件和單元電路按工作原理的關系連接起來。 第二種則是說明數字電子電路工作原理的。用圖形符號表示…

SpringBoot實戰指南:從快速入門到生產級部署(2025最新版)

一、為什么SpringBoot依然是Java開發的首選&#xff1f; SpringBoot自2014年發布以來&#xff0c;已成為Java企業級開發的事實標準框架。根據2025年最新調研數據顯示&#xff0c;全球78%的Java微服務項目基于SpringBoot構建&#xff0c;其核心優勢在于&#xff1a; 約定優于配置…

新房裝修是中央空調還是壁掛空調好?

這個要看戶型和投資金額&#xff0c;大戶型空間適合裝中央空調&#xff0c;因為空間大有足夠的地方安裝&#xff0c;功率也可以根據面積大小進行配置&#xff0c;整體配置一個外機就行了&#xff0c;整體的裝修效果比較規整&#xff0c;就是多花點&#xff0c;使用成本也稍高點…

如何理解泊松分布

文章目錄一、引例——鯨魚研究二、泊松分布一、引例——鯨魚研究 有生態學家對生活在北冰洋水域的鯨魚進行了跟蹤研究&#xff0c;他們利用一臺水下無人機來探測鯨魚數量&#xff0c;這是近十天的數據&#xff1a; 第1天第2天第3天第4天第5天第6天第7天第8天第9天第10天10101…

python學習DAY22打卡

作業&#xff1a; 自行學習參考如何使用kaggle平臺&#xff0c;寫下使用注意點&#xff0c;并對下述比賽提交代碼 kaggle泰坦尼克號人員生還預測 import warnings warnings.filterwarnings("ignore") #忽略警告信息 # 數據處理清洗包 import pandas as pd import …

在 Ansys CFX Pre 中配置 RGP 表的分步指南

掌握在 Ansys CFX Pre 中設置 RGP 表的技巧&#xff0c;以優化仿真精度和效率。挑戰在計算流體動力學 &#xff08;CFD&#xff09; 領域&#xff0c;RGP&#xff08;真實氣體屬性&#xff09;表對于準確模擬流體在不同條件下的行為至關重要。這些表格提供了詳細的熱力學屬性&a…

C語言————原碼 補碼 反碼 (日漸清晰版)

本文的內容通下面這篇文章有著緊密的聯系&#xff0c;讀者可以選擇性閱讀 C語言————二、八、十、十六進制的相互轉換-CSDN博客 目錄 基本概念 原碼 反碼 補碼 轉換 數據的存儲方式 基本存儲單位 數據的計算方式 補碼的模運算原理 移位操作符 左移操作符 右移操…