天天看點

JAVA面試準備(java基礎部分2)

51、介紹Collection架構的結構。

Collection是java中設計優良的類和接口組成的集合架構,主要有Map,List,Set。

List類中包括Vector,ArrayList,LinkedList。

Set類中包括HashSet,LinkHashSet。

Map類中包括TreeMap,HashMap。

52、Collection架構中實作比較要實作什麼接口?

comparable接口和comparator接口。

53、ArrayList和Vector的差別

兩個類都實作List接口,都是基于數組的list,不同處主要為Vector是同步的而ArrayList不同步。

54、HashMap和Hashtable的差別

一、Hashtable是線程安全的,HashMap是線程不安全的。

二、HashMap可以有空值。

55、List和Map的差別?

List是儲存單列資料的集合,另一個是儲存鍵值的集合。

56、List,Set,Map是否繼承Collection接口?

List和Set是,Map是單獨接口。

57、List、Map、Set三個接口,存取元素時,各有什麼特點?

List和Set都是單列元素的集合。他們都有一個共同的父接口Collection。

Set裡不允許有重複元素,Set取元素時,隻能通過Iterator接口取得所有元素,然後周遊。

List表示有先後順序的集合。通過add方法加入對象,這裡指對象的索引不是對象本身。List除了Iterator接口還可以通過get(index i)來明确說明取第幾個。

Map是雙列集合,其中有put方法,每次儲存時,要存儲一對key/value,不能存儲重複的key。取資料時根據key取得value。

58、說出Vector,ArrayList,LinkedList的儲存性能和特性。

ArrayList和Vector都是以數組方式存儲資料,可通過按序号索引元素。是以索引資料快插入資料慢。

Vector由于是線程安全,通常性能較ArrayList差。

LinkList使用雙向連結清單存儲,是以查找慢而插入快。LinkList線程不安全,其提供了一些方法,使得LinkList可以當作堆棧和隊列來使用。

59、去掉一個Vector集合中重複的元素

用get方法擷取元素,contains方法判斷是否已經存在。

60、Collection和Collections的差別

Collection是集合類的上級接口,繼承與他的接口主要有Set和List

Collections是針對集合類的一個幫助類,他提供一系列靜态方法實作對各種集合的搜尋、排序、線程安全話等操作。

61、Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢?是用==還是equals()?他們有何差別?

通過equals方法進行判斷的。

==看兩個對象是不是同一個對象,也就是兩個對象引用是不是同一個對象。

equals()看兩個對象的内容是否相等

62、你所知道的集合類有哪些?主要方法?

常用的集合類是List和Map。

List類中包括ArrayList和Vector,Map提供鍵值的儲存方法。

主要包括增删改查方法,如add,remove,contains;Set類中沒有get(index i)的方法。

63、兩個對象值相同(x.equals(y)==true),但卻有不同的hashcode,這句話對不對?

對,需依賴equals和hashcode的具體實作。    

64、TreeSet裡面放對象,如果同時放入了父類和子類的執行個體對象,那比較時使用的是父類的compareTo方法,還是使用的子類的compareTo方法,還是抛異常。

無具體答案,目前的add方法放入哪個對象,就使用哪個compareTo方法。

如:

65、說出一些常用的類,包,接口,各舉5個

類:BufferReader,BufferWriter,FileReader,FileWriter,String,Integer,Date。

包:java.lang,java.io,java.util,java.sql,javax.servlet.

接口:remote,List,Map,Document.HttpServletRequest.

66、java中有幾種類型的流?JDK為每種類型的流提供一些抽象類以供繼承,請說出他們分别是哪些類?

位元組流,字元流。位元組流繼承于InputStream,OutputStream,字元流繼承于InputStreamReader,OutputStreamWriter。

67、位元組流和字元流的差別?

字元流是位元組流的包裝,字元流能直接接受字元串,在内部轉換為位元組,再寫入底層裝置。

68、什麼是java序列化,如何實作java序列化?或者請解釋Serializable接口的作用。

我們有時候将一個java對象變成位元組流形式傳出去或者從一個位元組流中恢複成一個java對象。我們可以通過OutputStream的writeObject方法來做,被傳輸的對象必須實作serializable接口。

69、描述一下JVM加載class檔案的原理機制?

JVM中的類的裝載是由ClassLoader和它的子類來實作的,java ClassLoader是一個重要的java運作時系統元件。他負責在運作時查找和裝入類檔案的類。

70、heap和stack有什麼差別。

java的記憶體分兩類,一類是棧記憶體,一類是堆記憶體。棧記憶體是指程式進入一個方法時,會為這個方法單獨配置設定一塊私屬存儲空間,用于存儲這個方法内部的局部變量,當這個方法結束時,配置設定給這個方法的棧會釋放,這個棧中的變量也将随之釋放。

堆是與棧不同的記憶體,一般用于存放不放在目前方法棧中的那些資料。例如new建立的對象都放在堆裡。方法中的局部變量使用final修飾後,放在堆裡。

71、GC是什麼?為什麼要有GC?

Garbage Collection,垃圾回收機制。記憶體洩漏是程式設計人員容易出現問題的地方,忘記或錯誤的記憶體回收會導緻程式或系統不穩定甚至崩潰,java提供的GC可以自動監視對象并達到回收記憶體的目的。java語言沒有提供釋放已配置設定記憶體的顯示操作方法。

72、垃圾回收的優點和原理。并考慮2種回收機制。

垃圾回收機制使java程式員不用考慮記憶體管理,垃圾回收可以有效的防止記憶體洩漏,有效的使用可以使用的記憶體。

73、垃圾回收器的基本原理是什麼?垃圾回收器可以馬上回收記憶體麼?有什麼辦法主動通知虛拟機進行垃圾回收?當程式員建立對象時,GC就開始監控這個對象的位址、大小以及使用情況。GC采用有向圖的方式記錄和管理堆中的所有對象。通過這種方式确定對象是否可達。當GC确定一些對象不可達時,GC就有責任回收這些記憶體空間。

程式員也可以通過System.gc()通知gc運作。

74、什麼時候用assert

調試的時候。

75、java中會存在記憶體洩漏嗎?

程式員建立了一個對象,以後一直不再使用這個對象,對象卻一直被引用,及這個無用對象一直無法被GC回收,這樣的情況既是java中的記憶體洩漏情況。

76、能不能自己寫個類,叫做java.lang.String?

可以,但在應用的時候,需要用自己的類加載器去加載。

繼續閱讀