網站制作NEWS
2
什么是線程死鎖?死鎖如何產生?如何避免線程死鎖?
線程死鎖是指當兩個或多個線程因互相持有對方所需的資源而陷入等待狀態(tài),導致無法繼續(xù)執(zhí)行。當一個線程進入對象的synchronized代碼塊時,它會占有資源,直到退出代碼塊或調用wait方法才會釋放資源。若線程間互相持有對方所需的資源,它們將互等對方釋放資源,若線程均不主動釋放所占資源,將產生死鎖。
死鎖的產生條件包括:資源互斥使用、占有且等待、不可搶占和循環(huán)等待。避免死鎖的方法有:1. 加鎖順序:確保所有線程都按照相同的順序獲取鎖,以避免死鎖。2. 加鎖時限:設定超時時間,線程未能在給定時間內獲取所有所需鎖則回退并釋放已獲取鎖,然后隨機等待后重試,但可能在高并發(fā)場景下重復嘗試。3. 死鎖檢測:在每次線程獲取鎖時記錄鎖和線程關系,檢測是否有循環(huán)等待關系。
notify和notifyAll的區(qū)別是:notify作用于等待某對象的單個線程,使其退出wait狀態(tài);notifyAll使所有在該對象上等待的線程退出wait狀態(tài),成為等待該對象鎖的競爭者。
MySQL InnoDB引擎是關鍵存儲引擎,支持ACID事務和參數完整性。它在MySQL5.5.5后成為默認存儲引擎。其特點包括:支持事務一致性、支持外鍵約束、并行查詢優(yōu)化、自動表鎖管理和行級鎖定機制。
事務的隔離級別決定了并發(fā)操作時數據一致性保證的嚴格程度,隔離級別越高,數據一致性保證越強,但性能消耗越大。常見隔離級別包括:讀未提交、讀已提交、可重復讀和序列化隔離。
MySQL主從同步基于主服務器的二進制日志跟蹤,主服務器記錄所有數據庫更改,從服務器通過復制日志內容實現(xiàn)數據同步。主從同步過程需要開啟三個線程:bin-log日志記錄、復制日程管理和數據同步。
Java中垃圾回收機制在對象生命周期結束時自動執(zhí)行內存清理。GC何時開始:在Eden區(qū)滿時執(zhí)行Minor GC;老年代空間不足時執(zhí)行Full GC或HandlePromotionFailure參數強制執(zhí)行。GC操作包括:清理無用對象、整理內存。
垃圾回收器類型和算法、類的加載過程、GC對對象的影響以及Spring中Bean的作用域和生命周期。
Spring中Bean的作用域包括:singleton(單例,全局共享一個實例);prototype(每個請求創(chuàng)建新實例);request(一次請求一個實例);session(一次會話一個實例);global Session(portlet上下文一個實例)。
Spring的Bean生命周期管理包括初始化、使用、卸載等階段。
依賴注入方式有構造方法注入和設值注入,分別在實例化時和實例化后注入依賴。
Spring框架應用的設計模式包括IoC、AOP、MVC等。
BeanFactory和ApplicationContext的區(qū)別在于:BeanFactory提供基礎容器功能,而ApplicationContext提供額外功能,如國際化、事件處理等。
數據庫三大范式定義:第一范式(唯一性)要求數據不可分割;第二范式(唯一性+依賴性)要求屬性完全依賴主鍵;第三范式(消除冗余)要求所有非主鍵列僅依賴主鍵。
TCP和UDP的區(qū)別在于:TCP提供可靠字節(jié)流服務,UDP提供無連接數據報服務。它們的適用場景:TCP適用于需要可靠傳輸的應用,如文件傳輸、郵件等;UDP適用于實時通信、廣播等對可靠性要求較低的應用。
Spring核心模塊包括:核心容器、面向切面編程、Web MVC、數據訪問/集成、測試。
forward與redirect的區(qū)別在于:forward在服務器內部轉發(fā)請求,不會產生新的HTTP請求;redirect通過HTTP重新發(fā)送請求,會生成新的URL。
Redis常用數據類型:String(鍵值對)、Hash(鍵值集合)、List(有序列表)、Set(無序集合)、Zset(有序集合)。
內部類和靜態(tài)內部類的區(qū)別在于:內部類依賴外部類,靜態(tài)內部類完全獨立。
非靜態(tài)內部類不能有靜態(tài)成員的原因在于:靜態(tài)成員在類加載時創(chuàng)建,非靜態(tài)內部類實例化時才加載,二者加載時間不同,調用靜態(tài)成員可能引起沖突。
String、StringBuilder和StringBuffer的區(qū)別在于:String是不可變字符串,StringBuilder和StringBuffer是可變字符串,但StringBuffer線程安全。
集合與數組轉換方法:數組轉集合使用List集合構造器,集合轉數組使用toArray方法。
面向對象特征包括封裝、繼承、多態(tài)。
線程狀態(tài)包括:新建、就緒、運行、阻塞、死亡。
Java集合類基本接口有:Collection、Set、List、Map。
Iterator和ListIterator區(qū)別在于:Iterator遍歷集合,ListIterator支持集合的增刪改。
Enumeration和Iterator區(qū)別在于:Iterator更通用,支持并發(fā)操作,而Enumeration不支持。
HTTP響應結構包括:狀態(tài)行、消息頭、空行、響應正文。
請求報文由請求行、請求頭、空行、請求正文組成;響應報文由狀態(tài)行、消息頭、空行、響應正文組成。
final、finalize和finally的區(qū)別在于:final修飾變量不可更改;finalize在對象回收前調用,無保證執(zhí)行時機;finally用于異常處理,確保代碼塊執(zhí)行。
進程間通信方式包括:管道、共享內存、消息隊列、信號量。
多重隨機標簽