大型互聯(lián)網(wǎng)常見(jiàn)Java企業(yè)面試題

大型互聯(lián)網(wǎng)常見(jiàn)Java企業(yè)面試題

天津卓眾教育      2022-04-08 03:07:01     20

大型互聯(lián)網(wǎng)常見(jiàn)Java企業(yè)面試題,  本篇由學(xué)員們根據(jù)自己參加過(guò)的面試回憶、總結(jié)而成,一線互聯(lián)網(wǎng)企業(yè)常見(jiàn)的Java面試題,包括各大互聯(lián)網(wǎng)企業(yè)、創(chuàng)業(yè)小公司,互聯(lián)

課程價(jià)格 請(qǐng)咨詢(xún)

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

 

    本篇由學(xué)員們根據(jù)自己參加過(guò)的面試回憶、總結(jié)而成,一線互聯(lián)網(wǎng)企業(yè)常見(jiàn)的Java面試題,包括各大互聯(lián)網(wǎng)企業(yè)、創(chuàng)業(yè)小公司,互聯(lián)網(wǎng)企業(yè)、傳統(tǒng)軟件公司。對(duì)于剛畢業(yè)和想要跳槽的同學(xué)們,再適用不過(guò)啦,趕緊拿起小本本記下來(lái),下次面試就可以用上啦~

1、是否可以從一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的調(diào)用?

  不可以。因?yàn)榉莝tatic方法是要與對(duì)象關(guān)聯(lián)在一起的,必須創(chuàng)建一個(gè)對(duì)象后,才可以在該對(duì)象上進(jìn)行方法調(diào)用,而static方法調(diào)用時(shí)不需要?jiǎng)?chuàng)建對(duì)象,可以直接調(diào)用。也就是說(shuō),當(dāng)一個(gè)static方法被調(diào)用時(shí),可能還沒(méi)有創(chuàng)建任何實(shí)例對(duì)象,如果從一個(gè)static方法中發(fā)出對(duì)非static方法的調(diào)用,那個(gè)非static方法是關(guān)聯(lián)到哪個(gè)對(duì)象上的呢?這個(gè)邏輯無(wú)法成立,所以,一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的調(diào)用。

2、Integer與int的區(qū)別

int是java提供的8種原始數(shù)據(jù)類(lèi)型之一。Java為每個(gè)原始類(lèi)型提供了封裝類(lèi),Integer是java為int提供的封裝類(lèi)。int的默認(rèn)值為0,而Integer的默認(rèn)值為null,即Integer可以區(qū)分出未賦值和值為0的區(qū)別,int則無(wú)法表達(dá)出未賦值的情況。

  例如:要想表達(dá)出沒(méi)有參加考試和考試成績(jī)?yōu)?的區(qū)別,則只能使用Integer。在JSP開(kāi)發(fā)中,Integer的默認(rèn)為null,所以用el表達(dá)式在文本框中顯示時(shí),值為空白字符串,而int默認(rèn)的默認(rèn)值為0,所以用el表達(dá)式在文本框中顯示時(shí),結(jié)果為0,所以,int不適合作為web層的表單數(shù)據(jù)的類(lèi)型。

  在Hibernate中,如果將OID定義為Integer類(lèi)型,那么Hibernate就可以根據(jù)其值是否為null而判斷一個(gè)對(duì)象是否是臨時(shí)的,如果將OID定義為了int類(lèi)型,還需要在hbm映射文件中設(shè)置其unsaved-value屬性為0。

  另外,Integer提供了多個(gè)與整數(shù)相關(guān)的操作方法,例如,將一個(gè)字符串轉(zhuǎn)換成整數(shù),Integer中還定義了表示整數(shù)的最大值和最小值的常量。

3、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?

