人是雙非院校科班研究生,Java開發3年工作經驗,以下是最近的面試總結:
先說下我的面試準備經歷,爲了保證自己簡歷有較大一定的概率通過篩選,我在2018畢業後面試了多家公司,去了一家上海一家小公司一直工作到今年5月。
和往年相比,今年的金三銀四看上去不是那麼順利,可能和我的準備不足有關,但是令我驚訝的是第一家給我面試機會的公司竟然是阿里巴巴。一開始接到面試通知時,心情特別複雜,緊張又興奮,阿里巴巴是出了名的深挖項目實戰,實際上我項目部分是相對薄弱的。這次面試,一共三輪,共計四個小時左右,這三輪面試對我來說,簡直是靈魂拷問,至於結局,往下看吧!
螞蟻基本是電話面。第一面leader面,第二面總監面,第三面交叉面。
第一輪面試:1小時28分鐘
面試官問的面試題:
- 最近做的項目介紹一下
- 做的過程中遇到了什麼問題,如何解決的
- redis集羣高可用原理,一臺掛了,怎麼切換到另一臺
- 如何保證redis和mysql數據一致
- 數據庫事務
- 很大的表如何優化
- limit的侷限性,limit值很大的時候有什麼問題
- mysql鎖介紹一下,有哪些應用場景
- 索引失效的場景
- 線程的生命週期
- 線程池很高怎麼處理
- 在分佈式任務中,一個微服務的很多線程報錯,如何處理和定位
- JVM內存分爲哪幾塊
- 介紹一下垃圾回收機制
- 有沒有閱讀JDK源碼的習慣
第二輪面試:1小時11分鐘
- 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時,聽面試官的語氣停頓了一下,估計有些小失望吧!但這次經歷給我的感受還是很不一樣的
而程序員在應聘時更是需要經歷層層面試。俗話說,磨刀不誤砍柴工,做好面試前的準備工作可以幫助大家更好地應對面試官的問題以及面試中的突發情況。
總的來說,自己如果有想要去的大公司,一定要提升好自己,讓自己的能力和素質與公司匹配的上,我也一直相信,機會永遠是留給有準備的人。下面這份我經常刷的面試手冊,分享給大家~
資料獲取方式:
轉發+私信關鍵詞 【筆記】即可免費獲取到!
第二步:複習+總結
離面試期越來越近也越來越焦慮,這個時候更需要去調整好自己的心態,沉入到複習當中,對各個知識點要學會查漏補缺,學着多去做做總結。
關於複習和總結,我自己也整理了不少資料,均是我的收穫,有需要的也可以進行分享。
<meta charset="utf-8">
第三步:刷題
- Java築基系列:Tomcat+Mysql+設計模式+併發+Netty+JVM
- 開源框架系列:Spring+SpringMVC+MyBatis
- 微服務架構:Dubbo+SpringBoot+SpringCloud
- 分佈式數據庫系列:Memcached+Redis+MongoDB
- 分佈式通訊系列:ActiveMQ+RabbitMQ+Kafka
- 分佈式限流系統:Nginx+zookeeper
- 一線互聯網大廠歷年真題系列
- 算法寶典