1、一個(gè)".java"源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制? 可以有多個(gè)類,但只能有一個(gè)public的類,并且public的類名必須與文件名相一致。 2、Java有沒(méi)有g(shù)oto? java中的保留字,現(xiàn)在沒(méi)有在java中使用。 3、說(shuō)說(shuō)&和&&的區(qū)別。 &和&&都可以用作邏輯與的運(yùn)算符,表示邏輯與(and),當(dāng)運(yùn)算符兩邊的表達(dá)式的結(jié)果都為true時(shí),整個(gè)運(yùn)算結(jié)果才為true,否則,只要有一方為false,則結(jié)果為false。 &&還具有短路的功能,即如果第一個(gè)表達(dá)式為false,則不再計(jì)算第二個(gè)表達(dá)式,例如,對(duì)于if(str != null && !str.equals(“”))表達(dá)式,當(dāng)str為null時(shí),后面的表達(dá)式不會(huì)執(zhí)行,所以不會(huì)出現(xiàn)NullPointerException如果將&&改為&,則會(huì)拋出NullPointerException異常。If(x==33 & ++y>0) y會(huì)增長(zhǎng),If(x==33 && ++y>0)不會(huì)增長(zhǎng) &還可以用作位運(yùn)算符,當(dāng)&操作符兩邊的表達(dá)式不是boolean類型時(shí),&表示按位與操作,我們通常使用0x0f來(lái)與一個(gè)整數(shù)進(jìn)行&運(yùn)算,來(lái)獲取該整數(shù)的最低4個(gè)bit位,例如,0x31 & 0x0f的結(jié)果為0x01。 備注:這道題先說(shuō)兩者的共同點(diǎn),再說(shuō)出&&和&的特殊之處,并列舉一些經(jīng)典的例子來(lái)表明自己理解透徹深入、實(shí)際經(jīng)驗(yàn)豐富。 4、在JAVA中如何跳出當(dāng)前的多重嵌套循環(huán)? 在Java中,要想跳出多重循環(huán),可以在外面的循環(huán)語(yǔ)句前定義一個(gè)標(biāo)號(hào),然后在里層循環(huán)體的代碼中使用帶有標(biāo)號(hào)的break 語(yǔ)句,即可跳出外層循環(huán)。例如, ok: for(int i=0;i<10;i++) { for(int j=0;j<10;j++) { System.out.println(“i=” + i + “,j=” + j); if(j == 5) break ok; } } 另外,我個(gè)人通常并不使用標(biāo)號(hào)這種方式,而是讓外層的循環(huán)條件表達(dá)式的結(jié)果可以受到里層循環(huán)體代碼的控制,例如,要在二維數(shù)組中查找到某個(gè)數(shù)字。 int arr[][] = {{1,2,3},{4,5,6,7},{9}}; boolean found = false; for(int i=0;i other.age?1:age== other.age?0:-1; } } class MyTreeSet { private ArrayList datas = new ArrayList(); public void add(Object obj){ for(int i=0;i“zxx,male,28,30000”?Person,既然大家都要這么干,并且沒(méi)有個(gè)統(tǒng)一的干法,于是,sun公司就提出一種統(tǒng)一的解決方案,它會(huì)把對(duì)象變成某個(gè)格式進(jìn)行輸入和輸出,這種格式對(duì)程序員來(lái)說(shuō)是透明(transparent)的,但是,我們的某個(gè)類要想能被sun的這種方案處理,必須實(shí)現(xiàn)Serializable接口。 ObjectOutputStream.writeObject(obj); Object obj = ObjectInputStream.readObject(); 假設(shè)兩年前我保存了某個(gè)類的一個(gè)對(duì)象,這兩年來(lái),我修改該類,刪除了某個(gè)屬性和增加了另外一個(gè)屬性,兩年后,我又去讀取那個(gè)保存的對(duì)象,或有什么結(jié)果?未知!sun的jdk就會(huì)蒙了。為此,一個(gè)解決辦法就是在類中增加版本后,每一次類的屬性修改,都應(yīng)該把版本號(hào)升級(jí)一下,這樣,在讀取時(shí),比較存儲(chǔ)對(duì)象時(shí)的版本號(hào)與當(dāng)前類的版本號(hào),如果不一致,則直接報(bào)版本號(hào)不同的錯(cuò)! 9.hashCode方法的作用?說(shuō) (網(wǎng)友提供的一段,待改進(jìn):hashcode這個(gè)方法是用來(lái)鑒定2個(gè)對(duì)象是否相等的。那你會(huì)說(shuō),不是還有equals這個(gè)方法嗎?不錯(cuò),這2個(gè)方法都是用來(lái)判斷2個(gè)對(duì)象是否相等的。但是他們是有區(qū)別的。一般來(lái)講,equals這個(gè)方法是給用戶調(diào)用的,如果你想判斷2個(gè)對(duì)象是否相等,你可以重寫equals方法,然后在代碼中調(diào)用,就可以判斷他們是否相等了。簡(jiǎn)單來(lái)講,equals方法主要是用來(lái)判斷從表面上看或者從內(nèi)容上看,2個(gè)對(duì)象是不是相等。舉個(gè)例子,有個(gè)學(xué)生類,屬性只有姓名和性別,那么我們可以認(rèn)為只要姓名和性別相等,那么就說(shuō)這2個(gè)對(duì)象是相等的。 hashcode方法一般用戶不會(huì)去調(diào)用,比如在hashmap中,由于key是不可以重復(fù)的,他在判斷key是不是重復(fù)的時(shí)候就判斷了hashcode這個(gè)方法,而且也用到了equals方法。這里不可以重復(fù)是說(shuō)equals和hashcode只要有一個(gè)不等就可以了!所以簡(jiǎn)單來(lái)講,hashcode相當(dāng)于是一個(gè)對(duì)象的編碼,就好像文件中的md5,他和equals不同就在于他返回的是int型的,比較起來(lái)不直觀。我們一般在覆蓋equals的同時(shí)也要覆蓋hashcode,讓他們的邏輯一致。舉個(gè)例子,還是剛剛的例子,如果姓名和性別相等就算2個(gè)對(duì)象相等的話,那么hashcode的方法也要返回姓名的hashcode值加上性別的hashcode值,這樣從邏輯上,他們就一致了。要從物理上判斷2個(gè)對(duì)象是否相等,用==就可以了。) 10.webservice問(wèn)得很多 11.設(shè)計(jì)出計(jì)算任意正整數(shù)的階層。 4.在oracle數(shù)據(jù)庫(kù)中需要查詢出前8條記錄的sql語(yǔ)句怎么寫? 5.什么是SOA,談?wù)勀愕腟OA的理解。service orientied architecture 6.如何實(shí)現(xiàn)線程間的通訊。 新題目:編程:1.編寫一個(gè)函數(shù)將一個(gè)十六進(jìn)制數(shù)的字符串參數(shù)轉(zhuǎn)換成整數(shù)返回。 String str = “13abf”; int len = str.length; int sum = 0; for(int i=0;i 78,"def" ---> 62,"xyz" ---> 65在hashSet中的存儲(chǔ)順序不是62,65,78,這些問(wèn)題感謝以前一個(gè)叫崔健的學(xué)員提出,最后通過(guò)查看源代碼給他解釋清楚,看本次培訓(xùn)學(xué)員當(dāng)中有多少能看懂源碼。LinkedHashSet按插入的順序存儲(chǔ),那被存儲(chǔ)對(duì)象的hashcode方法還有什么作用呢?學(xué)員想想!hashset集合比較兩個(gè)對(duì)象是否相等,首先看hashcode方法是否相等,然后看equals方法是否相等。new 兩個(gè)Student插入到HashSet中,看HashSet的size,實(shí)現(xiàn)hashcode和equals方法后再看size。 同一個(gè)對(duì)象可以在Vector中加入多次。往集合里面加元素,相當(dāng)于集合里用一根繩子連接到了目標(biāo)對(duì)象。往HashSet中卻加不了多次的。 7、說(shuō)出ArrayList,Vector, LinkedList的存儲(chǔ)性能和特性 ArrayList和Vector都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號(hào)索引元素,但是插入元素要涉及數(shù)組元素移動(dòng)等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實(shí)現(xiàn)存儲(chǔ),按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。 LinkedList也是線程不安全的,LinkedList提供了一些方法,使得LinkedList可以被當(dāng)作堆棧和隊(duì)列來(lái)使用。 4、去掉一個(gè)Vector集合中重復(fù)的元素 Vector newVector = new Vector(); For (int i=0;io1.age?1:age |
|