作者 | 中華石杉

責編 | 伍杏玲

本文經授權轉載石杉的架構筆記(ID:shishan100)

【CSDN 編者按】作者是一個不知名的小公司出身,原先年薪不到20萬,通過自己的努力不斷的提升技術,最終收穫多個知名互聯網公司的Offer,年薪達到30多萬,幾乎翻倍!

半年多的準備,1個月的面試,從準備時的信心滿滿,到初試牛刀的當頭一棒,再到沉下心來,不斷補足短板,再度啓程,最終拿下目前的Offer。

面試準備是一場持久戰,箇中滋味、唯有自知。在即將入職新公司之前,特意將這一路走來的心得體會分享出來,給自己做一個總結,也跟廣大筒子共勉。


互聯網公司的"面試套路"


經過這次跳槽面試北京多家互聯網公司之後,樓主總結出了一個“面試套路”。

一般的有一定技術氛圍的互聯網公司的面試,大致可以分爲三面:

一面:基礎

一面面試官一般是團隊裏比較資深的工程師,進去之後的同事。而一面一般會問的基礎內容包括:集合、網絡、IO、併發、基本數據結構和算法、JVM。

根據樓主的面試經歷,如果是面試互聯網公司,一面一般都會挑出上述所說的一個或幾個專題提問。

數據結構算法不用多說了,樓主建議從準備面試開始,一天刷一到兩道算法題。

不用選擇太難的題目,但是經典的排序、查找算法,基本的數據結構比如二叉樹、鏈表、堆棧,這種一定得會,否則寫不出來就回家。

另外,建議大家去看看JDK的底層源碼,比如集合包、併發包的源碼。看的時候一定要邊看邊總結邊畫圖,這樣最後記在你腦子裏的,是一幅幅的圖片。

如果光看不畫圖的話,除非你是天才,否則一定很快就忘了!樓主自身的血淚教訓。

總之,如果能做到上述幾點:掌握經典數據結構算法題目,並且可以在面試現場,跟面試官畫圖聊聊JDK底層源碼的話,一面必過。

二面:項目經驗

二面面試官一般是你未來團隊Leader,一般會結合項目來進行考察。舉個例子,下面就是一個比較典型的項目連環炮:

  • 你說你項目用到了xx技術,OK,那你說下具體使用場景?

  • 爲什麼你要這麼使用?

  • 這麼使用的好處和壞處?

  • 在用的過程中有遇到什麼問題嗎?怎麼解決的?

  • 解決之後是否對裏面的原理深入瞭解?

一般二面就會從項目各個細節入手,考察各種技術在項目裏是如何運用的,並且技術是如何結合業務來落地的。

然後有的面試官會繼續深挖,看看你對自己項目中用到的技術,掌握的是否足夠深入。

所以除了結合項目把某個技術說清楚外,最好對這個技術有一定的深度。

舉個例子,如果項目裏用到了微服務相關的東西,那麼如果你去看過Spring Cloud相關的源碼,比如Eureka、Ribbon、Feign這些組件源碼,那麼面試會很加分。

樓主在面試最後拿到Offer的那個互聯網公司時,就提到了自己項目中用到了微服務,並且由此去看了註冊中心Eureka的源碼。

然後從源碼層面,詳細畫圖闡述了其內部的心跳機制、多級緩存機制等等,甚至給面試官指出了Eureka中存在的一些Bug,那一輪面試樓主印象很深刻,和面試官聊的非常開心。

三面:綜合能力

三面的話,如果是中小公司,可能是CTO面試。如果是大公司,可能是你未來進入的團隊的Leader的Leader,比如說部門總監之類的級別。

總的來說,三面面的比較雜,每個公司都不太一樣。有的會接着問你基礎,有的會再問你項目,有的直接給你聊情懷,五花八門的都有。

樓主覺得,最重要的還是一二面,前兩面的反饋很重要。三面的話,只要正常回答,都沒啥問題。


跳槽前的技術積累


接下來,再說下跳槽之前的準備。

