1. 程式人生 > >JAVA面試必備的知識寶典(一)

JAVA面試必備的知識寶典(一)

java

相關概念

面向對象的三個特征

封裝,繼承,多態.這個應該是人人皆知.有時候也會加上抽象.

多態的好處

允許不同類對象對同一消息做出響應,即同一消息可以根據發送對象的不同而采用多種不同的行為方式(發送消息就是函數調用).主要有以下優點:

可替換性:多態對已存在代碼具有可替換性.

可擴充性:增加新的子類不影響已經存在的類結構.

接口性:多態是超累通過方法簽名,想子類提供一個公共接口,由子類來完善或者重寫它來實現的.

靈活性:

簡化性:

代碼中如何實現多態

實現多態主要有以下三種方式: 1. 接口實現 2. 繼承父類重寫方法 3. 同一類中進行方法重載

虛擬機是如何實現多態的

動態綁定技術(dynamic binding),執行期間判斷所引用對象的實際類型,根據實際類型調用對應的方法.

接口的意義

接口的意義用三個詞就可以概括:規範,擴展,回調.

抽象類的意義

抽象類的意義可以用三句話來概括:

為其他子類提供一個公共的類型

封裝子類中重復定義的內容

定義抽象方法,子類雖然有不同的實現,但是定義時一致的 ## 接口和抽象類的區別

比較抽象類接口

默認方法抽象類可以有默認的方法實現,java 8之前,接口中不存在方法的實現.

實現方式子類使用extends關鍵字來繼承抽象類.如果子類不是抽象類,子類需要提供抽象類中所聲明方法的實現.子類使用implements來實現接口,需要提供接口中所有聲明的實現.

構造器抽象類中可以有構造器,接口中不能

和正常類區別抽象類不能被實例化接口則是完全不同的類型

訪問修飾符抽象方法可以有public,protected和default等修飾接口默認是public,不能使用其他修飾符

多繼承一個子類只能存在一個父類一個子類可以存在多個接口

添加新方法想抽象類中添加新方法,可以提供默認的實現,因此可以不修改子類現有的代碼如果往接口中添加新方法,則子類中需要實現該方法.

父類的靜態方法能否被子類重寫

不能.子類繼承父類後,有相同的靜態方法和非靜態,這是非靜態方法覆蓋父類中的方法(即方法重寫),父類的該靜態方法被隱藏(如果對象是父類則調用該隱藏的方法),另外子類可集成父類的靜態與非靜態方法,至於方法重載我覺得它其中一要素就是在同一類中,不能說父類中的什麽方法與子類裏的什麽方法是方法重載的體現.

什麽是不可變對象

不可變對象指對象一旦被創建,狀態就不能再改變。任何修改都會創建一個新的對象,如 String、Integer及其它包裝類。

能否創建一個包含可變對象的不可變對象?

當然可以創建一個包含可變對象的不可變對象的,你只需要謹慎一點,不要共享可變對象的引用就可以了,如果需要變化時,就返回原對象的一個拷貝。最常見的例子就是對象中包含一個日期對象的引用.

java 創建對象的幾種方式

采用new

通過反射

采用clone

通過序列化機制

前2者都需要顯式地調用構造方法. 造成耦合性最高的恰好是第一種,因此你發現無論什麽框架,只要涉及到解耦必先減少new的使用.

switch中能否使用string做參數

在idk 1.7之前,switch只能支持byte,short,char,int或者其對應的封裝類以及Enum類型。從idk 1.7之後switch開始支持String.

Object中有哪些公共方法?

equals()

clone()

getClass()

notify(),notifyAll(),wait()

java當中的四種引用

強引用,軟引用,弱引用,虛引用.不同的引用類型主要體現在GC上:

強引用:如果一個對象具有強引用,它就不會被垃圾回收器回收。即使當前內存空間不足,JVM也不會回收它,而是拋出 OutOfMemoryError 錯誤,使程序異常終止。如果想中斷強引用和某個對象之間的關聯,可以顯式地將引用賦值為null,這樣一來的話,JVM在合適的時間就會回收該對象

軟引用:在使用軟引用時,如果內存的空間足夠,軟引用就能繼續被使用,而不會被垃圾回收器回收,只有在內存不足時,軟引用才會被垃圾回收器回收。

弱引用:具有弱引用的對象擁有的生命周期更短暫。因為當 JVM 進行垃圾回收,一旦發現弱引用對象,無論當前內存空間是否充足,都會將弱引用回收。不過由於垃圾回收器是一個優先級較低的線程,所以並不一定能迅速發現弱引用對象

虛引用:顧名思義,就是形同虛設,如果一個對象僅持有虛引用,那麽它相當於沒有引用,在任何時候都可能被垃圾回收器回收。

好了同學們,我能介紹的也都全部介紹完給你們了,如果下獲得更多JAVA教學資源,可以選擇來我們這裏共同交流,群:24044837,很多大神在這裏切磋學習,不懂可以直接問,晚上還有大牛免費直播教學。

註:加群要求

1、具有一定工作經驗的,面對目前流行的技術不知從何下手,需要突破技術瓶頸的可以加,有些應屆生和實習生也可以加。

2、在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加。

3、如果沒有工作經驗,但基礎非常紮實,對java工作機制,常用設計思想,常用java開發框架掌握熟練的,可以加。

4、覺得自己很牛B,一般需求都能搞定。但是所學的知識點沒有系統化,很難在技術領域繼續突破的可以加。

5.阿裏Java高級大牛直播講解知識點,分享知識,多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!

PS:現在主要講解的內容是(反射原理枚舉原理與應用註解原理常用設計模式、正規表達式高級應用、JAVA操作Office原理詳解JAVA圖像處理技術,等多個知識點的詳解和實戰)

6.小號或者小白之類加群一律不給過,謝謝。

最後,每一位讀到這裏的網友,感謝你們能耐心地看完。覺得對你有幫助可以給個喜歡!希望在成為一名更優秀的Java程序員的道路上,我們可以一起學習、一起進步


JAVA面試必備的知識寶典(一)