1. 程式人生 > >面試覆盤系列:從象棋提升之道趣說面試提升之法

面試覆盤系列:從象棋提升之道趣說面試提升之法

    我以前學過下棋,現在在天天象棋裡也升級到了8-1,如果認真下外帶適度訓練,估計我的瓶頸是弱8-3,據說是弱上海市級水平,最近也打算參加些區級市級比賽掙些外快。

    當我在自我訓練提升下棋水平時,意外發現,其中的門道和麵試提升之法是相通的。我用這套方法在幫我兼職培訓的學生去準備面試時,竟然發現準備面試的效率和成功率有一定程度的提升。所以我將在這篇文章裡,從提升象棋的角度,趣說面試提升之法,希望大家在一笑了之以後有所啟迪。另外,如果你也想提升象棋的水平,本文至少能幫你戰勝公園大爺。

1 對於零基礎的小白,首先讓他們背基本定式

     在我培訓班裡,通過4,5次課,一些Java零基礎的小白,至少能跑通一個Spring Boot+前端+資料庫的專案,而且也會基本的Java、資料庫和框架的語法。

     這個階段想當於剛會下棋,就知道面試流程,以及還能夠自說自話地敘述專案,但一旦遇到面試官的提問,估計撐不過3個問題。這時候,我就讓他們背定式。

     象棋裡,可以通過梅花譜,梅花泉和自出洞來無敵手等古譜來熟悉基本殺招,可以通過看殘局書熟悉八步取士等基本走法,更可以通過背開局定式瞭解最初的走法。而對於這些小白,我會讓他們由淺入深地背如下的定式說辭。

    1 Java和資料庫方面的基本面試題,比如HashCode為啥要重寫等,這些資料網上太多,當然我也有,為了不打廣告就不多提了。

    2 “介紹下你自己的專案?”,針對這個問題,讓他們結合自己專案實踐背熟說辭。

    3 背些關於自我介紹,英文介紹的說辭,以及關於“你有什麼優缺點”等面試常見問題的說辭。

    4 再背熟些基本的演算法和筆試題等。

    如果下棋能熟悉基本開局殘局和殺招,那麼就能擺脫亂下的階段,對於面試小白,到這個程度,至少就能和麵試官對上話了,雖然可能還是敗多勝少,但至少能撐過一刻鐘,或者能避免問題大多回答不上的窘困局面了。

2 通過多練習,儘量避免錯誤

    然後我讓他們相互發問,比如小張介紹專案給小李聽,讓小李聽是否有“專案時間不對”或“技術介紹串門”等明顯問題,或者讓他們相互問些網上找到的Java資料庫或框架方面的面試題。

    這就相當於以前考試前背題,以及在答題時,少犯低階計算錯誤。Java面試方面,該背哪些題呢?Java核心、資料庫、Java Web、Spring Boot和中介軟體元件,題目哪來?網上搜,多搜幾套,就會發現基本一樣。

    這樣做的目的,第一讓他們進一步積累面試題以及答案,第二讓他們多說幾遍,避免低階錯誤,比如在這階段,真有人會有“Dubbo是訊息中介軟體”的錯誤。在這階段,凡是遇到不熟悉的技能,一定不能光背理論答案了事,一定得動手實踐下。比如遇到hashcode和equals的問題,一定得寫Java程式碼除錯一遍,遇到Dubbo問題,一定得配置個基本程式,從而瞭解用法和配資方法。

    在象棋裡,會走子+少送子,然後再坐等對方犯錯,這樣估計就有和街頭大爺下棋的資格了,在面試場景,會說基本的問題,外加能介紹專案,再別出明顯的技術漏洞,這個時候去面試小公司,估計還真能碰運氣面上。

