更新時間:2024-04-01 17:10:59作者:佚名
前兩天,我收到了阿里巴巴的實習(xí)offer。 從前輩推薦到面試再到拿到最終offer,我經(jīng)歷了4個技術(shù)環(huán)節(jié)、跨級面試和HR面試。 經(jīng)過漫長的等待和幾次近乎折磨的面試,我終于拿到了實習(xí)offer。
自我介紹
我來自西南地區(qū)的一所非本科學(xué)校,專業(yè)是物聯(lián)網(wǎng)工程。 我的專業(yè)與Java開發(fā)關(guān)系不大,在學(xué)校也只教過一些簡單的編程課。 其余的編程相關(guān)知識都是我利用業(yè)余時間在實驗室自學(xué)和教授的。 我不是技術(shù)大師。 我做過很多項目,但大部分都是我實踐過的小項目或者一些有趣的小項目。 我從來沒有接觸過真正的大項目。 閑暇時,我喜歡瀏覽微信公眾號、簡書、掘金等平臺,閱讀技術(shù)文章。 我也偶爾寫一些文章。 我在學(xué)校期間花了很多時間在實驗室,我喜歡編寫代碼和克服問題的過程。
面試準(zhǔn)備
?首先,在準(zhǔn)備校招之前本科雙非是什么意思,一定要做好充分的準(zhǔn)備。 長期的是你的基本編程能力和對各個知識點的理解。 短期的就是突破自己不會的知識點。
我在投簡歷前就開始準(zhǔn)備一個半月。 第一步是溫習(xí) leetcode。 算法水平還是比較重要的,阿里巴巴也有筆試成績。 面試的時候也會問一些筆試題,難度不是太大;
然后我需要找更多的面試,看看面試官在面試的時候問了我的學(xué)長什么問題。 如果你遇到一些你知道該怎么做的事情,請嘗試自己回答。 遇到不知道怎么做的事情,就去研究;
不過網(wǎng)上找到的面試經(jīng)歷可能是因為每個人的學(xué)習(xí)過程不一樣。 個人感覺找到類似面試經(jīng)歷的概率不是很高。 我正好在H大學(xué)的知識星球,所以向H大學(xué)請教一些簡歷指導(dǎo)(不是廣告方面的,真心感謝H大學(xué));
最后,我找到了一份非常完整的 Java 面試問題和答案文檔,可以用作復(fù)習(xí)材料。 (Java面試指南及核心知識指南復(fù)習(xí))
面試過程
第一次技術(shù)面試(60 分鐘)
告訴我你用的是什么類型的線程池以及自定義線程池的參數(shù)是什么。 講一下線程池的執(zhí)行過程。 您的項目中核心線程數(shù)、最大線程數(shù)和隊列大小是如何定義的? 的? 為什么這樣定義呢? (我的導(dǎo)師告訴我,這道題是加分項。) 項目中如何防止超賣? 下單的SQL語句怎么寫? (考察MySQL的樂觀鎖)如果有用戶反饋整個系統(tǒng)的反饋比較慢,你們是如何排查和解決問題的? 系統(tǒng)響應(yīng)慢的原因有哪些? 算法問題:給定一個無序數(shù)組和一個目標(biāo)值,找到數(shù)組中兩個數(shù)字之和等于目標(biāo)值的所有組合,并指出其時間復(fù)雜度。 (一道很簡單的算法題,leetcode簡單難度)你了解JVM內(nèi)存模型了嗎? 我們來說說哪些是線程獨占的,哪些是線程間共享的? 下面我們詳細講一下Java堆的分區(qū),它們的比例,如果比例增大會有什么后果? 我們來談?wù)?JVM 的 GC 算法以及為什么“標(biāo)記排序”方法更好。 它能解決什么樣的問題? 你了解過Java類加載機制嗎? 有哪些類型的類加載器? 如果想查看線上運行的服務(wù)的GC日志,需要輸入什么命令? 你了解過HashMap嗎? 我們先來說說HashMap的原理。 如果兩個對象的hashCode相同,那么它們一定是同一個對象嗎? 如果它們是兩個相等的對象,那么它們的hashCode是否相同? 如何解決哈希沖突? HashMap是線程安全的嗎? 如何將HashMap變成線程安全的類? 我們先來說說MySQL數(shù)據(jù)庫有哪些數(shù)據(jù)庫引擎? InnoDB的索引的數(shù)據(jù)結(jié)構(gòu)是怎樣的? 我們來談?wù)勊脑怼?數(shù)據(jù)庫事務(wù)級別及其解決的問題。 請舉例說明MySQL默認的事務(wù)級別是多少? 如何在MySQL中啟用慢查詢? 說說Spring主要包含哪些模塊? 說說你對Spring的IOC容器和啟動流程的理解。 你了解過RPC框架或者分布式的東西嗎? (后來我讓面試官測試了我對新技術(shù)的理解以及對互聯(lián)網(wǎng)發(fā)展的關(guān)注)告訴我你讀過的關(guān)于Java的書。
第二次技術(shù)面試(30分鐘)
介紹一下你做過的你認為最好的項目; 談?wù)勀愕捻椖恐械募夹g(shù)困難和挑戰(zhàn)。 如何解決商場項目的超賣和欠賣問題? 我們先來說說什么是冪等Redis,以及它是如何保證高可用的。 你知道Redis的哨兵模式嗎? 您認為使用Redis有什么缺點嗎? 你如何進行壓力測試? 壓力測試的數(shù)據(jù)是什么? 線城的參數(shù)是什么? 核心線程數(shù)和最大線程數(shù)有什么區(qū)別? 常見的拒絕策略有哪些?介紹SpringBoot的特點,講解什么是單例模式,什么是饑餓模式,懶惰模式,使用懶惰模式的注意事項以及如何解決,講解 volatile 關(guān)鍵字的作用和原理本科雙非是什么意思,講解自旋鎖以及一些常見的自旋鎖。 下面講一下數(shù)據(jù)庫的左外連接數(shù)據(jù)庫索引的實現(xiàn)以及優(yōu)化數(shù)據(jù)庫索引的數(shù)據(jù)結(jié)構(gòu)。
第三次技術(shù)面試(25分鐘)
如何解決商場項目的超賣和欠賣問題? 開發(fā)項目過程中遇到了哪些問題? Redis與數(shù)據(jù)庫同步時出現(xiàn)問題如何解決? 我們先來說說Java中線程的狀態(tài)。 線程阻塞和等待有什么區(qū)別? 介紹一些Java鎖機制。 你了解過哪些類型的鎖? 為什么Object中有wait和notify方法? 課下的分布式和RPC框架你了解了嗎? Redis的線程模型是怎樣的(考察NIO) Redis實現(xiàn)的消息隊列是如何保證消息不丟失的? 介紹一下堆排序是如何實現(xiàn)的。 介紹TCP/IP協(xié)議如何保證消息不丟失。 TCP/IP協(xié)議為了可靠傳輸做了哪些優(yōu)化(擁塞控制和流量控制)
第四次技術(shù)面試(15分鐘)
告訴我你提交的文章是關(guān)于什么的以及如何解決消息隊列超賣的問題? 訂購流程是如何設(shè)計的? 介紹雪花算法。 怎么理解分布呢? 分布式系統(tǒng)之間如何通信? 生產(chǎn)者和消費者模型如何運作? Java創(chuàng)建線程的代碼場景:給定一個字符串,統(tǒng)計每個大寫字母出現(xiàn)的次數(shù),按數(shù)字排序,從小到大輸出字母和出現(xiàn)次數(shù)。
交叉采訪(30分鐘)
您在校學(xué)習(xí)期間,哪些課程可能取得了較好的成績,為什么您在這些課程中取得了較好的成績? 您學(xué)習(xí) Java 有多久了? 你是如何學(xué)習(xí)Java的? 你見過哪些開源框架源碼? 如何查看開源框架的源碼? 介紹一個你參與較多或者難度較大的項目。 你們團隊開發(fā)項目的時候,有沒有遇到什么技術(shù)問題大家一起解決的? 這個項目有借鑒其他成熟項目的經(jīng)驗嗎? 告訴我們您的項目的要求和指標(biāo)。 您的項目中線程池隊列容量大約是多少? 它是如何確定的? 項目中的某些解決方案是個人想出的還是團隊討論的結(jié)果? 如果再讓你建設(shè)一個商場系統(tǒng),你會做哪些技術(shù)選型項目? 采取了哪些安全措施?您將如何設(shè)計淘寶會員系統(tǒng)? 未來的方向是什么?采訪總結(jié)
每次面試都感覺像是一種折磨。 雖然之前看過很多阿里的面試,都說阿里的面試官會抓住某個點,一直問到你不知道為止。 但當(dāng)?shù)谝淮谓?jīng)歷的時候,有時候,我還是覺得很折磨。
但最后的結(jié)果還是好的。 至少我收到了我想要的offer,而且在疫情期間的環(huán)境不好的情況下也能找到一份實習(xí)工作。
整個學(xué)習(xí)過程和面試過程,我最大的感悟有四點: