更新時(shí)間:2019-10-17 14:12:10 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2534次
今天要談的主題是關(guān)于求職,求職是在每個(gè)技術(shù)人員的生涯中都要經(jīng)歷多次。對(duì)于我們大部分人而言,在進(jìn)入自己心儀的公司之前少不了準(zhǔn)備工作,有一份全面細(xì)致面試題將幫助我們減少許多麻煩。在跳槽季來臨之前,特地做這個(gè)系列的文章,一方面幫助自己鞏固下基礎(chǔ),另一方面也希望幫助想要換工作的朋友。
相關(guān)概念
面向?qū)ο蟮娜齻€(gè)特征
封裝,繼承,多態(tài),這個(gè)應(yīng)該是人人皆知,有時(shí)候也會(huì)加上抽象。
多態(tài)的好處
允許不同類對(duì)象對(duì)同一消息做出響應(yīng),即同一消息可以根據(jù)發(fā)送對(duì)象的不同而采用多種不同的行為方式(發(fā)送消息就是函數(shù)調(diào)用)。主要有以下優(yōu)點(diǎn):
可替換性:多態(tài)對(duì)已存在代碼具有可替換性可擴(kuò)充性:增加新的子類不影響已經(jīng)存在的類結(jié)構(gòu)接口性:多態(tài)是超類通過方法簽名,向子類提供一個(gè)公共接口,由子類來完善或者重寫它來實(shí)現(xiàn)的。靈活性簡(jiǎn)化性
代碼中如何實(shí)現(xiàn)多態(tài)
實(shí)現(xiàn)多態(tài)主要有以下三種方式:
1.接口實(shí)現(xiàn)
2.繼承父類重寫方法
3.同一類中進(jìn)行方法重載
虛擬機(jī)是如何實(shí)現(xiàn)多態(tài)的
動(dòng)態(tài)綁定技術(shù)(dynamicbinding),執(zhí)行期間判斷所引用對(duì)象的實(shí)際類型,根據(jù)實(shí)際類型調(diào)用對(duì)應(yīng)的方法。
接口的意義
接口的意義用三個(gè)詞就可以概括:規(guī)范,擴(kuò)展,回調(diào)。
抽象類的意義
抽象類的意義可以用三句話來概括:
為其他子類提供一個(gè)公共的類型封裝子類中重復(fù)定義的內(nèi)容定義抽象方法,子類雖然有不同的實(shí)現(xiàn),但是定義時(shí)一致的
接口和抽象類的區(qū)別
父類的靜態(tài)方法能否被子類重寫
不能。重寫只適用于實(shí)例方法,不能用于靜態(tài)方法,而子類當(dāng)中含有和父類相同簽名的靜態(tài)方法,我們一般稱之為隱藏。
什么是不可變對(duì)象
不可變對(duì)象指對(duì)象一旦被創(chuàng)建,狀態(tài)就不能再改變。任何修改都會(huì)創(chuàng)建一個(gè)新的對(duì)象,如String、Integer及其它包裝類。
靜態(tài)變量和實(shí)例變量的區(qū)別?
靜態(tài)變量存儲(chǔ)在方法區(qū),屬于類所有。實(shí)例變量存儲(chǔ)在堆當(dāng)中,其引用存在當(dāng)前線程棧。
能否創(chuàng)建一個(gè)包含可變對(duì)象的不可變對(duì)象?
當(dāng)然可以創(chuàng)建一個(gè)包含可變對(duì)象的不可變對(duì)象的,你只需要謹(jǐn)慎一點(diǎn),不要共享可變對(duì)象的引用就可以了,如果需要變化時(shí),就返回原對(duì)象的一個(gè)拷貝。最常見的例子就是對(duì)象中包含一個(gè)日期對(duì)象的引用。
內(nèi)部類的作用
內(nèi)部類可以有多個(gè)實(shí)例,每個(gè)實(shí)例都有自己的狀態(tài)信息,并且與其他外圍對(duì)象的信息相互獨(dú)立.在單個(gè)外圍類當(dāng)中,可以讓多個(gè)內(nèi)部類以不同的方式實(shí)現(xiàn)同一接口,或者繼承同一個(gè)類.創(chuàng)建內(nèi)部類對(duì)象的時(shí)刻不依賴于外部類對(duì)象的創(chuàng)建。內(nèi)部類并沒有令人疑惑的”is-a”管系,它就像是一個(gè)獨(dú)立的實(shí)體。
內(nèi)部類提供了更好的封裝,除了該外圍類,其他類都不能訪問。
final,finalize和finally的不同之處
final是一個(gè)修飾符,可以修飾變量、方法和類。如果final修飾變量,意味著該變量的值在初始化后不能被改變。finalize方法是在對(duì)象被回收之前調(diào)用的方法,給對(duì)象自己最后一個(gè)復(fù)活的機(jī)會(huì),但是什么時(shí)候調(diào)用finalize沒有保證。finally是一個(gè)關(guān)鍵字,與try和catch一起用于異常的處理。finally塊一定會(huì)被執(zhí)行,無論在try塊中是否有發(fā)生異常。
clone()是哪個(gè)類的方法?
java.lang.Cloneable是一個(gè)標(biāo)示性接口,不包含任何方法,clone方法在object類中定義。并且需要知道clone()方法是一個(gè)本地方法,這意味著它是由c或c++或其他本地語言實(shí)現(xiàn)的。
深拷貝和淺拷貝的區(qū)別是什么?
淺拷貝:被復(fù)制對(duì)象的所有變量都含有與原來的對(duì)象相同的值,而所有的對(duì)其他對(duì)象的引用仍然指向原來的對(duì)象。換言之,淺拷貝僅僅復(fù)制所考慮的對(duì)象,而不復(fù)制它所引用的對(duì)象。
深拷貝:被復(fù)制對(duì)象的所有變量都含有與原來的對(duì)象相同的值,而那些引用其他對(duì)象的變量將指向被復(fù)制過的新對(duì)象,而不再是原有的那些被引用的對(duì)象。換言之,深拷貝把要復(fù)制的對(duì)象所引用的對(duì)象都復(fù)制了一遍。
static都有哪些用法?
幾乎所有的人都知道static關(guān)鍵字這兩個(gè)基本的用法:靜態(tài)變量和靜態(tài)方法。也就是被static所修飾的變量/方法都屬于類的靜態(tài)資源,類實(shí)例所共享。
除了靜態(tài)變量和靜態(tài)方法之外,static也用于靜態(tài)塊,多用于初始化操作:
此外static也多用于修飾內(nèi)部類,此時(shí)稱之為靜態(tài)內(nèi)部類。
最后一種用法就是靜態(tài)導(dǎo)包,即importstatic.importstatic是在JDK1.5之后引入的新特性,可以用來指定導(dǎo)入某個(gè)類中的靜態(tài)資源,并且不需要使用類名。資源名,可以直接使用資源名,比如:
final有哪些用法
final也是很多面試喜歡問的地方,能回答下以下三點(diǎn)就不錯(cuò)了:
1.被final修飾的類不可以被繼承
2.被final修飾的方法不可以被重寫
3.被final修飾的變量不可以被改變。如果修飾引用,那么表示引用不可變,引用指向的內(nèi)容可變。
4.被final修飾的方法,JVM會(huì)嘗試將其內(nèi)聯(lián),以提高運(yùn)行效率
5.被final修飾的常量,在編譯階段會(huì)存入常量池中。
回答出編譯器對(duì)final域要遵守的兩個(gè)重排序規(guī)則更好:
1.在構(gòu)造函數(shù)內(nèi)對(duì)一個(gè)final域的寫入,與隨后把這個(gè)被構(gòu)造對(duì)象的引用賦值給一個(gè)引用變量,這兩個(gè)操作之間不能重排序。
2.初次讀一個(gè)包含final域的對(duì)象的引用,與隨后初次讀這個(gè)final域,這兩個(gè)操作之間不能重排序。
相關(guān)Java面試題推薦
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)