208個面試題整理自用

208個面試題整理

網上看到大佬整理的208個面試題,自己整理出來,以方便自己使用。

原文戳這裏

下面是涉及到的模塊。

java面試題模塊

java基礎

  1. JDK和JRE的區別

JRE是java運行環境,是供java應用程序的用戶使用的。

JDK是java開發工具,是供java開發人員使用的。包含了JRE和java的編譯器

  1. == 和equals的區別

==對於基本數據類型來說直接比較數值,對於引用類型來說比較的是其內存首地址;

equals比較的是內存中存的值是否相同。對於我們自定的類使用這個方法需要重寫實現,不然效果和==是一樣的。

  1. 兩個對象的hashCode()相同,則equals()也一定爲true,對嗎?

不對。hashCode一樣只是兩者在內存中存儲的首地址是一樣的,但是值不一定一樣。

  1. final在java中的作用

final是java中的修飾詞,可以修飾變量、方法、類。修飾變量標識變量的值時常量,不需進行初始化且不可改變,修飾方法標識方法不可被重寫,修飾類標識類不可以被繼承。

  1. java中的Math.round(-1.5)等於多少

-1

  1. String屬於基本數據類型嗎

不屬於

  1. java中操作字符串有哪些類?他們有什麼區別?

String,StringBuilder,StringBuffer.

String的內容不可更改,StringBuilder和StringBuffer的內容是可以更改的;

StringBuilder是線程不安全的,StringBuffer是線程安全的。

  1. String str=“i”;與String str=new String(“i”);一樣嗎

分配內存的方式不一樣。第一種分配在常量池中,會先在字符常量池中尋找有沒有一樣值的字符串,若有了就直接指向該地址,沒有的話會先在常量池新建一個,再進行地址指向;

而第二種會在堆內存新建一個對象,再進行指向。

  1. 如何將字符串進行反轉

可以使用StringBuilder或者StringBuffer的reserve方法進行反轉

  1. String的常用方法都有哪些

equals方法比較兩個字符串的值是否一樣;

charAt方法輸出指定索引處字符;

getBytes方法得到字符串的字節類型的數組

indexOf方法得到指定字符的索引

replace方法進行字符替換

trim方法可以去掉字符串前後的空格

split方法可以分割字符串,返回分割後的數組

length方法返回字符串長度

toLowerCase返回轉變爲小寫之後的字符串

toUpeerCase返回轉變爲大寫之後的字符串

substring截取字符串

  1. 抽象類一定要有抽象方法嗎

不一定

  1. 普通類和抽象類有哪些區別

抽象類不能直接進行實例化,普通方法可以

普通類不可以含有抽象方法,抽象類可以含有抽象方法

  1. 抽象類能使用final修飾嗎

不能。因爲final修飾過的類不能重寫,而抽象類不重寫就沒法進行抽象方法的實現

  1. 接口和抽象類的區別

抽象類可以有構造器,而接口不可以有構造器

抽象類中的修飾符可以是任意的,而接口是可以是public的

java中可以多實現接口,但是只可以單繼承抽象類

  1. java中的IO流分幾種

根據功能來分:輸入流輸出流;

根據類型分:字節流字符串;

  1. BIO、NIO、AIO有什麼區別

BIO:Block IO同步阻塞式IO,是我們平時使用的傳統的IO

NIO:New IO同步非阻塞IO,客戶端服務端通過通道Channel通訊,實現了多路複用

AIO:Asynchronized IO異步非阻塞IO

  1. Files的常用方法有什麼

exists方法判斷路徑是否存在

createFile創建文件

createDicrectory創建文件夾

delete刪除一個文件或目錄

copy複製文件

move移動文件

size查看文件個數

read讀取文件

write寫入文件

容器

  1. java容器都有哪些

java容器

ArrayList、LinckedList、Vector、HashSet、HashMap、HashTable、ConcurrentHashMap

  1. Collection與Collections的區別

Collection是java中的一個集合接口,提供了一些對集合進行基本操作的方法,直接實現類有List和Set;

Collections是工具類,提供了許多方法對集合進行操作,如排序、搜索、線程安全等。

  1. List、Set、Map的區別

List和Set是Collection的子類,存的是單個的值,Map是以鍵值對的形式存儲的

List是有序的可重複的,Set是無序的不可重複的

  1. HashTable和HashMap有什麼區別

一是HashMap允許以null作爲鍵和值,而HashTable是不允許的

二是HashMap是線程不安全的,HashTable是線程安全的

  1. 如何決定使用HashMap還是TreeMap

若要對Map進行插入刪除操作時,應當使用HashMap,而若有排序需求的應當使用TreeMap

  1. HashMap的實現原理

HashMap在jdk1.8之前是以數組+鏈表的形式實現的,在1.8之後是以數組+鏈表+紅黑樹的形式實現的

  1. HashSet的實現原理

HashSet是以HashMap實現的。HashSet的值存在hashMap的key值中

  1. ArrayList和LinkedList的區別

ArrayList底層是以數組來實現的,LinkedList的底層是以雙向鏈表來實現的。所以ArrayList的查詢效率較高,插入和刪除的效率較低,而LinkedList的查詢效率較低,插入和刪除的效率較高

  1. 如何實現數組和List的轉換

List轉數組:toArray方法

數組轉List:asList方法

  1. ArrayList和Vector的區別是什麼

Vector是線程安全的,而ArrayList並不能保證線程的安全,所以ArrayList的性能更好

  1. Array和ArrayList的區別

數組的長度不可改變,而ArrayList的長度是可以延長的

數組可以容納基本數據類型,也可以容納對象,而ArrayList只可以容納對象

數組沒有提供列表那麼多的方法

  1. 在Queue中poll()和remove()的區別是

poll方法在獲取元素失敗的時候會返回空,而remove會拋出異常

  1. 哪些集合類是線程安全的

Vector、HashTable、stack、enumeration(枚舉,相當於迭代器)

  1. 迭代器Iterator是什麼

迭代器是用來對集合進行遍歷使用的

  1. Iterator怎麼使用,有什麼特點

調用Collection下的實現類提供iterator方法來獲得Iterator類的實例,使用next方法可以獲得下一個元素,而hasNext檢查序列中是否還有可遍歷的元素

  1. Iterator和ListIterator的區別

ListIterator只可以使用在ArrayList上,而Iterator可以在Set和List中使用

Iterator只可以單向遍歷,而ListIterator既可以向前也可以向後

  1. 怎麼確保一個集合不能被修改

使用Collections下的unmodifiablexxx方法返回的集合時不可以被修改的,修改會報錯,如unmodifiableMap、unmodifiableList、unmodifiableSet

注:不能使用final來實現,因爲final修飾變量若是基本數據類型值不能修改,而修飾引用類型是地址不可修改,但是值可以修改,集合都是引用類型的。

多線程

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