樓主3年經驗,去年下半年由於不滿足於之前公司的技術氛圍和薪資,加上本人又比較能折騰,希望進那種比較知名的互聯網公司挑戰一下,因此萌生了跳槽的想法。

所以從去年下半年開始,利用業餘時間學習了大量技術。從系統的開始準備,到面試第一家公司,大概花了半年的時間。

準備期間學習的技術包括:

(1)Redis緩存相關技術,以及高併發下的緩存架構設計

這塊是互聯網公司必用必問的,所以樓主對Redis技術進行了深入系統的學習,同時瞭解了一些常見的架構設計技巧。

(2)Elasticsearch

現在互聯網公司一般都有全文檢索的需求,比如網站或者APP裏的搜索框,所以ES技術用的越來越廣泛。

因此對ES技術也是進行了從頭到尾的學習,對其底層算法、原理以及優化技巧都做了深入的瞭解,面試的時候,全部能夠畫圖講解。

(3)微服務相關技術

微服務就不用說了,互聯網公司必備,現在系統都是用微服務架構來設計的。因此樓主對Dubbo、Spring Cloud技術棧都進行了全面的學習,而且對這些技術都閱讀過底層源碼。

(4)JDK源碼、設計模式

文章最開始就說了JDK源碼的重要性,因此樓主將重要的JDK底層源碼,比如集合包、併發包的源碼都讀了一遍。此外,對各種設計模式也做了一定的研究。

(5)分佈式事務、分佈式鎖

分佈式系統這塊,也是面試互聯網公司必問的技術。

(6)常見面試技術問題的梳理和總結

包括數據庫、網絡、IO、分庫分表、MQ等等。

以上技術,樓主都進行了系統的學習和研究,而且很多技術都嘗試在自己負責的項目中進行了運用和實踐。

大概花費了有半年的時間,幾乎都是夜以繼日的學習,沒有什麼娛樂的時間。因爲去年就希望在2019年的春節後可以換一家公司,改變自己的命運!


苦修半年,成果檢驗


在準備了大概半年後,下面就是樓主正式開始面試的經歷。

面試第一週:無情打擊,當頭一棒

首先就是寫簡歷投簡歷,樓主在剛過完年後就裸辭了,然後開始投簡歷。

雖然大致知道主要面試的是哪些知識點,但是寫完簡歷之後,自己都不敢投,因爲畢竟沒太多的面試經驗。

所以第一週僅僅面試了2家,當時有面試也會往後推,主要是不想浪費機會。

新東方在線

新東方旗下的在線教育公司,聽說馬上要上市了。

首先是一個多線程編程的面試題,比較簡單。然後就是開聊項目,在項目中穿插問知識點,這次面試因爲有不少知識點自己有點忘了,所以很多東西沒回答太好。

比如說SQL執行計劃中你最關心的字段,這樣的問題,都沒有回答好。最後的結果是一面就掛了。

第一週面試就被打擊了,有點沮喪。有很多知識點我自己也知道,但是就是沒有掌握,明顯是去被吊打的節奏,浪費了新東方這個機會。

然後週末兩天,哪也沒去,在家裏不分晝夜的全力複習,補足短板。

面試第二週:查漏補缺,稍有起色。

用友

首先是去了之後開始做筆試題,主要是分析哪些SQL使用到了索引,爲什麼索引失效,大概有10多條SQL分析。

面試過程中,我主要是往自己擅長的點上面去聊,包括JDK底層的源碼,Spring Cloud等方向,全程我在講。

然後二面的面試官說我不太合適,他們想找能寫前後端的人,不需要互聯網方向的那種。

所以,樓主在這裏給各位筒子提個醒,投簡歷一定慎重,如果你是打定想去互聯網公司的話,非互聯網公司就不要浪費時間了。

在面試過程中我一共碰到三家這樣的,套路都是類似的,先是一套面試題,然後就一面,面完之後就是回去等消息。

某中小型的互聯網金融公司

一面