3 針對特定的場景,告訴他們展示亮點的技巧

    但面試絕對不能靠運氣,而且小公司也絕非我們的目標,所以後面我就會教我的學生一些亮點說辭,當然這也要經過反覆練習,才能說好。下面就給出部分的亮點說辭方面點。

    Java核心方面。

    1 結合ArrayList和迭代器或HashMap等底層原始碼,說下這些集合的執行流程。

    2 結合專案實際說下用過的設計模式。

    3 結合CorrentHashMap綜合展示執行緒併發和資料結構。 

    4 結合案例說下如何解決OOM問題等等。

    資料庫方面。

    1 通過索引以及索引的資料結構,說下資料調優的技巧。

    2 通過看日誌,說下排查解決慢SQL的問題。

    3 通過Redis+MySQL叢集+MyCAT,說下分散式調優的技巧,當然這裡要具體給出案例。

    等等

    框架和分散式元件方面。

    1 結合案例說下Spring Boot的全棧流程以及關鍵註解的含義。

    2 通過日誌等案例,說下AOP,IOC等的用法。

    3 然後就是結合秒殺等案例,說下Redis,Dubbo,Kakfa等元件的用法。

    等等

    這些技術,Java小白在經過學習專案磨練過以後,上手絕非難事,在上手執行看效果的基礎上,再邊畫邊講清楚這些亮點,在短暫訓練後,也是可能的。

    這就好比讓一些會下棋的人,背熟基本古譜,並背熟一些基本開局和基本殘局的走法。下棋下到這種程度,就不會僅僅靠對方送子失誤獲勝了,還能靠自己主動進攻來贏棋。而對於一些想找工作的候選人,做到這種程度以後,就不會讓面試官感覺僅僅會幹基本的活,比如增刪改查,而且還能給面試官留下“熟悉底層,對框架和調優一定基本瞭解”的印象,這樣至少就能和大廠面試官過招,而且即使失敗,也不會讓人家感覺“太差”了。

4 善戰者無痕,要結合專案自然地敘述

    學棋學到這種程度,由於看了不少妙手和古譜,就恨不得每步棋都走得驚天動地。而我的學生一旦背熟了若干亮點說辭,大多也會躍躍欲試,恨不得在每個問題中都夾帶出“分散式元件”、“底層原始碼”和“設計模式”等話語。

    在下棋時,如果每步都看上去很華麗,比如吃子做殺目標性很明顯,這樣一旦遇到高手,第一能針對性擋掉三板斧,第二就從對方大開大合裡找出破綻,一般估計就要落敗。而如果在面試中不斷炫耀值錢技術點,而沒有專案背景或基礎知識支撐,頂多能得到“熟悉理論”的評價,這樣面試些外包公司小公司,估計問題不大,但面試有一定規模但軟體公司,就比較懸了。

    這時我對應會給出如下的建議。

    1 心態放平和,你學會值錢技能的說辭,不能用來炫耀。

    2 給每個值錢點找個鋪墊,比如通過專案裡的全棧需求講工廠模式,以訂單併發需求為鋪墊講分散式元件,以排查迭代問題入門,再講下底層原始碼。這也是個功夫活,具體怎麼鋪墊,我也會讓我的學員反覆練習。

    3 杜絕平庸,在回答好一個問題時,別停留下用法和配置方法,爭取想下能否掛靠到值錢技能。

    4 同時更要做技術積累,比如積累Spring Boot,這樣才能挖掘更多的值錢技術說辭。

    我看一些特大下輔導棋的時候,單看每步,幾乎都很平淡,不過由於幾步棋配合得當,所以走個3到5步,立馬能積累優勢,再走個7,8步,這種優勢還能越來越大。由於一些高手能把一個目的融入到若干步戰術組合裡,所以對方就在會不知不覺地落入下風了。其實面試時也差不多,可以通過一個回答鋪墊專案背景和基本知識,再通過一個回答展示值錢技能的配置和基本方法引數,然後再通過若干問題通過底層原始碼等方式講述值錢技能,這樣面試官可能就不知不覺中招了,就能感受到確實你行,還能認為你的值錢技能具有專案背景。

    其實我讓我的學生所說的那些技術點吧,和象棋裡飛象運車等走法一樣,說穿了誰都會,比如OOM說辭和多執行緒說辭,網上一找一大堆,但我讓他們融入專案,通過3到5個回答,讓面試官發現一個技術亮點,這樣到面試結束,就能積小勝為大勝,能綜合展示Java核心、資料和框架乃至分散式元件和調優方面的技能。相比那些只會被動展示平庸的“針對增刪改查”的技能的候選人,說實在的,我的學生真在做專案時真能好到哪裡去,這也未必,但面試官兩廂一對比,大概率就會要我的學生。

