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