Math類(lèi)中提供了三個(gè)與取整有關(guān)的方法:ceil、floor、round,這些方法的作用與它們的英文名稱(chēng)的含義相對(duì)應(yīng)。

  例如,ceil的英文意義是天花板,該方法就表示向上取整,Math.ceil(11.3)的結(jié)果為12,Math.ceil(-11.3)的結(jié)果是-11;floor的英文意義是地板,該方法就表示向下取整,Math.ceil(11.6)的結(jié)果為11,Math.ceil(-11.6)的結(jié)果是-12;最難掌握的是round方法,它表示“四舍五入”,算法為Math.floor(x+0.5),即將原來(lái)的數(shù)字加上0.5后再向下取整,所以,Math.round(11.5)的結(jié)果為12,Math.round(-11.5)的結(jié)果為-11。

  這里有一些筆誤,floor的英文意義是地板,該方法就表示向下取整,Math.floor(11.6)的結(jié)果為11,Math.floor(-11.6)的結(jié)果是-12;

4、Overload和Override的區(qū)別?Overloaded的方法是否可以改變返回值的類(lèi)型?

Overload是重載的意思,Override是覆蓋的意思,也就是重寫(xiě)。

  重載Overload表示同一個(gè)類(lèi)中可以有多個(gè)名稱(chēng)相同的方法,但這些方法的參數(shù)列表各不相同(即參數(shù)個(gè)數(shù)或類(lèi)型不同)。

  重寫(xiě)Override表示子類(lèi)中的方法可以與父類(lèi)中的某個(gè)方法的名稱(chēng)和參數(shù)完全相同,通過(guò)子類(lèi)創(chuàng)建的實(shí)例對(duì)象調(diào)用這個(gè)方法時(shí),將調(diào)用子類(lèi)中的定義方法,這相當(dāng)于把父類(lèi)中定義的那個(gè)完全相同的方法給覆蓋了,這也是面向?qū)ο缶幊痰亩鄳B(tài)性的一種表現(xiàn)。子類(lèi)覆蓋父類(lèi)的方法時(shí),只能比父類(lèi)拋出更少的異常,或者是拋出父類(lèi)拋出的異常的子異常,因?yàn)樽宇?lèi)可以解決父類(lèi)的一些問(wèn)題,不能比父類(lèi)有更多的問(wèn)題。子類(lèi)方法的訪問(wèn)權(quán)限只能比父類(lèi)的更大,不能更小。如果父類(lèi)的方法是private類(lèi)型,那么,子類(lèi)則不存在覆蓋的限制,相當(dāng)于子類(lèi)中增加了一個(gè)全新的方法。

  至于Overloaded的方法是否可以改變返回值的類(lèi)型這個(gè)問(wèn)題,要看你倒底想問(wèn)什么呢?這個(gè)題目很模糊。如果幾個(gè)Overloaded的方法的參數(shù)列表不一樣,它們的返回者類(lèi)型當(dāng)然也可以不一樣。但我估計(jì)你想問(wèn)的問(wèn)題是:如果兩個(gè)方法的參數(shù)列表完全一樣,是否可以讓它們的返回值不同來(lái)實(shí)現(xiàn)重載Overload。這是不行的,我們可以用反證法來(lái)說(shuō)明這個(gè)問(wèn)題,因?yàn)槲覀冇袝r(shí)候調(diào)用一個(gè)方法時(shí)也可以不定義返回結(jié)果變量,即不要關(guān)心其返回結(jié)果,例如,我們調(diào)用map.remove(key)方法時(shí),雖然remove方法有返回值,但是我們通常都不會(huì)定義接收返回結(jié)果的變量,這時(shí)候假設(shè)該類(lèi)中有兩個(gè)名稱(chēng)和參數(shù)列表完全相同的方法,僅僅是返回類(lèi)型不同,java就無(wú)法確定編程者倒底是想調(diào)用哪個(gè)方法了,因?yàn)樗鼰o(wú)法通過(guò)返回結(jié)果類(lèi)型來(lái)判斷。

override可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個(gè)方法并且對(duì)其重寫(xiě),以求達(dá)到不同的作用。對(duì)我們來(lái)說(shuō)最熟悉的覆蓋就是對(duì)接口方法的實(shí)現(xiàn),在接口中一般只是對(duì)方法進(jìn)行了聲明,而我們?cè)趯?shí)現(xiàn)時(shí),就需要實(shí)現(xiàn)接口聲明的所有方法。除了這個(gè)典型的用法以外,我們?cè)诶^承中也可能會(huì)在子類(lèi)覆蓋父類(lèi)中的方法。在覆蓋要注意以下的幾點(diǎn):