一面直接開聊,先聊基礎,聊到Synchronized鎖的實現原理,CAS實現原理,Juc包下併發類的場景使用場景。

然後開始聊框架源碼,我講了講Spring Cloud中Eureka的源碼,Hystrix框架的源碼,然後聊了一下集合相關的類,例如HashMap、ConCurrentHashMap等等。

聊到一半之後,面試官對我的態度友好了很多,還探討了一些讀源碼的方法。

然後拿着一張筆試題,兩個算法題,二選一,隨便做一個。

樓主屬於那種算法底子一般的,平時刷題也不多,看到算法題就有點慌,最後面試官說寫個二分查找吧。

就這樣,我想由於前面給面試官的印象稍微好一點,所以這塊就放我過關了。

二面

二面的面試官開始抽查了一些知識,包括Mysql索引優化、索引結構、Redis緩存雪崩、穿透等相關的問題,還問了一些併發相關的問題。

然後給了一個系統設計的場景:在分佈式場景下,100萬的優惠碼,怎樣保證每個用戶只能領取一個?領取了之後,再次點擊還是之前領取的那個。

我的思路是使用存放在redis中再結合分佈式鎖,然後給演示了執行過程,勉強說的過去,最後說有沒有更好的實現方式,想了一會,然後認慫。

接着問了JVM類加載流程、GC回收算法、GC回收器。剛好這塊沒有看,只能回答對這塊不熟。

最後面試結束,問了一下期望薪資,然後叫我等一下,準備去叫HR。過了一會兒說,這周還要再面試一些人,然後會綜合考慮,就送我出去了。

當時比較鬱悶,不過現在想想很正常,一個有幾年經驗的工程師竟然對JVM這些常見的知識點都不熟悉,可怕。結果當然也是掛掉了。

沒說的,樓主趕緊的揹着書包回去,惡補JVM相關的知識點。

一家給銀行做系統的小公司

一面是一個號稱架構師的人面的,一上來我就開聊Spring Cloud源碼,剛好他們也在用這套框架,包括Hystrix。

剛好我對這塊很熟悉,他們只是使用默認的配置,對裏面的原理就是一個黑盒。我一通講還帶畫圖,直接將他征服。然後就是問我期望薪資,帶我見老闆,入職日期我拖了一週,算是增加了一點信心,拿到一個保底Offer了。

面試第三週:一鼓作氣,拿下Offer

一家A輪融資的在線教育公司

一面

首先一面就是給一臺電腦你,有三道題目,任選一道讓你做,過了開始下一面。

  1. 用多線程統計1到1000000之間有多少素數

  2. 用Java實現一個訂單號生成器

  3. 給一個數組,歸併排序

題目都比較常規,一面順利通過。

二面

二面首先基本問了一些項目,然後你提到什麼就問什麼。

比如樓主提到線程池,他就問線程池的參數有哪些,分別的作用是什麼?然後問了一些基礎的知識集合,併發之類。

然後二面還問了Spring Cloud框架源碼,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多萬的樣子,常規性漲薪幅度。確實也是自己存在很多問題,好多知識都沒有答出來。

國內最大的互聯網招聘網站

一面

一面從基礎到項目通通問了下,項目層面沒有深究,對併發這塊的基礎知識問了,最後是問了分佈式鎖的實現原理。

樓主講了基於Redis和基於ZooKeeper的分佈式鎖實現原理以及框架的源碼,另外深入講了Spring Cloud源碼。

然後就是問了Dubbo瞭解多少,讓你設計一個Dubbo,你會怎樣設計,然後設計一個限流熔斷框架,你會怎麼設計?

再就是針對Redis問了下使用場景,怎麼使用,緩存穿透、緩存擊穿等問題。

一面總體來說,還比較順利,一面過了之後開始二面。

二面

二面問了下項目,沒有太過於深究項目,問了項目開發過程中遇到哪些問題,怎麼解決的?

然後問了下哪些場景使用到多線程,是怎麼使用的,知道線程池的原理嗎?生產環境數據庫怎麼部署?Redis怎麼部署?

