中軟國(guó)際面試筆試真題
中軟國(guó)際有限公司是國(guó)內(nèi)大型綜合性軟件與信息服務(wù)企業(yè),具有極高的市場(chǎng)感召力和客戶(hù)忠誠(chéng)度,以領(lǐng)先的技術(shù)、豐富的經(jīng)驗(yàn)、精湛的服務(wù)在中國(guó) IT 行業(yè)享有極高的聲譽(yù)。下面就由學(xué)習(xí)啦小編為大家介紹一下中軟國(guó)際面試筆試真題的文章,歡迎閱讀。
中軟國(guó)際面試筆試真題篇1
1、 GC是什么? 為什么要有GC?
GC是垃圾收集的意思(Gabage Collection),內(nèi)存處理是編程人員容易出現(xiàn)問(wèn)題的地方,忘記或者錯(cuò)誤的內(nèi)存回收會(huì)導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java提供的GC功能可以自動(dòng)監(jiān)測(cè)對(duì)象是否超過(guò)作用域從而達(dá)到自動(dòng)回收內(nèi)存的目的,Java語(yǔ)言沒(méi)有提供釋放已分配內(nèi)存的顯示操作方法。
2、接口是否可繼承接口? 抽象類(lèi)是否可實(shí)現(xiàn)(implements)接口? 抽象類(lèi)是否可繼承實(shí)體類(lèi)
(concrete class)?
接口可以繼承接口。抽象類(lèi)可以實(shí)現(xiàn)(implements)接口,抽象類(lèi)是否可繼承實(shí)體類(lèi),但前提是實(shí)體類(lèi)必須有明確的構(gòu)造函數(shù)。
3、 Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類(lèi)型?
方法的重寫(xiě)Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫(xiě)Overriding是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類(lèi)中多態(tài)性的一種表現(xiàn)。如果在子類(lèi)中定義某方法與其父類(lèi)有相同的名稱(chēng)和參數(shù),我們說(shuō)該方法被重寫(xiě) (Overriding)。子類(lèi)的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類(lèi)中的定義,對(duì)它而言,父類(lèi)中的定義如同被"屏蔽"了。如果在一個(gè)類(lèi)中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類(lèi)型,則稱(chēng)為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類(lèi)型。
4 、sleep() 和wait() 有什么區(qū)別?
sleep是線(xiàn)程類(lèi)(Thread)的方法,導(dǎo)致此線(xiàn)程暫停執(zhí)行指定時(shí)間,給執(zhí)行機(jī)會(huì)給其他線(xiàn)程,但是監(jiān)控狀態(tài)依然保持,到時(shí)后會(huì)自動(dòng)恢復(fù)。調(diào)用sleep不會(huì)釋放對(duì)象鎖。wait是Object類(lèi)的方法,對(duì)此對(duì)象調(diào)用wait方法導(dǎo)致本線(xiàn)程放棄對(duì)象鎖,進(jìn)入等待此對(duì)象的等待鎖定池,只有針對(duì)此對(duì)象發(fā)出notify方法(或notifyAll)后本線(xiàn)程才進(jìn)入對(duì)象鎖定池準(zhǔn)備獲得對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。
5、 final, finally, finalize的區(qū)別。
final 用于聲明屬性,方法和類(lèi),分別表示屬性不可變,方法不可覆蓋,類(lèi)不可繼承。 finally是異常處理語(yǔ)句結(jié)構(gòu)的一部分,表示總是執(zhí)行。 finalize是Object類(lèi)的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法,可以覆蓋此方法提供垃圾收集時(shí)的其他資源回收,例如關(guān)閉文件等。
中軟國(guó)際面試筆試真題篇2
1、HashMap和Hashtable的區(qū)別。
HashMap是Hashtable的輕量級(jí)實(shí)現(xiàn)(非線(xiàn)程安全的實(shí)現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線(xiàn)程安全,效率上可能高于Hashtable。 HashMap允許將null作為一個(gè)entry的key或者value,而Hashtable不允許。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因?yàn)閏ontains方法容易讓人引起誤解。 Hashtable繼承自Dictionary類(lèi),而HashMap是Java1.2引進(jìn)的Map interface的一個(gè)實(shí)現(xiàn)。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個(gè)線(xiàn)程訪(fǎng)問(wèn)Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap 就必須為之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會(huì)有很大的差異。
2、&和&&的區(qū)別。
&是位運(yùn)算符,表示按位與運(yùn)算,&&是邏輯運(yùn)算符,表示邏輯與(and)。
3、Set 里的元素是不能重復(fù)的,那么用什么方法來(lái)區(qū)分重復(fù)與否呢? 是用==還
是equals()? 它們有何區(qū)別?
Set 里的元素是不能重復(fù)的,用equals ()方法來(lái)區(qū)分重復(fù)與否。覆蓋
equals()方法用來(lái)判斷對(duì)象的內(nèi)容是否相同,而”==”判斷地址是否相等,用來(lái)
決定引用值是否指向同一對(duì)象。
中軟國(guó)際面試筆試真題篇3
什么是內(nèi)部類(lèi)?
內(nèi)部類(lèi)就是在一個(gè)類(lèi)的內(nèi)部定義的類(lèi),內(nèi)部類(lèi)中不能定義靜態(tài)成員(我想可能是既然靜態(tài)成員類(lèi)似c語(yǔ)言的全局變量,而內(nèi)部類(lèi)通常是用于創(chuàng)建內(nèi)部對(duì)象用的,所以,把“全局變量”放在內(nèi)部類(lèi)中就是毫無(wú)意義的事情,既然是毫無(wú)意義的事情,就應(yīng)該被禁止),內(nèi)部類(lèi)可以直接訪(fǎng)問(wèn)外部類(lèi)中的成員變量,內(nèi)部類(lèi)可以定義在外部類(lèi)的方法外面,也可以定義在外部類(lèi)的方法體中,如下所示:
public class Outer
{
int out_x = 0;
public void method()
{
Inner1 inner1 = new Inner1();
class Inner2 //在方法體內(nèi)部定義的內(nèi)部類(lèi)
{
public method()
{
out_x = 3;
}
}
Inner2 inner2 = new Inner2();
}
public class Inner1 //在方法體外面定義的內(nèi)部類(lèi)
{
}
}
在方法體外面定義的內(nèi)部類(lèi)的訪(fǎng)問(wèn)類(lèi)型可以是public,protecte,默認(rèn)的,private等4種類(lèi)型,這就好像類(lèi)中定義的成員變量有4種訪(fǎng)問(wèn)類(lèi)型一樣,它們決定這個(gè)內(nèi)部類(lèi)的定義對(duì)其他類(lèi)是否可見(jiàn);對(duì)于這種情況,我們也可以在外面創(chuàng)建內(nèi)部類(lèi)的實(shí)例對(duì)象,創(chuàng)建內(nèi)部類(lèi)的實(shí)例對(duì)象時(shí),一定要先創(chuàng)建外部類(lèi)的實(shí)例對(duì)象,然后用這個(gè)外部類(lèi)的實(shí)例對(duì)象去創(chuàng)建內(nèi)部類(lèi)的實(shí)例對(duì)象,代碼如下:
Outer outer = new Outer();
Outer.Inner1 inner1 = outer.new Innner1();
在方法內(nèi)部定義的內(nèi)部類(lèi)前面不能有訪(fǎng)問(wèn)類(lèi)型修飾符,就好像方法中定義的局部變量一樣,但這種內(nèi)部類(lèi)的前面可以使用final或abstract修飾符。這種內(nèi)部類(lèi)對(duì)其他類(lèi)是不可見(jiàn)的其他類(lèi)無(wú)法引用這種內(nèi)部類(lèi),但是這種內(nèi)部類(lèi)創(chuàng)建的實(shí)例對(duì)象可以傳遞給其他類(lèi)訪(fǎng)問(wèn)。這種內(nèi)部類(lèi)必須是先定義,后使用,即內(nèi)部類(lèi)的定義代碼必須出現(xiàn)在使用該類(lèi)之前,這與方法中的局部變量必須先定義后使用的道理也是一樣的。這種內(nèi)部類(lèi)可以訪(fǎng)問(wèn)方法體中的局部變量,但是,該局部變量前必須加final修飾符。
對(duì)于這些細(xì)節(jié),只要在eclipse寫(xiě)代碼試試,根據(jù)開(kāi)發(fā)工具提示的各類(lèi)錯(cuò)誤信息就可以馬上了解到。
在方法外部定義的內(nèi)部類(lèi)前面可以加上static關(guān)鍵字,從而成為靜態(tài)內(nèi)部類(lèi),或者叫Static Nested Class。Static Nested Class與普通類(lèi)在運(yùn)行時(shí)的行為和功能上沒(méi)有什么區(qū)別,只是在編程引用時(shí)的語(yǔ)法上有一些差別,它可以定義成public、protected、默認(rèn)的、private等多種類(lèi)型,而普通類(lèi)只能定義成public和默認(rèn)的這兩種類(lèi)型。在外面引用Static Nested Class類(lèi)的名稱(chēng)為“外部類(lèi)名.內(nèi)部類(lèi)名”。在外面不需要?jiǎng)?chuàng)建外部類(lèi)的實(shí)例對(duì)象,就可以直接創(chuàng)建Static Nested Class,例如,假設(shè)Inner是定義在Outer類(lèi)中的Static Nested Class,那么可以使用如下語(yǔ)句創(chuàng)建Inner類(lèi):
Outer.Inner inner = new Outer.Inner();
由于static Nested Class不依賴(lài)于外部類(lèi)的實(shí)例對(duì)象,所以,static Nested Class能訪(fǎng)問(wèn)外部類(lèi)的非static成員變量。當(dāng)在外部類(lèi)中訪(fǎng)問(wèn)Static Nested Class時(shí),可以直接使用Static Nested Class的名字,而不需要加上外部類(lèi)的名字了,在Static Nested Class中也可以直接引用外部類(lèi)的static的成員變量,不需要加上外部類(lèi)的名字。
最后,在方法體內(nèi)部還可以采用如下語(yǔ)法來(lái)創(chuàng)建一種匿名內(nèi)部類(lèi),即定義某一接口或類(lèi)的子類(lèi)的同時(shí),還創(chuàng)建了該子類(lèi)的實(shí)例對(duì)象,無(wú)需為該子類(lèi)定義名稱(chēng):
public class Outer
{
public void start()
{
new Thread(
new Runable(){
public void run(){};
}
).start();
}
}