5 知己知彼,瞭解面試官提問的動機

    下棋時,最好能知道對方下棋的目的,當然對方如果沒目的亂走,這更好贏。面試時,面試官在提問時,一定也會有目的,我會針對性分析,並給出對應的應對之道。 

    比如面試官在問專案多少人數和開發模式時,就是在確認專案的真實性,那麼我對應給出的說辭裡,就會讓我的學生綜合展示敏捷開發的實踐要點,以及在專案裡具體還幹了測試部署釋出等活,這樣就能最大程度地用專案說辭證明能力。

    比如面試官在問能否加班和遇到問題怎麼辦時,大多是在確認候選人的承壓能力和工作態度,網上關於此類團隊協作和工作態度的標準答案太多了,對此我就會讓我的學生舉例說明自己很敬業。

    再如面試官在詢問某個技術點(比如Redis快取)的細節時,估計就在考察相關技術在專案裡的用法,這時,我就會讓我的學生在回答好相關問題後,再多說一句,結合解決過的專案問題,實際說下相關技能的用法,細節乃至底層原始碼。

    哪怕是面試官看上去和你在聊天,比如問你有什麼愛好,平時一般幹嘛?這絕非是和你拉家常,而是通過你平時的事情判斷你的承壓能力學習能力和上進心,明白這點以後,再對應地準備說辭也就不難了。

    當然,在瞭解面試官提問動機後,更應該揣著明白裝糊塗,此時更應該在應對好當前問題後,再不露聲色地講些面試官愛聽的話,絕不能自作聰明地顯出看穿面試官提問用意的樣子,否則的話,那真的可能弄巧成拙了。

6 不僅要戰術得當,更要會把控局面

     學下棋時,不僅要學習應對靜態局面的走法,更需要學會綜合把控局面的手段。比如需要在一些看似平淡的局面裡,通過積極的運子或戰術手段,讓自己的局面佔據主動權。尤其更需要在一些關鍵的節點中,通過積極的進攻走法,進一步確定局面優勢。

    在學棋過程中,如果真能做到這種程度,估計至少有資格參加區級比賽了。為了達到這個程度,一定得多揣摩王天一等特級大師下棋時思考的動機,儘量模擬用特級大師的想法去分析判斷和處理局面,這聽上去不大容易。不過我在輔導我學生面試的時候,會通過一個個的案例,告訴他們在面試的關鍵節點該採用什麼樣的展示方式,以此達到把控面試局面的效果。當然前提是我的學生事先得背熟各種“自我介紹”、“介紹專案”、“回答技術問題”和“介紹解決過的問題”等方面的靜態說辭(這是體力活)。

    有人或許會說,面試中面試官是占主導地位,所以候選人只能被動回答,無法把控面試。其實未必,面試官也是人,事先可能也就用2,3分鐘掃一下候選人的簡歷,所以候選人只要技術得當,絕對可以把控。一般來說,我給出的面試技巧會涉及到面試中如下幾個關鍵節點,如下給出些範例。

    在自我介紹階段,一般的候選人會介紹年齡學校等,然後說下上家公司,然後大致說下用到的技術,估計還未必說全。但我更會讓我的學生第一講清楚所熟悉的所有技術,另外立馬講述在專案裡有用這些技術的經驗,而且解決過實際問題,這樣就能為後面用專案經驗展示值錢技能打下很好的基礎,同時立即能讓面試進入到專案介紹的階段,免得有些面試官再胡亂發問。

    在介紹專案階段,一般的候選人可能會著重說業務需求,哪怕涉及到技術,由於可能缺乏準備,還未必能展示全所掌握的值錢技術點,而我會讓我的學生略說業務,著重結合需求點說(分散式元件等)相關技術的應用背景,而且爭取把面試前準備過的亮點說全,同時一定要提到(在值錢技術方面)有解決過實際線上問題的經驗。這樣之後的前幾個問題,就大概率會被控制在之前提到過的點上。而且由於我的學生之前準備過,所以哪怕專案經驗再不足,也能說好。

    當下,分散式元件是面試必問點,我給我的學生建議是,要麼不問,面試官如果一旦問及,比如問專案裡怎麼用快取,那麼第一說使用場景,第二說使用時的重要引數和配置,如果事先背過底層原始碼說辭的話也一併丟擲,第三說解決過的實際問題,最後再收一句,說還用過其它元件。這樣相比其它沒準備過的候選人,我的學生第一能確保回答好,第二還能一定概率控制後面的提問。

    而且,哪怕面試官只問及基礎問題,比如集合,我也不會讓我的學生就事論事,只回答好問題本身然後坐等面試官問後一個問題,而是通過“多說一句”的方法,想辦法再找機會邊畫邊說“底層原始碼”方面的亮點。    

    在下棋裡,在關鍵局面下出強手棋從而獲得優勢,這是戰術問題,而想辦法下到這種局面是戰略問題,更要靠把控局面的能力,如果能做好這點,在業餘人群裡應該能算強的了。和這對應,面試中能在被問及問題時回答好,這也是戰術問題,同時我更會教我的學生如何讓面試官提出你準備過的問題的方法和說辭。通過這種“把控面試局面”的技巧,我的候選人可能真實做專案的能力未必比別人強多少,但一定能更全面地展示技術,尤其是值錢技術。 