主從數據同步的原理了解嗎?主從架構的延時和數據丟失怎麼解決?有遇到系統OOM的問題嗎,怎麼解決?做過哪些JVM優化?爲什麼要這樣配置?

面完後問了期望薪資,說這週會通知,樓主知道又進入備胎模式了,經過上次的經歷,知道戲份不大了。

結果意想不到的是,最後居然人家發Offer了,而且年薪達到了30多萬。

一家中小型的互聯網金融公司

一面

一面技術官並沒有問太多的問題,主要是我講了Spring Cloud的源碼,然後他們準備轉向Spring Cloud,最後問了下Redis緩存穿透、緩存雪崩,之後就是一些大而形式的問題。

二面

問了數據庫鎖有哪些,什麼情況下造成數據庫的死鎖,怎麼避免數據庫死鎖。然後就是哪些場景下使用了設計模式。

接着問了下期望薪資,給砍了一點下來,我覺得二面面試官可能覺得我對Mysql這塊的鎖不是很熟悉,但是也給Offer了,年薪不到30萬的樣子。

一家D輪融資的在線教育公司

一面

一面是結構化面試,從各個方面開始聊,聊集合、併發、網絡、IO,Linux命令。

然後開始聊Spring Cloud框架源碼,最後聊的挺歡快的,當然有些問題沒回答出來,但是氣氛聊的可以,加上面試官的提示,最後也給出了答案,特別是Linux命令這塊。

二面

二面主要是深入項目細節,最後聽我講完項目之後。問我什麼是CAP理論。其實當時我已經掉入坑中,但是還很傻逼的回答了CAP理論和BASE理論。

然後問我你的項目符合CAP理論嗎?項目中這麼保證一致性?RabbitMQ這塊的交換器的三種模式是什麼?最後跪了。

好未來(美國上市的教育公司)

首先就是從簡歷第一條開始往後面聊,集合、併發、網絡、IO原理等,最後問了Spring Cloud的源碼,將近聊了一個小時,然後說二面會二天內通知,我就知道涼了,最後果然沒讓通過。

某垂直領域電商公司

一面

問基礎,ConcurrentHashMap原理、CAS、Synchronized底層原理,底層採用不同的實現方式(自旋鎖等)的不同。

JVM原理,Young區爲什麼要有2塊Survival區,只有一塊行不行。

然後問了索引結構、B+樹、索引優化、聚簇索引,這麼建立聚簇索引,全部是基礎的問題,沒有涉及任何框架源碼和項目情況。

二面

內推放水,簡單問了BeanFactory和SpringApplicationContext是什麼關係,有什麼不同。然後幾個簡單問題。然後就給Offer了。

必要商城

一面

一面是基礎問題,類似於上面的基礎問題一般,大同小異,沒有很大差別。

二面

二面開始問項目,講完項目之後,由於二面的面試官是老鄉,而且面完之後我就知道沒戲了,就請教了老鄉,能給一些建議嗎?

老鄉說他二面就不會問基礎的知識點了,因爲已經過了一面,他作爲二面主要考察的是這個項目你是否真的做過。

第二,你做的項目是否符合他團隊目前的需求。

第三,項目中的技術難點是否存在,以及解決方案是否合理,還有一些分佈式的場景怎樣解決。

第四:考慮我能不能過他領導的下一關,最後也是收穫蠻多,後來也沒給Offer。

趕集網

一面下午5點趕過去,跑了一天已經很疲倦了,然後開聊,先講項目,項目中穿插着問一些知識點。

比如面試官問了Mysql索引、事務的隔離級別,可重複讀是怎麼實現的,MVCC機制等等。

當然更多的是場景設計,設計一個分庫分表的場景,根據什麼來設計。

疲憊的我想直接回去了,後來面到7點之後,說老大在開會,下次通知來複試,然後就回去了,最後也沒給Offer。


總結


