精選華為java面試題,值得收藏

精選華為java面試題,值得收藏

長(zhǎng)沙一度軟件培訓(xùn)      2022-05-04 06:35:01     66

精選華為java面試題,值得收藏,1.JVM的類(lèi)加載機(jī)制是什么?有哪些實(shí)現(xiàn)方式?類(lèi)加載機(jī)制:類(lèi)的加載指的是將類(lèi)的.class文件中的二進(jìn)制數(shù)據(jù)讀入到內(nèi)存中,將其放在運(yùn)

課程價(jià)格 請(qǐng)咨詢(xún)

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

1.JVM的類(lèi)加載機(jī)制是什么?有哪些實(shí)現(xiàn)方式?

類(lèi)加載機(jī)制:

類(lèi)的加載指的是將類(lèi)的.class文件中的二進(jìn)制數(shù)據(jù)讀入到內(nèi)存中,將其放在運(yùn)行時(shí)數(shù)據(jù)區(qū)的方法去內(nèi),然后在堆區(qū)創(chuàng)建一個(gè)java.lang.Class對(duì)象,用來(lái)封裝在方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu)。類(lèi)的加載最終是在堆區(qū)內(nèi)的Class對(duì)象,Class對(duì)象封裝了類(lèi)在方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu),并且向Java程序員提供了訪(fǎng)問(wèn)方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu)的接口。

類(lèi)加載有三種方式:

命令行啟動(dòng)應(yīng)用時(shí)候由JVM初始化加載

通過(guò)Class.forName()方法動(dòng)態(tài)加載

通過(guò)ClassLoader.loadClass()方法動(dòng)態(tài)加載

2.JVM的常見(jiàn)垃圾回收算法?

標(biāo)記-清楚算法:前后線(xiàn)標(biāo)記處所有需要回收的對(duì)象,在標(biāo)記完成后統(tǒng)一回收有被標(biāo)記的對(duì)象。

復(fù)制算法:將可用內(nèi)存按容量劃分為大小相等的兩塊,每次只使用其中的一塊。當(dāng)一塊內(nèi)存用完了,將其存在另外一塊上面,然后再把已使用過(guò)的內(nèi)存空間一次清理掉。

標(biāo)記-整理算法:標(biāo)記過(guò)程與“標(biāo)記-清除”算法一樣,但后續(xù)步驟不是直接對(duì)可回收對(duì)象進(jìn)行清理,而是讓所一端移動(dòng),然后直接清理掉端邊界以外的內(nèi)存。

分代收集算法:一般是把Java堆分為新生代和老年代,根據(jù)各個(gè)年代的特點(diǎn)采用最適當(dāng)?shù)氖占惴?。新生代都發(fā)現(xiàn)有大批對(duì)象死去,選用復(fù)制算法。老年代中因?yàn)閷?duì)象存活率高,必須使用“標(biāo)記-清理”或“標(biāo)記-整理”算法來(lái)進(jìn)行回收。

3.JVM調(diào)優(yōu)的常見(jiàn)命令行工具有哪些?JVM常見(jiàn)的調(diào)優(yōu)參數(shù)有哪些?

(1)JVM調(diào)優(yōu)的常見(jiàn)命令工具包括:

jps命令用于查詢(xún)正在運(yùn)行的JVM進(jìn)程,

jstat可以實(shí)時(shí)顯示本地或遠(yuǎn)程JVM進(jìn)程中類(lèi)裝載、內(nèi)存、垃圾收集、JIT編譯等數(shù)據(jù)

jinfo用于查詢(xún)當(dāng)前運(yùn)行這的JVM屬性和參數(shù)的值。

jmap用于顯示當(dāng)前Java堆和永久代的詳細(xì)信息

jhat用于分析使用jmap生成的dump文件,是JDK自帶的工具

jstack用于生成當(dāng)前JVM的所有線(xiàn)程快照,線(xiàn)程快照是虛擬機(jī)每一條線(xiàn)程正在執(zhí)行的方法,目的是定位線(xiàn)程出現(xiàn)長(zhǎng)時(shí)間停頓的原因。

(2)JVM常見(jiàn)的調(diào)優(yōu)參數(shù)包括:

-Xmx

指定java程序的最大堆內(nèi)存,使用java-Xmx5000M-version判斷當(dāng)前系統(tǒng)能分配的最大堆內(nèi)存

