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