天天看點

面試 4 個月,最終入職大廠經驗分享

  在18年底到19年3月,陸續面試了幾家公司,有成有不成的,最終進了一家比較滿意的知名外企。在本文裡,我将介紹我這段時間裡更新履歷和面試的相關經曆。

  可能面試相關的一些方法,大家能從我之前的博文裡看到,但在本文裡,大家更能從相關實戰性的例子中進一步體會到面試技巧的使用方法。

  1 剛開始一定得通過一些小公司練手

  我打算要換工作,就更新了履歷,這時就有不少獵頭來找我,剛開始,我不敢面大公司,隻是去些規模小的網際網路公司。因為一方面,當時我很久不面試了,面試實戰技能難免有些荒廢,另一方面,離我之前的面試畢竟過了一陣,我不知道目前市面上哪些技術比較值錢。

  而且,我在面試前會準備一些針對項目和值錢技術的說辭,這些說辭總要經過實戰來演練下。事實上,在和小公司溝通的過程中,進一步提升了我的相關表述能力和相關話術,相當于用小公司來踩坑。相反,如果用大公司的面試失敗來換得這些進步,就未免有些可惜了。

  是以,我和獵頭明說,我想去大公司,但之前,你得讓我到一些小公司去練練手,同時,我面試好以後,會告訴你這些小公司的面試題和相關技巧。這樣一些獵頭就肯先推薦我去小公司了。

  2 投履歷前,微調履歷描述的技巧

  1 公司A在職位介紹裡,提到對分布式元件有要求,尤其是負載均衡叢集。這塊技術我在通用版履歷中隻是籠統寫了下,有nginx+lvs實際經驗,既然這個公司有類似要求,我就在履歷中細化了這塊:用到了lvs+keepalive叢集和nginx,它們分别工作在4層和7層,(後省略相關技術使用點描述),最後介紹下效果:用了這個負載均衡元件外,我們系統承受住了xx的并發量。

  2 在公司B的職位介紹裡,提到了高并發的需求,那麼我就着重寫了我壓測的相關經驗,包括壓測環境怎麼部署,用到哪些元件,再同時列了些壓測後改善系統性能的若幹方法。

  3 公司C比較小,需要一位比較資深的能帶團隊的架構師,那麼我在履歷中除了介紹技術外,還着重寫了帶團隊的若幹經驗。

  對大家來說,其實面試任何一家公司,它們的職位要求絕對不可能一樣。這時大家最好是微調下履歷。這種微調,絕對不是胡亂編寫,比如上個項目幹的是測試,履歷中改成開發。而是挖掘下側重點。

  就像我之前給出的案例,對于分布式技術,我上個項目确實用過,但履歷中篇幅有限,我不可能面面俱到地寫,但既然你們公司有要求,那麼我就針對性地詳細介紹。

  其實這塊談不上是面試技巧,而是國文技巧。首先是審題,了解職位介紹的主要内容,然後再像寫作文那樣,詳細擴充下上個項目裡相關技術點。甚至這隻是中考國文的考點而不是聯考的,但我自己的體會是,在這段時間裡針對每份職位介紹我都做了微調,是以基本上是投一份履歷就能得到一次面試機會。

  3 在換工作前,需要定下預期目标,同時要觀察公司的情況

  我見過不少人,面試成了就進去了,結果雖然錢達到預期,但工作環境和行業背景都不是自己想要的,對自己未來發展很不利。

  目前不少公司的情況,比如行業背景(比如金融保險電商等)還有工作強度(加班情況)在網上都能查到,用什麼技術(比如分布式技術還是雲還是AI)通過打聽也能問到。

  網際網路是萬能的,甚至如果仔細些,一些離職率,每年工資的增長幅度,甚至這個公司是第幾輪融資,一般也能看到。

  而且,大家在面試的時候,可以通過現場觀察以及和面試官交流,旁敲側擊地打探到上述情況。在這個基礎上,大家需要結合自己目前的需求和未來3到5年的發展方向,找若幹類适合自己的公司,下面就給些我個人的和我所見到的例子。

  1 (這是我個人的觀點)比如我不大願意進創業型公司,也比較排斥長時間的996,是以這類公司我隻是拿來練手。

  2 有段時間,不少P2P金融公司踩雷,是以哪怕面試時,這類公司的面試官會說得天花亂墜(很少有說自己不好的),但這類公司得慎重。

  3 有次我到一個現場去面試,發現公司規模不大,是在一個

二手手遊賬号買号平台

