JAVA面試題總結(一)

1、Java支持的數據類型有哪些?什麼是自動拆裝箱?

Java語言支持的8中基本數據類型是:

Byte、short、int、long、float、double、boolean、char

自動裝箱是Java編譯器在基本數據類型和對應的對象包裝類型之間做的一個轉化。比如:把int轉化成Integerdouble轉化成double,等等。反之就是自動拆箱。

2、JDK和JRE的區別是什麼?

Java運行時環境(JRE)是將要執行Java程序的Java虛擬機。它同時也包含了執行applet需要的瀏覽器插件。Java開發工具包(JDK)是完整的Java軟件開發包,包含了JRE,編譯器和其他的工具(比如:JavaDocJava調試器),可以讓開發者開發、編譯、執行Java應用程序。

3、什麼是值傳遞和引用傳遞?

對象被值傳遞,意味着傳遞了對象的一個副本。因此,就算是改變了對象副本,也不會影響源對象的值。

對象被引用傳遞,意味着傳遞的並不是實際的對象,而是對象的引用。因此,外部對引用對象所做的改變會反映到所有的對象上。

4、int和Integer有什麼區別? 

Java是一個近乎純潔的面向對象編程語言,但是爲了編程的方便還是引入了基本數據類型,但是爲了能夠將這些基本數據類型當成對象操作,Java爲每一個基本數據類型都引入了對應的包裝類型(wrapper class),int的包裝類就是Integer,從Java 5開始引入了自動裝箱/拆箱機制,使得二者可以相互轉換。 
Java
爲每個原始類型提供了包裝類型: 
原始類型: booleancharbyteshortintlongfloatdouble 
包裝類型:BooleanCharacterByteShortIntegerLongFloatDouble

5、重載(Overload)和重寫(Override)的區別。重載的方法能否根據返回類型進行區分?  

方法的重載和重寫都是實現多態的方式,區別在於前者實現的是編譯時的多態性,而後者實現的是運行時的多態性。重載發生在一個類中,同名的方法如果有不同的參數列表(參數類型不同、參數個數不同或者二者都不同)則視爲重載;重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的返回類型,比父類被重寫方法更好訪問,不能比父類被重寫方法聲明更多的異常(里氏代換原則)。重載對返回類型沒有特殊的要求

6、String和StringBuilder、StringBuffer的區別?

Java平臺提供了兩種類型的字符串:StringStringBuffer/StringBuilder,它們可以儲存和操作字符串。其中String是隻讀字符串,也就意味着String引用的字符串內容是不能被改變的。而StringBuffer/StringBuilder類表示的字符串對象可以直接進行修改。StringBuilderJava 5中引入的,它和StringBuffer的方法完全相同,區別在於它是在單線程環境下使用的,因爲它的所有方面都沒有被synchronized修飾,因此它的效率也比StringBuffer要高。

 

7、Arraylist和LinkedList的區別

1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。

2.對於隨機訪問getsetArrayList覺得優於LinkedList,因爲LinkedList要移動指針。

3.對於新增和刪除操作addremoveLinedList比較佔優勢,因爲ArrayList要移動數據。

8、什麼是抽象?

從特定的角度出發,從已經存在的一些事物中抽取我們所關注的特性、行爲,從而形成一個新的事物的思維過程,是一種從複雜到簡潔的思維方式。

看下圖,我們首先關注貓的特證,比如形態、毛的顏色、它的眼神等等,從而得出這是貓,這就是抽象。

http://img.blog.songchunmin.com/2018/01/u25813614901093927202fm170s9C97ED130E21608A1065ADC30300A030w568h358img.jpg

 

9、JAVA多線程實現的方式

Java多線程實現方式主要有四種:繼承Thread類、實現Runnable接口、實現Callable接口通過FutureTask包裝器來創建Thread線程、使用ExecutorServiceCallableFuture實現有返回結果的多線程。詳情請查看

 

 

10.進程和線程的區別是什麼?

進程是執行着的應用程序,而線程是進程內部的一個執行序列。一個進程可以有多個線程。線程又叫做輕量級進程。

11、什麼是值傳遞和引用傳遞?

對象被值傳遞,意味着傳遞了對象的一個副本。因此,就算是改變了對象副本,也不會影響源對象的值。

對象被引用傳遞,意味着傳遞的並不是實際的對象,而是對象的引用。因此,外部對引用對象所做的改變會反映到所有的對象上。

12、什麼是死鎖(deadlock)

兩個進程都在等待對方執行完畢才能繼續往下執行的時候就發生了死鎖。結果就是兩個進程都陷入了無限的等待中。

13.Java中垃圾回收有什麼目的?什麼時候進行垃圾回收?

垃圾回收的目的是識別並且丟棄應用不再使用的對象來釋放和重用資源。

14.System.gc()和Runtime.gc()會做什麼事情?

這兩個方法用來提示JVM要進行垃圾回收。但是,立即開始還是延遲進行垃圾回收是取決於JVM的。

15.finalize()方法什麼時候被調用?析構函數(finalization)的目的是什麼?

在釋放對象佔用的內存之前,垃圾收集器會調用對象的finalize()方法。一般建議在該方法中釋放對象持有的資源。

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