1、覆蓋的方法的標(biāo)志必須要和被覆蓋的方法的標(biāo)志完全匹配,才能達(dá)到覆蓋的效果;

2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;

3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類(lèi);

4、被覆蓋的方法不能為private,否則在其子類(lèi)中只是新定義了一個(gè)方法,并沒(méi)有對(duì)其進(jìn)行覆蓋。

Overload對(duì)我們來(lái)說(shuō)可能比較熟悉,可以翻譯為重載,它是指我們可以定義一些名稱(chēng)相同的方法,通過(guò)定義不同的輸入?yún)?shù)來(lái)區(qū)分這些方法,然后再調(diào)用時(shí),VM就會(huì)根據(jù)不同的參數(shù)樣式,來(lái)選擇合適的方法執(zhí)行。在使用重載要注意以下的幾點(diǎn):

1、在使用重載時(shí)只能通過(guò)不同的參數(shù)樣式。例如,不同的參數(shù)類(lèi)型,不同的參數(shù)個(gè)數(shù),不同的參數(shù)順序(當(dāng)然,同一方法內(nèi)的幾個(gè)參數(shù)類(lèi)型必須不一樣,例如可以是fun(int,float),但是不能為fun(int,int));

2、不能通過(guò)訪問(wèn)權(quán)限、返回類(lèi)型、拋出的異常進(jìn)行重載;

3、方法的異常類(lèi)型和數(shù)目不會(huì)對(duì)重載造成影響;

4、對(duì)于繼承來(lái)說(shuō),如果某一方法在父類(lèi)中是訪問(wèn)權(quán)限是priavte,那么就不能在子類(lèi)對(duì)其進(jìn)行重載,如果定義的話,也只是定義了一個(gè)新方法,而不會(huì)達(dá)到重載的效果。

5、接口是否可繼承接口?抽象類(lèi)是否可實(shí)現(xiàn)(implements)接口?抽象類(lèi)是否可繼承具體類(lèi)(concreteclass)?抽象類(lèi)中是否可以有靜態(tài)的main方法?

  接口可以繼承接口。抽象類(lèi)可以實(shí)現(xiàn)(implements)接口,抽象類(lèi)可以繼承具體類(lèi)。抽象類(lèi)中可以有靜態(tài)的main方法。

  備注:只要明白了接口和抽象類(lèi)的本質(zhì)和作用,這些問(wèn)題都很好回答,你想想,如果你是java語(yǔ)言的設(shè)計(jì)者,你是否會(huì)提供這樣的支持,如果不提供的話,有什么理由嗎?如果你沒(méi)有道理不提供,那答案就是肯定的了。

  只要記住抽象類(lèi)與普通類(lèi)的唯一區(qū)別就是不能創(chuàng)建實(shí)例對(duì)象和允許有abstract方法。

6、Java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?

7、abstractclass和interface語(yǔ)法上有什么區(qū)別?

8、abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized?

9、內(nèi)部類(lèi)可以引用它的包含類(lèi)的成員嗎?有沒(méi)有什么限制?

10、Strings="Hello";s=s+"world!";這兩行代碼執(zhí)行后,原始的String對(duì)象中的內(nèi)容到底變了沒(méi)有?

       以上就是天津卓眾教育Java培訓(xùn)機(jī)構(gòu)小編介紹的“大型互聯(lián)網(wǎng)常見(jiàn)Java企業(yè)面試題”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。

相關(guān)推薦

最新最全java面試題及答案(初級(jí)到高級(jí))

史上最全的中高級(jí)JAVA工程師面試題及答案匯總

Java高級(jí)開(kāi)發(fā)工程師面試題

2019史上最全java面試題題庫(kù)大全800題

哪有資深java工程師面試題

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過(guò)大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。