這是「跟我來面試」系列的第二篇,被面試人是我隔壁宿舍的好友,近期剛剛結束了螞蟻金服的三輪技術面試,面完之後他跟我說很累,直言不想再體驗了。
因為學院的安排,我們被要求暑期實習,近期也有各種内推資訊發在群裡,和大多數人邊面試邊複習不同,我的這位好友在我們瘋狂投履歷的時候就一直踏踏實實準備,因為我們會在自己的小群裡分享自己的面試經過,他就一直潛水,直到有一天突然告訴我們螞蟻金服的hr說他通過了我們才知道他已經成功上岸了。這種人,我們一般隻能用五個字來形容:悶聲發大财。
他的面試經曆我仔細看了看,一面重點在基礎知識的考查,二面重點在項目以及對架構的使用與了解上,三面壓力面,是很熟悉的套路,考察的知識點也是經常問到的,具有一定的參考價值,接下來我們就來看看他的這幾輪面試經曆吧。
一面
筆試題很簡單,多線程循環列印1-100奇偶數
1.你覺得項目中用了MQ給你帶了什麼好處,設計初衷是什麼?會帶來什麼缺點嘛?(項目針對性比較強,不細說)
2.在網頁鍵入taobao.com,到傳回一個頁面,這期間都發生了什麼?
3.你說到了session和cookie,這兩者有什麼差別,應用場景是啥?
4.傳回界面的文字,圖檔,連結,你覺得是從哪裡來的,或者說儲存在哪裡?
5.描述一下TCP三向交握,這期間可以攜帶資料嗎?攜帶了資料會造成什麼後果?
6.描述一下四次分手,第二次和第三次中間處于何種狀态?
7.說一下object類的所有方法以及他們的功能(真的是所有:clone,notify/all,finalize,wait,hashcode,equals,tostring,getclass)
8.抽象類和接口有什麼差別?說一下你的個人了解。
9.詳細說一下final關鍵字,修飾變量,方法,類都有什麼不同?能想到什麼具體應用場景嗎?
10.說一下equals方法,hashmap的底層,跟hashtable,concurrentHashMap都什麼差別
11.靜态分派和動态分派的差別?具體應用場景?
12.1.8concurrentHashMap有什麼變化,優化的意義在哪?
13.hashmap除了結點數大于8,還有什麼情況會樹化(這個我沒想出來,也可能是我沒聽清楚)
14.hashcode方法有什麼特點?hashset的底層是如何實作的?為什麼用hashmap?
15.說說JVM記憶體結構(這裡要問清楚是JMM還是運作時常量池)
16.你剛說1.8後方法區移動到記憶體中變成元空間,為什麼要移過去呢?
17.那為什麼常量池沒有移動到記憶體,而是轉移到堆了呢?
18.最後一個問題,說一下線程池的飽和政策
因為項目中使用到了MQ,是以就順便問了下,好在并沒有提問太過深入的東西,随後問題幾乎每個都是高頻考點,2、4、5主要考察計算機網絡中的通信過程,例如三次握手/四次揮手,7-14考察Java基礎,随後就是和JVM以及多線程有關的問題了。有需要的小夥伴可以參考這個進行針對性的複習。
二面
1.從項目啟動到現在,介紹一下你的工作以及遇到的難點,怎麼解決的?
2.講一下微服務架構都有哪些子產品?他們是怎麼一起工作的?
3.讓你實作一個eureka,你會怎麼實作?
4.使用者認證,為什麼要用JWT,而沒用session-cookie,應用場景?優劣?加密用的是什麼算法?
5.為什麼使用rabbitMQ,沒用别的mq?
6.說一說你項目應用了什麼設計模式?擴充卡模式什麼應用場景?
7.讓你實作AOP,你怎麼實作?
8.spring事務有了解嗎?是如何傳播的?在你項目裡的實際業務中是如何傳播的?
9.例如有ABC三個事務,分别原子性,整體也原子性,A事務出錯復原,整體事務也會復原,你會怎麼設計呢?
10.ZooKeeper有了解嗎?redis和Mencache的選型問題?
11.你之前的webServer項目介紹一下整個流程?你是如何做的多線程?socket相關?
12.你怎麼使用線程池?參數怎麼選擇?
13.你寫線程的時候會給他們起個可愛的名字嗎?為什麼要起?線程錯誤排查工具用過哪些?
14.spring framework都有哪些子產品?你使用到了哪些子產品?怎麼使用的?
15.使用的時候有沒有對某子產品功能進行擴充?
16.說一下集合類(線程安全角度)
到了二面,就會發現提問的重點發生了明顯的變化,從之前的基礎知識變成了項目架構方面的,這一輪考察的是平常學習過程中對于架構的使用與了解,現在都偏愛微服務架構,那是否思考過背後的原理?天天在用Spring,你對他到底又有多少認知呢?都知道消息隊列好,那好在哪?這些東西都是實際的項目中能接觸到,但是又經常會被忽略的東西,就看你是不是一個有心人了。
三面
1.詳細介紹一下點雲擴增工具項目2.你對分布式架構有什麼了解?3.總結一下你的大學與研究所學生階段有過的成就?可以拿來說的那種?4.參加過競賽嗎?5.你的項目中或在學習過程中有沒有遇到過很難的點?然後專心研究去解決掉他的?6.周圍有沒有優秀的人?有沒有值得你學習的點,并且你現在在跟着做的?7.平時看什麼書?8.有沒有根據興趣學習過一些額外的計算機知識,AI領域?9.在github研究過哪些開源項目?10.你的職業規劃是什麼樣的?
三面是壓力面,所謂壓力面是指面試官有意制造緊張氣氛,以了解求職者将如何面對工作壓力。面試人通過提出生硬的、不禮貌的問題故意使候選人感到不舒服,針對某一事項或問題做一連串的發問,打破沙鍋問到底,直至無法回答。其目的是确定求職者對壓力的承受能力、在壓力前的應變能力和人際關系能力。
這一輪的重點不在于對技術的考察,而在于對人的考察。我一直認為,面試最重要的是将你的核心競争力擺上台面。之是以會問你基礎知識,是因為技術能力是你的核心競争力之一,但并不隻是技術。如果面對壓力,如何與人相處,是否有探索精神,這些都是很重要的,畢竟每個老闆都喜歡越有壓力就越有動力的員工吧。
總結
總的來說,這三次面試是很經典的套路,一面基礎,二面架構,三面個人。我看完後覺得很有參考價值,便征求了原作者的同意分享給大家了。雖然他隻面了這一家,但事後他說,如果可以,甯願再也沒有面試。