更新時(shí)間:2023-01-13 11:30:32 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1442次
小編發(fā)現(xiàn)不少同學(xué)在網(wǎng)上求助找一些相關(guān)的Java中級(jí)面試題,但比較煩人的是,很多給出的面試題不是沒有正確答案就是沒有解析過程,也就導(dǎo)致了我們需要花費(fèi)很多的時(shí)間去搜集整套的合適的面試題。今天小編的這套題目大全,包含了一些大廠的經(jīng)典面試題,不管你現(xiàn)在是應(yīng)屆生還是實(shí)習(xí)生亦或是企業(yè)在職者,都可以進(jìn)行參考:
1、什么是方法內(nèi)聯(lián)?
為了減少方法調(diào)用的開銷,可以把一些短小的方法,比如getter/setter,納入到目標(biāo)方法的調(diào)用范圍之內(nèi),就少了一次方法調(diào)用,速度就能得到提升,這就是方法內(nèi)聯(lián)的概念。
2、你對(duì)線程優(yōu)先級(jí)的理解是什么?
1、 每一個(gè)線程都是有優(yōu)先級(jí)的,一般來說,高優(yōu)先級(jí)的線程在運(yùn)行時(shí)會(huì)具有優(yōu)先權(quán),但這依賴于線程調(diào)度的實(shí)現(xiàn),這個(gè)實(shí)現(xiàn)是和操作系統(tǒng)相關(guān)的(OS dependent)。我們可以定義線程的優(yōu)先級(jí),但是這并不能保證高優(yōu)先級(jí)的線程會(huì)在低優(yōu)先級(jí)的線程前執(zhí)行。線程優(yōu)先級(jí)是一個(gè) int 變量(從 1-10),1 代表最低優(yōu)先級(jí),10 代表最高優(yōu)先級(jí)。
2、 Java 的線程優(yōu)先級(jí)調(diào)度會(huì)委托給操作系統(tǒng)去處理,所以與具體的操作系統(tǒng)優(yōu)先級(jí)有關(guān),如非特別需要,一般無需設(shè)置線程優(yōu)先級(jí)。
3、 當(dāng)然,如果你真的想設(shè)置優(yōu)先級(jí)可以通過setPriority()方法設(shè)置,但是設(shè)置了不一定會(huì)該變,這個(gè)是不準(zhǔn)確的
3、Java是否需要開發(fā)人員回收內(nèi)存垃圾嗎?
大多情況下是不需要的。Java提供了一個(gè)系統(tǒng)級(jí)的線程來跟蹤內(nèi)存分配,不再使用的內(nèi)存區(qū)將會(huì)自動(dòng)回收
4、說說Java 垃圾回收機(jī)制
在 Java 中,程序員是不需要顯示的去釋放一個(gè)對(duì)象的內(nèi)存的,而是由虛擬機(jī)自行執(zhí)行。在 JVM 中,有一個(gè)垃圾回收線程,它是低優(yōu)先級(jí)的,在正常情況下是不會(huì)執(zhí)行的,只有在虛擬機(jī)空閑或者當(dāng)前堆內(nèi)存不足時(shí),才會(huì)觸發(fā)執(zhí)行,掃面那些沒有被任何引用的對(duì)象,并將它們添加到要回收的集合中,進(jìn)行回收。
5、62、volatile 變量和 atomic 變量有什么不同?
Volatile變量可以確保先行關(guān)系,即寫操作會(huì)發(fā)生在后續(xù)的讀操作之前, 但它并不能保證原子性。例如用volatile修飾count變量那么 count++ 操作就不是原子性的。
而AtomicInteger類提供的atomic方法可以讓這種操作具有原子性如getAndIncrement()方法會(huì)原子性的進(jìn)行增量操作把當(dāng)前值加一,其它數(shù)據(jù)類型和引用變量也可以進(jìn)行相似操作。
6、JVM 內(nèi)存區(qū)域
JVM 內(nèi)存區(qū)域主要分為線程私有區(qū)域【程序計(jì)數(shù)器、虛擬機(jī)棧、本地方法區(qū)】、線程共享區(qū)域【JAVA 堆、方法區(qū)】、直接內(nèi)存。
線程私有數(shù)據(jù)區(qū)域生命周期與線程相同, 依賴用戶線程的啟動(dòng)/結(jié)束 而 創(chuàng)建/銷毀(在 Hotspot VM 內(nèi), 每個(gè)線程都與操作系統(tǒng)的本地線程直接映射, 因此這部分內(nèi)存區(qū)域的存/否跟隨本地線程的生/死對(duì)應(yīng))。
線程共享區(qū)域隨虛擬機(jī)的啟動(dòng)/關(guān)閉而創(chuàng)建/銷毀。
直接內(nèi)存并不是 JVM 運(yùn)行時(shí)數(shù)據(jù)區(qū)的一部分, 但也會(huì)被頻繁的使用: 在 JDK 1.4 引入的 NIO 提供了基于Channel與 Buffer的IO方式, 它可以使用Native函數(shù)庫直接分配堆外內(nèi)存, 然后使用DirectByteBuffer 對(duì)象作為這塊內(nèi)存的引用進(jìn)行操作(詳見: Java I/O 擴(kuò)展), 這樣就避免了在 Java堆和 Native 堆中來回復(fù)制數(shù)據(jù), 因此在一些場景中可以顯著提高性能。
7、JVM 有哪些運(yùn)行時(shí)內(nèi)存區(qū)域?
1、 The pc Register,程序計(jì)數(shù)器
2、 Java Virtual Machine Stacks,Java 虛擬機(jī)棧
3、 Heap,堆
4、 Method Area,方法區(qū)
5、 Run-Time Constant Pool,運(yùn)行時(shí)常量池
6、 Native Method Stacks,本地方法棧
8、Spring中Bean的作用域有哪些?
1、 Singleton:Bean以單例的方式存在
2、 Prototype:表示每次從容器中調(diào)用Bean時(shí),都會(huì)返回一個(gè)新的實(shí)例,prototype通常翻譯為原型
3、 Request:每次HTTP請(qǐng)求都會(huì)創(chuàng)建一個(gè)新的Bean
4、 Session:同一個(gè)HttpSession共享同一個(gè)Bean,不同的HttpSession使用不同的Bean
5、 globalSession:同一個(gè)全局Session共享一個(gè)Bean
9、String str=”aaa”,與String str=new String(“aaa”)一樣嗎?
1、 不一樣的。因?yàn)閮?nèi)存分配的方式不一樣。
2、 第一種,創(chuàng)建的”aaa”是常量,jvm都將其分配在常量池中。
3、 第二種創(chuàng)建的是一個(gè)對(duì)象,jvm將其值分配在堆內(nèi)存中。
10、什么是建造者模式
1、 建造者模式:是將一個(gè)復(fù)雜的對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的方式進(jìn)行創(chuàng)建。
2、 工廠類模式是提供的是創(chuàng)建單個(gè)類的產(chǎn)品
3、 而建造者模式則是將各種產(chǎn)品集中起來進(jìn)行管理,用來具有不同的屬性的產(chǎn)品
建造者模式通常包括下面幾個(gè)角色:
1、 uilder:給出一個(gè)抽象接口,以規(guī)范產(chǎn)品對(duì)象的各個(gè)組成成分的建造。這個(gè)接口規(guī)定要實(shí)現(xiàn)復(fù)雜對(duì)象的哪些部分的創(chuàng)建,并不涉及具體的對(duì)象部件的創(chuàng)建。
2、 ConcreteBuilder:實(shí)現(xiàn)Builder接口,針對(duì)不同的商業(yè)邏輯,具體化復(fù)雜對(duì)象的各部分的創(chuàng)建。 在建造過程完成后,提供產(chǎn)品的實(shí)例。
3、 Director:調(diào)用具體建造者來創(chuàng)建復(fù)雜對(duì)象的各個(gè)部分,在指導(dǎo)者中不涉及具體產(chǎn)品的信息,只負(fù)責(zé)保證對(duì)象各部分完整創(chuàng)建或按某種順序創(chuàng)建。
4、 Product:要?jiǎng)?chuàng)建的復(fù)雜對(duì)象。
以上就是“HR的犀利問答題:中級(jí)Java面試題”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動(dòng)力節(jié)點(diǎn)Java官網(wǎng)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)