2017年6月7日,天氣晴轉陰。心情還不錯。java
上週六參加了本身的第一場筆試,感受很糟糕,主要是對基礎知識掌握不紮實,如今把筆試中的部分問題總結概括以下,便於之後查看。程序員
1.GC是什麼?爲何要GC?算法
GC(GarbageCollection)是垃圾回收機制。在Java中開發人員沒法使用指針來自由的管理內存,GC是JVM對內存(實際上就是對象)進行管理的方式。java虛擬機能夠自動判斷出並收集到垃圾,但通常不會當即釋放它們的內存空間,也能夠在程序中使用System.gc()來強制垃圾回收,可是要注意的是,系統並不保證會當即進行釋放內存。GC使得Java開發人員擺脫了繁瑣的內存管理工做,讓程序的開發更有效率。sql
GC基本原理:工具
Java的內存管理實際上就是對象的管理,其中包括對象的分配和釋。spa
對於程序員來講,分配對象使用new關鍵字;釋放對象時,只要將對象全部引用賦值爲null,讓程序不可以再訪問到這個對象,咱們稱該對象爲"不可達的"。GC將負責回收全部"不可達"對象的內存空間。 .net
對於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映射工具。