208個面試題整理
網上看到大佬整理的208個面試題,自己整理出來,以方便自己使用。
下面是涉及到的模塊。
java基礎
- JDK和JRE的區別
JRE是java運行環境,是供java應用程序的用戶使用的。
JDK是java開發工具,是供java開發人員使用的。包含了JRE和java的編譯器
- == 和equals的區別
==對於基本數據類型來說直接比較數值,對於引用類型來說比較的是其內存首地址;
equals比較的是內存中存的值是否相同。對於我們自定的類使用這個方法需要重寫實現,不然效果和==是一樣的。
- 兩個對象的hashCode()相同,則equals()也一定爲true,對嗎?
不對。hashCode一樣只是兩者在內存中存儲的首地址是一樣的,但是值不一定一樣。
- final在java中的作用
final是java中的修飾詞,可以修飾變量、方法、類。修飾變量標識變量的值時常量,不需進行初始化且不可改變,修飾方法標識方法不可被重寫,修飾類標識類不可以被繼承。
- java中的Math.round(-1.5)等於多少
-1
- String屬於基本數據類型嗎
不屬於
- java中操作字符串有哪些類?他們有什麼區別?
String,StringBuilder,StringBuffer.
String的內容不可更改,StringBuilder和StringBuffer的內容是可以更改的;
StringBuilder是線程不安全的,StringBuffer是線程安全的。
- String str=“i”;與String str=new String(“i”);一樣嗎
分配內存的方式不一樣。第一種分配在常量池中,會先在字符常量池中尋找有沒有一樣值的字符串,若有了就直接指向該地址,沒有的話會先在常量池新建一個,再進行地址指向;
而第二種會在堆內存新建一個對象,再進行指向。
- 如何將字符串進行反轉
可以使用StringBuilder或者StringBuffer的reserve方法進行反轉
- String的常用方法都有哪些
equals方法比較兩個字符串的值是否一樣;
charAt方法輸出指定索引處字符;
getBytes方法得到字符串的字節類型的數組
indexOf方法得到指定字符的索引
replace方法進行字符替換
trim方法可以去掉字符串前後的空格
split方法可以分割字符串,返回分割後的數組
length方法返回字符串長度
toLowerCase返回轉變爲小寫之後的字符串
toUpeerCase返回轉變爲大寫之後的字符串
substring截取字符串
- 抽象類一定要有抽象方法嗎
不一定
- 普通類和抽象類有哪些區別
抽象類不能直接進行實例化,普通方法可以
普通類不可以含有抽象方法,抽象類可以含有抽象方法
- 抽象類能使用final修飾嗎
不能。因爲final修飾過的類不能重寫,而抽象類不重寫就沒法進行抽象方法的實現
- 接口和抽象類的區別
抽象類可以有構造器,而接口不可以有構造器
抽象類中的修飾符可以是任意的,而接口是可以是public的
java中可以多實現接口,但是只可以單繼承抽象類
- java中的IO流分幾種
根據功能來分:輸入流輸出流;
根據類型分:字節流字符串;
- BIO、NIO、AIO有什麼區別
BIO:Block IO同步阻塞式IO,是我們平時使用的傳統的IO
NIO:New IO同步非阻塞IO,客戶端服務端通過通道Channel通訊,實現了多路複用
AIO:Asynchronized IO異步非阻塞IO
- Files的常用方法有什麼
exists方法判斷路徑是否存在
createFile創建文件
createDicrectory創建文件夾
delete刪除一個文件或目錄
copy複製文件
move移動文件
size查看文件個數
read讀取文件
write寫入文件
容器
- java容器都有哪些
ArrayList、LinckedList、Vector、HashSet、HashMap、HashTable、ConcurrentHashMap
- Collection與Collections的區別
Collection是java中的一個集合接口,提供了一些對集合進行基本操作的方法,直接實現類有List和Set;
Collections是工具類,提供了許多方法對集合進行操作,如排序、搜索、線程安全等。
- List、Set、Map的區別
List和Set是Collection的子類,存的是單個的值,Map是以鍵值對的形式存儲的
List是有序的可重複的,Set是無序的不可重複的
- HashTable和HashMap有什麼區別
一是HashMap允許以null作爲鍵和值,而HashTable是不允許的
二是HashMap是線程不安全的,HashTable是線程安全的
- 如何決定使用HashMap還是TreeMap
若要對Map進行插入刪除操作時,應當使用HashMap,而若有排序需求的應當使用TreeMap
- HashMap的實現原理
HashMap在jdk1.8之前是以數組+鏈表的形式實現的,在1.8之後是以數組+鏈表+紅黑樹的形式實現的
- HashSet的實現原理
HashSet是以HashMap實現的。HashSet的值存在hashMap的key值中
- ArrayList和LinkedList的區別
ArrayList底層是以數組來實現的,LinkedList的底層是以雙向鏈表來實現的。所以ArrayList的查詢效率較高,插入和刪除的效率較低,而LinkedList的查詢效率較低,插入和刪除的效率較高
- 如何實現數組和List的轉換
List轉數組:toArray方法
數組轉List:asList方法
- ArrayList和Vector的區別是什麼
Vector是線程安全的,而ArrayList並不能保證線程的安全,所以ArrayList的性能更好
- Array和ArrayList的區別
數組的長度不可改變,而ArrayList的長度是可以延長的
數組可以容納基本數據類型,也可以容納對象,而ArrayList只可以容納對象
數組沒有提供列表那麼多的方法
- 在Queue中poll()和remove()的區別是
poll方法在獲取元素失敗的時候會返回空,而remove會拋出異常
- 哪些集合類是線程安全的
Vector、HashTable、stack、enumeration(枚舉,相當於迭代器)
- 迭代器Iterator是什麼
迭代器是用來對集合進行遍歷使用的
- Iterator怎麼使用,有什麼特點
調用Collection下的實現類提供iterator方法來獲得Iterator類的實例,使用next方法可以獲得下一個元素,而hasNext檢查序列中是否還有可遍歷的元素
- Iterator和ListIterator的區別
ListIterator只可以使用在ArrayList上,而Iterator可以在Set和List中使用
Iterator只可以單向遍歷,而ListIterator既可以向前也可以向後
- 怎麼確保一個集合不能被修改
使用Collections下的unmodifiablexxx方法返回的集合時不可以被修改的,修改會報錯,如unmodifiableMap、unmodifiableList、unmodifiableSet
注:不能使用final來實現,因爲final修飾變量若是基本數據類型值不能修改,而修飾引用類型是地址不可修改,但是值可以修改,集合都是引用類型的。