將近一個月的面試,主要收穫了下面這些Offer:

  • 一家給銀行做系統的小公司

  • 某A輪融資的在線教育公司

  • 某中小型互聯網金融公司

  • 國內最大的互聯網招聘網站

  • 一家垂直領域電商公司

綜合下來,樓主最終選擇了知名度最高的那家獨角獸公司,而且它的年薪也給到了30多萬,薪資是給的最高的。

投簡歷策略

先在小公司跑幾家,面幾家之後,就會有感覺了,知道大致的套路是啥了。

第二,如果打定主意去互聯網的話,非互聯網公司不要投。跑來跑去的時間,不如把知識複習紮實點。

簡歷中的知識準備

我感覺技能點不用寫太多,我就寫了20條,其實10條核心技能點就差不多了。

應該面試一二線廠的話,他們按照他們的風格去考察,你寫了的也會問,沒寫也會問,所以10條核心知識點就夠了。

按照慣常的三面策略,每一面的側重點都不同,你可以自己給自己考察,然後不會的趕緊找資料複習。

比如一面通常都是基礎知識,二面通常圍繞項目來考察,三面通常就是生產環境,解決問題的能力,系統場景設計等等。

論面試心態的重要性,千萬別崩

因爲每個面試官的喜好不一樣,很有可能跑了好幾家之後,依然沒有收到Offer,難免會有一些氣餒。

樓主的建議是此時你應該放慢一下節奏,把這幾天沒回答出來的問題總結出來,不會的趕緊去查漏補缺,無論你之前準備的多好,你面試的過程中都會暴露出很多問題。

然後感覺差不多了,再次大規模的投遞和麪試,我的面試主要集中在第三週,第一週和第二週面試較少,主要是在複習和小公司練手。

最後就是知識點的總結,比如在JVM這塊我就掉坑幾次了,後來也是面試跑了一天回來,再累也堅持找資料把漏洞補上了。


這樣回答問題,能讓面試官兩眼放光


這個算是樓主這一個月面試下來,總結的一點經驗吧,樓主自己覺得還是蠻有用的,各位筒子如果不嫌棄,也可以自己試試啦。

舉個例子,比如面試官問你:你們分佈式事務怎麼做的?

那麼,你可以按照這樣的思路回答:

  1. 在項目中某場景使用到了分佈式事務。

  2. 爲什麼要用分佈式事務?

  3. 怎麼使用的分佈式事務?

  4. 在使用過程中遇到了什麼問題,然後怎麼解決的?

  5. 如果看過源碼,講講分佈式事務框架的源碼和實現思想

如果每個技術,都按照這樣的思路,每個問題都這樣去回答,回答兩三個問題,面試官就不會懷疑你技術能力了。

作者簡介:中華石杉,十餘年BAT架構經驗傾囊相授

公衆號:石杉的架構筆記(ID:shishan100)

【END】

作爲碼一代,想教碼二代卻無從下手:

聽說少兒編程很火,可它有哪些好處呢?

孩子多大開始學習比較好呢?又該如何學習呢?

最新的編程教育政策又有哪些呢?

下面給大家介紹CSDN新成員:極客寶寶(ID:geek_baby)

戳他了解更多↓↓↓

 熱 文 推 薦 

☞ 華爲員工年薪 200 萬!真相讓人心酸!

☞ 愛奇藝否認裁員 20%;京東迴應撤出澳洲;Android Studio 3.5 Beta 來了!| 極客頭條

☞ 37 歲學編程,發現第一個 Bug,創造商業編程語言 | 人物誌

☞調查 10,000 名學生開發者:65% 自學成才,學 6 門編程語言!

☞零基礎轉行去阿里做前端,創業當 CTO,他是如何做到的?

☞儲備金被暗中挪用? USDT信任危機再爆發! 拿什麼拯救你我的穩定幣?

☞VMware vSphere 6.0 虛擬機運維常見問題排除

☞中國AI開發者真實現狀:寫代碼這條路,會走多久?

☞補償100萬?Oracle裁900+程序員,新方案已出!


你點的每個“在看”,我都認真當成了喜歡
相关文章