7 更通過具體實戰,瞭解每次面試的缺陷和改進點

    關於面試技巧方面,我給我的學生集中培訓頂多一週以後,一定得讓他們出去面試,如果是面對面面試,一定得讓他們最大程度記住問題以及回答,如果是電話面試,更會讓他們全程錄音,這是為了覆盤所用,具體要做如下的事情。

    第一,遇到沒回答上的問題,得舉一反三,比如多執行緒方面執行緒池沒回答好,一定得再全程複習併發這塊,如果遇到Redis元件部署,一定得再動手操練一遍,這些事情一般讓學生自己做。

    第二,如果遇到“自我介紹”或者“有哪些優缺點”這種定式問題沒說好,我也一般讓他們自己去準備。

    第三,遇到沒講好技術細節,或者沒有結合專案需求說好,比如Netty粘包問題沒結合實際應用講好,我會讓學生自己再組織一遍然後說給我聽。

    第四,面試好以後,一定得對比下事先準備好的諸多亮點,比如準備好了結合實際問題說OOM,或結合專案說設計模式等,如果發現沒說出來,那麼就得再練習一下,以後面試中該通過哪些方式引匯出來。

    第五,我一般拿些案例,從中分析,比如某同學講好HashMap以後沒有引導到ConcurrentHashMap等典型問題,這就需要統一講解,這樣我的學員就能進一步掌握“最大程度展示技能和亮點”等的面試技巧。

    下棋時如果下好不分析,那麼第一未必能總結亮點,第二以後還會犯同樣的錯,這樣所謂下一百盤也不會有提高,面試也一樣。一般我的學生出去面試個3家以後,再好好準備,至少我給他們做模擬面試時就有模有樣了,而且出去再面試個小公司,大概率能成。在這個基礎上,在技術上針對性地缺啥補啥,外帶再綜合提升下面試技巧,出去哪怕面大廠,成功的概率一般也不會太低了。

8 總結,其實面試官未必比你更會博弈

    論幹專案的能力,可能大多數面試官要比候選人強,而且不止強一點,但所謂有算勝無算。

    在很多情況下,面試官在面試前還在開會和別人扯皮,或者還在傷透腦筋地修改bug,在更多的情況下,面試官也是被領導臨時抽調去面試別人,所以大多數面試官也就事先用1,2分鐘,邊走邊看簡歷,而在面試時,無非也會從網上找些題目來問,而在面試中,更有可能是順著候選人提到的話繼續接茬向下問。相反,作為候選人,你可以在面試前背題背亮點說辭,可以準備“自我介紹”等固定問題,更能排練好“隨口一說”的“引導話術”,而對於大多數問題,也能找到現成答案。

    況且,你在面試中的目的不是“證明比面試官強”,而是“防守住別出漏洞”即。謂求勝難,求和容易,就拿我的學生來說,比如一個班40個人,只要是想,大多都能成功跳槽,而且最終漲薪漲2成的,都算少的。而且提升面試技能,只要方法得當,所需的時間不會太長,一般一個月就頂了天了。

    這篇文章是我“面試覆盤系列”文的第一篇,也算是個嘗試吧,如果大家感覺好,請幫忙點下贊,或者通過評論說出你的想法。如果大家反響好,我會繼續在這個系列中寫下去,比如給出我讓我學員背的諸多定式說辭,以及綜合給初級開發也能使用的亮點說辭。

    這篇文章就寫到這裡,最後請大家關注我的公眾號:一起進步,一起掙錢,在本公眾號裡,會有更多精彩文章。