歡迎關注個人公眾號:石杉的架構筆記(ID:shishan100)
週一至週五早8點半!精品技術文章準時送上!
精品學習資料獲取通道,參見文末
【本文是公眾號讀者投稿的面試經歷,在此感謝這位同學分享自己的面試經歷,給廣大同學作參考】
目錄
一、回眸再看,感慨萬千
1、網際網路公司的 “ 面試套路 ”
2、跳槽前的技術積累
二、苦修半年,成果檢驗
1、面試week1:準備不足、當頭一棒
2、面試week2:查漏補缺、稍有起色
3、面試week3:一鼓作氣、拿下offer
4、offer盤點及選擇
三、最後的總結
1、投簡歷策略
2、簡歷中的知識準備
3、論面試心態的重要性,千萬別崩
四、文末彩蛋
這樣回答問題,能讓面試官兩眼放光
“正式開始之前,先說一下這位同學的面試成果,從一個不知名的小公司出身,原先年薪不到20萬,通過自己的努力不斷的提升技術,最終收穫多個知名網際網路公司的Offer,年薪達到30多萬,幾乎翻倍!
一、回眸再看,感慨萬千
半年多的準備,1個月的面試,從準備時的信心滿滿,到初試牛刀的當頭一棒,再到沉下心來,不斷補足短板,再度啟程,最終拿下目前的offer。
面試準備是一場持久戰,箇中滋味、唯有自知。在即將入職新公司之前,特意將這一路走來的心得體會分享出來,給自己做一個總結,也跟廣大筒子共勉。
1、網際網路公司的"面試套路"
經過這次跳槽面試北京多家網際網路公司之後,樓主總結出了一個“面試套路”。
一般的有一定技術氛圍的網際網路公司的面試,大致可以分為三面:
(1)一面:基礎
一面面試官一般是團隊裡比較資深的工程師,進去之後的同事。而一面一般會問的基礎內容包括:集合、網路、IO、併發、基本資料結構和演算法、JVM。
根據樓主的面試經歷,如果是面試網際網路公司,一面一般都會挑出上述所說的一個或幾個專題提問。
資料結構演算法不用多說了,樓主建議從準備面試開始,一天刷一到兩道演算法題。
不用選擇太難的題目,但是經典的排序、查詢演算法,基本的資料結構比如二叉樹、連結串列、堆疊,這種一定得會,否則寫不出來就回家。。。
另外,建議大家去看看JDK的底層原始碼,比如集合包、併發包的原始碼。看的時候一定要邊看邊總結邊畫圖,這樣最後記在你腦子裡的,是一幅幅的圖片。
如果光看不畫圖的話,除非你是天才,否則一定很快就忘了!樓主自身的血淚教訓。。。
總之,如果能做到上述幾點:掌握經典資料結構演算法題目,並且可以在面試現場,跟面試官畫圖聊聊JDK底層原始碼的話,一面必過。
(2)二面:專案經驗
二面面試官一般是你未來團隊leader,一般會結合專案來進行考察。舉個例子,下面就是一個比較典型的專案連環炮:
- 你說你專案用到了xx技術,OK,那你說下具體使用場景?
- 為什麼你要這麼使用?
- 這麼使用的好處和壞處?
- 在用的過程中有遇到什麼問題嗎?怎麼解決的?
- 解決之後是否對裡面的原理深入瞭解?
一般二面就會從專案各個細節入手,考察各種技術在專案裡是如何運用的,並且技術是如何結合業務來落地的。
然後有的面試官會繼續深挖,看看你對自己專案中用到的技術,掌握的是否足夠深入。
所以除了結合專案把某個技術說清楚外,最好對這個技術有一定的深度。
舉個例子,如果專案裡用到了微服務相關的東西,那麼如果你去看過Spring cloud相關的原始碼,比如Eureka、Ribbon、Feign這些元件原始碼,那麼面試會很加分。
樓主在面試最後拿到offer的那個網際網路公司時,就提到了自己專案中用到了微服務,並且由此去看了註冊中心Eureka的原始碼。
然後從原始碼層面,詳細畫圖闡述了其內部的心跳機制、多級快取機制等等,甚至給面試官指出了Eureka中存在的一些bug,那一輪面試樓主印象很深刻,和麵試官聊的非常開心。
(3)三面:綜合能力
三面的話,如果是中小公司,可能是CTO面試。如果是大公司,可能是你未來進入的團隊的leader的leader,比如說部門總監之類的級別。
總的來說,三面面的比較雜,每個公司都不太一樣。有的會接著問你基礎,有的會再問你專案,有的直接給你聊情懷,五花八門的都有。
樓主覺得,最重要的還是一二面,前兩面的反饋很重要。三面的話,只要正常回答,都沒啥問題。
2、跳槽前的技術積累
接下來,再說下跳槽之前的準備。
樓主3年經驗,去年下半年由於不滿足於之前公司的技術氛圍和薪資,加上本人又比較能折騰,希望進那種比較知名的網際網路公司挑戰一下,因此萌生了跳槽的想法。
所以從去年下半年開始,利用業餘時間學習了大量技術。從系統的開始準備,到面試第一家公司,大概花了半年的時間。
準備期間學習的技術包括:
(1)Redis快取相關技術,以及高併發下的快取架構設計
這塊是網際網路公司必用必問的,所以樓主對Redis技術進行了深入系統的學習,同時瞭解了一些常見的架構設計技巧。
(2)Elasticsearch
現在網際網路公司一般都有全文檢索的需求,比如網站或者APP裡的搜尋框,所以ES技術用的越來越廣泛。
因此對ES技術也是進行了從頭到尾的學習,對其底層演算法、原理以及優化技巧都做了深入的瞭解,面試的時候,全部能夠畫圖講解。
(3)微服務相關技術
微服務就不用說了,網際網路公司必備,現在系統都是用微服務架構來設計的。因此樓主對Dubbo、Spring Cloud技術棧都進行了全面的學習,而且對這些技術都閱讀過底層原始碼。
(4)JDK原始碼、設計模式
文章最開始就說了JDK原始碼的重要性,因此樓主將重要的JDK底層原始碼,比如集合包、併發包的原始碼都讀了一遍。此外,對各種設計模式也做了一定的研究。
(5)分散式事務、分散式鎖
分散式系統這塊,也是面試網際網路公司必問的技術
(6)常見面試技術問題的梳理和總結
包括資料庫、網路、IO、分庫分表、MQ,等等
以上技術,樓主都進行了系統的學習和研究,而且很多技術都嘗試在自己負責的專案中進行了運用和實踐。
大概花費了有半年的時間,幾乎都是夜以繼日的學習,沒有什麼娛樂的時間。因為去年就希望在2019年的春節後可以換一家公司,改變自己的命運!
二、苦修半年,成果檢驗
在準備了大概半年後,下面就是樓主正式開始面試的經歷。
1、面試week1:無情打擊,當頭一棒
首先就是寫簡歷投簡歷,樓主在剛過完年後就裸辭了,然後開始投簡歷。
雖然大致知道主要面試的是哪些知識點,但是寫完簡歷之後,自己都不敢投,因為畢竟沒太多的面試經驗。
所以第一週僅僅面試了2家,當時有面試也會往後推,主要是不想浪費機會。
(1)新東方線上
新東方旗下的線上教育公司,聽說馬上要上市了。
首先是一個多執行緒程式設計的面試題,比較簡單。然後就是開聊專案,在專案中穿插問知識點,這次面試因為有不少知識點自己有點忘了,所以很多東西沒回答太好。
比如說sql執行計劃中你最關心的欄位,這樣的問題,都沒有回答好。最後的結果是一面就掛了。
第一週面試就被打擊了,有點沮喪。有很多知識點我自己也知道,但是就是沒有掌握,明顯是去被吊打的節奏,浪費了新東方這個機會。
然後週末兩天,哪也沒去,在家裡不分晝夜的全力複習,補足短板。
2、面試week2:查漏補缺,稍有起色
(1)用友
首先是去了之後開始做筆試題,主要是分析哪些SQL使用到了索引,為什麼索引失效,大概有10多條SQL分析。
面試過程中,我主要是往自己擅長的點上面去聊,包括jdk底層的原始碼,springcloud等方向,全程我在講。
然後二面的面試官說我不太合適,他們想找能寫前後端的人,不需要網際網路方向的那種。
所以,樓主在這裡給各位筒子提個醒,投簡歷一定慎重,如果你是打定想去網際網路公司的話,非網際網路公司就不要浪費時間了。
在面試過程中我一共碰到三家這樣的,套路都是類似的,先是一套面試題,然後就一面,面完之後就是回去等訊息。。。
(2)某中小型的網際網路金融公司
一面
一面直接開聊,先聊基礎,聊到synchronized鎖的實現原理,cas實現原理,juc包下併發類的場景使用場景。
然後開始聊框架原始碼,我講了講springcloud中Eureka的原始碼,Hystrix框架的原始碼,然後聊了一下集合相關的類,例如HashMap、ConCurrentHashMap等等。
聊到一半之後,面試官對我的態度友好了很多,還探討了一些讀原始碼的方法。
然後拿著一張筆試題,兩個演算法題,二選一,隨便做一個。
樓主屬於那種演算法底子一般的,平時刷題也不多,看到演算法題就有點慌,最後面試官說寫個二分查詢吧。
就這樣,我想由於前面給面試官的印象稍微好一點,所以這塊就放我過關了。
二面
二面的面試官開始抽查了一些知識,包括mysql索引優化,索引結構,redis快取雪崩、穿透等相關的問題,還問了一些併發相關的問題。
然後給了一個系統設計的場景:在分散式場景下,100萬的優惠碼,怎樣保證每個使用者只能領取一個?領取了之後,再次點選還是之前領取的那個。
我的思路是使用存放在redis中再結合分散式鎖,然後給演示了執行過程,勉強說的過去,最後說有沒有更好的實現方式,想了一會,然後認慫。
接著問了JVM類載入流程、GC回收演算法、GC回收器。剛好這塊沒有看,只能回答對這塊不熟。
最後面試結束,問了一下期望薪資,然後叫我等一下,準備去叫HR。過了一會兒說,這周還要再面試一些人,然後會綜合考慮,就送我出去了。
當時比較鬱悶,不過現在想想很正常,一個有幾年經驗的工程師竟然對JVM這些常見的知識點都不熟悉,可怕。結果當然也是掛掉了。
沒說的,樓主趕緊的揹著書包回去,惡補JVM相關的知識點。
(3)一家給銀行做系統的小公司
一面是一個號稱架構師的人面的,一上來我就開聊springcloud原始碼,剛好他們也在用這套框架,包括Hystrix。
剛好我對這塊很熟悉,他們只是使用預設的配置,對裡面的原理就是一個黑盒。我一通講還帶畫圖,直接將他征服。然後就是問我期望薪資,帶我見老闆,入職日期我拖了一週,算是增加了一點信心,拿到一個保底offer了。
3、面試week3:一鼓作氣,拿下offer
(1)一家A輪融資的線上教育公司
一面
首先一面就是給一臺電腦你,有三道題目,任選一道讓你做,過了開始下一面。
- 用多執行緒統計1到1000000之間有多少素數
- 用Java實現一個訂單號生成器
- 給一個陣列,歸併排序
題目都比較常規,一面順利通過。
二面
二面首先基本問了一些專案,然後你提到什麼就問什麼。
比如樓主提到執行緒池,他就問執行緒池的引數有哪些,分別的作用是什麼?然後問了一些基礎的知識集合,併發之類。
然後二面還問了springcloud框架原始碼,Eureka增量拉取登錄檔機制。
然後就是一些基礎:cas、cas有哪些問題以及怎麼解決,volatile、synchronized、執行緒池、redis、mysql索引,索引優化,索引失效,索引底層結構等。
令我印象深刻的是問了我資料庫中整型除了int,還有哪些整型(tinyInt、bigint)。面試官說好奇好多人都回答不出來,我當然也是沒回答出來。
由於當晚面完二面都比較晚了,然後約了第二天下午5點cto面試
三面
三面是cto面,問的很基礎,比如Https怎麼防止被抓包?講講什麼是BIO、NIO、AIO?(當場說沒研究這塊)講講JVM類載入流程(第二次跪在上面了)。
然後問了些生產環境的問題,問了生產環境mysql怎麼部署,我說單機部署,對分庫分表沒有深入研究,估計這幾個問題的抽查,就被cto打死了。最後問了下期望薪資,然後回去等訊息。
心態:本來對這家在校教育以為穩了,結果一直沒有電話聯絡我,此時已經過去了2兩週,除了一個小公司offer以外,沒有拿到其他的offer。
然後稍微有點知名度的都在這周的安排表上,我在想如果這周沒搞定一個的話,北京的獨角獸都沒剩下多少了,瞬間感覺壓力大了。
再加上這家複試完之後,沒有立即給答覆,一般都是涼了,此時有點心態崩了。
後續:一天之後,HR沒有聯絡我,由於聽說他家技術氛圍不錯,我就主動打電話過去了,最後的結果是給offer,薪資在大概20多萬的樣子,常規性漲薪幅度。確實也是自己存在很多問題,好多知識都沒有答出來。
(2)國內最大的網際網路招聘網站
一面
一面從基礎到專案通通問了下,專案層面沒有深究,對併發這塊的基礎知識問了,最後是問了分散式鎖的實現原理。
樓主講了基於redis和基於zookeeper的分散式鎖實現原理以及框架的原始碼,另外深入講了springcloud原始碼。
然後就是問了dubbo瞭解多少,讓你設計一個dubbo,你會怎樣設計,然後設計一個限流熔斷框架,你會怎麼設計;
再就是針對redis問了下使用場景,怎麼使用,快取穿透、快取擊穿等問題。
一面總體來說,還比較順利,一面過了之後開始二面。
二面
二面問了下專案,沒有太過於深究專案,問了專案開發過程中遇到哪些問題,怎麼解決的?
然後問了下哪些場景使用到多執行緒,是怎麼使用的,知道執行緒池的原理嗎,生產環境資料庫怎麼部署?redis怎麼部署?
主從資料同步的原理了解嗎?主從架構的延時和資料丟失怎麼解決?有遇到系統OOM的問題嗎,怎麼解決?做過哪些JVM優化?為什麼要這樣配置?
面完後問了期望薪資,說這週會通知,樓主知道又進入備胎模式了,經過上次的經歷,知道戲份不大了。
結果意想不到的是,最後居然人家發offer了,而且年薪達到了30多萬。
(3)一家中小型的網際網路金融公司
一面
一面技術官並沒有問太多的問題,主要是我講了springcloud的原始碼,然後他們準備轉向springcloud,最後問了下redis快取穿透、快取雪崩,之後就是一些大而形式的問題。
二面
問了資料庫鎖有哪些,什麼情況下造成資料庫的死鎖,怎麼避免資料庫死鎖。然後就是哪些場景下使用了設計模式。
接著問了下期望薪資,給砍了一點下來,我覺得二面面試官可能覺得我對mysql這塊的鎖不是很熟悉,但是也給offer了,年薪不到30萬的樣子。
(4)一家D輪融資的線上教育公司
一面
一面是結構化面試,從各個方面開始聊,聊集合、併發、網路、IO,Linux命令。
然後開始聊springcloud框架原始碼,最後聊的挺歡快的,當然有些問題沒回答出來,但是氣氛聊的可以,加上面試官的提示,最後也給出了答案,特別是linux命令這塊。
二面
二面主要是深入專案細節,最後聽我講完專案之後。問我什麼是CAP理論。其實當時我已經掉入坑中,但是還很傻逼的回答了CAP理論和BASE理論。
然後問我你的專案符合CAP理論嗎?專案中這麼保證一致性?rabbitmq這塊的交換器的三種模式是什麼?最後跪了。
(5)好未來(美國上市的教育公司)
首先就是從簡歷第一條開始往後面聊,集合、併發、網路、IO原理等,最後問了springcloud的原始碼,將近聊了一個小時,然後說二面會二天內通知,我就知道涼了,最後果然沒讓通過。
(6)某垂直領域電商公司
一面
問基礎,ConcurrentHashMap原理,CAS,synchronized底層原理,底層採用不同的實現方式(自旋鎖等)的不同。
JVM原理,young區為什麼要有2塊survival區,只有一塊行不行。
然後問了索引結構,什麼是B+樹,索引優化,什麼是聚簇索引,這麼建立聚簇索引,全部是基礎的問題,沒有涉及任何框架原始碼和專案情況。
二面
內推放水,簡單問了BeanFactory和SpringApplicationContext是什麼關係,有什麼不同。然後幾個簡單問題。然後就給offer了。
(7)必要商城
一面
一面是基礎問題,類似於上面的基礎問題一般,大同小異,沒有很大差別。
二面
二面開始問專案,講完專案之後,由於二面的面試官是老鄉,而且面完之後我就知道沒戲了,就請教了老鄉,能給一些建議嗎?
老鄉說他二面就不會問基礎的知識點了,因為已經過了一面,他作為二面主要考察的是這個專案你是否真的做過。
第二,你做的專案是否符合他團隊目前的需求。
第三,專案中的技術難點是否存在,以及解決方案是否合理,還有一些分散式的場景怎樣解決。
第四:考慮我能不能過他領導的下一關,最後也是收穫蠻多,後來也沒給offer。
(8)趕集網
一面下午5點趕過去,跑了一天已經很疲倦了,然後開聊,先講專案,專案中穿插著問一些知識點。
比如面試官問了mysql索引,以及事務的隔離級別,可重複讀是怎麼實現的,mvcc機制瞭解嗎,等等。
當然更多的是場景設計,設計一個分庫分表的場景,根據什麼來設計。
疲憊的我想直接回去了,後來面到7點之後,說老大在開會,下次通知來複試,然後就回去了,最後也沒給offer。
4、offer盤點及選擇
將近一個月的面試,主要收穫了下面這些offer:
- 一家給銀行做系統的小公司
- 某A輪融資的線上教育公司
- 某中小型網際網路金融公司
- 國內最大的網際網路招聘網站
- 一家垂直領域電商公司
綜合下來,樓主最終選擇了知名度最高的那家獨角獸公司,而且它的年薪也給到了30多萬,薪資是給的最高的。
三、最後的總結
1、投簡歷策略
先在小公司跑幾家,面幾家之後,就會有感覺了,知道大致的套路是啥了。
第二,如果打定主意去網際網路的話,非網際網路公司不要投。跑來跑去的時間,不如把知識複習紮實點。
2、簡歷中的知識準備
我感覺技能點不用寫太多,我就寫了20條,其實10條核心技能點就差不多了。
應該面試一二線廠的話,他們按照他們的風格去考察,你寫了的也會問,沒寫也會問,所以10條核心知識點就夠了。
按照慣常的三面策略,每一面的側重點都不同,你可以自己給自己考察,然後不會的趕緊找資料複習。
比如一面通常都是基礎知識,二面通常圍繞專案來考察,三面通常就是生產環境,解決問題的能力,系統場景設計等等。
3、論面試心態的重要性,千萬別崩
因為每個面試官的喜好不一樣,很有可能跑了好幾家之後,依然沒有收到offer,難免會有一些氣餒。
樓主的建議是此時你應該放慢一下節奏,把這幾天沒回答出來的問題總結出來,不會的趕緊去查漏補缺,無論你之前準備的多好,你面試的過程中都會暴露出很多問題。
然後感覺差不多了,再次大規模的投遞和麵試,我的面試主要集中在第三週,第一週和第二週面試較少,主要是在複習和小公司練手。
最後就是知識點的總結,比如在JVM這塊我就掉坑幾次了,後來也是面試跑了一天回來,再累也堅持找資料把漏洞補上了。
四、文末彩蛋
這樣回答問題,能讓面試官兩眼放光
這個算是樓主這一個月面試下來,總結的一點經驗吧,樓主自己覺得還是蠻有用的,各位筒子如果不嫌棄,也可以自己試試啦。^_^
舉個例子,比如面試官問你:你們分散式事務怎麼做的?
那麼,你可以按照這樣的思路回答:
- 在專案中某場景使用到了分散式事務
- 為什麼要用分散式事務?
- 怎麼使用的分散式事務?
- 在使用過程中遇到了什麼問題,然後怎麼解決的?
- 如果看過原始碼,講講分散式事務框架的原始碼和實現思想
如果每個技術,都按照這樣的思路,每個問題都這樣去回答,回答兩三個問題,面試官就不會懷疑你技術能力了。
掃描下方二維碼,備註:“資料”,獲取更多“祕製” 精品學習資料
一大波微服務、分散式、高併發、高可用的原創系列文章正在路上
歡迎掃描下方二維碼,持續關注:
石杉的架構筆記(id:shishan100)
十餘年BAT架構經驗傾囊相授
推薦閱讀:
2、【雙11狂歡的背後】微服務註冊中心如何承載大型系統的千萬級訪問?
3、【效能優化之道】每秒上萬併發下的Spring Cloud引數優化實戰
6、大規模叢集下Hadoop NameNode如何承載每秒上千次的高併發訪問
7、【效能優化的祕密】Hadoop如何將TB級大檔案的上傳效能優化上百倍
9、【坑爹呀!】最終一致性分散式事務如何保障實際生產中99.99%高可用?
11、【眼前一亮!】看Hadoop底層演算法如何優雅的將大規模叢集效能提升10倍以上?
16、億級流量系統架構之如何設計全鏈路99.99%高可用架構
18、大白話聊聊Java併發面試問題之volatile到底是什麼?
19、大白話聊聊Java併發面試問題之Java 8如何優化CAS效能?
20、大白話聊聊Java併發面試問題之談談你對AQS的理解?
21、大白話聊聊Java併發面試問題之公平鎖與非公平鎖是啥?
22、大白話聊聊Java併發面試問題之微服務註冊中心的讀寫鎖優化
23、網際網路公司的面試官是如何360°無死角考察候選人的?(上篇)
24、網際網路公司面試官是如何360°無死角考察候選人的?(下篇)
25、Java進階面試系列之一:哥們,你們的系統架構中為什麼要引入訊息中介軟體?
26、【Java進階面試系列之二】:哥們,那你說說系統架構引入訊息中介軟體有什麼缺點?
27、【行走的Offer收割機】記一位朋友斬獲BAT技術專家Offer的面試經歷
28、【Java進階面試系列之三】哥們,訊息中介軟體在你們專案裡是如何落地的?
29、【Java進階面試系列之四】扎心!線上服務當機時,如何保證資料100%不丟失?
30、一次JVM FullGC的背後,竟隱藏著驚心動魄的線上生產事故!
31、【高併發優化實踐】10倍請求壓力來襲,你的系統會被擊垮嗎?
32、【Java進階面試系列之五】訊息中介軟體叢集崩潰,如何保證百萬生產資料不丟失?
33、億級流量系統架構之如何在上萬併發場景下設計可擴充套件架構(上)?
34、億級流量系統架構之如何在上萬併發場景下設計可擴充套件架構(中)?
35、億級流量系統架構之如何在上萬併發場景下設計可擴充套件架構(下)?
37、億級流量系統架構之如何保證百億流量下的資料一致性(上)
38、億級流量系統架構之如何保證百億流量下的資料一致性(中)?
39、億級流量系統架構之如何保證百億流量下的資料一致性(下)?
40、網際網路面試必殺:如何保證訊息中介軟體全鏈路資料100%不丟失(1)
41、網際網路面試必殺:如何保證訊息中介軟體全鏈路資料100%不丟失(2)
42、面試大殺器:訊息中介軟體如何實現消費吞吐量的百倍優化?
43、高併發場景下,如何保證生產者投遞到訊息中介軟體的訊息不丟失?
45、從團隊自研的百萬併發中介軟體系統的核心設計看Java併發效能優化
46、【非廣告,純乾貨】英語差的程式設計師如何才能無障礙閱讀官方文件?
47、如果20萬使用者同時訪問一個熱點快取,如何優化你的快取架構?
48、【非廣告,純乾貨】中小公司的Java工程師應該如何逆襲衝進BAT?
50、【金三銀四跳槽季】Java工程師如何在1個月內做好面試準備?
51、【offer收割機必備】我簡歷上的Java專案都好low,怎麼辦?
52、【offer去哪了】我一連面試了十個Java崗,統統石沉大海!
53、高階Java開發必備:分散式系統的唯一id生成演算法你瞭解嗎?
54、支撐日活百萬使用者的高併發系統,應該如何設計其資料庫架構?
55、尷尬了!Spring Cloud微服務註冊中心Eureka 2.x停止維護了咋辦?
56、【Java高階必備】如何優化Spring Cloud微服務註冊中心架構?
作者:石杉的架構筆記
連結:https://juejin.im/post/5c6a9f25518825787e69e70a
來源:掘金
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。