原文連接: https://www.cnblogs.com/JavaArchitect/archive/2019/04/22/10720897.htmlhtml
以個人親身經歷爲例,告訴你們寫簡歷和麪試的技巧(面向高級開發和架構師)nginx
以前我也寫過很多介紹面試相關的博文,有些文章的點擊量還不低,這些面試相關的經驗大多都是從我面試別人的過程當中提煉出來了。 在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的人來講,若是手頭技術停滯不前,那麼本身的競爭高工資的能力也會大大下降。 那麼目前該瞭解哪些技術?以及在這個技術方面我當前掌握得如何?這當然能夠經過工做來檢驗,但工做中接觸到的技術畢竟是有限的,這時就能夠經過面試來檢驗本身當前的學習狀況,同時也能夠經過面試題去了解本身的努力方向。