-Xms

指定最小堆內(nèi)存,通常設(shè)置成跟最大堆內(nèi)存一樣,減少GC

-Xmn

設(shè)置年輕代大小。整個(gè)堆大小=年輕代大小+年老代大小。所以增大年輕代后,將會(huì)減小年老代大小。此值對(duì)系統(tǒng)性能影響較大,Sun官方推薦配置為整個(gè)堆的3/8。

-Xss

指定線(xiàn)程的最大??臻g,此參數(shù)決定了java函數(shù)調(diào)用的深度,值越大調(diào)用深度越深,若值太小則容易出棧溢出錯(cuò)誤(StackOverflowError)

-XX:PermSize

指定方法區(qū)(永久區(qū))的初始值,默認(rèn)是物理內(nèi)存的1/64,在Java8永久區(qū)移除,代之的是元數(shù)據(jù)區(qū),由-XX:metaspaceSize指定

-XX:MaxPermSize

指定方法區(qū)的最大值,默認(rèn)是物理內(nèi)存的1/4,在java8中由-XX:MaxmetaspaceSize指定元數(shù)據(jù)區(qū)的大小

-XX:NewRatio=n

年老代與年輕代的比值,-XX:NewRatio=2,表示年老代與年輕代的比值為2:1

-XX:SurvivorRatio=n

Eden區(qū)與Survivor區(qū)的大小比值,-XX:SurvivorRatio=8表示Eden區(qū)與Survivor區(qū)的大小比值是8:1:1,因?yàn)镾urvivor區(qū)有兩個(gè)(from,to)

4.ConcurrentHashMap加鎖機(jī)制是什么,詳細(xì)說(shuō)一下?

HashTable容器在競(jìng)爭(zhēng)激烈的并發(fā)環(huán)境下表現(xiàn)出效率低下的原因,是因?yàn)樗性L(fǎng)問(wèn)HashTable的線(xiàn)程都必須競(jìng)爭(zhēng)同一把鎖,那假如容器里有多把鎖,每一把鎖用于鎖容器其中一部分?jǐn)?shù)據(jù),那么當(dāng)多線(xiàn)程訪(fǎng)問(wèn)容器里不同數(shù)據(jù)段的數(shù)據(jù)時(shí),線(xiàn)程間就不會(huì)存在鎖競(jìng)爭(zhēng),從而可以有效的提高并發(fā)訪(fǎng)問(wèn)效率,這就是ConcurrentHashMap所使用的鎖分段技術(shù),首先將數(shù)據(jù)分成一段一段的存儲(chǔ),然后給每一段數(shù)據(jù)配一把鎖,當(dāng)一個(gè)線(xiàn)程占用鎖訪(fǎng)問(wèn)其中一個(gè)段數(shù)據(jù)的時(shí)候,其他段的數(shù)據(jù)也能被其他線(xiàn)程訪(fǎng)問(wèn)。

精選11道Java技術(shù)面試題并有答案(包含部分阿里和華為的面試題)

5.G1收集器簡(jiǎn)介?以及它的內(nèi)存劃分怎么樣的?

(1)簡(jiǎn)介:

Garbage-First(G1,垃圾優(yōu)先)收集器是服務(wù)類(lèi)型的收集器,目標(biāo)是多處理器機(jī)器、大內(nèi)存機(jī)器。它高度符合垃圾收集暫停時(shí)間的目標(biāo),同時(shí)實(shí)現(xiàn)高吞吐量。OracleJDK7update4以及更新發(fā)布版完全支持G1垃圾收集器

(2)G1的內(nèi)存劃分方式:

它是將堆內(nèi)存被劃分為多個(gè)大小相等的heap區(qū),每個(gè)heap區(qū)都是邏輯上連續(xù)的一段內(nèi)存(virtualmemory).其中一部分區(qū)域被當(dāng)成老一代收集器相同的角色(eden,survivor,old),但每個(gè)角色的區(qū)域個(gè)數(shù)都不是固定的。這在內(nèi)存使用上提供了更多的靈活性

以上就是長(zhǎng)沙一度軟件培訓(xùn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“精選華為java面試題,值得收藏”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€(xiàn)咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。

Java面試題

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過(guò)大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。