下面是范文網(wǎng)小編收集的阿里巴巴面試題java9篇,供大家閱讀。
阿里巴巴面試題java1
1、自我介紹(還好我昨天準(zhǔn)備了下)
2、某個(gè)項(xiàng)目中遇到的最大問題
3、團(tuán)隊(duì)成員間如何更好的協(xié)作
4、項(xiàng)目的總體框架,模塊的測試
5、項(xiàng)目中用到的設(shè)計(jì)模式
6、系統(tǒng)的安全性
7、除了JSP還用過什么視圖顯示
8、關(guān)于Ajax的問題,沒接觸過,題目也忘了
9、HashMap和HashTable的區(qū)別
10、關(guān)于Hashmap中key和關(guān)聯(lián)對象的問題(對題目不太理解)
11、多態(tài)的實(shí)現(xiàn)機(jī)制 (蒙了)
12、類加載的原理 (說了個(gè)反射)
13、舉一個(gè)線程同步的例子
14、Servlet的生命周期
15、對SOA的'理解 (我說這東西有點(diǎn)虛了,會被云計(jì)算取代)
16、用過什么開源web框架
17、講述各種排序算法的特點(diǎn) (講了一大堆)
18、如何處理對數(shù)據(jù)庫某張表的大量并發(fā)處理,性能提高(還好看過oracle)
19、數(shù)據(jù)庫中各種表的關(guān)聯(lián)關(guān)系的理解(有難度)
20、面向?qū)ο蟮奶卣?/p>
21、Lucene和Nutch的區(qū)別
22、喜歡什么運(yùn)動 (網(wǎng)球)
23、喜歡看書嗎?喜歡看什么書?
24、通過什么途徑了解最新的技術(shù)發(fā)展
25、如果淘寶的offer也拿到了,你怎么選擇
26、職位規(guī)劃
阿里巴巴面試題java2
01. 介紹一下你技術(shù)方面
剛開始有點(diǎn)緊張,說的有點(diǎn)斷斷續(xù)續(xù),中間還有HR MM進(jìn)來,另外一個(gè)mm進(jìn)來給面試官端水
02. 性能優(yōu)化方面
我理解為代碼層面的
我:
一是:HTML層次結(jié)構(gòu)不要太深,層次結(jié)構(gòu)深會xx…
二是:防止內(nèi)存泄露,DOM和javascript是兩種東西,特別在IE等瀏覽器,javascript操作DOM效率低,容易造成內(nèi)存泄露,在不使用的時(shí)候最好設(shè)為null
三是:寫類的時(shí)候用prototype,不要動態(tài)this.xx = funciton{}, 這樣不能資源復(fù)用
面試官:還有嗎
我疑問:哪方面的優(yōu)化
面試官:站點(diǎn)性能優(yōu)化
我豁然,說:哦,緩存啊,代碼本地化
面試官疑惑:本地緩存?如何?
我:Expires,Etag等
面試官:還有呢
我:如果有條件使用cdn,還有cookie隔離
面試官疑問:隔離?
我:就是防止靜態(tài)資源發(fā)送cookie,通過配置獨(dú)立域名的,另外獨(dú)立域名的好處還有多線程下載,因?yàn)閭鹘y(tǒng)瀏覽器限制了并發(fā)數(shù)2,是一個(gè)域名限制2,如果多一個(gè)域名可以多幾個(gè)并發(fā)
面試官:那么通常說腳本為什么要放頭和放尾呢
我:我知道一般放尾是為了不影響HTML的解析,另外放尾處可以不用DOM ready,直接可以document.getElementById等,至于放在頭一般是變量定義吧,還有可能是受base得影響,放在頭部一般是css文件,防止裸奔
03. 字體定義有哪倆種方式
我理解為字體定義font-face
我:用font-face引入字體文件,有倆種?
面試官:是字體大小
我:哦,有倆種單位,一個(gè)是絕對值,類似于px,一個(gè)是相對值em之類的
面試官追問:那em和px有什么關(guān)系
我:如果父元素定義字體大小16px,那么子元素定義1em,大小就是16px
追問:em默認(rèn)值是多少
我:不太清楚,跟瀏覽器設(shè)置有關(guān)吧
04. 彈性布局和響應(yīng)式及重構(gòu)
我:通過media-query,讓不同瀏覽器展現(xiàn)不同布局
面試官:還有嗎?
(我有點(diǎn)卡了,這方面確實(shí)沒怎么研究)
繼續(xù)說:每個(gè)組件在不同屏幕上顯示不同樣子吧,比如導(dǎo)航菜單在寬屏下顯示一通欄,在手機(jī)上顯示一個(gè)按鈕
(其實(shí)他想聽到我對彈性布局、流式布局的解釋,用相對單位、max-width來控制等)
面試官:有一篇文章中說99%的網(wǎng)站都需要被重構(gòu),這個(gè)文章你有看過嗎?
我:沒有,聽過
面試官:為什么這么說?
我:主要是政府等網(wǎng)站,大量的使用了table等標(biāo)簽,不規(guī)范,不過這個(gè)地方成本很高。
(這個(gè)問題沒回答好,有點(diǎn)答非所問,不知道當(dāng)時(shí)怎么想的,應(yīng)該從規(guī)范、趨勢、移動端方面去回答這個(gè)問題)
05.你知道什么叫優(yōu)雅降級和漸進(jìn)增強(qiáng)
我:我知道有兩種,至于如何和這兩個(gè)詞對上不知道,一種是類似于border-radius,能顯示圓角更好看,不能顯示就顯示方形,用戶也可以接受;另一種是比如我要一個(gè)長連接,在高端瀏覽器上使用websocket,不能使用的用iframe流或者ajax,這個(gè)已經(jīng)有socket.io封裝了,算是漸進(jìn)增強(qiáng)吧
阿里巴巴面試題java3
一、談?wù)刦inal, finally, finalize的區(qū)別,
Final --修飾符(關(guān)鍵字)。如果一個(gè)類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個(gè)類
不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為
Final的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
Finally—在異常處理時(shí)提供 finally 塊來執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的catch 子句就會執(zhí)行,然后控制就會進(jìn)入 finally 塊(如果有的話)。
Finalize —方法名。Java 技術(shù)允許使用 finalize() 方法在垃圾收集器將對象從內(nèi)存中清除出去之前做必要的清理工作。
這個(gè)方法是由垃圾收集器在確定這個(gè)對象沒有被引用時(shí)對這個(gè)對象調(diào)用的。它是在 Object 類中定義的,因此所有的類都繼承了它。
子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個(gè)對象調(diào)用的。
二、Anonymous Inner Class (匿名內(nèi)部類)
是否可以extends(繼承)其它類,是否可以implements(實(shí)現(xiàn))interface(接口)?
匿名的內(nèi)部類是沒有名字的內(nèi)部類。不能extends(繼承) 其它類,但一個(gè)內(nèi)部類可以作為一個(gè)接口,由另一個(gè)內(nèi)部
類實(shí)現(xiàn)。
三、Static Nested Class 和 Inner Class的不同,說得越多越好(面試題有的很籠統(tǒng))。
Nested Class (一般是C++的說法),Inner Class (一般是JAVA的說法)。
Java內(nèi)部類與C++嵌套類最大的不同就在于是否有指向外部的引用上。具體可見
/articles/services/view.asp?id=704&page=1
注: 靜態(tài)內(nèi)部類(Inner Class)意味著
1、創(chuàng)建一個(gè)static內(nèi)部類的對象,不需要一個(gè)外部類對象,2、不能從一個(gè)static內(nèi)部類的一個(gè)對象訪問一個(gè)外部類對象
四、&和&&的區(qū)別。
&是位運(yùn)算符。&&是布爾邏輯運(yùn)算符。
五、HashMap和Hashtable的區(qū)別。
都屬于Map接口的類,實(shí)現(xiàn)了將惟一鍵映射到特定的值上。 HashMap 類沒有分類或者排序。它允許一個(gè) null鍵和多個(gè) null 值。 Hashtable 類似于HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因?yàn)樗峭降摹?/p>
六、Collection 和 Collections的區(qū)別。
Collections是個(gè)java.util下的類,它包含有各種有關(guān)集合操作的靜態(tài)方法。
Collection是個(gè)java.util下的接口,它是各種集合結(jié)構(gòu)的父接口。
七、什么時(shí)候用assert。
斷言是一個(gè)包含布爾表達(dá)式的語句,在執(zhí)行這個(gè)語句時(shí)假定該表達(dá)式為 true。
如果表達(dá)式計(jì)算為 false,那么系統(tǒng)會報(bào)告一個(gè) AssertionError。
它用于調(diào)試目的: assert(a > 0); // throws an AssertionError if a <= 0
斷言可以有兩種形式: assert Expression1 ; assert Expression1 : Expression2 ; Expression1
應(yīng)該總是產(chǎn)生一個(gè)布爾值。 Expression2 可以是得出一個(gè)值的任意表達(dá)式。這個(gè)值用于生成顯示更多調(diào)試信息的 String 消息。
斷言在默認(rèn)情況下是禁用的。要在編譯時(shí)啟用斷言,需要使用 source 1.4 標(biāo)記: javac -source 1.4 Test.java
要在運(yùn)行時(shí)啟用斷言,可使用 -enableassertions 或者 -ea 標(biāo)記。 要在運(yùn)行時(shí)選擇禁用斷言,可使用 -da 或者 -disableassertions 標(biāo)記。
要在系統(tǒng)類中啟用斷言,可使用 -esa 或者 -dsa 標(biāo)記。還可以在包的基礎(chǔ)上啟用或者禁用斷言。
可以在預(yù)計(jì)正常情況下不會到達(dá)的任何位置上放置斷言。斷言可以用于驗(yàn)證傳遞給私有方法的參數(shù)。不過,斷言不應(yīng)該用于驗(yàn)證
傳遞給公有方法的參數(shù),因?yàn)椴还苁欠駟⒂昧藬嘌?,公有方法都必須檢查其參數(shù)。不過,既可以在公有方法中,也可以在非公有方法中利用斷言測試后置條件。另外,斷言不應(yīng)該以任何方式改變程序的狀態(tài)。
八、GC是什么? 為什么要有GC? (基礎(chǔ))。
GC是垃圾收集器。Java 程序員不用擔(dān)心內(nèi)存管理,因?yàn)槔占鲿詣舆M(jìn)行管理。要請求垃圾收集,
可以調(diào)用下面的方法之一: System.gc() 、Runtime.getRuntime().gc()
九、String s = new String(“xyz”);創(chuàng)建了幾個(gè)String Object?
兩個(gè)對象,一個(gè)是“xyx”,一個(gè)是指向“xyx”的引用對象s。
十、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
十一、short s1 = 1; s1 = s1 + 1;有什么錯(cuò)? short s1 = 1; s1 += 1;有什么錯(cuò)?
short s1 = 1; s1 = s1 + 1;有錯(cuò),s1是short型,s1+1是int型,不能顯式轉(zhuǎn)化為short型。
可修改為s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。
十二、sleep() 和 wait() 有什么區(qū)別?
搞線程的最愛sleep()方法是使線程停止一段時(shí)間的方法,
在sleep 時(shí)間間隔期滿后,線程不一定立即恢復(fù)執(zhí)行。
這是因?yàn)樵谀莻€(gè)時(shí)刻,其它線程可能正在運(yùn)行而且沒有被調(diào)度為放棄執(zhí)行,除非(a)“醒來”的線程具有更高的優(yōu)先級,(b)正在運(yùn)行的線程因?yàn)槠渌蚨枞?/p>
wait()是線程交互時(shí),如果線程對一個(gè)同步對象x 發(fā)出一個(gè)wait()調(diào)用,該線程會暫停執(zhí)行,被調(diào)對象進(jìn)入等待狀態(tài),直到被喚醒或等待時(shí)間到。
十三、Java有沒有g(shù)oto?
Goto—java中的保留字,現(xiàn)在沒有在java中使用。
十四、數(shù)組有沒有l(wèi)ength()這個(gè)方法? String有沒有l(wèi)ength()這個(gè)方法?
數(shù)組沒有l(wèi)ength()方法,有l(wèi)ength的屬性。String有l(wèi)ength()方法。
十五、Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),
重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被
重寫 (Overriding)。子類的對象使用這個(gè)方法時(shí),將調(diào)用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。
如果在一個(gè)類中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。
Overloaded的方法是可以改變返回值的類型。
十八、error和exception有什么區(qū)別?
error 表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問題。比如說內(nèi)存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設(shè)計(jì)或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運(yùn)行正常,從不會發(fā)生的情況。
二十,abstract class和interface有什么區(qū)別?
聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類(abstract class),它用于要創(chuàng)建一個(gè)體現(xiàn)某些基本行為的類,并為該類聲明
方法,但不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽象類,
并讓它指向具體子類的一個(gè)實(shí)例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供
實(shí)現(xiàn),否則它們也是抽象類為。取而代之,在子類中實(shí)現(xiàn)該方法。知道其行為的其它類可以在類中實(shí)現(xiàn)這些方法。
接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實(shí)現(xiàn)這樣的接口而獲得。接口中的所有
方法都是抽象的,沒有一個(gè)有程序體。接口只可以定義static final成員變量。接口的實(shí)現(xiàn)與子類相似,除了該實(shí)現(xiàn)類不能從
接口定義中繼承行為。當(dāng)類實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)現(xiàn)了該接口的類的任何對象上調(diào)用接口的方法。由于有抽象類,它允
許使用接口名作為引用變量的類型。通常的動態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof 運(yùn)算符可以用來決定某對象的類是否實(shí)現(xiàn)了接口。
二十三,啟動一個(gè)線程是用run()還是start()?
啟動一個(gè)線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行
。這并不意味著線程就會立即運(yùn)行。run()方法可以產(chǎn)生必須退出的標(biāo)志來停止一個(gè)線程。
2.抽象類和接口的區(qū)別.
答案:
(1)接口可以被多重implements,抽象類只能被單一extends.
(2)接口只有定義,抽象類可以有定義和實(shí)現(xiàn).
(3)接口的字段定義默認(rèn)為:public static final, 抽象類字段默認(rèn)friendly“(本包可見).
37、int 和 Integer 有什么區(qū)別
答:Java 提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型)。Int是java的原始數(shù)據(jù)類型,Integer是java為int提供的封裝類。Java為每個(gè)原始類型提供了封裝類。原始類型封裝類booleanBoolean,charCharacter,byteByte,shortShort,intInteger,
longLong,floatFloat,doubleDouble引 用類型和原始類型的行為完全不同,并且它們具有不同的語義。
引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數(shù) 據(jù)結(jié)構(gòu)存儲,當(dāng)引用類型和原始類型用作某個(gè)類的實(shí)例數(shù)據(jù)時(shí)所指定的缺省值。對象引用實(shí)例變量的缺省值為 null,而原始類型實(shí)例變量的缺省值與它們的類 型有關(guān)
42、Java的接口和C++的虛類的相同和不同處
答:由 于Java不支持多繼承,而有可能某個(gè)類或?qū)ο笠褂梅謩e在幾個(gè)類或?qū)ο罄锩娴姆椒ɑ驅(qū)傩?,現(xiàn)有的單繼承機(jī)制就不能滿足要求。與繼承相比,接口有更高的靈 活性,因?yàn)榻涌谥袥]有任何實(shí)現(xiàn)代碼。當(dāng)一個(gè)類實(shí)現(xiàn)了接口以后,該類要實(shí)現(xiàn)接口里面所有的方法和屬性,并且接口里面的屬性在默認(rèn)狀態(tài)下面都是 public static,所有方法默認(rèn)情況下是public.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。
43、Java中的異常處理機(jī)制的簡單原理和應(yīng)用
答:當(dāng)JAVA 程序違反了JAVA的語義規(guī)則時(shí),JAVA虛擬機(jī)就會將發(fā)生的錯(cuò)誤表示為一個(gè)異常。違反語義規(guī)則包括2種情況。一種是JAVA類庫內(nèi)置的語義檢查。例如數(shù) 組下標(biāo)越界,會引發(fā)IndexOutOfBoundsException;訪問null的對象時(shí)會引發(fā)NullPointerException。另一種 情況就是JAVA允許程序員擴(kuò)展這種語義檢查,程序員可以創(chuàng)建自己的異常,并自由選擇在何時(shí)用throw關(guān)鍵字引發(fā)異常。所有的異常都是 java.lang.Thowable的子類。
44、垃圾回收的優(yōu)點(diǎn)和原理。并考慮2種回收機(jī)制
答:Java 語言中一個(gè)顯著的特點(diǎn)就是引入了垃圾回收機(jī)制,使c++程序員最頭疼的內(nèi)存管理的問題迎刃而解,它使得Java程序員在編寫程序的時(shí)候不再需要考慮內(nèi)存管 理。由于有個(gè)垃圾回收機(jī)制,Java中的對象不再有”作用域“的概念,只有對象的引用才有”作用域“。垃圾回收可以有效的防止內(nèi)存泄露,有效的使用可以使 用的內(nèi)存。垃圾回收器通常是作為一個(gè)單獨(dú)的低級別的線程運(yùn)行,不可預(yù)知的情況下對內(nèi)存堆中已經(jīng)死亡的或者長時(shí)間沒有使用的對象進(jìn)行清楚和回收,程序員不能 實(shí)時(shí)的調(diào)用垃圾回收器對某個(gè)對象或所有對象進(jìn)行垃圾回收?;厥諜C(jī)制有分代復(fù)制垃圾回收和標(biāo)記垃圾回收,增量垃圾回收。
不止所見,見所未見!你所需要的就是我所用所擁有的!!
阿里巴巴面試題java4
1、面向?qū)ο蟮奶卣饔心男┓矫?
1.抽象:
抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問題,而只是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面,一是過程抽象,二是數(shù)據(jù)抽象。
2.繼承:
繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。對象的一個(gè)新類可以從現(xiàn)有的類中派生,這個(gè)過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實(shí)例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。
3.封裝:
封裝是把過程和數(shù)據(jù)包圍起來,對數(shù)據(jù)的訪問只能通過已定義的界面。面向?qū)ο笥?jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個(gè)受保護(hù)的接口訪問其他對象。
4. 多態(tài)性:
多態(tài)性是指允許不同類的對象對同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,很好的解決了應(yīng)用程序函數(shù)同名問題。
2、String是最基本的數(shù)據(jù)類型嗎?
基本數(shù)據(jù)類型包括byte、int、char、long、float、double、boolean和short。
Java.lang.String類是final類型的,因此不可以繼承這個(gè)類、不能修改這個(gè)類。為了提高效率節(jié)省空間,我們應(yīng)該用StringBuffer類
3、int 和 Integer 有什么區(qū)別
Java 提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型)。Int是java的原始數(shù)據(jù)類型,Integer是java為int提供的封裝類。Java為每個(gè)原始類型提供了封裝類。
原始類型封裝類
booleanBoolean
CharCharacter
byteByte
shortShort
intInteger
longLong
FloatFloat
doubleDouble
引用類型和原始類型的行為完全不同,并且它們具有不同的語義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速度問題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲,當(dāng)引用類型和原始類型用作某個(gè)類的實(shí)例數(shù)據(jù)時(shí)所指定的缺省值。對象引用實(shí)例變量的缺省值為 null,而原始類型實(shí)例變量的缺省值與它們的類型有關(guān)。
4、String 和StringBuffer的區(qū)別
JAVA平臺提供了兩個(gè)類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個(gè)字符的字符數(shù)據(jù)。這個(gè)String類提供了數(shù)值不可改變的字符串。而這個(gè)StringBuffer類提供的字符串進(jìn)行修改。當(dāng)你知道字符數(shù)據(jù)要改變的時(shí)候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態(tài)構(gòu)造字符數(shù)據(jù)。
5、運(yùn)行時(shí)異常與一般異常有何異同?
異常表示程序運(yùn)行過程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時(shí)異常表示虛擬機(jī)的通常操作中可能遇到的異常,是一種常見運(yùn)行錯(cuò)誤。java編譯器要求方法必須聲明拋出可能發(fā)生的非運(yùn)行時(shí)異常,但是并不要求必須聲明拋出未被捕獲的運(yùn)行時(shí)異常。
6、說出Servlet的生命周期,并說出Servlet和CGI的區(qū)別。
servlet被服務(wù)器實(shí)例化后,容器運(yùn)行其init方法,請求到達(dá)時(shí)運(yùn)行其service方法,service方法自動派遣運(yùn)行與請求對應(yīng)的doXXX方法(doGet,doPost)等,當(dāng)服務(wù)器決定將實(shí)例銷毀的時(shí)候調(diào)用其destroy方法。
與cgi的區(qū)別在于servlet處于服務(wù)器進(jìn)程中,它通過多線程方式運(yùn)行其service方法,一個(gè)實(shí)例可以服務(wù)于多個(gè)請求,并且其實(shí)例一般不會銷毀,而CGI對每個(gè)請求都產(chǎn)生新的進(jìn)程,服務(wù)完成后就銷毀,所以效率上低于servlet。
7、說出ArrayList,Vector, LinkedList的存儲性能和特性
ArrayList和Vector都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數(shù)組元素移動等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實(shí)現(xiàn)存儲,按序號索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。
8、EJB是基于哪些技術(shù)實(shí)現(xiàn)的?并說出SessionBean和EntityBean的區(qū)別,StatefulBean和StatelessBean的區(qū)別。
eJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技術(shù)實(shí)現(xiàn)。
sessionBean在J2EE應(yīng)用程序中被用來完成一些服務(wù)器端的業(yè)務(wù)操作,例如訪問數(shù)據(jù)庫、調(diào)用其他EJB組件。EntityBean被用來代表應(yīng)用系統(tǒng)中用到的數(shù)據(jù)。
對于客戶機(jī),SessionBean是一種非持久性對象,它實(shí)現(xiàn)某些在服務(wù)器上運(yùn)行的業(yè)務(wù)邏輯。
對于客戶機(jī),EntityBean是一種持久性對象,它代表一個(gè)存儲在持久性存儲器中的實(shí)體的對象視圖,或是一個(gè)由現(xiàn)有企業(yè)應(yīng)用程序?qū)崿F(xiàn)的實(shí)體。
session Bean 還可以再細(xì)分為 Stateful Session Bean 與 Stateless Session Bean ,這兩種的 Session Bean都可以將系統(tǒng)邏輯放在 method之中執(zhí)行,不同的是 Stateful Session Bean 可以記錄呼叫者的狀態(tài),因此通常來說,一個(gè)使用者會有一個(gè)相對應(yīng)的 Stateful Session Bean 的實(shí)體。Stateless Session Bean 雖然也是邏輯組件,但是他卻不負(fù)責(zé)記錄使用者狀態(tài),也就是說當(dāng)使用者呼叫 Stateless Session Bean 的時(shí)候,EJB Container 并不會找尋特定的 Stateless Session Bean 的實(shí)體來執(zhí)行這個(gè) method。換言之,很可能數(shù)個(gè)使用者在執(zhí)行某個(gè) Stateless Session Bean 的 methods 時(shí),會是同一個(gè) Bean 的 Instance 在執(zhí)行。從內(nèi)存方面來看, Stateful Session Bean 與 Stateless Session Bean 比較, Stateful Session Bean 會消耗 J2EE Server 較多的內(nèi)存,然而 Stateful Session Bean 的優(yōu)勢卻在于他可以維持使用者的狀態(tài)。
9、Collection 和 Collections的區(qū)別。
Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.
Collections是針對集合類的一個(gè)幫助類,他提供一系列靜態(tài)方法實(shí)現(xiàn)對各種集合的搜索、排序、線程安全化等操作。
10、&和&&的區(qū)別。
&是位運(yùn)算符,表示按位與運(yùn)算,&&是邏輯運(yùn)算符,表示邏輯與(and)。
11、HashMap和Hashtable的區(qū)別。
HashMap是Hashtable的輕量級實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。
HashMap允許將null作為一個(gè)entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因?yàn)閏ontains方法容易讓人引起誤解。
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進(jìn)的Map interface的一個(gè)實(shí)現(xiàn)。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個(gè)線程訪問Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap 就必須為之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。
12、final, finally, finalize的區(qū)別。
Final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
Finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。
Finalize是Object類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會調(diào)用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時(shí)的其他資源回收,例如關(guān)閉文件等。
13、sleep 和 wait() 有什么區(qū)別?
sleep是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時(shí)間,給執(zhí)行機(jī)會給其他線程,但是監(jiān)控狀態(tài)依然保持,到時(shí)后會自動恢復(fù)。調(diào)用sleep不會釋放對象鎖。
阿里巴巴面試題java5
阿里巴巴面試題
阿里巴巴面試題【1】
題目的背景如下:
一晚,李先生在家獨(dú)自飲酒。突然一個(gè)殺手從窗戶跳了進(jìn)來,對李先生說:“李先生!我受人之托,要你小命”
李先生若無其事地說:“是誰找你殺我?”
“這你不必知道”
“好!我出3倍的價(jià)錢買我的命如何?”
殺手一聽,立刻露出了貪婪的目光。
李先生見有轉(zhuǎn)機(jī),可以緩和氣氛,便倒了半杯酒,說:“你也喝杯酒吧,喝完我就給你拿錢”。殺手拿起酒杯一飲而盡。
李先生接過殺手的酒杯,走到保險(xiǎn)柜旁,打開了保險(xiǎn)柜,取出錢袋放在桌上,殺手剛伸手去拿,就聽“哐”一聲,保險(xiǎn)柜的門關(guān)上了,接著他說:“現(xiàn)在你還敢殺我么?”
殺手看了看保險(xiǎn)柜和李先生的手,又看了看桌子,落荒而逃。
試問:李先生做了什么讓殺手連錢都不拿就立即逃走?
答案在下方:
答案:把有殺手唾液和指紋的酒杯放到了保險(xiǎn)柜里面,殺手當(dāng)然就不敢殺人了.
阿里巴巴面試題集合【2】
一、String,StringBuffer, StringBuilder 的區(qū)別是什么?String為什么是不可變的?
答: 1、String是字符串常量,StringBuffer和StringBuilder都是字符串變量。后兩者的字符內(nèi)容可變,而前者創(chuàng)建后內(nèi)容不可變。
2、String不可變是因?yàn)樵贘DK中String類被聲明為一個(gè)final類。
3、StringBuffer是線程安全的,而StringBuilder是非線程安全的。
ps:線程安全會帶來額外的系統(tǒng)開銷,所以StringBuilder的效率比StringBuffer高。如果對系統(tǒng)中的線程是否安全很掌握,可用StringBuffer,在線程不安全處加上關(guān)鍵字Synchronize。
二、Vector,ArrayList, LinkedList的區(qū)別是什么?
答: 1、Vector、ArrayList都是以類似數(shù)組的形式存儲在內(nèi)存中,LinkedList則以鏈表的形式進(jìn)行存儲。
2、List中的元素有序、允許有重復(fù)的元素,Set中的元素?zé)o序、不允許有重復(fù)元素。
3、Vector線程同步,ArrayList、LinkedList線程不同步。
4、LinkedList適合指定位置插入、刪除操作,不適合查找;ArrayList、Vector適合查找,不適合指定位置的插入、刪除操作。
5、ArrayList在元素填滿容器時(shí)會自動擴(kuò)充容器大小的50%,而Vector則是100%,因此ArrayList更節(jié)省空間。
三、HashTable, HashMap,TreeMap區(qū)別?
答: 1、HashTable線程同步,HashMap非線程同步。
2、HashTable不允許有空值,HashMap允許有空值。
3、HashTable使用Enumeration,HashMap使用Iterator。
4、HashTable中hash數(shù)組的默認(rèn)大小是11,增加方式的old*2+1,HashMap中hash數(shù)組的默認(rèn)大小是16,增長方式一定是2的`指數(shù)倍。
5、TreeMap能夠把它保存的記錄根據(jù)鍵排序,默認(rèn)是按升序排序。
四、Tomcat,Apache,JBoss的區(qū)別?
答: 1、Apache是Http服務(wù)器,Tomcat是web服務(wù)器,JBoss是應(yīng)用服務(wù)器。
2、Apache解析靜態(tài)的html文件;Tomcat可解析jsp動態(tài)頁面、也可充當(dāng)servlet容器。
五、GET,POST區(qū)別?
答: 基礎(chǔ)知識:Http的請求格式如下。
主要包含三個(gè)信息:1、請求的類型(GET或POST),2、要訪問的資源(如resimga.jif),3、Http版本(http/1.1)
用來說明服務(wù)器要使用的附加信息
這是Http的規(guī)定,必須空一行
請求的內(nèi)容數(shù)據(jù)
區(qū)別:
1、Get是從服務(wù)器端獲取數(shù)據(jù),Post則是向服務(wù)器端發(fā)送數(shù)據(jù)。
2、在客戶端,Get方式通過URL提交數(shù)據(jù),在URL地址欄可以看到請求消息,該消息被編碼過;Post數(shù)據(jù)則是放在Html header內(nèi)提交。
3、對于Get方式,服務(wù)器端用Request.QueryString獲取變量的值;對用Post方式,服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)值。
4、Get方式提交的數(shù)據(jù)最多1024字節(jié),而Post則沒有限制。
5、Get方式提交的參數(shù)及參數(shù)值會在地址欄顯示,不安全,而Post不會,比較安全。
阿里巴巴面試題java6
阿里巴巴java面試題
阿里巴巴軟件招JAVA高級工程師面試題【1】
1.兩個(gè)對象值相同(x.equals(y)==true),但卻可有不同的hash code,這句話對不對?為什么?
2.GC是什么?為什么要有GC?
3.請簡要描述一下J2EE應(yīng)用中的class loader的層次結(jié)構(gòu)?
4.寫一段代碼,實(shí)現(xiàn)銀行轉(zhuǎn)帳功能:
接口定義如下:
public interface ITransfer{
/**
* 銀行內(nèi)部轉(zhuǎn)帳,從轉(zhuǎn)出帳號中扣除轉(zhuǎn)帳金額,給轉(zhuǎn)入帳號增加轉(zhuǎn)帳金額,需要保證以上兩個(gè)操作
* 要么同時(shí)成功,要么同時(shí)失敗
* fromAccountId 轉(zhuǎn)出帳號
* outAccountId 轉(zhuǎn)入帳號
* amount 轉(zhuǎn)帳金額
**/
public void transferInner(String fromAccountId,String outAccountId,
bigDecimal amount);
/**
* 外部轉(zhuǎn)帳-轉(zhuǎn)出,從轉(zhuǎn)出帳號中扣除轉(zhuǎn)帳金額
* fromAccountId 轉(zhuǎn)出帳號
* amount 轉(zhuǎn)帳金額
**/
public void transferOut(String fromAccountId,BigDecimal amount);
/**
* 外部轉(zhuǎn)帳-轉(zhuǎn)入,給轉(zhuǎn)入帳號增加轉(zhuǎn)帳金額
* toAccountId 轉(zhuǎn)入帳號
* amount 轉(zhuǎn)帳金額
public void transerIn (String toAccountId, BigDecimal amount);
}
請編寫你的實(shí)現(xiàn)類,來實(shí)現(xiàn)上述接口
Account表
字段:accountId , 主鍵 varchar2(32), 用戶帳號
字段:amount , 金額 number(18,3)
5.“組合優(yōu)于繼承”,是否同意這句話,并闡述你的觀點(diǎn)。
6.請說下Template模式與Strategy模式的異同點(diǎn)。
阿里巴巴面試題 java方向【2】
一、String,StringBuffer, StringBuilder 的區(qū)別是什么?String為什么是不可變的?
二、VECTOR,ARRAYLIST, LINKEDLIST的'區(qū)別是什么?
三、HASHTABLE, HASGMAQ,TreeMap區(qū)別
四、ConcurrentMap和HashMap的區(qū)別
五、Tomcat,apache,jboss的區(qū)別
六、GET POST區(qū)別
七、SESSION, COOKIE區(qū)別
八、Servlet的生命周期
九、HTTP 報(bào)文包含內(nèi)容
十、Statement與PreparedStatement的區(qū)別,什么是SQL注入,如何防止SQL注入
十一、redirect, foward區(qū)別
十二、關(guān)于JAVA內(nèi)存模型,一個(gè)對象(兩個(gè)屬性,四個(gè)方法)實(shí)例化100次,現(xiàn)在內(nèi)存中的存儲狀態(tài),
幾個(gè)對象,幾個(gè)屬性,幾個(gè)方法。
十三、談?wù)凥ibernate的理解,一級和二級緩存的作用,在項(xiàng)目中Hibernate都是怎么使用緩存的
十四、反射講一講,主要是概念,都在哪需要反射機(jī)制,反射的性能,如何優(yōu)化
十五、談?wù)凥ibernate與Ibatis的區(qū)別,哪個(gè)性能會更高一些
十六、對Spring的理解,項(xiàng)目中都用什么?怎么用的?對IOC、和AOP的理解及實(shí)現(xiàn)原理
十七、線程同步,并發(fā)操作怎么控制
十八、描述struts的工作流程。
十九、Tomcat的session處理,如果讓你實(shí)現(xiàn)一個(gè)tomcatserver,如何實(shí)現(xiàn)session機(jī)制
二十、關(guān)于Cache(Ehcache,Memcached)
二一、sql的優(yōu)化相關(guān)問題
二二、oracle中 rownum與rowid的理解,一千條記錄我查200到300的記錄怎么查?
二三、如何分析ORACLE的執(zhí)行計(jì)劃?
二四、 DB中索引原理,種類,使用索引的好處和問題是什么?
二五、JVM垃圾回收實(shí)現(xiàn)原理。垃圾回收的線程優(yōu)先級。
二六、jvm 最大內(nèi)存設(shè)置。設(shè)置的原理。結(jié)合垃圾回收講講。
阿里巴巴面試題java7
1. 什么情況下會發(fā)生棧內(nèi)存溢出。
至于是堆內(nèi)存溢出還是方法區(qū)內(nèi)存溢出還是棧內(nèi)存溢出,其實(shí)可以用一些工具比如
JConsole來監(jiān)視
2. JVM 的內(nèi)存結(jié)構(gòu),Eden 和 Survivor 比例。
3. jvm 中一次完整的 GC 流程是怎樣的,對象如何晉升到老年代,說說你知道的幾種主要的 jvm 參數(shù)。
4. 你知道哪幾種垃圾收集器,各自的優(yōu)缺點(diǎn),重點(diǎn)講下 cms,包括原理,流程,優(yōu)缺點(diǎn)
5. 垃圾回收算法的實(shí)現(xiàn)原理。
6. 當(dāng)出現(xiàn)了內(nèi)存溢出,你怎么排錯(cuò)。
7. JVM 內(nèi)存模型的相關(guān)知識了解多少,比如重排序,內(nèi)存屏障,happen-before,主內(nèi)存,工作內(nèi)存等。
8. 簡單說說你了解的類加載器。
9. 講講 JAVA 的反射機(jī)制。
10. 你們線上應(yīng)用的 JVM 參數(shù)有哪些。
11. g1 和 cms 區(qū)別,吞吐量優(yōu)先和響應(yīng)優(yōu)先的垃圾收集器選擇。
12. 請解釋如下 jvm 參數(shù)的含義:
-server -Xms512m -Xmx512m -Xss1024K
-XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=20 XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly。
/a503921892/article/details/39048889
Xmx3550m:設(shè)置JVM最大可用內(nèi)存為3550M。
-Xms3550m:設(shè)置JVM初始內(nèi)存為3550m。此值可以設(shè)置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內(nèi)存。
-Xss128k: 設(shè)置每個(gè)線程的堆棧大小。在相同物理內(nèi) 存下,減小這個(gè)值能生成更多的線程。但是操作系統(tǒng)對一個(gè)進(jìn)程內(nèi)的線程數(shù)還是有限制的,不能無限生成,
經(jīng)驗(yàn)值在3000~5000左右
-XX:MaxPermSize=16m:設(shè)置持久代大小為16m
-XX:MaxTenuringThreshold=0:設(shè)置垃圾最大年齡。如果設(shè)置為0的話,則年輕代對象不經(jīng)過Survivor區(qū),直接進(jìn)入年老代。對于年老代比較多的應(yīng)用,可以提高效率。
如果將此值設(shè)置為一個(gè)較大值,則年輕代對象會在Survivor區(qū)進(jìn)行多次復(fù)制,這樣可以增加對象再年輕代的存活時(shí)間,增加在年輕代即被回收的概論。
開源框架知識
1. 簡單講講 tomcat 結(jié)構(gòu),以及其類加載器流程。
2. tomcat 如何調(diào)優(yōu),涉及哪些參數(shù)。
3. 講講 Spring 加載流程。
4. 講講 Spring 事務(wù)的傳播屬性。
pROPAGATION_REQUIRED--支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就新建一個(gè)事務(wù)。這是最常見的選擇。
5. Spring 如何管理事務(wù)的。
6. Spring 怎么配置事務(wù)(具體說出一些關(guān)鍵的 xml元素)。
tx:advice,aop:config
7. 說說你對 Spring 的理解,非單例注入的原理?它的生命周期?循環(huán)注入的原理,aop 的實(shí)現(xiàn)原理,說說 aop 中的幾個(gè)術(shù)語,它們是怎么相互工作的。
8. Springmvc 中 DispatcherServlet初始化過程。
操作系統(tǒng)
1. Linux 系統(tǒng)下你關(guān)注過哪些內(nèi)核參數(shù),說說你知道的。
2. Linux 下 IO 模型有幾種,各自的含義是什么。
3. epoll 和 poll 有什么區(qū)別。
4. 平時(shí)用到哪些 Linux 命令。
5. 用一行命令查看文件的最后五行。
輸出test文件的后五行:
liyi@liyi:~/Desktop > tail -n 5 test
輸出test文件的前五行:
liyi@liyi:~/Desktop > head -n 5 test
6. 用一行命令輸出正在運(yùn)行的 java 進(jìn)程。
7. 介紹下你理解的操作系統(tǒng)中線程切換過程。
8. 進(jìn)程和線程的區(qū)別。
多線程
1. 多線程的幾種實(shí)現(xiàn)方式,什么是線程安全。
2. volatile 的原理,作用,能代替鎖么。
3. 畫一個(gè)線程的生命周期狀態(tài)圖。
4. sleep 和 wait 的區(qū)別。
5. Lock 與 Synchronized 的區(qū)別。
6. synchronized 的原理是什么,解釋以下名詞:重排序,自旋鎖,偏向鎖,輕量級鎖,可重入鎖,公平鎖,非公平鎖,樂觀鎖,悲觀鎖。
7. 用過哪些原子類,他們的原理是什么。
8. 用過線程池嗎,newCache 和 newFixed 有什么區(qū)別,他們的原理簡單概括下,構(gòu)造函數(shù)的各個(gè)參數(shù)的含義是什么,比如 coreSize,maxsize 等。
9. 線程池的關(guān)閉方式有幾種,各自的區(qū)別是什么。
10. 假如有一個(gè)第三方接口,有很多個(gè)線程去調(diào)用獲取數(shù)據(jù),現(xiàn)在規(guī)定每秒鐘最多有 10 個(gè)線程同時(shí)調(diào)用它,如何做到。
11. spring 的 controller 是單例還是多例,怎么保證并發(fā)的安全。
singleton : bean在每個(gè)Spring ioc 容器中只有一個(gè)實(shí)例。
prototype:一個(gè)bean的定義可以有多個(gè)實(shí)例。
request:每次http請求都會創(chuàng)建一個(gè)bean,該作用域僅在基于web的Spring ApplicationContext情形下有效。
12. 用三個(gè)線程按順序循環(huán)打印 abc 三個(gè)字母,比如 abcabcabc。
思路:解題思路大概是這樣的,開啟三個(gè)線程,每個(gè)線程一次打印一個(gè)字母,并且按照一定的順序打印,當(dāng)打印A的時(shí)候,其他線程處于阻塞狀態(tài),打印完A以后,
將線程解鎖,讓打印B的那個(gè)線程開啟,其他線程處于阻塞狀態(tài),同理打印C的時(shí)候,阻塞其他線程,這三個(gè)線程順序循環(huán),就達(dá)到順序多次打印ABC的目的了。
這道題看似思路簡單,其實(shí)主要需要用到wait方法和notify()方法,還有關(guān)鍵字synchronized,只有充分理解了這些,才能解出這道題。下面我有必要講解一下這兩個(gè)方法,
還有關(guān)鍵字synchronized。
13. ThreadLocal 用過么,用途是什么,原理是什么,用的時(shí)候要注意什么。
14. 如果讓你實(shí)現(xiàn)一個(gè)并發(fā)安全的鏈表,你會怎么做。
15. 有哪些無鎖數(shù)據(jù)結(jié)構(gòu),他們實(shí)現(xiàn)的原理是什么。
16. 講講 java 同步機(jī)制的 wait 和 notify。
17. 多線程如果線程掛住了怎么辦。
18. countdowlatch 和 cyclicbarrier的內(nèi)部原理和用法,以及相互之間的差別。
19. 使用 synchronized 修飾靜態(tài)方法和非靜態(tài)方法有什么區(qū)別。
所有的非靜態(tài)同步方法用的都是同一把鎖――實(shí)例對象本身,也就是說如果一個(gè)實(shí)例對象的非靜態(tài)同步方法獲取鎖后,
該實(shí)例對象的其他非靜態(tài)同步方法必須等待獲取鎖的方法釋放鎖后才能獲取鎖,
可是別的實(shí)例對象的非靜態(tài)同步方法因?yàn)楦搶?shí)例對象的非靜態(tài)同步方法用的是不同的鎖,
所以毋須等待該實(shí)例對象已獲取鎖的非靜態(tài)同步方法釋放鎖就可以獲取他們自己的鎖。
而所有的靜態(tài)同步方法用的也是同一把鎖――類對象本身,這兩把鎖是兩個(gè)不同的對象,
所以靜態(tài)同步方法與非靜態(tài)同步方法之間是不會有競態(tài)條件的。但是一旦一個(gè)靜態(tài)同步方法獲取鎖后,
其他的靜態(tài)同步方法都必須等待該方法釋放鎖后才能獲取鎖,而不管是同一個(gè)實(shí)例對象的靜態(tài)同步方法之間,
還是不同的實(shí)例對象的靜態(tài)同步方法之間,只要它們同一個(gè)類的實(shí)例對象!
20. 簡述 ConcurrentLinkedQueue 和 LinkedBlockingQueue 的用處和不同之處。
21. 導(dǎo)致線程死鎖的原因?怎么解除線程死鎖。
22. 非常多個(gè)線程(可能是不同機(jī)器),相互之間需要等待協(xié)調(diào),才能完成某種工作,問怎么設(shè)計(jì)這種協(xié)調(diào)方案。
23. 正確使用 Volatile 變量
正確使用 volatile 變量的條件
您只能在有限的一些情形下使用 volatile 變量替代鎖。要使 volatile 變量提供理想的線程安全,必須同時(shí)滿足下面兩個(gè)條件:
1對變量的寫操作不依賴于當(dāng)前值。
2該變量沒有包含在具有其他變量的不變式中。
/developerworks/cn/java/j-jtp06197.html
tCP與HTTP
1. http1.0 和 http1.1 有什么區(qū)別。
在http1.0中,當(dāng)建立連接后,客戶端發(fā)送一個(gè)請求,服務(wù)器端返回一個(gè)信息后就關(guān)閉連接,
當(dāng)瀏覽器下次請求的時(shí)候又要建立連接,顯然這種不斷建立連接的方式,會造成很多問題。
在http1.1中,引入了持續(xù)連接的概念,通過這種連接,瀏覽器可以建立一個(gè)連接之后,
發(fā)送請求并得到返回信息,然后繼續(xù)發(fā)送請求再次等到返回信息,也就是說客戶端可以連續(xù)發(fā)送多個(gè)請求,而不用等待每一個(gè)響應(yīng)的到來。
2. TCP 三次握手和四次揮手的流程,為什么斷開連接要 4次,如果握手只有兩次,會出現(xiàn)什么。
3. TIME_WAIT 和 CLOSE_WAIT 的區(qū)別。
4. 說說你知道的幾種 HTTP 響應(yīng)碼,比如 200, 302, 404。
5. 當(dāng)你用瀏覽器打開一個(gè)鏈接的時(shí)候,計(jì)算機(jī)做了哪些工作步驟。
6. TCP/IP 如何保證可靠性,說說 TCP 頭的結(jié)構(gòu)。
7. 如何避免瀏覽器緩存。
8. 簡述 Http 請求 get 和 post 的區(qū)別以及數(shù)據(jù)包格式。
GET提交,請求的數(shù)據(jù)會附在URL之后(就是把數(shù)據(jù)放置在HTTP協(xié)議頭<request-line>中
pOST提交:把提交的數(shù)據(jù)放置在是HTTP包的包體<request-body>中
[java面試題]
阿里巴巴面試題java8
13)請說一下System.gc()函數(shù)的作用。什么時(shí)候可以調(diào)用垃圾回收器?(瞬聯(lián))
垃圾回收函數(shù),手動調(diào)用的.
當(dāng)一個(gè)對象停止被活動聲明所引用,它就變成了垃圾(garbage)可以被回收重新使用
14)你做過的項(xiàng)目中采用了什么安全認(rèn)證機(jī)制?(IBM)
15)Math.round()什么作用?
Math.Round(3.44, 1) = 3.4
Math.Round(3.45, 1) = 3.4
Math.Round(3.46, 1) = 3.5
-----------------------------------------------
Math.Round(3.54, 1) = 3.5
Math.Round(3.55, 1) = 3.6
Math.Round(3.56, 1) = 3.6
-----------------------------------------------
Math.Round(3.64, 1) = 3.6
Math.Round(3.65, 1) = 3.6
Math.Round(3.66, 1) = 3.7
-----------------------------------------------
Math.Round(3.74, 1) = 3.7
Math.Round(3.75, 1) = 3.8
Math.Round(3.76, 1) = 3.8
這種舍入方法叫做銀行家舍入(Banker'sRound),這就是已經(jīng)規(guī)定下來的標(biāo)準(zhǔn)、Round的標(biāo)準(zhǔn)、世界的標(biāo)準(zhǔn)。
round 四舍五入
16、設(shè)計(jì)4個(gè)線程,其中兩個(gè)線程每次對j增加1,另外兩個(gè)線程對j每次減少1。寫出程序。
以下程序使用內(nèi)部類實(shí)現(xiàn)線程,對j增減的時(shí)候沒有考慮順序問題。
package java_example150;
public class TestThread3{
private int j;
public static void main(String[] args){
testThread3 t = new TestThread3();
inc inc = t.new Inc();
dec dec = t.new Dec();
For(int i=0;i<2;i++){
thread ts = new Thread(inc);
ts.start();
ts= new Thread(dec);
ts.start();
}
}
private synchronized void inc(){
J++;
system.out.println(Thread.currentThread().getName()+”-inc:“+j);
}
private synchronized void dec(){
J--;
system.out.println(Thread.currentThread().getName()+”-dec:“+j);
}
Class Inc implements Runnable{
public void run(){
For(int i=0;i<10;i++){
inc();
}
}
}
Class Dec implements Runnable{
public void run(){
For(int i=0;i<10;i++){
dec();
}
}
}
}
17.CORBA是什么?用途是什么?
答:CORBA 標(biāo)準(zhǔn)是公共對象請求代理結(jié)構(gòu)(Common Object Request Broker Architecture),由對象管理組織 (Object Management Group,縮寫為 OMG)標(biāo)準(zhǔn)化。它的組成是接口定義語言(IDL), 語言綁定(binding:也譯為聯(lián)編)和允許應(yīng)用程序間互操作的協(xié)議。 其目的為:
1. 用不同的程序設(shè)計(jì)語言書寫
2. 在不同的進(jìn)程中運(yùn)行
3. 為不同的操作系統(tǒng)開發(fā)
18.JAVA代碼查錯(cuò)
1.
Abstract class Name
{
private String name;
public abstract boolean isStupidName(String name) {}
}
答案: 錯(cuò)。abstract method必須以分號結(jié)尾,且不帶花括號。
2.
public class Something
{
void doSomething ()
{
private String s = ”“;
int l = s.length();
}
}
答案: 錯(cuò)。局部變量前不能放置任何訪問修飾符 (private,public,和protected)。final可以用來修飾局部變量
(final如同abstract和strictfp,都是非訪問修飾符,strictfp只能修飾class和method而非variable)。
3.
Abstract class Something
{
private abstract String doSomething ();
}
答案: 錯(cuò)。abstract的methods不能以private修飾。abstract的methods就是讓子類implement(實(shí)現(xiàn))具體細(xì)節(jié)的,怎么可以用private把a(bǔ)bstractmethod封鎖起來呢? (同理,abstract method前不能加final)。
4.
public class Something
{
public int addOne(final int x)
{
return ++x;
}
}
答案: 錯(cuò)。int x被修飾成final,意味著x不能在addOne method中被修改。
5.
public class Something
{
public static void main(String[] args)
{
Other o = new Other();
New Something().addOne(o);
}
public void addOne(final Other o)
{
O.i++;
}
}
Class Other
{
public int i;
}
答案: 正確。在addOne method中,參數(shù)o被修飾成final。如果在addOne method里我們修改了o的reference
(比如: o = new Other();),那么如同上例這題也是錯(cuò)的。但這里修改的是o的member vairable
(成員變量),而o的reference并沒有改變。
6.
Class Something
{
int i;
public void doSomething()
{
system.out.println(”i = “ + i);
}
}
答案: 正確。輸出的是”i = 0“。int i屬於instant variable (實(shí)例變量,或叫成員變量)。instant variable有default value。int的default value是0。
7.
Class Something
{
Final int i;
public void doSomething()
{
system.out.println(”i = “ + i);
}
}
答案: 錯(cuò)。final int i 是個(gè)final的 instant variable (實(shí)例變量,或叫成員變量)。final的instant variable沒有default value,必須在constructor (構(gòu)造器)結(jié)束之前被賦予一個(gè)明確的值??梢孕薷臑椤眆inal int i = 0;“。
8.
public class Something
{
public static void main(String[] args)
{
something s = new Something();
system.out.println(”s.doSomething() returns “ + doSomething());
}
public String doSomething()
{
return ”Do something ...“;
}
}
答案: 錯(cuò)。看上去在main里call doSomething沒有什么問題,畢竟兩個(gè)methods都在同一個(gè)class里。但仔細(xì)看,main是static的。static method不能直接call non-static methods??筛某伞盨ystem.out.println(“s.doSomething() returns ” + s.doSomething());“。同理,static method不能訪問non-static instant variable。
阿里巴巴面試題java9
三、線程的四種狀態(tài)
1. 新狀態(tài):線程已被創(chuàng)建但尚未執(zhí)行(start() 尚未被調(diào)用)。
2. 可執(zhí)行狀態(tài):線程可以執(zhí)行,雖然不一定正在執(zhí)行。CPU 時(shí)間隨時(shí)可能被分配給該線程,從而使得它執(zhí)行。
3. 死亡狀態(tài):正常情況下 run() 返回使得線程死亡。調(diào)用 stop()或 destroy() 亦有同樣效果,但是不被推薦,前者會產(chǎn)生異常,后者是強(qiáng)制終止,不會釋放鎖。
4. 阻塞狀態(tài):線程不會被分配 CPU 時(shí)間,無法執(zhí)行。
四、線程的優(yōu)先級
線程的優(yōu)先級代表該線程的重要程度,當(dāng)有多個(gè)線程同時(shí)處于可執(zhí)行狀態(tài)并等待獲得 CPU 時(shí)間時(shí),線程調(diào)度系統(tǒng)根據(jù)各個(gè)線程的優(yōu)先級來決定給誰分配 CPU 時(shí)間,優(yōu)先級高的線程有更大的機(jī)會獲得 CPU 時(shí)間,優(yōu)先級低的線程也不是沒有機(jī)會,只是機(jī)會要小一些罷了。
你可以調(diào)用 Thread 類的方法 getPriority() 和 setPriority()來存取線程的優(yōu)先級,線程的優(yōu)先級界于1(MIN_PRIORITY)和10(MAX_PRIORITY)之間,缺省是5(NORM_PRIORITY)。
5)你用過哪種設(shè)計(jì)模式?(瞬聯(lián),IBM,aspenTech)
設(shè)計(jì):design
模式:pattern
框架:framework
創(chuàng)建模式,結(jié)構(gòu)模式和行為模式
GoF設(shè)計(jì)模式
A.創(chuàng)建模式
設(shè)計(jì)模式之Factory(工廠模式)
使用工廠模式就象使用new一樣頻繁./10/9更新
設(shè)計(jì)模式之Prototype(原型模式)
用原型實(shí)例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。
設(shè)計(jì)模式之Builder
汽車由車輪 方向盤 發(fā)動機(jī)很多部件組成,同時(shí),將這些部件組裝成汽車也是一件復(fù)雜的工作,Builder模式就是將這兩種情況分開進(jìn)行。
設(shè)計(jì)模式之Singleton(單態(tài)模式)
保證一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn) 2002/10/9更新
b.結(jié)構(gòu)模式
設(shè)計(jì)模式之Facade
可擴(kuò)展的使用JDBC針對不同的數(shù)據(jù)庫編程,Facade提供了一種靈活的實(shí)現(xiàn).
設(shè)計(jì)模式之Proxy
以Jive為例,剖析代理模式在用戶級別授權(quán)機(jī)制上的應(yīng)用
設(shè)計(jì)模式之Adapter
使用類再生的兩個(gè)方式:組合(new)和繼承(extends),這個(gè)已經(jīng)在”thinking in java“中提到過.
設(shè)計(jì)模式之Composite
就是將類用樹形結(jié)構(gòu)組合成一個(gè)單位.你向別人介紹你是某單位,你是單位中的一個(gè)元素,別人和你做買賣,相當(dāng)于和單位做買賣。文章中還對Jive再進(jìn)行了剖析。
設(shè)計(jì)模式之Decorator
decorator是個(gè)油漆工,給你的東東的外表刷上美麗的顏色.
設(shè)計(jì)模式之Bridge
將”牛郎織女“分開(本應(yīng)在一起,分開他們,形成兩個(gè)接口),在他們之間搭建一個(gè)橋(動態(tài)的結(jié)合)
設(shè)計(jì)模式之Flyweight
提供Java運(yùn)行性能,降低小而大量重復(fù)的類的開銷.
C.行為模式
設(shè)計(jì)模式之Template
實(shí)際上向你介紹了為什么要使用Java 抽象類,該模式原理簡單,使用很普遍.
設(shè)計(jì)模式之Memento
很簡單一個(gè)模式,就是在內(nèi)存中保留原來數(shù)據(jù)的拷貝.
設(shè)計(jì)模式之Observer
介紹如何使用Java API提供的現(xiàn)成Observer
設(shè)計(jì)模式之Chain of Responsibility
各司其職的類串成一串,好象擊鼓傳花,當(dāng)然如果自己能完成,就不要推委給下一個(gè).
設(shè)計(jì)模式之Command
什么是將行為封裝,Command是最好的說明.
設(shè)計(jì)模式之State
狀態(tài)是編程中經(jīng)常碰到的實(shí)例,將狀態(tài)對象化,設(shè)立狀態(tài)變換器,便可在狀態(tài)中輕松切換.
設(shè)計(jì)模式之Strategy
不同算法各自封裝,用戶端可隨意挑選需要的算法.
設(shè)計(jì)模式之Mediator
Mediator很象十字路口的紅綠燈,每個(gè)車輛只需和紅綠燈交互就可以.
設(shè)計(jì)模式之Interpreter
主要用來對語言的分析,應(yīng)用機(jī)會不多.
設(shè)計(jì)模式之Visitor
訪問者在進(jìn)行訪問時(shí),完成一系列實(shí)質(zhì)性操作,而且還可以擴(kuò)展.
設(shè)計(jì)模式之Iterator
這個(gè)模式已經(jīng)被整合入Java的Collection.在大多數(shù)場合下無需自己制造一個(gè)Iterator,只要將對象裝入Collection中,直接使用Iterator進(jìn)行對象遍歷。
6)請說一下MVC架構(gòu)(瞬聯(lián),IBM,aspenTech)
Model:模型層
view:視圖層
Controller:控制層
MVC (Modal View Controler)本來是存在于Desktop程序中的,M是指數(shù)據(jù)模型,V是指用戶界面,C則是控制器。使用MVC的目的是將M和V的實(shí)現(xiàn)代碼分離,從而使同一個(gè)程序可以使用不同的表現(xiàn)形式。比如一批統(tǒng)計(jì)數(shù)據(jù)你可以分別用柱狀圖、餅圖來表示。C存在的目的則是確保M和V的同步,一旦M改變,V應(yīng)該同步更新。
模型-視圖-控制器(MVC)是Xerox PARC在八十年代為編程語言Smalltalk-80發(fā)明的一種軟件設(shè)計(jì)模式,至今已被廣泛使用。最近幾年被推薦為Sun公司J2EE平臺的設(shè)計(jì)模式,并且受到越來越多的使用 ColdFusion 和 PHP 的開發(fā)者的歡迎。模型-視圖-控制器模式是一個(gè)有用的工具箱,它有很多好處,但也有一些缺點(diǎn)。
MVC如何工作
MVC是一個(gè)設(shè)計(jì)模式,它強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開。使用MVC應(yīng)用程序被分成三個(gè)核心部件:模型、視圖、控制器。它們各自處理自己的任務(wù)。
視圖
視圖是用戶看到并與之交互的界面。對老式的Web應(yīng)用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應(yīng)用程序中,HTML依舊在視圖中扮演著重要的角色,但一些新的技術(shù)已層出不窮,它們包括Macromedia Flash和象XHTML,XML/XSL,WML等一些標(biāo)識語言和Web services.
如何處理應(yīng)用程序的界面變得越來越有挑戰(zhàn)性。MVC一個(gè)大的好處是它能為你的應(yīng)用程序處理很多不同的視圖。在視圖中其實(shí)沒有真正的處理發(fā)生,不管這些數(shù)據(jù)是聯(lián)機(jī)存儲的還是一個(gè)雇員列表,作為視圖來講,它只是作為一種輸出數(shù)據(jù)并允許用戶操縱的方式。
模型
模型表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個(gè)部件中,模型擁有最多的處理任務(wù)。例如它可能用象EJBs和ColdFusion Components這樣的構(gòu)件對象來處理數(shù)據(jù)庫。被模型返回的數(shù)據(jù)是中立的,就是說模型與數(shù)據(jù)格式無關(guān),這樣一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫一次就可以被多個(gè)視圖重用,所以減少了代碼的重復(fù)性。
控制器
控制器接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求。所以當(dāng)單擊Web頁面中的超鏈接和發(fā)送HTML表單時(shí),控制器本身不輸出任何東西和做任何處理。它只是接收請求并決定調(diào)用哪個(gè)模型構(gòu)件去處理請求,然后用確定用哪個(gè)視圖來顯示模型處理返回的數(shù)據(jù)。
現(xiàn)在我們總結(jié)MVC的處理過程,首先控制器接收用戶的請求,并決定應(yīng)該調(diào)用哪個(gè)模型來進(jìn)行處理,然后模型用業(yè)務(wù)邏輯來處理用戶的請求并返回?cái)?shù)據(jù),最后控制器用相應(yīng)的視圖格式化模型返回的數(shù)據(jù),并通過表示層呈現(xiàn)給用戶。
為什么要使用 MVC
大部分Web應(yīng)用程序都是用像ASP,PHP,或者CFML這樣的過程化語言來創(chuàng)建的。它們將像數(shù)據(jù)庫查詢語句這樣的數(shù)據(jù)層代碼和像HTML這樣的表示層代碼混在一起。經(jīng)驗(yàn)比較豐富的開發(fā)者會將數(shù)據(jù)從表示層分離開來,但這通常不是很容易做到的,它需要精心的計(jì)劃和不斷的嘗試。MVC從根本上強(qiáng)制性的將它們分開。盡管構(gòu)造MVC應(yīng)用程序需要一些額外的工作,但是它給我們帶來的好處是無庸質(zhì)疑的。
首先,最重要的一點(diǎn)是多個(gè)視圖能共享一個(gè)模型,正如我所提及的,現(xiàn)在需要用越來越多的方式來訪問你的應(yīng)用程序。對此,其中一個(gè)解決之道是使用MVC,無論你的用戶想要Flash界面或是 WAP 界面;用一個(gè)模型就能處理它們。由于你已經(jīng)將數(shù)據(jù)和業(yè)務(wù)規(guī)則從表示層分開,所以你可以最大化的重用你的代碼了。
由于模型返回的數(shù)據(jù)沒有進(jìn)行格式化,所以同樣的構(gòu)件能被不同界面使用。例如,很多數(shù)據(jù)可能用HTML來表示,但是它們也有可能要用Macromedia Flash和WAP來表示。模型也有狀態(tài)管理和數(shù)據(jù)持久性處理的功能,例如,基于會話的購物車和電子商務(wù)過程也能被Flash網(wǎng)站或者無線聯(lián)網(wǎng)的應(yīng)用程序所重用。
因?yàn)槟P褪亲园模⑶遗c控制器和視圖相分離,所以很容易改變你的應(yīng)用程序的數(shù)據(jù)層和業(yè)務(wù)規(guī)則。如果你想把你的數(shù)據(jù)庫從MySQL移植到Oracle,或者改變你的基于RDBMS數(shù)據(jù)源到LDAP,只需改變你的模型即可。一旦你正確的實(shí)現(xiàn)了模型,不管你的數(shù)據(jù)來自數(shù)據(jù)庫或是LDAP服務(wù)器,視圖將會正確的顯示它們。由于運(yùn)用MVC的應(yīng)用程序的三個(gè)部件是相互對立,改變其中一個(gè)不會影響其它兩個(gè),所以依據(jù)這種設(shè)計(jì)思想你能構(gòu)造良好的松偶合的構(gòu)件。
對我來說,控制器的也提供了一個(gè)好處,就是可以使用控制器來聯(lián)接不同的模型和視圖去完成用戶的需求,這樣控制器可以為構(gòu)造應(yīng)用程序提供強(qiáng)有力的手段。給定一些可重用的模型和視圖,控制器可以根據(jù)用戶的需求選擇模型進(jìn)行處理,然后選擇視圖將處理結(jié)果顯示給用戶。
MVC的缺點(diǎn)
MVC的缺點(diǎn)是由于它沒有明確的定義,所以完全理解MVC并不是很容易。使用MVC需要精心的計(jì)劃,由于它的內(nèi)部原理比較復(fù)雜,所以需要花費(fèi)一些時(shí)間去思考。
你將不得不花費(fèi)相當(dāng)可觀的時(shí)間去考慮如何將MVC運(yùn)用到你的應(yīng)用程序,同時(shí)由于模型和視圖要嚴(yán)格的分離,這樣也給調(diào)試應(yīng)用程序到來了一定的困難。每個(gè)構(gòu)件在使用之前都需要經(jīng)過徹底的測試。一旦你的構(gòu)件經(jīng)過了測試,你就可以毫無顧忌的重用它們了。
根據(jù)我個(gè)人經(jīng)驗(yàn),由于我們將一個(gè)應(yīng)用程序分成了三個(gè)部件,所以使用MVC同時(shí)也意味著你將要管理比以前更多的文件,這一點(diǎn)是顯而易見的。這樣好像我們的工作量增加了,但是請記住這比起它所能帶給我們的好處是不值一提。
MVC并不適合小型甚至中等規(guī)模的應(yīng)用程序,花費(fèi)大量時(shí)間將MVC應(yīng)用到規(guī)模并不是很大的應(yīng)用程序通常會得不償失。
MVC是一條創(chuàng)建軟件的好途徑
MVC設(shè)計(jì)模式是一個(gè)很好創(chuàng)建軟件的途徑,它所提倡的一些原則,像內(nèi)容和顯示互相分離可能比較好理解。但是如果你要隔離模型、視圖和控制器的構(gòu)件,你可能需要重新思考你的應(yīng)用程序,尤其是應(yīng)用程序的構(gòu)架方面。如果你肯接受MVC,并且有能力應(yīng)付它所帶來的額外的工作和復(fù)雜性,MVC將會使你的軟件在健壯性,代碼重用和結(jié)構(gòu)方面上一個(gè)新的臺階。
7)如果類a繼承類b,實(shí)現(xiàn)接口c,而類b和接口c中定義了同名變量,請問會出現(xiàn)什么問題?(瞬聯(lián))
interface A
{
int x = 0;
}
Class B
{
int x =1;
}
Class C extends B implements A
{
public void pX()
{
system.out.println(x);
}
public static void main(String[] args) {
New C().pX();
}
}
答案:錯(cuò)誤。在編譯時(shí)會發(fā)生錯(cuò)誤(錯(cuò)誤描述不同的JVM有不同的信息,意思就是未明確的x調(diào)用,兩個(gè)x都匹配(就象在同時(shí)import java.util和java.sql兩個(gè)包時(shí)直接聲明Date一樣)。對于父類的變量,可以用super.x來明確(輸出的是1),而接口的屬性默認(rèn)隱含為 public static final.所以可以通過A.x來明確(輸出的是0)。
下面的代碼運(yùn)行時(shí)會不會報(bào)錯(cuò)
interface Playable
{
void play();
}
interface Bounceable
{
void play();
}
interface Rollable extends Playable, Bounceable
{
ball ball = new Ball(”PingPang“);
}
Class Ball implements Rollable
{
private String name;
public String getName()
{
return name;
}
public Ball(String name)
{
this.name = name;
}
public void play()
{
ball = new Ball(”Football“);
system.out.println(ball.getName());
}
}
答案: 錯(cuò)?!眎nterface Rollable extends Playable, Bounceable“沒有問題。interface可繼承多個(gè)interfaces,所以這里沒錯(cuò)。問題出在interface Rollable里的”Ball ball = new Ball(“PingPang”);“。任何在interface里聲明的interface variable (接口變量,也可稱成員變量),默認(rèn)為public static final。也就是說”Ball ball = new Ball(“PingPang”);“實(shí)際上是”public static final Ball ball = new Ball(“PingPang”);“。在Ball類的Play()方法中,”ball = new Ball(“Football”);“改變了ball的reference,而這里的ball來自Rollable interface,Rollable interface里的ball是public static final的,final的object是不能被改變r(jià)eference的。因此編譯器將在”ball = new Ball(“Football”);“這里顯示有錯(cuò)。
8)請說一下java中為什么要引入內(nèi)部類?還有匿名內(nèi)部類?(瞬聯(lián),IBM)
9)請說一下final,finally和finalize的區(qū)別?(瞬聯(lián))
Final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
Finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。
Finalize是Object類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會調(diào)用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時(shí)的其他資源回收,例如關(guān)閉文件等。
10)請說一下HTTP請求的基本過程(IBM)
11)java中存在內(nèi)存泄漏問題嗎?請舉例說明?(IBM)
會
int i,i2; return (i-i2); //when i為足夠大的正數(shù),i2為足夠大的負(fù)數(shù)。結(jié)果會造成溢位,導(dǎo)致錯(cuò)誤。
12)請說一下java中的內(nèi)存回收機(jī)制所采用的算法(IBM,瞬聯(lián))
雖然垃圾回收關(guān)心著大部分的問題,包括內(nèi)存管理,使得程序員的任務(wù)顯得更加輕松,但是程序員還是可能犯些錯(cuò)誤導(dǎo)致內(nèi)存泄漏問題。GC(垃圾回收)通過遞歸對所有從“根”對象(堆棧中的對象,靜態(tài)數(shù)據(jù)成員,JNI句柄等等)繼承下來的引用進(jìn)行工作,然后標(biāo)記所有可以訪問的活動著的對象。而這些對象變成了程序唯一能夠操縱的對象,其他的對象都被釋放了。因?yàn)镚C使得程序不能夠訪問那些被釋放的對象,所以這樣做是安全的。
阿里巴巴面試題java9篇相關(guān)文章: