天天看點

Java經典面試題整理及答案詳解(七)

了解更多: Java經典面試題整理及答案詳解(一) Java經典面試題整理及答案詳解(二) Java經典面試題整理及答案詳解(三) Java經典面試題整理及答案詳解(四) Java經典面試題整理及答案詳解(五) Java經典面試題整理及答案詳解(六) Java經典面試題第七彈來啦!本節小編整理了一些理論基礎相關的面試題,當面試官提問時,這些可一定得回答上~

1.緩存流與記憶體流的差別

記憶體流的本質就是将所有的資料在記憶體之中進行完整的處理操作。核心的概念在于記憶體流可以進行整體的資料處理。

從實作的角度來講,兩者是可以部分互通的,從實用角度來講,緩存流更多的是一個暫時的操作,緩存操作流更多的情況下是有一個間隔的,這個間隔往往不會儲存過多的内容。

在緩存流的操作概念裡面重點隻有一個核心因素:進行中文(BufferedReader),這種操作本身隻适合于字元串的操作,本身沒有驗證處理,是以會使用Scanner完成。

2.基本類型與包裝類型選擇

基本類型與包裝類型最大的差別有亮點:

(1)包裝類是以對象的形式運作,而且JDK1.5之後對于包裝類又提供自動的裝箱與拆箱處理機制;

(2)包裝類可以進行null的描述。(這個描述的操作要追溯到Hibernate盛行的時期,因為對于一些設定的字段,如果使用了基本類型,不設定内容就是對應資料類型預設值,如果說現在年齡使用了int,則不設定年齡表示0,而如果使用了包裝類年齡表示的就是null。)

對于現在的開發,基本都是在資料層上的儲存對象内容類(VO類)使用包裝類,這樣對null的控制比較友善。

3.基本資料類型與引用傳遞

在Java裡面資料類型一共分為兩種:基本、引用,對于引用可以發生引用傳遞,而基本類型隻是一個值拷貝,引用類型傳入到某一個方法之中,修改之後會影響原始對象中的内容,而基本資料類型不會。

不過從後續的開發開始,為了友善使用者的使用專門提供有一個包裝類的概念,利用包裝類可以友善的實作基本資料類型與引用資料類型的操作,最為重要的是包裝類裡面提供有一個null的概念,這對于一些開發架構,例如:MyBatis、Hibernate等都有非常重要的意義。

4.集合資訊取得

如果說現在有一個List集合,想要取得裡面某一個索引的資料,這種情況下一定要考慮使用get()方法(要清楚ArrayList、LinkedList差別所在),可以輕松地進行元素的定位,get()方法是其主要擴充的方法,也是List和Set最大差別所在。例如:FileUpload、MyBatis裡面獲得的資料都是通過List中的get()方法取得。

而對于集合的輸出操作有兩種做法:

(1)使用for循環,在集合裡面存在有size()方法,而且List有get()方法,很明顯可以使用循環。如果你使用的是LinkedList子類,那麼會出現時間複雜度攀升的問題;如果使用的是ArrayList,由于其時間複雜度為1,是以可以快速查找;

(2)對于集合而言,為了避免這些時間複雜度過高問題,有了疊代的輸出接口,使用Iterator。

5.接口标準

所謂的标準指的是所有類都要奉行的法則,因為普通類的繼承關系裡面是不存在有這樣的硬性的子類定義法則(強制性覆寫),是以才會衍生出抽象類與接口的概念,對于接口本身而言,它隻是一個方法視圖。

就好比你使用一款空調遙控器,都一定可以找到開關鍵,如果不開空調無法制冷,而如果太冷一定要關,這些就是标準,如下圖,遙控器的标準在設計裡面就像是接口,沒有關聯的層要想捆綁在一起,就要使用接口。

Java經典面試題整理及答案詳解(七)

6.連結清單為什麼要用内部類?

内部類的特點:

(1)内部類可以友善的與外部類之間進行私有屬性的通路;

(2)一個内部類如果使用了private聲明,那麼外部将無法直接使用它。

為什麼不将連結清單的實作變為如下形式:

Java經典面試題整理及答案詳解(七)

之是以沒有将Link與Node分開,而直接使用了一個内部類的形式完成,目的是:

(1) Node類如果沒有Link類負責整體的協調操作,那麼Node類上的方法根本沒有任何用處;

(2) 友善引用傳遞。

如果你想知道為什麼要合并為一個類,那就将内部類拿到外部類來,會發現在進行資料删除的時候,需要進行外部類與内部類之間非常繁瑣的引用傳遞。

更多專業知識,面試技巧就在面試一點通,持續更新中……

感謝浏覽~

本内容來源于

阿裡雲大學-Java面試技巧