目的: 總結(jié)下面試時遇到的問題,并附上自己的答案.
1 Java基礎(chǔ)
1.1 Java的繼承,多態(tài)。 以及多態(tài)下的域和方法的調(diào)用問題 。
class A{
int num = 1;
public void print(){
System.out.print("num = " + num);
}
}
class B extends A{
int num = 2;
public void print2(){
System.out.print("numn = " + num);
}
/*
public void print(){
System.out.print("num = " + num);
}
*/
}
}
public class C{
public static void main(Stirng[] args){
A a = new B();
a.print();
// a.print2();
}
}
問輸出結(jié)果。
1.2 Java中四個權(quán)限修飾符是什么? 具體代表了什么權(quán)限。
1.3 String, String Builder, String Buffer有什么區(qū)別?
2 集合類
這方面是問的最多的。基本每個面試都會問。所以應(yīng)該仔細(xì)看一下。
2.1 map(Hashmap)了解嗎? 講一下你最常用的的map。
答案:一般我會隨身攜帶紙筆。遇到這個問題就將hashmap的結(jié)構(gòu)實(shí)現(xiàn)畫出來。如下圖:

image
不太明白的可以參考這個文章:
https://www.cnblogs.com/chengxiao/p/6059914.html
(題外: 如果對自己有自信,可以點(diǎn)名這種實(shí)現(xiàn)是jdk1.7, 在1.8后有所改變。但是這樣可能會讓面試官問你1.8是怎么實(shí)現(xiàn)的,沒信心回答好千萬的不要多此一舉)
在畫完這個圖后,基本就是對面試官照著圖講hashmap的源碼實(shí)現(xiàn)過程了。在講源碼的過程中要出現(xiàn)以下相關(guān)內(nèi)容
- 數(shù)組容量和負(fù)載因子。
- 向hashmap中添加元素時的實(shí)現(xiàn)過程:
- 檢查map的容量,此處會涉及到resize方法。
- 怎么確定在數(shù)組中的存儲位置,此處可以帶過
- 計(jì)算出來的位序一樣時怎么辦? 鏈表鏈接。
- 一定要點(diǎn)明添加的元素已經(jīng)存在的情況(通過比較hash值和equal方法), 在此處還能告訴面試官這就是為什么我們重寫hashcode要求重寫equals方法,顯得你對底層很了解.
2.2 List用過哪些? ArrayList 和 LinkedList的插入,刪除,查找的時間復(fù)雜度各是多少? 底層怎么實(shí)現(xiàn)? System.ArrayCopy 是怎么操作的, 會出現(xiàn)什么問題.
ArrayCopy會出現(xiàn)的問題: https://www.cnblogs.com/weikongziqu/p/5808184.html
3 多線程
3.1 三個線程順序打印(或者是線程C等待線程A和線程B的運(yùn)行結(jié)果)怎么實(shí)現(xiàn)
- 第一種方法是設(shè)置一個全局變量, 利用violate修飾,來動態(tài)的改變變量值,進(jìn)而實(shí)現(xiàn)不同線程能拿到不同的鎖
3.1 講一下synchronized
3.2 synchronized和lock的區(qū)別是什么
- synchronized是jdk自帶的同步工具。 在獲取鎖后,即使程序發(fā)生異常,它也能夠自動實(shí)現(xiàn)鎖的釋放。這點(diǎn)從對synchronized的反編譯能看出來。一個synchronized對應(yīng)一個monitor enter和兩個monitor exit。 這點(diǎn)是與lock不同的地方。 lock的釋放需要手動進(jìn)行。
3.3 線程間怎么通信
4 spring
4.1 介紹下MVC設(shè)計(jì)模式
4.2 spring AOP / IOC介紹一下
5 手寫代碼
5.1 排序算法
- 快排
- 堆排
- 歸并
- 冒泡
5.2 數(shù)組中只有0,1,2 三種數(shù), 對這個數(shù)組進(jìn)行排序. 要求不使用額外空間, 時間復(fù)雜度盡可能小
使用三個指針, 分別指向0,1,2. 移動指針進(jìn)行交換
5.3 查看一個字符串是不是以某個子字符串開頭(或者是否包含某個字符串)
使用正則表達(dá)式判斷. 也可以看一下String的源碼