本人是雙非院校科班研究生,Java開發3年工做經驗,如下是最近的面試總結:mysql
先說下個人面試準備經歷,爲了保證本身簡歷有較大必定的機率經過篩選,我在2018畢業後面試了多家公司,去了一家上海一家小公司一直工做到今年5月。程序員
和往年相比,今年的金三銀四看上去不是那麼順利,可能和個人準備不足有關,可是令我驚訝的是第一家給我面試機會的公司居然是阿里巴巴。一開始接到面試通知時,心情特別複雜,緊張又興奮,阿里巴巴是出了名的深挖項目實戰,實際上我項目部分是相對薄弱的。此次面試,一共三輪,共計四個小時左右,這三輪面試對我來講,簡直是靈魂拷問,至於結局,往下看吧!面試

螞蟻基本是電話面。第一面leader面,第二面總監面,第三面交叉面。redis
第一輪面試:1小時28分鐘算法
面試官問的面試題:spring
- 最近作的項目介紹一下
- 作的過程當中遇到了什麼問題,如何解決的
- redis集羣高可用原理,一臺掛了,怎麼切換到另外一臺
- 如何保證redis和mysql數據一致
- 數據庫事務
- 很大的表如何優化
- limit的侷限性,limit值很大的時候有什麼問題
- mysql鎖介紹一下,有哪些應用場景
- 索引失效的場景
- 線程的生命週期
- 線程池很高怎麼處理
- 在分佈式任務中,一個微服務的不少線程報錯,如何處理和定位
- JVM內存分爲哪幾塊
- 介紹一下垃圾回收機制
- 有沒有閱讀JDK源碼的習慣
第二輪面試:1小時11分鐘sql
- ThreadLocal原理,放在堆仍是棧。用過嗎?
- Sync 能夠做用在哪裏? 有什麼區別?Sync的底層原理?
- 輕量級鎖升級成重量級鎖會有開銷?有沒有什麼辦法讓鎖不升級?上來就用重量級鎖?
- aop原理,實際使用過嗎?
- Springboot的使用過程當中,有哪些以爲比較方便的地方?
- 對spring的核心原理有哪些瞭解?會根據所答來進行深刻的問。
- Spring實例化bean的時候會實例化全部的bean嗎?
- Spring實例化的時候須要先構建一個實例嗎?
- Bean的循環依賴是怎麼解決的?
- 項目中爲何使用Redis?
- Redis的性能優化你如何實現?
- 從底層實現角度講講Redis爲何快?
- 線上Redis有哪些事項須要注意?
- 線上如何讓Redis 6.x性能發揮到最大?
- 線上Redis持久化方案如何選型?爲何?
- 談談Redis底層多路複用實現細節
- 有沒有使用Redis作過設計呢?
- JVM的調優大體步驟?
- Jvm的收集器有哪些?各自的優勢和缺點?以及各自的回收算法?
- Sql的優化?sql語句自己的優化?sql所用到索引的優化?
- 哪些狀況會致使sql的索引失效?
- 索引的底層結構以及優缺點?
第三輪面試交叉面:1小時15分鐘數據庫
- 項目相關的問題
- 秒殺項目須要考慮的問題
- 秒殺場景用到分佈式鎖的狀況,
- 服務隔離是如何作的,假設沒有分庫分表的狀況下,服務如何作隔離
- 數據庫CPU佔用率高的緣由
- 磁盤總空間50G,統計出來的空間有30G,剩餘20G可能去哪裏了
- 限流如何去作,不用redis,還能夠怎麼實現(令牌桶,滑動窗口)
- 項目轉變成微服務後遇到的問題,如何解決,
- 分佈式事物的實現原理(我本身引上來的TCC的分佈式事物)
- RocketMQ問得較多(嗚..沒有答好)
- 在RocketMQ的羣組消費中,每一個消費組都會消費主題的一份全量消息嗎?爲何?
- 假設一個RocketMQ集羣部署在兩個機房,每一個機房都有一些NameServer、Broker和客戶端節點,當兩個機房間的鏈路中斷時,NameServer、Broker能不能正常提供服務?爲何?
- 若是不須要嚴格順序,爲了提高消費性能,能夠不能夠將Consumer設置爲自動確認消費位置,而後批量拉取消息放到內存隊列中,而後異步多線程並行執行消費業務邏輯?爲何?
- RocketMQ能不能保證在「從消息生產直到消費完成」這個過程當中,消息不重不丟(Exactly once) ?
- 在RocketMQ的一個Broker 上,使用一個消息序號消費某個隊列的消息。其中,消息文件(commitlog)的數量是m個,全部消息文件中的消息條數是k條,目標隊列對應的索引文件(consumerQueue)的數量是n個,隊列中共有j條消息。查找消息的最快時間複雜度是多少?O(n)仍是O(1),爲何?
- RocketMQ使用了哪一種零拷貝技術?
- RocketMQ中如何解決重複消費?
- Dubbo 有哪些核心組件?底層原理?Spi是什麼?spi的好處是什麼
- 最近在學什麼?講講SpringCloud alibaba的一些東西
小結性能優化
項目相關的問題多線程
螞蟻沒有考算法,基礎知識也有考一些,感受更看重眼緣和講項目的能力。
大廠的面試,就是掛和被撈的過程。去年下半年沒面上幾個鐘意的公司以後,已經下決心繼續打磨一下本身。在今年上半年開始了新的面試。但我目前的簡歷技能模塊上重點強調本身對redis、多線程、jvm、MySQL這些知識點有比較熟練的掌握(後面二面後我被挖底層挖怕了,以致於我如今簡歷改爲了熟悉掌握)
另一個緣由就是RocketMQ沒有深刻研究過, 答得吞吞吐吐,聊完RockerMQ後, 我把話題轉移到Kafka時,聽面試官的語氣停頓了一下,估計有些小失望吧!但此次經歷給個人感覺仍是很不同的
而程序員在應聘時更是須要經歷層層面試。俗話說,磨刀不誤砍柴工,作好面試前的準備工做能夠幫助你們更好地應對面試官的問題以及面試中的突發狀況。
總的來講,本身若是有想要去的大公司,必定要提高好本身,讓本身的能力和素質與公司匹配的上,我也一直相信,機會永遠是留給有準備的人。