版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2025年高頻java研發(fā)工程師面試題及答案Java中JDK17相對(duì)于JDK8的核心新特性有哪些?JDK17作為長(zhǎng)期支持版本(LTS),核心新特性包括:密封類(lèi)(SealedClasses),通過(guò)`sealed`關(guān)鍵字限制類(lèi)的繼承,增強(qiáng)類(lèi)型安全;模式匹配(PatternMatching)在`instanceof`中的擴(kuò)展,允許直接提取對(duì)象字段并轉(zhuǎn)換類(lèi)型,簡(jiǎn)化代碼;`switch`表達(dá)式的進(jìn)一步增強(qiáng),支持`case`中使用模式匹配和`null`處理;引入VectorAPI(孵化階段),提供高效的向量計(jì)算,替代傳統(tǒng)循環(huán);垃圾收集器方面,移除了實(shí)驗(yàn)性的ParallelScavenge+SerialOld組合,正式啟用ZGC作為生產(chǎn)可用的低延遲收集器;此外,JDK17還優(yōu)化了內(nèi)存模型,增強(qiáng)了安全性(如移除RMI的Activation機(jī)制),并通過(guò)`--enable-preview`支持未來(lái)特性的早期試用。ConcurrentHashMap在JDK8中的主要改進(jìn)有哪些?JDK8的ConcurrentHashMap放棄了JDK7及之前的分段鎖(Segment)設(shè)計(jì),改為基于CAS(Compare-And-Swap)+`synchronized`的輕量級(jí)鎖機(jī)制。核心改進(jìn)包括:1.數(shù)據(jù)結(jié)構(gòu)從“Segment數(shù)組+HashEntry數(shù)組+鏈表”改為“Node數(shù)組+鏈表/紅黑樹(shù)”,當(dāng)鏈表長(zhǎng)度超過(guò)8且數(shù)組長(zhǎng)度≥64時(shí),自動(dòng)轉(zhuǎn)換為紅黑樹(shù),提升查找效率;2.鎖粒度細(xì)化到數(shù)組中的單個(gè)節(jié)點(diǎn)(Node),通過(guò)`volatile`修飾數(shù)組節(jié)點(diǎn)保證可見(jiàn)性,CAS操作用于節(jié)點(diǎn)的插入和更新,僅在沖突時(shí)使用`synchronized`鎖定單個(gè)節(jié)點(diǎn),減少鎖競(jìng)爭(zhēng);3.新增`putIfAbsent`、`compute`等函數(shù)式API,支持更靈活的原子操作;4.統(tǒng)計(jì)大?。╜size()`)時(shí)采用更高效的方法,通過(guò)遍歷`CounterCell`數(shù)組累加計(jì)數(shù),避免JDK7中遍歷所有Segment的性能損耗。如何解決Spring中的循環(huán)依賴(lài)?Spring通過(guò)三級(jí)緩存(`DefaultSingletonBeanRegistry`中的三個(gè)Map)解決循環(huán)依賴(lài),僅支持單例Bean的構(gòu)造器注入以外的循環(huán)依賴(lài)(如屬性注入)。三級(jí)緩存包括:1.一級(jí)緩存(`singletonObjects`):存儲(chǔ)已初始化完成的單例Bean;2.二級(jí)緩存(`earlySingletonObjects`):存儲(chǔ)提前暴露的未完全初始化的Bean(用于解決AOP代理問(wèn)題);3.三級(jí)緩存(`singletonFactories`):存儲(chǔ)Bean的工廠(chǎng)對(duì)象(`ObjectFactory`),用于提供早期Bean實(shí)例(可能包含代理邏輯)。具體流程:當(dāng)創(chuàng)建BeanA時(shí),首先將A的工廠(chǎng)對(duì)象(`ObjectFactory`)存入三級(jí)緩存;A需要注入BeanB,觸發(fā)B的創(chuàng)建;B創(chuàng)建時(shí)需要注入A,此時(shí)從三級(jí)緩存獲取A的工廠(chǎng)對(duì)象,提供早期A實(shí)例(可能應(yīng)用AOP代理)并存入二級(jí)緩存;B完成初始化后存入一級(jí)緩存,返回給A;A獲取到B后完成初始化,最終從二級(jí)緩存或三級(jí)緩存中移除,存入一級(jí)緩存。若存在AOP代理,三級(jí)緩存的工廠(chǎng)對(duì)象會(huì)提前提供代理實(shí)例,避免二級(jí)緩存中的原始對(duì)象與最終代理對(duì)象不一致的問(wèn)題。ZGC與G1垃圾收集器的核心區(qū)別是什么?ZGC和G1均為低延遲收集器,但設(shè)計(jì)理念和實(shí)現(xiàn)機(jī)制差異顯著:1.內(nèi)存管理方式:G1采用基于Region的堆劃分(約2048個(gè)Region),包含Eden、Survivor、Old等類(lèi)型;ZGC采用動(dòng)態(tài)的“頁(yè)面”(Page)管理,支持大頁(yè)(2MB)、中頁(yè)(32MB)、小頁(yè)(256KB),更靈活地適配不同對(duì)象大小。2.標(biāo)記算法:G1使用SATB(SnapshotAtTheBeginning)標(biāo)記,通過(guò)寫(xiě)屏障記錄對(duì)象引用變化;ZGC使用顏色指針(ColorPointers)和讀屏障,將標(biāo)記信息存儲(chǔ)在指針的高四位(支持64位系統(tǒng)),標(biāo)記與應(yīng)用線(xiàn)程并發(fā)執(zhí)行,無(wú)需STW(StopTheWorld)。3.停頓時(shí)間:G1目標(biāo)是停頓時(shí)間不超過(guò)50ms,但實(shí)際可能因老年代回收復(fù)雜度過(guò)高而延長(zhǎng);ZGC通過(guò)并發(fā)標(biāo)記、并發(fā)轉(zhuǎn)移等階段,理論上停頓時(shí)間不超過(guò)10ms,且與堆大小無(wú)關(guān)(支持TB級(jí)堆)。4.適用場(chǎng)景:G1適合堆大小在幾GB到幾十GB的場(chǎng)景;ZGC適合大內(nèi)存、低延遲要求高的場(chǎng)景(如分布式數(shù)據(jù)庫(kù)、實(shí)時(shí)數(shù)據(jù)處理系統(tǒng))。如何設(shè)計(jì)一個(gè)線(xiàn)程安全的單例模式?請(qǐng)寫(xiě)出代碼示例。線(xiàn)程安全的單例模式需滿(mǎn)足:延遲初始化、線(xiàn)程安全、避免反射/序列化攻擊。推薦使用雙重檢查鎖定(Double-CheckedLocking)或靜態(tài)內(nèi)部類(lèi)模式。雙重檢查鎖定示例(JDK5及以上,依賴(lài)`volatile`保證可見(jiàn)性):```javapublicclassSingleton{//volatile禁止指令重排序,確保instance初始化完成后再賦值privatestaticvolatileSingletoninstance;privateSingleton(){//防止反射創(chuàng)建實(shí)例if(instance!=null){thrownewIllegalStateException("Singletoninstancealreadyinitialized");}}publicstaticSingletongetInstance(){if(instance==null){//第一次檢查,避免不必要的鎖synchronized(Singleton.class){if(instance==null){//第二次檢查,防止多線(xiàn)程同時(shí)通過(guò)第一次檢查instance=newSingleton();}}}returninstance;}}```靜態(tài)內(nèi)部類(lèi)模式(利用類(lèi)加載機(jī)制保證線(xiàn)程安全,天然延遲初始化):```javapublicclassSingleton{privateSingleton(){}//靜態(tài)內(nèi)部類(lèi)在第一次調(diào)用getInstance時(shí)加載privatestaticclassHolder{staticfinalSingletonINSTANCE=newSingleton();}publicstaticSingletongetInstance(){returnHolder.INSTANCE;}}```若需防御序列化攻擊,需實(shí)現(xiàn)`readResolve()`方法返回現(xiàn)有實(shí)例;防御反射攻擊可在私有構(gòu)造器中增加狀態(tài)檢查(如上述示例)。MySQL中覆蓋索引和回表的概念是什么?如何優(yōu)化?覆蓋索引指查詢(xún)的所有字段都包含在索引中,無(wú)需回表查詢(xún)主記錄。例如,若有索引(`username,email`),當(dāng)查詢(xún)`SELECTusername,emailFROMuserWHEREusername='test'`時(shí),索引本身已包含所有需要的字段,直接通過(guò)索引返回結(jié)果,避免訪(fǎng)問(wèn)主鍵索引(聚簇索引)?;乇碇覆樵?xún)的字段不在索引中,需先通過(guò)索引找到主鍵,再通過(guò)主鍵到聚簇索引中獲取其他字段。例如,索引(`username`),查詢(xún)`SELECTusername,ageFROMuserWHEREusername='test'`,需先通過(guò)`username`索引找到主鍵,再通過(guò)主鍵查詢(xún)`age`字段。優(yōu)化回表的方法:1.擴(kuò)展索引字段,將查詢(xún)頻繁的字段加入索引(創(chuàng)建覆蓋索引);2.避免`SELECT`,僅查詢(xún)必要字段;3.對(duì)高頻查詢(xún)且字段較少的表,可考慮使用覆蓋索引替代聚簇索引(如業(yè)務(wù)主鍵作為聚簇索引);4.分析慢查詢(xún)?nèi)罩荆╜EXPLAIN`命令),檢查`Extra`列是否包含“Usingindex”(表示使用覆蓋索引)或“Usingwhere;Usingindexcondition”(可能需回表)。分布式事務(wù)中TCC模式的核心步驟是什么?與Seata的AT模式有何區(qū)別?TCC(Try-Confirm-Cancel)模式的核心步驟:1.Try階段:預(yù)留業(yè)務(wù)資源(如凍結(jié)賬戶(hù)余額、鎖定庫(kù)存),確保后續(xù)Confirm或Cancel操作可執(zhí)行;2.Confirm階段:提交Try階段預(yù)留的資源(如扣除凍結(jié)余額、減少庫(kù)存),需冪等(多次調(diào)用結(jié)果一致);3.Cancel階段:回滾Try階段預(yù)留的資源(如解凍余額、恢復(fù)庫(kù)存),需冪等且與Try操作反向。TCC與SeataAT模式的區(qū)別:1.侵入性:TCC需手動(dòng)實(shí)現(xiàn)Try/Confirm/Cancel方法,業(yè)務(wù)代碼侵入性高;AT模式基于數(shù)據(jù)庫(kù)的本地事務(wù)和undo日志,自動(dòng)提供回滾語(yǔ)句,業(yè)務(wù)無(wú)感知。2.性能:TCC的Try階段需預(yù)留資源,可能增加鎖競(jìng)爭(zhēng);AT模式通過(guò)undo日志實(shí)現(xiàn)無(wú)鎖(僅在提交時(shí)釋放行鎖),性能更優(yōu)。3.隔離性:TCC依賴(lài)業(yè)務(wù)層控制隔離(如Try階段凍結(jié)資源);AT模式通過(guò)全局鎖(Seata1.4+)保證寫(xiě)隔離,讀隔離需業(yè)務(wù)層處理(如讀已提交需查詢(xún)?nèi)质聞?wù)狀態(tài))。4.適用場(chǎng)景:TCC適合資源預(yù)留邏輯明確、跨服務(wù)邊界的復(fù)雜事務(wù)(如電商下單-支付-發(fā)貨);AT模式適合數(shù)據(jù)庫(kù)操作為主、業(yè)務(wù)邏輯簡(jiǎn)單的場(chǎng)景(如庫(kù)存扣減、賬戶(hù)轉(zhuǎn)賬)。如何解決Redis緩存擊穿、穿透和雪崩問(wèn)題?緩存擊穿:熱點(diǎn)key過(guò)期時(shí),大量請(qǐng)求同時(shí)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)。解決方法:1.熱點(diǎn)key設(shè)置永不過(guò)期(邏輯過(guò)期,通過(guò)異步線(xiàn)程更新);2.加互斥鎖(如Redisson的`Rlock`),僅允許一個(gè)線(xiàn)程查詢(xún)數(shù)據(jù)庫(kù)并更新緩存,其他線(xiàn)程等待緩存加載;3.使用本地緩存(如Caffeine)存儲(chǔ)熱點(diǎn)key,減少對(duì)Redis的訪(fǎng)問(wèn)。緩存穿透:查詢(xún)不存在的key(如id=-1),請(qǐng)求直接打到數(shù)據(jù)庫(kù)。解決方法:1.緩存空值(設(shè)置短過(guò)期時(shí)間),避免重復(fù)查詢(xún);2.布隆過(guò)濾器(BloomFilter)預(yù)先存儲(chǔ)所有可能的key,查詢(xún)前檢查是否存在,不存在直接返回;3.接口層校驗(yàn)(如id范圍校驗(yàn)、參數(shù)格式校驗(yàn)),過(guò)濾無(wú)效請(qǐng)求。緩存雪崩:大量key同時(shí)過(guò)期,數(shù)據(jù)庫(kù)壓力驟增。解決方法:1.分散過(guò)期時(shí)間(在基礎(chǔ)過(guò)期時(shí)間上增加隨機(jī)值,如10-20分鐘);2.分級(jí)緩存(本地緩存+Redis),減少對(duì)Redis的依賴(lài);3.限流降級(jí)(如Sentinel限制數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)流量);4.高可用部署(Redis集群,避免單節(jié)點(diǎn)故障導(dǎo)致大面積緩存失效)。SpringBoot自動(dòng)配置的核心原理是什么?如何自定義一個(gè)Starter?SpringBoot自動(dòng)配置的核心依賴(lài)`@SpringBootApplication`注解(組合`@SpringBootConfiguration`、`@EnableAutoConfiguration`、`@ComponentScan`),其中`@EnableAutoConfiguration`通過(guò)`SpringFactoriesLoader`加載`META-INF/spring.factories`中的自動(dòng)配置類(lèi)。具體流程:1.掃描classpath下所有`META-INF/spring.factories`文件,收集`EnableAutoConfiguration`對(duì)應(yīng)的配置類(lèi);2.通過(guò)條件注解(如`@ConditionalOnClass`、`@ConditionalOnMissingBean`、`@ConditionalOnProperty`)過(guò)濾無(wú)效配置類(lèi);3.實(shí)例化有效配置類(lèi)中的Bean,并注入到Spring容器。自定義Starter的步驟:1.創(chuàng)建Maven/Gradle項(xiàng)目,添加`spring-boot-autoconfigure`依賴(lài);2.編寫(xiě)自動(dòng)配置類(lèi)(如`XxxAutoConfiguration`),使用`@Configuration`標(biāo)記,并通過(guò)條件注解控制生效條件(如`@ConditionalOnClass(XxxService.class)`表示當(dāng)`XxxService`存在時(shí)生效);3.定義配置屬性類(lèi)(如`@ConfigurationProperties(prefix="xxx")`),綁定`perties`中的配置;4.在`src/main/resources/META-INF/spring.factories`中注冊(cè)自動(dòng)配置類(lèi)(`org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.XxxAutoConfiguration`);5.可選:提供`META-INF/spring-configuration-metadata.json`提供配置提示(IDE自動(dòng)補(bǔ)全)。如何優(yōu)化Java線(xiàn)程池的參數(shù)配置?常見(jiàn)拒絕策略有哪些?線(xiàn)程池參數(shù)優(yōu)化需結(jié)合任務(wù)類(lèi)型(CPU密集型/IO密集型)和系統(tǒng)資源(CPU核心數(shù)、內(nèi)存):1.核心線(xiàn)程數(shù)(`corePoolSize`):CPU密集型建議設(shè)為CPU核心數(shù)+1(利用線(xiàn)程切換);IO密集型建議設(shè)為2CPU核心數(shù)(等待IO時(shí)可執(zhí)行其他線(xiàn)程)。2.最大線(xiàn)程數(shù)(`maximumPoolSize`):通常與核心線(xiàn)程數(shù)相同(避免頻繁創(chuàng)建/銷(xiāo)毀線(xiàn)程),若任務(wù)量波動(dòng)大,可設(shè)為核心線(xiàn)程數(shù)的2-4倍,但需結(jié)合內(nèi)存限制(每個(gè)線(xiàn)程默認(rèn)棧大小1MB)。3.存活時(shí)間(`keepAliveTime`):非核心線(xiàn)程空閑時(shí)的存活時(shí)間,IO密集型可設(shè)為較長(zhǎng)時(shí)間(如60秒),避免頻繁銷(xiāo)毀;CPU密集型可設(shè)為較短時(shí)間。4.任務(wù)隊(duì)列(`workQueue`):有界隊(duì)列(如`ArrayBlockingQueue`)避免OOM,隊(duì)列大小需根據(jù)任務(wù)處理速度和吞吐量調(diào)整(如`max(100,maxThreads2)`)。常見(jiàn)拒絕策略:1.`AbortPolicy`(默認(rèn)):拋出`RejectedExecutionException`異常;2.`CallerRunsPolicy`:由調(diào)用線(xiàn)程直接執(zhí)行任務(wù)(降低提交速度);3.`DiscardPolicy`:靜默丟棄新任務(wù);4.`DiscardOldestPolicy`:丟棄隊(duì)列中最老的任務(wù),嘗試重新提交當(dāng)前任務(wù);5.自定義策略:實(shí)現(xiàn)`RejectedExecutionHandler`接口(如記錄日志后重試)。JVM中OOM(OutOfMemory)的常見(jiàn)原因及排查方法?常見(jiàn)OOM類(lèi)型及原因:1.堆內(nèi)存溢出(`java.lang.OutOfMemoryError:Javaheapspace`):對(duì)象過(guò)多且無(wú)法被GC回收(如內(nèi)存泄漏、大對(duì)象未釋放)。2.棧溢出(`java.lang.StackOverflowError`):方法調(diào)用棧深度過(guò)大(如遞歸未終止條件)。3.元空間溢出(`java.lang.OutOfMemoryError:Metaspace`):類(lèi)信息、常量池等過(guò)多(如動(dòng)態(tài)提供類(lèi)的框架,未正確清理)。4.直接內(nèi)存溢出(`java.lang.OutOfMemoryError:Directbuffermemory`):`Unsafe.allocateMemory()`或`ByteBuffer.allocateDirect()`分配的堆外內(nèi)存超過(guò)`-XX:MaxDirectMemorySize`(默認(rèn)與堆內(nèi)存相同)。排查方法:1.收集內(nèi)存快照:使用`-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=/path`提供堆轉(zhuǎn)儲(chǔ)文件,通過(guò)EclipseMAT或JProfiler分析對(duì)象引用鏈,定位內(nèi)存泄漏點(diǎn)。2.分析GC日志:添加`-Xlog:gc:file=/path/gc.log`,查看GC頻率、停頓時(shí)間
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 某著名企業(yè)山東臨工營(yíng)銷(xiāo)策略和銷(xiāo)售管理項(xiàng)目建議書(shū)004
- 《GBT 14283-2008點(diǎn)焊機(jī)器人 通 用技術(shù)條件》專(zhuān)題研究報(bào)告
- 《GBT 5121.7-2008銅及銅合金化學(xué)分析方法 第7部分:砷含量的測(cè)定》專(zhuān)題研究報(bào)告
- 2026版咨詢(xún)《決策》章節(jié)習(xí)題 第六章建設(shè)方案與比選
- 道路交通安全心理學(xué)課件
- 2026年九年級(jí)語(yǔ)文上冊(cè)期末試題(附答案)
- 2025-2026年蘇課新版八年級(jí)英語(yǔ)上冊(cè)期末考試題庫(kù)(附含答案)
- 2026年福建省公務(wù)員試題及答案
- 2026年公務(wù)員時(shí)政考試題庫(kù)試題解析及答案
- 迪士尼公主介紹課件教案
- 2025年鄭州工業(yè)應(yīng)用技術(shù)學(xué)院馬克思主義基本原理概論期末考試模擬試卷
- 2026年七年級(jí)歷史上冊(cè)期末考試試卷及答案(共六套)
- 2025年六年級(jí)上冊(cè)道德與法治期末測(cè)試卷附答案(完整版)
- 附件二;吊斗安全計(jì)算書(shū)2.16
- 雨課堂在線(xiàn)學(xué)堂《西方哲學(xué)-從古希臘哲學(xué)到晚近歐陸哲學(xué)》單元考核測(cè)試答案
- IPC7711C7721C-2017(CN)電子組件的返工修改和維修(完整版)
- 學(xué)堂在線(xiàn) 雨課堂 學(xué)堂云 研究生學(xué)術(shù)與職業(yè)素養(yǎng)講座 章節(jié)測(cè)試答案
- 安捷倫1200標(biāo)準(zhǔn)操作規(guī)程
- 合伙人合同協(xié)議書(shū)電子版
- 離婚協(xié)議書(shū)下載電子版完整離婚協(xié)議書(shū)下載三篇
- 磨床設(shè)備點(diǎn)檢表
評(píng)論
0/150
提交評(píng)論