Java之問(一)

如何強制執行垃圾回收?

  (1)首先,垃圾回收是JVM自動處理的,我們不能強制致敬,儘管我們可以調用System.gc()。

  (2)JVM不能保證GC能夠直接開始回收。

  (3)每一個class都從Object基礎了finalize()方法。

  (4)當垃圾回收器覺得應用中沒有更多的引用對象存在時就會調用finalize()。因此我們手動調用finalize()並沒有什麼多大作用

  (5)我們可以通過調用System.gc()和Runtime.gc()來請求回收不用的對象,但是不能保證這些對象何時會被回收。


Java的Socket的有點和缺點

  優點:

  (1)Socket是靈活的,可以很容易的實現一般的通信。

  (2)Socket通信只需要很少的流量而不像HTML表單和CGI腳本那樣每次請求網頁都會傳輸整個頁面。

  缺點:

  (1)基於Socket的通信只允許在應用間發送原始的數據。

  (2)無論是客戶端還是服務端都必須提供一個機制使數據在任何情況下都是有用的。


你如何理解Synchronization?爲什麼它很重要?

  (1)Synchronization關鍵字是控制多線程訪問共享資源的一種手段。

  (2)Synchronization只允許在一個時間點一個線程訪問一個資源。

  (3)Synchronization保證當一個線程在修改共享的對象時另一個線程不能再訪問該對象。

  (4)Synchronization通常會導致錯誤,因爲它防止了一些類型的數據被損壞。


什麼是不變類?如何創建一個不變類?

  (1)不變類是指一個類一旦被創建了,它的內容就不能被修改。比如不能被繼承,其所有屬性/方法都不能被重寫等。

  (2)不變對象是那些一旦被創建就狀態不能再被修改的對象

  (3)既然不變類一般被創建就不能被修改,那麼它們就是典型的線程安全的。

  (4)JDK的不變類有八大基本類型的包裝類:String、Integer、Boolean、等等。

  

ArrayList和Vector的區別?

  (1)ArrayList是線程不安全的,Vectory是線程安全的,因爲Vectory的每一個方法都用synchronization裝飾了。

  (2)這兩者的元素都是通過數組來持有的

 

JDK、JRE和JVM有什麼區別?

  JVM:JVM是Java Virtual Machine的縮寫,他是爲java字節碼(class文件)在運行時提供的一個抽象的機器,JVM是一種規範,它可以用於很多硬件和軟件平臺,所以JVM是與平臺無關的。
  JRE:JRE是Java程序運行時的環境,他是JVM的實現。
  JDK:JDK是Java Development Kit的縮寫,具體來說,它包含了JRE+開發者工具。
  

JVM爲內存分配了多少類型的區域?

  (1)Class(方法)區。
  (2)堆區。
  (3)棧區(線程棧)。
  (4)程序計數器(一個寄存器)。
  (5)本地方法棧。

什麼是JIT編譯器?

  JIT是Just-In-Time的縮寫。JIT編譯器是用於提升程序的性能,JIT編譯器會一次性編譯那些有相似功能的字節碼,並且之後就減少了編譯時間。“編譯器”這個術語的意思就是將JVM的指令集轉換成CPU的指令集。

什麼是Platform?

  一個platform是程序運行的最基本的軟件或硬件環境。有兩種類型的platform,也就是基於軟件和基於硬件。JVM提供的就是基於軟件的平臺。


Java平臺和其他平臺的主要區別是什麼?

  Java平臺和大多數其它平臺顯著的不同就是他是一個基於軟件的平臺,它(JVM)是運行在其它硬件平臺上的,他有兩個組成部分:
  (1)運行時環境
  (2)API(應用程序接口)。

Java的“一次編寫處處運行”的本質是什麼?

  java源代碼可以被編譯成字節碼,這種字節碼是源代碼和機器碼的中間產物,這種字節碼不是在指定平臺生成的,它是依賴於JVM而存在的,與平臺無關。所以它可在任何有JVM上的平臺運行。


什麼是類加載器(ClassLoader)

  ClassLoader是一JVM的子系統,用於加載類和接口,有很多種類型的ClassLoader,比如Bootstrap、Extension、System、Plugin等等。

局部變量默認值是多少?

  局部變量不會自動初始化的,也就是沒有默認值,因此我們在使用局部變量時必須手動指定初始值。

什麼是運行時多態性(Runtime Polymorphism)?

   運行時多態或者說是動態方法的調度是一個調用重寫方法的過程,重寫的方法是在運行時調用而不是在編譯時調用。
  在這個過程中,一個重寫的方法是通過父類的引用變量來調用的。


什麼是抽象?

  抽象是隱藏實現的細節而只向用戶突出功能的一個過程。


在Java中創建對象有哪幾種方式?

  (1)使用關鍵字new對象

  (2)使用Class.forName()根據對象的名稱去反射一個對象,反射見http://blog.csdn.net/u012481172/article/details/49668315

  (3)使用clone()方法克隆一個已經存在的對象。

  (4)使用反序列化,將已經序列化的對象反序列化成對象。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章