最近原來實(shí)習(xí)時(shí)候的Boss聯(lián)系我,說他跳槽到了阿里总放,問我有沒有興趣面一個(gè)Java后臺(tái)開發(fā)崗位呈宇。考慮到我只工作了一年局雄,現(xiàn)在去阿里肯定要降薪甥啄,因此也沒有太強(qiáng)烈的意愿。但出于提升自我的角度考慮炬搭,參加了面試蜈漓。
一面(電話面試一小時(shí))
首先做一個(gè)簡(jiǎn)單的自我介紹,主要包括學(xué)校經(jīng)歷和工作經(jīng)歷宫盔。我工作經(jīng)歷只有一年融虽,大部分時(shí)間都是在做產(chǎn)品設(shè)計(jì)和UI/UX Design,因此隔著電話都能感受到面試官的shock灼芭。
Java基礎(chǔ)有额。自動(dòng)拆裝箱如何實(shí)現(xiàn),String,StringBuffer巍佑,StringBuilder的異同以及各自的實(shí)現(xiàn)茴迁。
JVM基礎(chǔ)。JVM的內(nèi)存模型萤衰,常見的垃圾回收算法堕义。
參考我的文集:《深入理解Java虛擬機(jī)》
- 事務(wù)ACID,編程時(shí)如何保證事務(wù)脆栋,分布式情況下如何保證事務(wù)倦卖。
由于分布式相關(guān)場(chǎng)景我沒有接觸過,因此面試官一直誘導(dǎo)我去設(shè)計(jì)實(shí)現(xiàn)一個(gè)分布式事務(wù)椿争。
數(shù)據(jù)庫樂觀鎖和悲觀鎖怕膛。如何實(shí)現(xiàn)一個(gè)樂觀鎖。
消息隊(duì)列使用場(chǎng)景秦踪,Kafka的架構(gòu)以及原理嘉竟。
什么是restful api,和rpc調(diào)用有什么區(qū)別洋侨。
單例的幾種寫法。volatile關(guān)鍵字有什么作用倦蚪。
以上就是電話面試的大體問題希坚,面試完之后,又發(fā)給我三道算法題目陵且,要求我一小時(shí)內(nèi)完成裁僧,下面是三道算法題:
- 翻轉(zhuǎn)一個(gè)long類型數(shù)字。例如輸入123456L慕购,輸出654321L聊疲。
public long reverse(long i){
}
Leetcode翻轉(zhuǎn)integer的變種』Ρ考察能否正確處理溢出的情況获洲。
- 輸入一個(gè)double,要求返回與它最接近的.49或.99的數(shù)字殿如。例如12.77返回12.99贡珊,11.02返回10.99,12.61返回12.49涉馁。
這道題目應(yīng)該沒有什么坑门岔,邏輯清晰即可。
- 有三個(gè)線程ABC分別向一個(gè)數(shù)組中寫入a烤送,l寒随,i,要求最終的寫入結(jié)果形如alialiali...寫入次數(shù)由A線程決定。
考察線程等待喚醒妻往。具體參考我的這篇文章:多線程順序打印問題
這三道題目做的還比較順利互艾,第二天面試官又聯(lián)系我闡述一下第一題和第三題的思路,然后通知我可以參加下一輪了蒲讯。
二面(電話面試一小時(shí))
二面主要考察了一些開放式的問題忘朝。
首先還是自我介紹。主要是工作后的經(jīng)歷判帮。介紹一下工作一年所在team的產(chǎn)品局嘁,我承擔(dān)了什么職責(zé)。
開放式問題晦墙。如何設(shè)計(jì)一個(gè)rpc框架悦昵。
開放式問題。如何設(shè)計(jì)一個(gè)服務(wù)注冊(cè)中心晌畅。
集合類源碼但指。HashMap是如何實(shí)現(xiàn)的,擴(kuò)容的過程抗楔,為什么要擴(kuò)容為2倍棋凳。HashMap中的鏈表替換為數(shù)組可以嗎?時(shí)間復(fù)雜度相同嗎连躏?一致性哈希算法
集合類源碼剩岳。線程安全的HashMap是什么?(HashTable和ConcurrentHashMap)ConcurrentHashMap是如何實(shí)現(xiàn)的入热?(Java7分段鎖和Java8的CAS+Lock)和HashTable相比有什么優(yōu)勢(shì)拍棕?
紅黑樹的結(jié)構(gòu),時(shí)間復(fù)雜度是多少勺良,如何計(jì)算的
什么是CAS操作绰播,如何實(shí)現(xiàn)一個(gè)自定義鎖
- 數(shù)據(jù)庫設(shè)計(jì)。有一張很大的order表尚困,如何設(shè)計(jì)能夠提升查詢效率(同時(shí)滿足根據(jù)買家id和賣家id查詢)蠢箩?
二面也同樣是一小時(shí)左右,面試過程還算順利事甜。只是當(dāng)時(shí)我在廈門鼓浪嶼的一家小餐館吃晚飯忙芒,周圍的嘈雜和悶熱使我很煩躁,感覺面試官態(tài)度有些傲慢讳侨。呵萨。。ps.一面二面結(jié)束后面試官都各種暗示我要瘋狂加班能不能接受blabla跨跨。潮峦。囱皿。
三面(電話面試一個(gè)半小時(shí))
二面結(jié)束后的第三天,就收到了現(xiàn)場(chǎng)三面的通知忱嘹。然而我還在廈門旅行嘱腥,因此改為了電話面試。
三面是一個(gè)大Boss拘悦,因此面試的問題都更考察一些分析問題的能力齿兔。
介紹一下你工作一年學(xué)習(xí)到什么?所在項(xiàng)目的架構(gòu)是什么樣的础米?UI/UX設(shè)計(jì)有哪些規(guī)范(由于我說我學(xué)到了一些UI/UX設(shè)計(jì)方法分苇,因此面試官就問了)?
數(shù)據(jù)隔離級(jí)別屁桑,臟讀幻讀医寿。
具體參考我的這篇文章:數(shù)據(jù)庫復(fù)習(xí)
- 線程池原理。
具體參考我的這篇文章:Chapter 9 Java中的線程池
- Synchronized的實(shí)現(xiàn)蘑斧,鎖的升級(jí)過程靖秩。
具體參考我的這篇文章:Chapter 2 Java并發(fā)機(jī)制的底層實(shí)現(xiàn)原理
- K8s的作用,K8s的底層架構(gòu)竖瘾。
具體參考我的K8s文集:Kubernetes從入門到實(shí)踐
對(duì)我業(yè)余時(shí)間做的一些項(xiàng)目做了介紹沟突。
你覺得加入阿里你能給阿里帶來什么?
進(jìn)入阿里你需要忍受很多困難捕传,需要迎難而上事扭,如果績(jī)效考評(píng)拿到差評(píng),你會(huì)怎么辦乐横?
三面總的來說也還算順利,面試官也算和藹今野。
總結(jié)
整個(gè)流程從一面到三面結(jié)束大約持續(xù)了10天左右葡公。總的來說条霜,問題都是預(yù)期范圍內(nèi)的催什,雖然面試過程中問到了一些分布式相關(guān)問題,我都沒有任何經(jīng)驗(yàn)宰睡,這時(shí)候不要放棄蒲凶,主動(dòng)說出你的思路,然后在面試官的誘導(dǎo)下拆内,相信你能說出屬于的答案旋圆。
最后,是我總結(jié)的一些面試Java后臺(tái)工程師必須要掌握的知識(shí)點(diǎn)麸恍。相信這些知識(shí)點(diǎn)都掌握了灵巧,就是一名入門的Java工程師了搀矫!
1. 集合類源碼
- ArrayList:內(nèi)部數(shù)據(jù)結(jié)構(gòu),數(shù)組擴(kuò)容機(jī)制
- LinkedList:內(nèi)部數(shù)據(jù)結(jié)構(gòu)刻肄,為什么使用雙向鏈表
- HashMap:內(nèi)部數(shù)據(jù)結(jié)構(gòu)瓤球,put方法的完整流程,擴(kuò)容機(jī)制
- LikedHashMap:內(nèi)部數(shù)據(jù)結(jié)構(gòu)敏弃,如何實(shí)現(xiàn)一個(gè)Cache
- TreeMap:內(nèi)部數(shù)據(jù)結(jié)構(gòu)卦羡,時(shí)間復(fù)雜度
- CurrentHashMap:內(nèi)部數(shù)據(jù)結(jié)構(gòu),Java7分段鎖麦到,Java8 CAS+Synchronized
2. Java基礎(chǔ)
- 自動(dòng)拆裝箱原理
- String绿饵,StringBuffer和StringBuilder
- Throwable
- reader和stream
- NIO(參考我的文集:《Java NIO學(xué)習(xí)筆記》)
3. JVM基礎(chǔ)(參考我的文集:《深入理解Java虛擬機(jī)》)
- JVM內(nèi)存模型(參考我的文章:Chapter 2 Java內(nèi)存區(qū)域與內(nèi)存溢出異常)
- 常見垃圾回收算法(參考我的文集:Chapter 3 垃圾收集器與內(nèi)存分配)
4. 并發(fā)編程基礎(chǔ)(參考我的文集:《Java 并發(fā)編程的藝術(shù)》和《Java Concurrency in Practice》)
- Synchronized關(guān)鍵字原理(參考我的文章:Chapter 2 Java并發(fā)機(jī)制的底層實(shí)現(xiàn)原理)
- wait,notify隅要,sleep(參考我的文章:Java object wait蝴罪,notify)
- 安全的終止線程以及線程的狀態(tài)轉(zhuǎn)換(參考我的文章:Chapter 4 線程基礎(chǔ))
- 自定義Lock(參考我的文章:Chapter 5 Java中的鎖(一)和Chapter 5 Java中的鎖(二))
- 線程池原理(參考我的文章:Chapter 9 Java中的線程池和Chapter 10 Executor框架)
5. 數(shù)據(jù)庫基礎(chǔ)
- 數(shù)據(jù)庫三范式,事務(wù)ACID步清,隔離級(jí)別要门,視圖,索引(41參考我的文章:數(shù)據(jù)庫復(fù)習(xí))
- JPA實(shí)體狀態(tài)(參考我的文章:JPA實(shí)體的四種狀態(tài))
- EntityManger(參考我的文章:JPA EntityManager詳解)
6. 網(wǎng)絡(luò)基礎(chǔ)
- TCP/IP(參考我的文章:網(wǎng)絡(luò)復(fù)習(xí))
7. 常見設(shè)計(jì)模式
- 裝飾者廓啊,模板方法欢搜,策略,工廠谴轮,狀態(tài)