![面試 軟件開發(fā)工程師 含答案_第1頁](http://file4.renrendoc.com/view/f5d19a17bf0f41b77e15e8597ba0c530/f5d19a17bf0f41b77e15e8597ba0c5301.gif)
![面試 軟件開發(fā)工程師 含答案_第2頁](http://file4.renrendoc.com/view/f5d19a17bf0f41b77e15e8597ba0c530/f5d19a17bf0f41b77e15e8597ba0c5302.gif)
![面試 軟件開發(fā)工程師 含答案_第3頁](http://file4.renrendoc.com/view/f5d19a17bf0f41b77e15e8597ba0c530/f5d19a17bf0f41b77e15e8597ba0c5303.gif)
![面試 軟件開發(fā)工程師 含答案_第4頁](http://file4.renrendoc.com/view/f5d19a17bf0f41b77e15e8597ba0c530/f5d19a17bf0f41b77e15e8597ba0c5304.gif)
![面試 軟件開發(fā)工程師 含答案_第5頁](http://file4.renrendoc.com/view/f5d19a17bf0f41b77e15e8597ba0c530/f5d19a17bf0f41b77e15e8597ba0c5305.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
面試軟件開發(fā)工程師含答案1、GC是什么?為什么要有GC?GC是垃圾收集的意思(GabageCollection),內(nèi)存處理是編程人員容易出現(xiàn)問題的地方,忘記或者錯誤的內(nèi)存回收會導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java提供的GC功能可以自動監(jiān)測對象是否超過作用域從而達(dá)到自動回收內(nèi)存的目的,Java語言沒有提供釋放已分配內(nèi)存的顯示操作方法。2、垃圾回收的優(yōu)點(diǎn)和原理。并考慮2種回收機(jī)制。Java語言中一個顯著的特點(diǎn)就是引入了垃圾回收機(jī)制,使c++程序員最頭疼的內(nèi)存管理的問題迎刃而解,它使得Java程序員在編寫程序的時候不再需要考慮內(nèi)存管理。由于有個垃圾回收機(jī)制,Java中的對象不再有"作用域"的概念,只有對象的引用才有"作用域"。垃圾回收可以有效的防止內(nèi)存泄露,有效的使用可以使用的內(nèi)存。垃圾回收器通常是作為一個單獨(dú)的低級別的線程運(yùn)行,不可預(yù)知的情況下對內(nèi)存堆中已經(jīng)死亡的或者長時間沒有使用的對象進(jìn)行清楚和回收,程序員不能實(shí)時的調(diào)用垃圾回收器對某個對象或所有對象進(jìn)行垃圾回收?;厥諜C(jī)制有分代復(fù)制垃圾回收和標(biāo)記垃圾回收,增量垃圾回收。3、垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦法主動通知虛擬機(jī)進(jìn)行垃圾回收?對于GC來說,當(dāng)程序員創(chuàng)建對象時,GC就開始監(jiān)控這個對象的地址、大小以及使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對象。通過這種方式確定哪些對象是"可達(dá)的",哪些對象是"不可達(dá)的"。當(dāng)GC確定一些對象為"不可達(dá)"時,GC就有責(zé)任回收這些內(nèi)存空間??梢?。程序員可以手動執(zhí)行System.gc(),通知GC運(yùn)行,但是Java語言規(guī)范并不保證GC一定會執(zhí)行。4、什么時候用assert。assertion(斷言)在軟件開發(fā)中是一種常用的調(diào)試方式,很多開發(fā)語言中都支持這種機(jī)制。在實(shí)現(xiàn)中,assertion就是在程序中的一條語句,它對一個boolean表達(dá)式進(jìn)行檢查,一個正確程序必須保證這個boolean表達(dá)式的值為true;如果該值為false,說明程序已經(jīng)處于不正確的狀態(tài)下,assert將給出警告或退出。一般來說,assertion用于保證程序最基本、關(guān)鍵的正確性。assertion檢查通常在開發(fā)和測試時開啟。為了提高性能,在軟件發(fā)布后,assertion檢查通常是關(guān)閉的。package
erview;publicclass
AssertTest{/***
@paramargs*/publicstaticvoidmain(String[]args){//
TODO
Auto-generatedmethodstubint
i=0;for(i=0;i<5;i++){System.out.println(i);}//假設(shè)程序不小心多了一句--i;--i;assert
i==5;}}5、java中會存在內(nèi)存泄漏嗎,請簡單描述。所謂內(nèi)存泄露就是指一個不再被程序使用的對象或變量一直被占據(jù)在內(nèi)存中。java中有垃圾回收機(jī)制,它可以保證一對象不再被引用的時候,即對象編程了孤兒的時候,對象將自動被垃圾回收器從內(nèi)存中清除掉。由于Java使用有向圖的方式進(jìn)行垃圾回收管理,可以消除引用循環(huán)的問題,例如有兩個對象,相互引用,只要它們和根進(jìn)程不可達(dá)的,那么GC也是可以回收它們的,例如下面的代碼可以看到這種情況的內(nèi)存回收:package
erview;import
java.io.IOException;publicclass
GarbageTest{/***
@paramargs*
@throwsIOException*/publicstaticvoidmain(String[]args)throws
IOException{//
TODO
Auto-generatedmethodstubtry
{gcTest();}
catch
(IOExceptione){//
TODO
Auto-generatedcatchblocke.printStackTrace();}System.out.println("hasexitedgcTest!");System.in.read();System.in.read();System.out.println("outbegingc!");for(int
i=0;i<100;i++){System.gc();System.in.read();System.in.read();}}privatestaticvoidgcTest()throws
IOException{System.in.read();System.in.read();Personp1=
new
Person();System.in.read();System.in.read();Personp2=
new
Person();p1.setMate(p2);p2.setMate(p1);System.out.println("beforeexitgctest!");System.in.read();System.in.read();System.gc();System.out.println("exitgctest!");}privatestaticclassPerson{byte[]data=newbyte[20000000];Personmate=
null;publicvoid
setMate(Personother){mate=other;}}}java中的內(nèi)存泄露的情況:長生命周期的對象持有短生命周期對象的引用就很可能發(fā)生內(nèi)存泄露,盡管短生命周期對象已經(jīng)不再需要,但是因?yàn)殚L生命周期對象持有它的引用而導(dǎo)致不能被回收,這就是java中內(nèi)存泄露的發(fā)生場景,通俗地說,就是程序員可能創(chuàng)建了一個對象,以后一直不再使用這個對象,這個對象卻一直被引用,即這個對象無用但是卻無法被垃圾回收器回收的,這就是java中可能出現(xiàn)內(nèi)存泄露的情況,例如,緩存系統(tǒng),我們加載了一個對象放在緩存中(例如放在一個全局map對象中),然后一直不再使用它,這個對象一直被緩存引用,但卻不再被使用。檢查java中的內(nèi)存泄露,一定要讓程序?qū)⒏鞣N分支情況都完整執(zhí)行到程序結(jié)束,然后看某個對象是否被使用過,如果沒有,則才能判定這個對象屬于內(nèi)存泄露。如果一個外部類的實(shí)例對象的方法返回了一個內(nèi)部類的實(shí)例對象,這個內(nèi)部類對象被長期引用了,即使那個外部類實(shí)例對象不再被使用,但由于內(nèi)部類持久外部類的實(shí)例對象,這個外部類對象將不會被垃圾回收,這也會造成內(nèi)存泄露。下面內(nèi)容來自于網(wǎng)上(主要特點(diǎn)就是清空堆棧中的某個元素,并不是徹底把它從數(shù)組中拿掉,而是把存儲的總數(shù)減少,本人寫得可以比這個好,在拿掉某個元素時,順便也讓它從數(shù)組中消失,將那個元素所在的位置的值設(shè)置為null即可):我實(shí)在想不到比那個堆棧更經(jīng)典的例子了,以致于我還要引用別人的例子,下面的例子不是我想到的,是書上看到的,當(dāng)然如果沒有在書上看到,可能過一段時間我自己也想的到,可是那時我說是我自己想到的也沒有人相信的。publicclassStack{privateObject[]elements=newObject[10];privateintsize=0;publicvoidpush(Objecte){ensureCapacity();elements[size++]=e;}publicObjectpop(){if(size==0)thrownewEmptyStackException();returnelements[--size];}privatevoidensureCapacity(){if(elements.length==size){Object[]oldElements=elements;elements=newObject[2*elements.length+1];System.arraycopy(oldElements,0,elements,0,size);}}}上面的原理應(yīng)該很簡單,假如堆棧加了10個元素,然后全部彈出來,雖然堆棧是空的,沒有我們要的東西,但是這是個對象是無法回收的,這個才符合了內(nèi)存泄露的兩個條件:無用,無法回收。但是就是存在這樣的東西也不一定會導(dǎo)致什么樣的后果,如果這個堆棧用的比較少,也就浪費(fèi)了幾個K內(nèi)存而已,反正我們的內(nèi)存都上G了,哪里會有什么影響,再說這個東西很快就會被回收的,有什么關(guān)系。下面看兩個例子。例子1publicclassBad{publicstaticStacks=Stack();static{s.push(newObject());s.pop();//這里有一個對象發(fā)生內(nèi)存泄露s.push(newObject());//上面的對象可以被回收了,等于是自愈了}}因?yàn)槭莝tatic,就一直存在到程序退出,但是我們也可以看到它有自愈功能,就是說如果你的Stack最多有100個對象,那么最多也就只有100個對象無法被回收其實(shí)這個應(yīng)該很容易理解,Stack內(nèi)部持有100個引用,最壞的情況就是他們都是無用的,因?yàn)槲覀円坏┓判碌倪M(jìn)取,以前的引用自然消失!內(nèi)存泄露的另外一種情況:當(dāng)一個對象被存儲進(jìn)HashSet集合中以后,就不能修改這個對象中的那些參與計(jì)算哈希值的字段了,否則,對象修改后的哈希值與最初存儲進(jìn)HashSet集合中時的哈希值就不同了,在這種情況下,即使在contains方法使用該對象的當(dāng)前引用作為的參數(shù)去HashSet集合中檢索對象,也將返回找不到對象的結(jié)果,這也會導(dǎo)致無法從HashSet集合中單獨(dú)刪除當(dāng)前對象,造成內(nèi)存泄露。6、能不能自己寫個類,也叫java.lang.String?可以,但在應(yīng)用的時候,需要用自己的類加載器去加載,否則,系統(tǒng)的類加載器永遠(yuǎn)只是去加載jre.jar包中的那個java.lang.String。由于在tomcat的web應(yīng)用程序中,都是由webapp自己的類加載器先自己加載WEB-INF/classess目錄中的類,然后才委托上級的類加載器加載,如果我們在tomcat的web應(yīng)用程序中寫一個java.lang.String,這時候Servlet程序加載的就是我們自己寫的java.lang.String,但是這么干就會出很多潛在的問題,原來所有用了java.lang.String類的都將出現(xiàn)問題。雖然java提供了endorsed技術(shù),可以覆蓋jdk中的某些類,具體做法是….。但是,能夠被覆蓋的類是有限制范圍,反正不包括java.lang這樣的包中的類。(下面的例如主要是便于大家學(xué)習(xí)理解只用,不要作為答案的一部分,否則,人家懷疑是題目泄露了)例如,運(yùn)行下面的程序:package
java.lang;publicclass
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力施工承包合同(5篇)
- 口罩銷售的合同(6篇)
- 房地產(chǎn)項(xiàng)目開發(fā)委托代理合同
- 文化旅游產(chǎn)業(yè)推廣與合作經(jīng)營合同
- 房產(chǎn)收購合作協(xié)議書
- 書面貨物運(yùn)輸合同
- 互聯(lián)網(wǎng)項(xiàng)目合作協(xié)議
- 可再生能源發(fā)電項(xiàng)目合作開發(fā)協(xié)議
- 制式裝修合同
- 房地產(chǎn)項(xiàng)目銷售合同
- 開學(xué)季初三沖刺中考開學(xué)第一課為夢想加油課件
- 《自然保護(hù)區(qū)劃分》課件
- 2025年四川綿陽科技城新區(qū)投資控股集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 2025年普通卷釘項(xiàng)目可行性研究報(bào)告
- 2025年建筑施工春節(jié)節(jié)后復(fù)工復(fù)產(chǎn)工作專項(xiàng)方案
- 學(xué)校食堂餐廳管理者食堂安全考試題附答案
- 2025延長石油(集團(tuán))限責(zé)任公司社會招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《商用車預(yù)見性巡航系統(tǒng)技術(shù)規(guī)范》
- 病原微生物安全
- 玻璃電動平移門施工方案
- 2.1大都市的輻射功能-以我國上海為例(第一課時)課件高中地理湘教版(2019)選擇性必修2+
評論
0/150
提交評論