JAVA后端筆試試題(一)


      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映射工具。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM