2017年6月7日,天氣晴轉陰。心情還不錯。
上周六參加了自己的第一場筆試,感覺很糟糕,主要是對基礎知識掌握不紮實,現在把筆試中的部分問題總結歸納如下,便于以後檢視。
1.GC是什麼?為什麼要GC?
GC(GarbageCollection)是垃圾回收機制。在Java中開發人員無法使用指針來自由的管理記憶體,GC是JVM對記憶體(實際上就是對象)進行管理的方式。java虛拟機可以自動判斷出并收集到垃圾,但一般不會立即釋放它們的記憶體空間,也可以在程式中使用System.gc()來強制垃圾回收,但是要注意的是,系統并不保證會立即進行釋放記憶體。GC使得Java開發人員擺脫了繁瑣的記憶體管理工作,讓程式的開發更有效率。
GC基本原理:
Java的記憶體管理實際上就是對象的管理,其中包括對象的配置設定和釋。
對于程式員來說,配置設定對象使用new關鍵字;釋放對象時,隻要将對象所有引用指派為null,讓程式不能夠再通路到這個對象,我們稱該對象為"不可達的"。GC将負責回收所有"不可達"對象的記憶體空間。
對于GC來說,當程式員建立對象時,GC就開始監控這個對象的位址、大小以及使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對象。通過這種方式确定哪些對象是"可達的",哪些對象是"不可達的"。當GC确定一些對象為"不可達"時,GC就有責任回收這些記憶體空間。但是,為了保證 GC能夠在不同平台實作,Java對GC的很多行為都沒有進行嚴格的規定。例如,對于采用什麼類型的回收算法、什麼時候進行回收等重要問題都沒有明确的規定。是以,不同的JVM的實作者往往有不同的實作算法,這給Java程式員的開發帶來行多不确定性。
2.接口和抽象類的差別?
接口是對動作的抽象,抽象類是對根源的抽象。抽象類表示的是,這個對象是什麼。接口表示的是,這個對象能做什麼。比如,男人、女人,這兩個類(如果是類的話),他們的抽象類是人。說明:他們都是人。人可以吃東西,狗也可以吃東西,你可以把“吃東西”定義成一個接口,然後讓這些類去實作它。是以,在進階語言上,一個類隻能繼承一個類(抽象類)(正如人不可能同時是生物和非生物),但是可以實作多個接口(吃飯接口、走路接口)。
當你關注一個事物的本質的時候,用抽象類;當你關注一個操作的時候,用接口。
(1)抽象類和接口都不能直接執行個體化,如果要執行個體化,抽象類變量必須指向實作所有抽象方法的子類對象,接口變量必須指向實作所有接口方法的類對象。
(2)抽象類要被子類繼承,接口要被子類實作。
(3)接口隻能做方法申明,抽象類中可以做方法申明,也可以做方法實作。
(4)接口裡定義的變量隻能是公共的靜态常量,抽象類中的變量是普通變量。
(5)抽象類裡的抽象方法必須全部被子類所實作,如果子類不能全部實作父類抽象方法,那麼該子類隻能是抽象類。同樣,一個類實作接口的時候,如不能全部實作接口方法,那麼該類也隻能為抽象類。
(6)抽象方法隻能申明,不能實作,接口是設計的結果 ,抽象類是重構的結果。
(7)抽象類裡可以沒有抽象方法。
(8)如果一個類裡有抽象方法,那麼這個類隻能是抽象類。
(9)抽象方法要被實作,是以不能是靜态的,也不能是私有的。
(10)接口可繼承接口,并可多繼承接口,但類隻能單根繼承。
(11)抽象類和接口都是用來抽象具體對象的,但是接口的抽象級别最高。
(12)抽象類可以有具體的方法和屬性, 接口隻能有抽象方法和不可變常量。
(13)抽象類主要用來抽象類别,接口主要用來抽象功能。
(14)抽象類中,如果方法不包含任何實作,派生類必須覆寫它們。接口中所有方法都必須是未實作的。
3.為什麼說Mybatis是半自動ORM映射工具?它與全自動的差別在哪裡?
Hibernate屬于全自動ORM映射工具,使用Hibernate查詢關聯對象或者關聯集合對象時,可以根據對象關系模型直接擷取,是以它是全自動的。而Mybatis在查詢關聯對象或關聯集合對象時,需要手動編寫sql來完成,是以稱之為半自動ORM映射工具。