java面試---java基礎+容器

1、jdk和jre有什麼區別?
jdk java開發工具

jre java運行環境

jdk包含jre、java編譯工具javac及java程序調試及分析工具。

2、==和equals()區別

==是引用比較

equals是值比較

3、兩個對象hashcode值相同,equals()不一定爲true

4、final在java中有什麼作用?

類:不能繼承

方法:不能修改

變量:不能修改,常量

5、java中Math(-1.5)等於多少?

-1  向右取整

6、java基礎類型:byte、boolean、char、short、int、float、long、double String屬於對象

7、java中操作字符串有哪些類?

String 聲明對象不可變

StringBuffer 對象可變,線程安全,效率低

StringBuilder 對象可變,非線程安全,效率高

8、String str=“i”和String str=new String(i)不一樣

一個是常量,分配到常量池中

一個是對象,分配到堆內存中

9 、java字符串翻轉reverse()

10、String 類常見方法

charAt()

toUpperCase()

toLowerCase()

11、抽象類不一定有抽象方法,抽象類不能實例對象

12、普通類不能含抽象方法,抽象類可含抽象方法

抽象類不能實例化,普通類可以實例化

13、抽象類不能用final修飾,抽象類就是被用來繼承的

14、接口和抽象類

關鍵字 :extends  implement

抽象類有構造函數,接口沒有

類可以有多個接口,但只能繼承一個抽象類

接口默認public修飾,抽象類都可以

15、java中IO流

功能:輸入、輸出

大小:字節流(8字節)、字符流(16字節)

16、BIO、NIO、AIO

BIO:同步阻塞式IO,簡單使用方便,併發處理能力低

NIO:同步非阻塞IO,客戶端服務端通過channel通訊,多路複用

AIO:異步非阻塞IO,異步IO操作基於事件和回調機制

17、Files常見方法

18、java容器:Collection和map

Collection包括list和set

List:ArrayList/LinkedList/Vector/Stack

Set:HashSet/LinkedHashSet/TreeSet

Map包括

HashMap:LinkedHashMap

TreeMap

ConcurrentHashMap

Hashtable

19、Collection和Collections區別

Collection是一個集合接口,提供通用接口方法,所有集合都是它的子類,比如List、set

Collections是一個包裝類,包含了很多靜態方法,不能被實例化,比如Collections.sort(list)
20、List:元素有序、允許元素重複

Set:元素有序,不允許元素重複

Map:key唯一,value可重複

AbstractMap、HashMap元素無序,TreeMap、TreeSet元素有序(二叉樹排序)

21、hashmap 中key和value爲空,hashtable不允許key和value爲空

hashtable線程安全,hashmap非線程安全

hashtable是保留類不建議使用,hashmap單線程使用,concurrenthashmap多線程

22、如何決定使用hashmap還是treemap

hashmap插入更快

treemap有序遍歷

23、hashmap實現原理

hashmap是基於hash算法實現的,通過put(key,value)存儲,get(key)來獲取。當傳入key時,hashmap會根據key.hashCode()計算出hash值,根據hash值將value保存到bucket裏。當計算出的hash值相同時,我們稱之爲hash衝突,hashmap做法是用鏈表和紅黑樹存儲相同hash值得value,衝突少使用鏈表否則用紅黑樹。

24、hashset

基於hashmap實現,不允許值重複

25、ArrayList基於動態數組實現,頻繁讀取

LinkedList基於鏈表,插入和刪除

26 數組和鏈表轉換

Array.asList(array)

List自帶toArray()方法

27、ArrayList和Vector

Vector使用Synchronized來實現線程同步,是線程安全的,而ArrayList是非線程安全的

ArrayList在性能方面優於Vector

擴容:Vector增加1倍,ArrayList只會增加50%
28、Array和ArrayList有何區別?

Array可以存儲基本數據類型和對象,ArrayList只能存儲對象

Array是固定大小的,ArrayList大小自動擴展的

Array內置方法沒有ArrayList多,比如addAll、removeAll、iteration等方法只有ArrayList。

29、在Queue中poll()和remove()有什麼區別?
相同點:都是返回第一個元素,並在隊列中刪除返回的對象

不同點:如果沒有元素poll()會返回null,而remove()會直接拋出nosuchElementException()異常

30、哪些集合類是線程安全的?

Vector、Hashtable、Stack都是線程安全的,而HashMap則是非線程安全的

31、迭代器Iterator時什麼?

Iterator接口提供遍歷任何Collection的接口,我們可以從一個Collection中使用迭代器方法來獲取迭代器實例。迭代器取代了Java集合框架中的Enumeration,迭代器允許調用者在迭代過程中一出元素。

32、Iterator怎麼使用?
List<String> list=new ArrayList<>();

Iterator<String> it = list.iterator();

while(it.hasNext())

{
String obj=it.next();

System.out.println(obj);

}

特點:更安全,可確保在當前遍歷的集合元素被更改的時候,會拋出異常

33、Iterator和Listlterator有什麼區別?

Iterator可遍歷set和list集合,單向遍歷

而listIteration只能遍歷list,可雙向遍歷,從Iteration接口繼承,添加了一些額外功能

34、怎麼確保一個集合不被修改

可以使用 Collections. unmodifiableCollection(Collection c) 方法來創建一個只讀集合,修改時會剖出異常

 

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