java面試一般會(huì)問(wèn)什么
java面試一般會(huì)問(wèn)什么
面試是通過(guò)書(shū)面或面談的形式來(lái)考察一個(gè)人的工作能力與否,物以類(lèi)聚,通過(guò)面試可以初步判斷應(yīng)聘者是否可以融入自己的團(tuán)隊(duì)。那么java面試一般會(huì)問(wèn)什么呢?下面是學(xué)習(xí)啦小編給大家整理的java面試一般會(huì)問(wèn)什么,供大家參閱!
java面試一般會(huì)問(wèn)什么
1.java是否會(huì)出現(xiàn)內(nèi)存溢出?如何解決?
內(nèi)存溢出是指應(yīng)用系統(tǒng)中存在無(wú)法回收的內(nèi)存或使用的內(nèi)存過(guò)多,最終使得程序運(yùn)行要用到的內(nèi)存大于虛擬機(jī)能提供的最大內(nèi)存。為了解決Java中內(nèi)存溢 出問(wèn)題,我們首先必須了解Java是如何管理內(nèi)存的。Java的內(nèi)存管理就是對(duì)象的分配和釋放問(wèn)題。在Java中,內(nèi)存的分配是由程序完成的,而內(nèi)存的釋 放是由垃圾收集器(Garbage Collection,GC)完成的,程序員不需要通過(guò)調(diào)用GC函數(shù)來(lái)釋放內(nèi)存,因?yàn)椴煌腏VM實(shí)現(xiàn)者可能使用不同的算法管理GC,有的是內(nèi)存使用到達(dá) 一定程度時(shí),GC才開(kāi)始工作,也有定時(shí)執(zhí)行的,有的是中斷式執(zhí)行GC。但GC只能回收無(wú)用并且不再被其它對(duì)象引用的那些對(duì)象所占用的空間。Java的內(nèi)存 垃圾回收機(jī)制是從程序的主要運(yùn)行對(duì)象開(kāi)始檢查引用鏈,當(dāng)遍歷一遍后發(fā)現(xiàn)沒(méi)有被引用的孤立對(duì)象就作為垃圾回收。
引起內(nèi)存溢出的原因有很多種,常見(jiàn)的有以下幾種:
l 內(nèi)存中加載的數(shù)據(jù)量過(guò)于龐大,如一次從數(shù)據(jù)庫(kù)取出過(guò)多數(shù)據(jù);
l 集合類(lèi)中有對(duì)對(duì)象的引用,使用完后未清空,使得JVM不能回收;
l 代碼中存在死循環(huán)或循環(huán)產(chǎn)生過(guò)多重復(fù)的對(duì)象實(shí)體;
l 使用的第三方軟件中的BUG;
l 啟動(dòng)參數(shù)內(nèi)存值設(shè)定的過(guò)小;
3.內(nèi)存溢出的解決
內(nèi)存溢出雖然很棘手,但也有相應(yīng)的解決辦法,可以按照從易到難,一步步的解決。
第一步,就是修改JVM啟動(dòng)參數(shù),直接增加內(nèi)存。這一點(diǎn)看上去似乎很簡(jiǎn)單,但很容易被忽略。JVM默認(rèn)可以使用的內(nèi)存為64M,Tomcat默認(rèn)可 以使用的內(nèi)存為128MB,對(duì)于稍復(fù)雜一點(diǎn)的系統(tǒng)就會(huì)不夠用。在某項(xiàng)目中,就因?yàn)閱?dòng)參數(shù)使用的默認(rèn)值,經(jīng)常報(bào)“OutOfMemory”錯(cuò)誤。因此,- Xms,-Xmx參數(shù)一定不要忘記加。
第二步,檢查錯(cuò)誤日志,查看“OutOfMemory”錯(cuò)誤前是否有其它異?;蝈e(cuò)誤。在一個(gè)項(xiàng)目中,使用兩個(gè)數(shù)據(jù) 庫(kù)連接,其中專(zhuān)用于發(fā)送短信的數(shù)據(jù)庫(kù)連接使用DBCP連接池管理,用戶(hù)為不將短信發(fā)出,有意將數(shù)據(jù)庫(kù)連接用戶(hù)名改錯(cuò),使得日志中有許多數(shù)據(jù)庫(kù)連接異常的日 志,一段時(shí)間后,就出現(xiàn)“OutOfMemory”錯(cuò)誤。經(jīng)分析,這是由于DBCP連接池BUG引起的,數(shù)據(jù)庫(kù)連接不上后,沒(méi)有將連接釋放,最終使得 DBCP報(bào)“OutOfMemory”錯(cuò)誤。經(jīng)過(guò)修改正確數(shù)據(jù)庫(kù)連接參數(shù)后,就沒(méi)有再出現(xiàn)內(nèi)存溢出的錯(cuò)誤。
查看日志對(duì)于分析內(nèi)存溢出是非常重要的,通過(guò)仔細(xì)查看日志,分析內(nèi)存溢出前做過(guò)哪些操作,可以大致定位有問(wèn)題的模塊。
第三步,安排有經(jīng)驗(yàn)的編程人員對(duì)代碼進(jìn)行走查和分析,找出可能發(fā)生內(nèi)存溢出的位置。重點(diǎn)排查以下幾點(diǎn):
l 檢查代碼中是否有死循環(huán)或遞歸調(diào)用。
l 檢查是否有大循環(huán)重復(fù)產(chǎn)生新對(duì)象實(shí)體。
l 檢查對(duì)數(shù)據(jù)庫(kù)查詢(xún)中,是否有一次獲得全部數(shù)據(jù)的查詢(xún)。一般來(lái)說(shuō),如果一次取十萬(wàn)條記錄到內(nèi)存,就可能引起內(nèi)存溢出。這個(gè)問(wèn)題比較隱蔽,在上線(xiàn)前,數(shù)據(jù)庫(kù)中 數(shù)據(jù)較少,不容易出問(wèn)題,上線(xiàn)后,數(shù)據(jù)庫(kù)中數(shù)據(jù)多了,一次查詢(xún)就有可能引起內(nèi)存溢出。因此對(duì)于數(shù)據(jù)庫(kù)查詢(xún)盡量采用分頁(yè)的方式查詢(xún)。
l 檢查L(zhǎng)ist、MAP等集合對(duì)象是否有使用完后,未清除的問(wèn)題。List、MAP等集合對(duì)象會(huì)始終存有對(duì)對(duì)象的引用,使得這些對(duì)象不能被GC回收。
第四步,使用內(nèi)存查看工具動(dòng)態(tài)查看內(nèi)存使用情況。某個(gè)項(xiàng)目上線(xiàn)后,每次系統(tǒng)啟動(dòng)兩天后,就會(huì)出現(xiàn)內(nèi)存溢出的錯(cuò)誤。這種情況一般是代碼中出現(xiàn)了緩慢的內(nèi)存泄漏,用上面三個(gè)步驟解決不了,這就需要使用內(nèi)存查看工具了。
原因有很多種,比如:
1.數(shù)據(jù)量過(guò)于龐大;死循環(huán) ;靜態(tài)變量和靜態(tài)方法過(guò)多;遞歸;無(wú)法確定是否被引用的對(duì)象;
2.虛擬機(jī)不回收內(nèi)存(內(nèi)存泄漏);
說(shuō)白了就是程序運(yùn)行要用到的內(nèi)存大于虛擬機(jī)能提供的最大內(nèi)存就發(fā)生內(nèi)存溢出了。 內(nèi)存溢出的問(wèn)題要看業(yè)務(wù)和系統(tǒng)大小而定,對(duì)于某些系統(tǒng)可能內(nèi)存溢出不常見(jiàn),但某些系統(tǒng)還是很常見(jiàn)的解決的方法,
一個(gè)是優(yōu)化程序代碼,如果業(yè)務(wù)龐大,邏輯復(fù)雜,盡量減少全局變量的引用,讓程序使用完變量的時(shí)候釋放該引用能夠讓垃圾回收器回收,釋放資源。
二就是物理解決,增大物理內(nèi)存,然后通過(guò):-Xms256m -Xmx256m -XX:MaxNewSize=256m -XX:MaxPermSize=256m的修改
2.說(shuō)說(shuō)JVM內(nèi)存組成
簡(jiǎn)單的說(shuō) java中的堆和棧
java把內(nèi)存分兩種:一種是棧內(nèi)存,另一種是堆內(nèi)存
1。在函數(shù)中定義的基本類(lèi)型變量和對(duì)象的引用變量都在函數(shù)的棧內(nèi)存中分配;
2。堆內(nèi)存用來(lái)存放由 new創(chuàng)建的對(duì)象和數(shù)組
在函數(shù)(代碼塊)中定義一個(gè)變量時(shí), java就在棧中為這個(gè)變量分配內(nèi)存空間,當(dāng)超過(guò)變量的作用域后, java會(huì)自動(dòng)釋放掉為該變量所分配的內(nèi)存空間;在堆中分配的內(nèi)存由 java虛擬機(jī)的自動(dòng)垃圾回收器來(lái)管理
堆的優(yōu)勢(shì)是可以動(dòng)態(tài)分配內(nèi)存大小,生存期也不必事先告訴編譯器,因?yàn)樗窃谶\(yùn)行時(shí)動(dòng)態(tài)分配內(nèi)存的。缺點(diǎn)就是要在運(yùn)行時(shí)動(dòng)態(tài)分配內(nèi)存,存取速度較慢;
棧的優(yōu)勢(shì)是存取速度比堆要快,缺點(diǎn)是存在棧中的數(shù)據(jù)大小與生存期必須是確定的無(wú)靈活 性。
java 堆分為三個(gè)區(qū): New 、 Old 和 Permanent
GC 有兩個(gè)線(xiàn)程:
新創(chuàng)建的對(duì)象被分配到 New 區(qū),當(dāng)該區(qū)被填滿(mǎn)時(shí)會(huì)被 GC 輔助線(xiàn)程移到 Old 區(qū),當(dāng) Old 區(qū)也填滿(mǎn)了會(huì)觸發(fā) GC 主線(xiàn)程遍歷堆內(nèi)存里的所有對(duì)象。 Old 區(qū)的大小等于 Xmx 減去 -Xmn
java棧存放
棧調(diào)整:參數(shù)有 +UseDefaultStackSize -Xss256K,表示每個(gè)線(xiàn)程可申請(qǐng) 256k的??臻g
每個(gè)線(xiàn)程都有他自己的 Stack
3、”static”關(guān)鍵字是什么意思?Java中是否可以覆蓋(override)一個(gè)private或者是static的方法?
“static”關(guān)鍵字表明一個(gè)成員變量或者是成員方法可以在沒(méi)有所屬的類(lèi)的實(shí)例變量的情況下被訪(fǎng)問(wèn)。
Java中static方法不能被覆蓋,因?yàn)榉椒ǜ采w是基于運(yùn)行時(shí)動(dòng)態(tài)綁定的,而static方法是編譯時(shí)靜態(tài)綁定的。static方法跟類(lèi)的任何實(shí)例都不相關(guān),所以概念上不適用。
4、是否可以在static環(huán)境中訪(fǎng)問(wèn)非static變量?
static變量在Java中是屬于類(lèi)的,它在所有的實(shí)例中的值是一樣的。當(dāng)類(lèi)被Java虛擬機(jī)載入的時(shí)候,會(huì)對(duì)static變量進(jìn)行初始化。如果你的代碼嘗試不用實(shí)例來(lái)訪(fǎng)問(wèn)非static的變量,編譯器會(huì)報(bào)錯(cuò),因?yàn)檫@些變量還沒(méi)有被創(chuàng)建出來(lái),還沒(méi)有跟任何實(shí)例關(guān)聯(lián)上。
5.JDK和JRE的區(qū)別是什么?
Java Development Kit,Java開(kāi)發(fā)包 jre ---Java Runtime Environment java運(yùn)行環(huán)境
Java運(yùn)行時(shí)環(huán)境(JRE)是將要執(zhí)行Java程序的Java虛擬機(jī)。它同時(shí)也包含了執(zhí)行applet需要的瀏覽器插件。Java開(kāi)發(fā)工具包 (JDK)是完整的Java軟件開(kāi)發(fā)包,包含了JRE,編譯器和其他的工具(比如:JavaDoc,Java調(diào)試器),可以讓開(kāi)發(fā)者開(kāi)發(fā)、編譯、執(zhí)行 Java應(yīng)用程序。
面試的形式
面試有很多形式,依據(jù)面試的內(nèi)容與要求,大致可以分為以下幾種:
問(wèn)題式
由招聘者按照事先擬訂的提綱對(duì)求職者進(jìn)行發(fā)問(wèn),請(qǐng)予回答。其目的在于觀(guān)察求職者在特殊環(huán)境中的表現(xiàn),考核其知識(shí)與業(yè)務(wù),判斷其解決問(wèn)題的能力,從而獲得有關(guān)求職者的第一手資料。
壓力式
由招聘者有意識(shí)地對(duì)求職者施加壓力,就某一問(wèn)題或某一事件作一連串的發(fā)問(wèn),詳細(xì)具體且追根問(wèn)底,直至無(wú)以對(duì)答。此方式主要觀(guān)察求職者在特殊壓力下的反應(yīng)、思維敏捷程度及應(yīng)變能力。
隨意式
即招聘者與求職者海闊天空、漫無(wú)邊際地進(jìn)行交談,氣氛輕松活躍,無(wú)拘無(wú)束,招聘者與求職者自由發(fā)表言論,各抒己見(jiàn)。此方式的目的為:于閑聊中觀(guān)察應(yīng)試者談吐、舉止、知識(shí)、能力、氣質(zhì)和風(fēng)度,對(duì)其做全方位的綜合素質(zhì)考察。
情景式
由招聘者事先設(shè)定一個(gè)情景,提出一個(gè)問(wèn)題或一項(xiàng)計(jì)劃,請(qǐng)求職者進(jìn)入角色模擬完成,其目的在于考核其分析問(wèn)題、解決問(wèn)題的能力。
綜合式
招聘者通過(guò)多種方式考察求職者的綜合能力和素質(zhì),如用外語(yǔ)與其交談,要求即時(shí)作文,或即興演講,或要求寫(xiě)一段文字,甚至操作一下計(jì)算機(jī)等等,以考察其外語(yǔ)水平,文字能力,書(shū)法及口才表達(dá)等各方面的能力。
以上是根據(jù)面試種類(lèi)所做的大致劃分,在實(shí)際面試過(guò)程中,招聘者可能采取一種或同時(shí)采取幾種面試方式,也可能就某一方面的問(wèn)題對(duì)求職者進(jìn)行更廣泛更深刻即深層次的考察,其目的在于能夠選拔出優(yōu)秀的應(yīng)聘者。
java面試一般會(huì)問(wèn)什么相關(guān)文章: