前言
前兩天,我收到了阿里巴巴的實習offer,從學長內推開始面試到拿到最後offer經歷了4面技術、一面交叉面和一面HR面。經過了漫長的等待和幾次幾乎折磨的面試之後,終於拿到了實習offer。
自我介紹
本人來自西南某雙非本科學校,該校學的專業是物聯網工程。我的專業與Java開發關係不大,學校也只教過一些簡單的程式設計課,其餘的程式設計相關知識都是自己在課餘時間在實驗室學習和自學的。技術不是大牛,專案做得多但是大部分都是自己練手的小專案或者一些有意思的小專案,沒有接觸過真正意義上的大專案。平時沒事的時候喜歡逛一逛微信公眾號、簡書、掘金等平臺,看一看技術類文章,自己也偶爾寫過一些文章。在校期間在實驗室的時間偏多,喜歡寫程式碼的過程和攻克難題的過程。
面試準備
首先準備校招之前一定是要好好準備的,長期的就是自己的程式設計基本功以及對各個方面知識點的瞭解程度,短期的就是突破一下自己不會的知識點。
我是投簡歷之前一個半月就開始做準備了,首先就是刷leetcode,演演算法這一關還是比較重要,而且阿里還有筆試成績,面試的時候也會問到一些不是太難的筆試題;
然後就是多找幾篇面經,看看學長學姐當初面試的時候面試官都問了哪些問題,如果遇到會的,自己嘗試回答一遍,如果遇到不會的,那就去學習一下;
不過網上找的面經可能因為大家的學習過程不一樣,找到類似的面經的概率個人感覺不太大,我恰巧在H大的知識星球裡面,就找H大做了一下簡歷指導(不是在打廣告,是真心感謝H大);
最後找到了一個很完整的Java面試題及答案的檔案用來做複習資料。(Java面試寶典及核心知識寶典複習)
面試過程
第一次技術面(60min)
- 說一說你使用的是什麼樣的執行緒池,自定義執行緒池的幾個引數是什麼
- 說一說執行緒池的執行流程
- 你的專案中定義的核心執行緒數、最大執行緒數和佇列大小是如何定義的?為什麼這樣定義?(這道題根絕我導師給我說是一個加分項)
- 在專案中如何防止超賣現象
- 你的下訂單的sql語句如何編寫的?(考察MySQL的樂觀鎖)
- 如果有使用者反饋說整個系統的反饋比較慢,你是如何排查和如何解決問題的?
- 影響系統響應慢的原因有哪些?
- 演演算法題:給定一個無序陣列和一個目標值,找出陣列中兩個數之和等於目標值的所有組合,並指出其時間複雜度。(很簡單的一個演演算法題,leetcode easy難度)
- 瞭解過JVM記憶體模型麼?說說哪些是執行緒獨享、哪些是執行緒共用的?
- 詳細說一下Java堆的分割區,他們的比例,以及如果把比例調大以後會有什麼樣的後果?
- 說一下JVM的GC演演算法,以及為什麼「標記-整理」法更好一些,他能解決什麼樣的問題?
- 瞭解過Java類載入機制麼?一共有哪幾種類載入器?
- 如果你想檢視線上正在執行的服務的GC紀錄檔,你需要輸入什麼指令?
- 瞭解過HashMap麼,說一下HashMap的原理。
- 如果兩個物件hashCode相同,則一定是相同物件麼,如果是兩個相等的物件,那麼他們的hashCode相同麼?
- 如何解決hash衝突?
- HashMap是執行緒安全的麼,如何把HashMap變成執行緒安全的類?
- 說一說MySQL資料庫有哪些資料庫引擎?
- InnoDB的索引的資料結構是什麼,說一說他的原理
- 資料庫事務等級以及他們解決了什麼問題,請舉例說明一下
- MySQL預設的事務等級是什麼?
- MySQL如何開啟慢查詢?
- 說一下Spring主要包含哪些模組?
- 說一下你對Spring的IOC容器的理解以及啟動流程
- 有了解過RPC框架或分散式的東西麼?(這個後來問面試官,就是考察對新技術的瞭解以及對網際網路發展的一個關注度)
- 說一下你讀過的有關Java的書籍
第二次技術面(30min)
- 介紹一下你做的專案中你覺得最好的那個;說一下你這個專案中的技術難點和挑戰。
- 如何解決商城專案中出現的超賣、少賣問題?
- 說一下什麼是冪等性
- Redis如何保證高可用的
- Redis的哨兵模式知道嗎?
- 你用Redis覺得有什麼缺點嗎?
- 你是如何做壓力測試的?壓力測試的資料是什麼?
- 線城池有哪些引數?
- 核心執行緒數和最大執行緒數有什麼區別?
- 常見的拒絕策略有哪些?
- 介紹一下SpringBoot的特性
- 說一下什麼是單例模式
- 什麼是餓漢模式、懶漢模式
- 使用懶漢模式的注意事項以及如何解決
- 說一下volatile關鍵字的作用和原理
- 說一下自旋鎖和一些常見的自旋鎖的實現
- 說一下資料庫的左外連線
- 資料庫索引優化
- 資料庫索引的資料結構
第三次技術面(25min)
- 如何解決商城專案中出現的超賣、少賣問題?
- 在開發專案中,遇到了哪些問題?
- Redis與資料庫同步時候出現問題是如何解決的
- 說一下Java當中執行緒有哪些狀態
- 執行緒的阻塞和等待有什麼區別
- 介紹一些Java的鎖機制
- 你瞭解過哪些鎖的型別
- 為什麼wait、notify這個方法會在Object這個類下面
- 分散式、RPC框架有了解過嗎
- Redis的執行緒模型是什麼(考察NIO)
- Redis實現的訊息佇列是如何保證訊息不丟
- 介紹一下堆排序是如何實現的
- 介紹一下TCP/IP協定是如何保證訊息可靠傳輸的
- TCP/IP協定做了什麼優化(擁塞控制和流量控制)
第四次技術面(15min)
- 說一下你投稿的文章寫得是什麼內容
- 介紹一下訊息佇列
- 超賣是如何解決的?
- 下單過程是如何設計的?
- 介紹一下雪花演演算法
- 你怎麼理解分散式?
- 分散式之間怎麼通訊?
- 生產者、消費者模型是怎麼工作的?
- Java裡面建立執行緒的方式
- 程式碼場景:給一個字串,統計每個大寫字母出現的次數,按照次數排序,從小到大輸出字母和其出現的次數
交叉面試(30min)
- 你在學校學習過程中,哪些可能成績更好一些以及為什麼這些課程成績更好一些
- 你學習Java多長時間了
- 你是如何學習Java的?
- 你看過哪些開源框架原始碼?
- 你是怎麼看開源框架原始碼的?
- 介紹一個你參與較多或者比較有難度的專案
- 你們團隊開發專案的時候有沒有大家一起解決的某些技術問題
- 你們做的這個專案有沒有借鑑過其他已經成熟的專案
- 說一下你們專案的要求和指標大概是多少
- 你們專案中的執行緒池佇列容量是如何確定的
- 專案中的某些解決方案是個人想出來的還是團隊討論的結果
- 如果再讓你做一個商城系統,你會做哪些技術選型
- 專案中做過哪些安全方面的措施
- 你會如何設計一個淘寶會員系統?
- 你未來的發展方向是什麼?
面試總結
每一次面試都感覺是煎熬,雖然之前看過很多阿里的面經,都說阿里面試官會抓住某一點一直問下去,直到問到你不會為止,但是當第一次親身體會的時候,還是感覺很煎熬。
不過最終的結果還是好的,至少收到了心儀的offer,能在這個疫情期間,大環境不好的情況下找到實習工作。
對於整個的學習過程和麵試過程,最大的感悟有四:
- 基礎知識要紮實,尤其是Java和資料庫的基礎知識,如果基礎知識不紮實,後面什麼框架和實戰不會有太好的結果
- 多看一些技術類的部落格或者文章,但是要有自己的思考,因為很多技術類文章都是跟緊網際網路發展的,多看一些能夠更加了解網際網路的發展方向;同時自己的思考也能讓自己過濾掉某些文章中的較差的觀點,做到取其精華去其糟粕
- 主動很重要,給我內推的學長是我主動認識的,我的導師是我主動認識的,學技術也是我主動學習的,這世上沒有天上掉餡餅的好事,主動才會有故事
- 一個合適的導師真的很重要,我在遇到我的導師之前,學習方向很迷茫,對於很多東西都不知道如何入手,很多文章也沒有解決我的問題;老師這時候就可以指明方向,讓我的學習之路少了很多崎嶇
分享個人面試刷題複習筆記
對這些面試筆記寶典感興趣的小夥伴可以自取哦!
1、Java後端覆蓋1000多道常問面試題及答案詳解
上千道Java、Spring、JVM、集合、JVM、Mybatis、MySQL、DB、GC、Spring全家桶、Dubbo、資料結構、演演算法、Kafka、微服務等
這幾份1000道面試寶典、Java核心知識、覆盤面試寶典有感興趣的工程師朋友們可以轉發此文關注我私信回覆【面試】免費領取
2、阿里P8大牛寫出來的283頁Java核心知識
3、面試寶典
面試複習寶典、面試前刷一遍對你幫助非凡!
2020年350道面試體系
這幾份面試寶典、Java核心知識、覆盤面試寶典有感興趣的工程師朋友們可以轉發此文關注我私信回覆【面試】免費領取
最後祝您在疫情過後能拿到心儀的offer,面試順順利利!!