園區裡占1個樓層,且大多是業務人員,開發的不多,而且人事總會說自己公司正在融資,那麼這個公司就有可能不穩定,在有其它選項時,我就沒去。

  4 我認識一個人,他想在Java分布式這塊有所發展,他5年後的目标是架構師,在面試過程中,他就詳細問了未來新進組的技術棧,等确定可以了再入職。

  換工作是個折騰人的事情,雖然沒有十全十美的事情,進新公司後一定會發現和當初的預期有所不同,但如果事先不調查,那麼入職後後悔這還是小事,耽擱自己的發展才是大事。

  4 面試前,我總要檢視職位介紹,以此準備項目介紹

  在上文裡,我一直介紹的是準備履歷和定目标,從這部分開始,将介紹準備面試。在之前的博文裡,我一直強調項目介紹的重要性,是以當我自己出去面試的時候,這塊絕對重視。在準備項目介紹前,我還是會通讀應聘職位的技術介紹,然後按如下的步驟來準備。

  1 介紹項目的基本情況,比如這個項目是幹嘛的,有哪些子產品流程是什麼,自己做了哪些,持續了多久,有多少個人參與。這塊切記,可以談下業務,但别深入,因為面試官不熟悉,也不想熟悉候選人的業務,這塊時間控制在1分鐘之内。

  2 通過介紹項目用到的軟體,以及項目的管理方式,來進一步驗證項目的真實性,否則很難和教育訓練班給出的項目有差别。

  我介紹的時候,就說,項目管理用Maven,部署用jenkins,靜态掃描用Sonar,任務管理和bug管理用jira,平時采用靈活的項目疊代方式,每天有站會,大約1月一個疊代版本。這塊大家可以根據自己的情況來介紹,時間也别太長,估計用1分鐘也就夠了。

  3 這塊最重要,是結合業務,抛出項目用到的技術,但别展開。

  比如我見過一個職位介紹,裡面寫到需要有資料庫優化的經驗,那麼我就說,項目裡我用過MyCat作為分庫分表,(不展開技術),結果上線後,我們資料庫能承受住每秒2000個并發請求(說下用好的結果)。

  又如一個JD裡說要用到微服務技術,那麼我就說,項目裡用到了Spring Cloud架構,用到了Ribbon,Eureka等元件,容器是Docker。用好以後,在釋出時會發現,各子產品之間的調用耦合性大大降低。

  這塊為什麼不用展開?第一,目前還在介紹項目,如果展開技術,就會主次不分,面試官會對你的邏輯思路産生質疑。第二,由于在JD裡有要求,面試官一定會深入來問,别人問你說總比自己自吹自擂要好。第三,就好比之前考文科内容,目前在介紹項目時,先應當把所有的點說出來,面上自有機會發揮。

  5 準備項目介紹時,我是如何準備值錢技術的

  這塊其實和介紹項目經驗時密不可分,這裡就拿我介紹過的Netty元件來說明。

  1 準備如何過渡到相關技術的說辭。

  這裡一定别讓面試官感覺你在自說自話。比如我準備的方案1是,在介紹好項目背景後,如果面試官沒打斷,我就詢問,能否介紹其中的Netty細節?得到允許後再說。

  方案2是把這些技術關聯到面試官可能會問的問題上,比如問及網絡通訊時介紹Netty,這個事先我會整理一個問題清單,遇到此類問題,我會抛出Netty說辭。對于其他技術也可以照此準備。

  2 結合業務需求點,說下為什麼要用這個技術,以及用了有什麼好處。

  比如為了優化網絡通訊協定,是以用基于TCP協定的Netty,我業務子產品裡的xxx功能是用到netty,再稍微結合業務和Netty展開下。這樣的話,面試官就會感覺這個技術你不是僅僅在學習中用到,而且在項目業務裡用到。

  3 準備下這個技術裡我踩過的坑。

  比如通訊過程中我遇到了半包和粘包問題,對此我更是深入了底層代碼說明,還有Netty裡的堆外記憶體管理問題,我準備了一個由于管理不善而導緻的OOM問題的排查和解決過程(這類問題網上相關的也很多)。

  4 我再準備了用了這個技術後對項目的幫助。

  比如Netty是基于TCP協定的,它要比Http協定要輕,是以通訊性能高,且Netty内部的Reactor線程模型對系統的IO幫助很大。

  其實準備到這個程度,一般的面試官就不怎麼再問了,哪怕面試官再問了一個我不知道的問題,我也可以理直氣壯地說不知道了,畢竟我之前已經介紹了不少底層代碼,再精通Netty的人也未必能面面俱到地在脫稿的情況下回答出任何問題。

  但為了以防萬一,我更準備了“源于項目但高于項目”的說辭,一方面證明我平時還會不斷專研,另一方面進一步證明我熟悉并能合理使用Netty的底層代碼。這方面我準備了如下的内容:

  1 Netty的重要元件以及一個請求過來時各子產品工作的時序圖。

  2 Netty内部零拷貝的原理和好處,對此還專門準備了代碼。

  3 Netty讀寫索引的工作方式。

  4 Netty異步處理的機制。

  大家可以想象下,如果在面試中,大家很自信地邊寫底層代碼邊解釋問題,面試官會對大家有什麼評價?其實這些都是可以準備的,我一直沒明白,為什麼有些人面試前不做任何準備?這些準備的素材又不是找不到。

  下面我再略講下我MyCAT的準備要點。

  1 還是講下業務背景,為什麼要用?

  2 如何使用,無非是設定分庫規則,改寫SQL語句等。

  3 準備下踩到的坑,比如自增長主鍵在每台機器上都要保證唯一。

  4 然後再結合些底層代碼,準備下一條SQL語句是如何分發到對應的分庫上的,然後執行好以後又如何傳回的。

  基本上我面試時說到這個程度後,面試官就不怎麼問了。

  6 事前評估好自己的薄弱點,想辦法讓面試官忽略

  哪怕事先再準備,我們也不能保證自己一定能達到職位介紹裡的要求,這時候就得準備一個自己薄弱技術的清單,然後想辦法在面試中繞過去,如果繞不過去,就找些替代方案。

  比如我對消息通訊元件不熟悉,在面試前我哪怕看代碼看文檔也無法進一步了解,我就在面試中,故意不提這個環節,抛出其它值錢技術,引誘面試官來問,一般交流一個技術點大約耗時10分鐘(邊畫圖邊介紹再提問),是以面試過程中詳細交流到的最多也就5個點,少的話就3個,在不少面試裡就根本沒涉及到這塊。

  有兩場面試,技術面試官問及到了,我就說項目裡用過,同時多介紹些使用場景,比如用Kafka進行異步消息通知,通過消息中間件來保證交易的幂等性。這樣面試官聽到我介紹了應用場景,就至少會認為我用過。隻有一場面試,面試官在kafka方面問得很細,問到如何叢集内防止消息重發的細節,我就沒回答上。

  也就是說,我通過刻意回避外加介紹業務應用場景,很大程度上隐藏了我了解不深的技術。相反,如果我在履歷中大大咧咧地寫上用過kafka,那麼可能每場面試都會被問到,畢竟在面試中被問倒不是件好事。

  又如,我對分布式叢集裡的失效轉移底層細節始終沒了解透徹,那麼在相關問題上就得非常小心。

  有一場面試裡,我被問到dubbo+zk叢集,這塊如果細問,一定會問到失效轉移的選舉算法,我對此不熟,那麼我就先說dubbo的通訊協定,序列化方式以及通過設定逾時時間實作服務降級的思路,然後再說zk的部署。最終面試官果然問到選舉算法,但之前我已經結合業務談了dubbo底層代碼和zk的相關部署,是以不了解選舉算法并沒有産生太大的影響。

  這裡用到的技巧是“偷換概念”,一個問題有多個回答方向,你先讓面試官感覺到你在很多領域非常熟悉,那麼在個别領域不熟悉就無傷大雅了。

  7 和獵頭和人事的溝通要點

  1 獵頭和我們是一夥的,我們成了獵頭也能拿到提成,是以和獵頭談時一定得坦誠,把你優點和弱點都說,獵頭會幫忙想辦法(比如問面試題)或者是幫忙優化履歷。

  2 面試前,一定和獵頭談次,或者問下對這家公司該說什麼話,以及之前人的成功失敗經驗,如果問題,去問下面試題(包括筆試題和口頭技術問題)。

  3 面試後,一定第一時間和獵頭溝通,這時個人直接去問不合适。而且還可以通過獵頭說,哪怕這個崗位沒面上,還可以嘗試這個公司的其它崗位。

  4 談工資時一定得先聽獵頭的建議,不少人對目前行情不了解,或者信心不足,工資沒要足,這時讓獵頭談是比較合适的,因為獵頭就幹這個的。一般來說,跳槽後,工資大約有20%到50%的漲幅,有些公司會要前家公司的收入證明,相關問題也可以問獵頭。

  但和人事談,就要小心了,畢竟人事是公司開工資的。

  1 人事會問之前公司的離職原因,這時千萬别讓人事感覺出你不穩定,你可以說為了進一步提升自己的能力,此類問題網上太多,大家可以自己查。

  2 在談發展方向時,别和JD上的背離。比如JD上是招個技術開發人才,你卻和人事說,幹了1年後想轉Team leader管理崗位,或者說同時想做測試,那麼人事就會感覺到,你未來的發展規劃和公司想要的不比對。

  總之,面試時人事會非常nice地和你交流,有時候甚至是套話,看你是否穩定,是否能很好地和團隊協作,能否加班,我就見過有人卡在人事這關,甚至還不知道為啥被拒。

  而且一般你在和人事談工資前,最好向獵頭打探下這個職位的工資範圍,在此基礎上,如果你感覺面試非常好,或者他們着急要人,或者你感覺加班會很多,可以适當多要些,相反如果你非常想進這個公司,那麼就自己斟酌。

  8 總結:不能常跳槽,但得經常更新自己的技能

  在上文裡,我通過最近換工作的經曆,向大家介紹了相關經驗,比起我的兩本書,Java Web輕量級開發面試教程和Java核心技術及面試指南,自認為本文介紹的技巧更有實戰性。

  我不推薦經常換工作,比如一年換個兩家,那麼公司會質疑穩定性,但對于我們做IT的人來說,如果手頭技術停滞不前,那麼自己的競争高工資的能力也會大大降低。

  那麼目前該了解哪些技術?以及在這個技術方面我目前掌握得如何?這固然可以通過工作來檢驗,但工作中接觸到的技術畢竟是有限的,這時就可以通過面試來檢驗自己目前的學習情況,同時也可以通過面試題去了解自己的努力方向