我之前學過下棋,如今在每天象棋裏也升級到了8-1,若是認真下外帶適度訓練,估計個人瓶頸是弱8-3,聽說是弱上海市級水平,最近也打算參加些區級市級比賽掙些外快。前端
當我在自我訓練提高下棋水平時,意外發現,其中的門道和麪試提高之法是相通的。我用這套方法在幫我兼職培訓的學生去準備面試時,居然發現準備面試的效率和成功率有必定程度的提高。因此我將在這篇文章裏,從提高象棋的角度,趣說面試提高之法,但願你們在一笑了之之後有所啓迪。另外,若是你也想提高象棋的水平,本文至少能幫你打敗公園大爺。面試
在我培訓班裏,經過4,5次課,一些Java零基礎的小白,至少能跑通一個Spring Boot+前端+數據庫的項目,並且也會基本的Java、數據庫和框架的語法。算法
這個階段想當於剛會下棋,就知道面試流程,以及還可以自說自話地敘述項目,但一旦遇到面試官的提問,估計撐不過3個問題。這時候,我就讓他們背定式。數據庫
象棋裏,能夠經過梅花譜,梅花泉和自出洞來無敵手等古譜來熟悉基本殺招,能夠經過看殘局書熟悉八步取士等基本走法,更能夠經過背開局定式瞭解最初的走法。而對於這些小白,我會讓他們由淺入深地背以下的定式說辭。設計模式
1 Java和數據庫方面的基本面試題,好比HashCode爲啥要重寫等,這些資料網上太多,固然我也有,爲了避免打廣告就很少提了。緩存
2 「介紹下你本身的項目?」,針對這個問題,讓他們結合本身項目實踐背熟說辭。數據結構
3 背些關於自我介紹,英文介紹的說辭,以及關於「你有什麼優缺點」等面試常見問題的說辭。多線程
4 再背熟些基本的算法和筆試題等。併發
若是下棋能熟悉基本開局殘局和殺招,那麼就能擺脫亂下的階段,對於面試小白,到這個程度,至少就能和麪試官對上話了,雖然可能仍是敗多勝少,但至少能撐過一刻鐘,或者能避免問題大多回答不上的窘困局面了。app
而後我讓他們相互發問,好比小張介紹項目給小李聽,讓小李聽是否有「項目時間不對」或「技術介紹串門」等明顯問題,或者讓他們相互問些網上找到的Java數據庫或框架方面的面試題。
這就至關於之前考試前背題,以及在答題時,少犯低級計算錯誤。Java面試方面,該背哪些題呢?Java核心、數據庫、Java Web、Spring Boot和中間件組件,題目哪來?網上搜,多搜幾套,就會發現基本同樣。
這樣作的目的,第一讓他們進一步積累面試題以及答案,第二讓他們多說幾遍,避免低級錯誤,好比在這階段,真有人會有「Dubbo是消息中間件」的錯誤。在這階段,凡是遇到不熟悉的技能,必定不能光背理論答案了事,必定得動手實踐下。好比遇到hashcode和equals的問題,必定得寫Java代碼調試一遍,遇到Dubbo問題,必定得配置個基本程序,從而瞭解用法和配資方法。
在象棋裏,會走子+少送子,而後再坐等對方犯錯,這樣估計就有和街頭大爺下棋的資格了,在面試場景,會說基本的問題,外加能介紹項目,再別出明顯的技術漏洞,這個時候去面試小公司,估計還真能碰運氣面上。
但面試絕對不能靠運氣,並且小公司也絕非咱們的目標,因此後面我就會教個人學生一些亮點說辭,固然這也要通過反覆練習,才能說好。下面就給出部分的亮點說辭方面點。
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小白在通過學習項目磨練過之後,上手絕非難事,在上手運行看效果的基礎上,再邊畫邊講清楚這些亮點,在短暫訓練後,也是可能的。
這就比如讓一些會下棋的人,背熟基本古譜,並背熟一些基本開局和基本殘局的走法。下棋下到這種程度,就不會僅僅靠對方送子失誤獲勝了,還能靠本身主動進攻來贏棋。而對於一些想找工做的候選人,作到這種程度之後,就不會讓面試官感受僅僅會幹基本的活,好比增刪改查,並且還能給面試官留下「熟悉底層,對框架和調優必定基本瞭解」的印象,這樣至少就能和大廠面試官過招,並且即便失敗,也不會讓人家感受「太差」了。
學棋學到這種程度,因爲看了很多妙手和古譜,就巴不得每步棋都走得驚天動地。而個人學生一旦背熟了若干亮點說辭,大多也會躍躍欲試,巴不得在每一個問題中都夾帶出「分佈式組件」、「底層源碼」和「設計模式」等話語。
在下棋時,若是每步都看上去很華麗,好比吃子作殺目標性很明顯,這樣一旦遇到高手,第一能針對性擋掉三板斧,第二就從對方大開大合裏找出破綻,通常估計就要落敗。而若是在面試中不斷炫耀值錢技術點,而沒有項目背景或基礎知識支撐,頂多能獲得「熟悉理論」的評價,這樣面試些外包公司小公司,估計問題不大,但面試有必定規模但軟件公司,就比較懸了。
這時我對應會給出以下的建議。
1 心態放平和,你學會值錢技能的說辭,不能用來炫耀。
2 給每一個值錢點找個鋪墊,好比經過項目裏的全棧需求講工廠模式,以訂單併發需求爲鋪墊講分佈式組件,以排查迭代問題入門,再講下底層源碼。這也是個功夫活,具體怎麼鋪墊,我也會讓個人學員反覆練習。
3 杜絕平庸,在回答好一個問題時,別停留下用法和配置方法,爭取想下可否掛靠到值錢技能。
4 同時更要作技術積累,好比積累Spring Boot,這樣才能挖掘更多的值錢技術說辭。
我看一些特大下輔導棋的時候,單看每步,幾乎都很平淡,不過因爲幾步棋配合得當,因此走個3到5步,立馬能積累優點,再走個7,8步,這種優點還能愈來愈大。因爲一些高手能把一個目的融入到若干步戰術組合裏,因此對方就在會不知不覺地落入下風了。其實面試時也差很少,能夠經過一個回答鋪墊項目背景和基本知識,再經過一個回答展現值錢技能的配置和基本方法參數,而後再經過若干問題經過底層源碼等方式講述值錢技能,這樣面試官可能就不知不覺中招了,就能感覺到確實你行,還能認爲你的值錢技能具備項目背景。
其實我讓個人學生所說的那些技術點吧,和象棋裏飛象運車等走法同樣,說穿了誰都會,好比OOM說辭和多線程說辭,網上一找一大堆,但我讓他們融入項目,經過3到5個回答,讓面試官發現一個技術亮點,這樣到面試結束,就能積小勝爲大勝,能綜合展現Java核心、數據和框架乃至分佈式組件和調優方面的技能。相比那些只會被動展現平庸的「針對增刪改查」的技能的候選人,說實在的,個人學生真在作項目時真能好到哪裏去,這也未必,但面試官兩廂一對比,大機率就會要個人學生。
下棋時,最好能知道對方下棋的目的,固然對方若是沒目的亂走,這更好贏。面試時,面試官在提問時,必定也會有目的,我會針對性分析,並給出對應的應對之道。
好比面試官在問項目多少人數和開發模式時,就是在確認項目的真實性,那麼我對應給出的說辭裏,就會讓個人學生綜合展現敏捷開發的實踐要點,以及在項目裏具體還幹了測試部署發佈等活,這樣就能最大程度地用項目說辭證實能力。
好比面試官在問可否加班和遇到問題怎麼辦時,大可能是在確認候選人的承壓能力和工做態度,網上關於此類團隊協做和工做態度的標準答案太多了,對此我就會讓個人學生舉例說明本身很敬業。
再如面試官在詢問某個技術點(好比Redis緩存)的細節時,估計就在考察相關技術在項目裏的用法,這時,我就會讓個人學生在回答好相關問題後,再多說一句,結合解決過的項目問題,實際說下相關技能的用法,細節乃至底層源碼。
哪怕是面試官看上去和你在聊天,好比問你有什麼愛好,平時通常幹嗎?這絕非是和你拉家常,而是經過你平時的事情判斷你的承壓能力學習能力和上進心,明白這點之後,再對應地準備說辭也就不難了。
固然,在瞭解面試官提問動機後,更應該揣着明白裝糊塗,此時更應該在應對好當前問題後,再不露聲色地講些面試官愛聽的話,毫不能自做聰明地顯出看穿面試官提問用意的樣子,不然的話,那真的可能弄巧成拙了。
學下棋時,不只要學習應對靜態局面的走法,更須要學會綜合把控局面的手段。好比須要在一些看似平淡的局面裏,經過積極的運子或戰術手段,讓本身的局面佔據主動權。尤爲更須要在一些關鍵的節點中,經過積極的進攻走法,進一步肯定局面優點。
在學棋過程當中,若是真能作到這種程度,估計至少有資格參加區級比賽了。爲了達到這個程度,必定得多揣摩王天一等特級大師下棋時思考的動機,儘可能模擬用特級大師的想法去分析判斷和處理局面,這聽上去不大容易。不過我在輔導我學生面試的時候,會經過一個個的案例,告訴他們在面試的關鍵節點該採用什麼樣的展現方式,以此達到把控面試局面的效果。固然前提是個人學生事先得背熟各類「自我介紹」、「介紹項目」、「回答技術問題」和「介紹解決過的問題」等方面的靜態說辭(這是體力活)。
有人或許會說,面試中面試官是占主導地位,因此候選人只能被動回答,沒法把控面試。其實未必,面試官也是人,事先可能也就用2,3分鐘掃一下候選人的簡歷,因此候選人只要技術得當,絕對能夠把控。通常來講,我給出的面試技巧會涉及到面試中以下幾個關鍵節點,以下給出些範例。
在自我介紹階段,通常的候選人會介紹年齡學校等,而後說下上家公司,而後大體說下用到的技術,估計還未必說全。但我更會讓個人學生第一講清楚所熟悉的全部技術,另外立馬講述在項目裏有用這些技術的經驗,並且解決過實際問題,這樣就能爲後面用項目經驗展現值錢技能打下很好的基礎,同時當即能讓面試進入到項目介紹的階段,省得有些面試官再胡亂發問。
在介紹項目階段,通常的候選人可能會着重說業務需求,哪怕涉及到技術,因爲可能缺少準備,還未必能展現全所掌握的值錢技術點,而我會讓個人學生略說業務,着重結合需求點說(分佈式組件等)相關技術的應用背景,並且爭取把面試前準備過的亮點說全,同時必定要提到(在值錢技術方面)有解決過實際線上問題的經驗。這樣以後的前幾個問題,就大機率會被控制在以前提到過的點上。並且因爲個人學生以前準備過,因此哪怕項目經驗再不足,也能說好。
當下,分佈式組件是面試必問點,我給個人學生建議是,要麼不問,面試官若是一旦問及,好比問項目裏怎麼用緩存,那麼第一說使用場景,第二說使用時的重要參數和配置,若是事先背過底層源碼說辭的話也一併拋出,第三說解決過的實際問題,最後再收一句,說還用過其它組件。這樣相比其它沒準備過的候選人,個人學生第一能確保回答好,第二還能必定機率控制後面的提問。
並且,哪怕面試官只問及基礎問題,好比集合,我也不會讓個人學生就事論事,只回答好問題自己而後坐等面試官問後一個問題,而是經過「多說一句」的方法,想辦法再找機會邊畫邊說「底層源碼」方面的亮點。
在下棋裏,在關鍵局面下出強手棋從而得到優點,這是戰術問題,而想辦法下到這種局面是戰略問題,更要靠把控局面的能力,若是能作好這點,在業餘人羣裏應該能算強的了。和這對應,面試中能在被問及問題時回答好,這也是戰術問題,同時我更會教個人學生如何讓面試官提出你準備過的問題的方法和說辭。經過這種「把控面試局面」的技巧,個人候選人可能真實作項目的能力未必比別人強多少,但必定能更全面地展現技術,尤爲是值錢技術。
關於面試技巧方面,我給個人學生集中培訓頂多一週之後,必定得讓他們出去面試,若是是面對面面試,必定得讓他們最大程度記住問題以及回答,若是是電話面試,更會讓他們全程錄音,這是爲了覆盤所用,具體要作以下的事情。
第一,遇到沒回答上的問題,得觸類旁通,好比多線程方面線程池沒回答好,必定得再全程複習併發這塊,若是遇到Redis組件部署,必定得再動手操練一遍,這些事情通常讓學生本身作。
第二,若是遇到「自我介紹」或者「有哪些優缺點」這種定式問題沒說好,我也通常讓他們本身去準備。
第三,遇到沒講好技術細節,或者沒有結合項目需求說好,好比Netty粘包問題沒結合實際應用講好,我會讓學生本身再組織一遍而後說給我聽。
第四,面試好之後,必定得對比下事先準備好的諸多亮點,好比準備好告終合實際問題說OOM,或結合項目說設計模式等,若是發現沒說出來,那麼就得再練習一下,之後面試中該經過哪些方式引導出來。
第五,我通常拿些案例,從中分析,好比某同窗講好HashMap之後沒有引導到ConcurrentHashMap等典型問題,這就須要統一講解,這樣個人學員就能進一步掌握「最大程度展現技能和亮點」等的面試技巧。
下棋時若是下好不分析,那麼第一未必能總結亮點,第二之後還會犯一樣的錯,這樣所謂下一百盤也不會有提升,面試也同樣。通常個人學生出去面試個3家之後,再好好準備,至少我給他們作模擬面試時就有模有樣了,並且出去再面試個小公司,大機率能成。在這個基礎上,在技術上針對性地缺啥補啥,外帶再綜合提高下面試技巧,出去哪怕面大廠,成功的機率通常也不會過低了。
論幹項目的能力,可能大多數面試官要比候選人強,並且不止強一點,但所謂有算勝無算。
在不少狀況下,面試官在面試前還在開會和別人扯皮,或者還在傷透腦筋地修改bug,在更多的狀況下,面試官也是被領導臨時抽調去面試別人,因此大多數面試官也就事先用1,2分鐘,邊走邊看簡歷,而在面試時,無非也會從網上找些題目來問,而在面試中,更有多是順着候選人提到的話繼續接茬向下問。相反,做爲候選人,你能夠在面試前背題背亮點說辭,能夠準備「自我介紹」等固定問題,更能排練好「隨口一說」的「引導話術」,而對於大多數問題,也能找到現成答案。
何況,你在面試中的目的不是「證實比面試官強」,而是「防守住別出漏洞」即。謂求勝難,求和容易,就拿個人學生來講,好比一個班40我的,只要是想,大多都能成功跳槽,並且最終漲薪漲2成的,都算少的。並且提高面試技能,只要方法得當,所需的時間不會太長,通常一個月就頂了天了。
這篇文章是我「面試覆盤系列」文的第一篇,也算是個嘗試吧,若是你們感受好,請幫忙點下贊,或者經過評論說出你的想法。若是你們反響好,我會繼續在這個系列中寫下去,好比給出我讓我學員背的諸多定式說辭,以及綜合給初級開發也能使用的亮點說辭。
這篇文章就寫到這裏,最後請你們關注個人公衆號:一塊兒進步,一塊兒掙錢,在本公衆號裏,會有更多精彩文章。