1. 程式人生 > >技術面試老是有勁使不出,該怎麽辦?

技術面試老是有勁使不出,該怎麽辦?

經驗 層次 協作能力 特意 了解 nag 總結 判斷 深入

又到了一年金三銀四,回想到很多年前我剛參加工作時的面試經歷,那時都是呆呆地等著面試官問問題,被問到一些自己並不熟悉的問題時要不就是思考半天也切不中要點,要不就只能無奈地回答並不清楚了。其實不管是經驗不足的初級開發,還是面臨更高要求的資深開發,在面試上都會有一樣的困擾:如何在掌握的知識有限的情況下,完成好一場高質量的面試呢?

本文最適合以下幾種情況的同學參考:

  1. 知識面有限的初學者

  2. 希望首次加入大公司的開發同學

  3. 面臨技術深度要求的開發同學

雖然文中主要以後端開發為例介紹技術面試的準備方法,但是和其他崗位的面試也有相似之處,其他朋友也可以作為參考。

技術分享圖片

兩個悲劇的面試故事

小黃去年剛從計算機專業畢業,但是感覺對技術掌握得還不夠,就又報名參加了一個培訓班,年底剛從培訓班畢業,懷揣著精心準備的簡歷,想到杭州闖一闖。今天上午到了一家裝修還不錯的公司面試,感覺這家公司窗明桌凈,辦公桌前都是Mac筆記本加雙屏顯示器,比昨天面的那家外包公司可好多了,心想一定要好好發揮抓住這個機會。

老王工作五六年了,今年剛從一家不小的公司出來,公司效益不好,年底裁員了,不幸老王在年前的最後一次裁員名單中中獎了。雖然短期內也沒什麽太大的經濟問題,但是之前拿到offer的都是一些沒上軌道的小公司,跟之前待過的公司比總感覺是明珠暗投不太甘心。這次面試的公司看上去還滿正規的,如果能進去,就算不漲薪,但是心理上落差總是小一點。

小黃按部就班地說完了自己準備的項目介紹,然後面試官就照著簡歷問了起來。“你熟悉MySQL數據庫?”,“對”,“唔...那你能說說MySQL常用的有哪幾種存儲引擎嗎?”,“啊?什麽是存儲引擎?”。小黃心想,昨天復習了面試寶典裏的數據庫索引,老師說這個是要點,面試官怎麽不按常理出牌呢。“你簡歷上寫了使用過Kafka消息中間件?”,“嗯,對的”,“那你能說說Kafka的拉模型和其他推模型消息中間件的區別嗎?”,“...”,“今天面試就到這裏,有後續的話HR在一周內會聯系你的”。

老王在隔壁的會議室裏坐了下來,面試官讓老王先介紹一下自己最近比較有代表性的項目,老王大概說了說自己這兩年做的一個平臺的功能。面試官問:“在這個項目過程中你有碰到什麽印象比較深的技術難點或者業務難點嗎?”,老王想了一想,感覺一下子有點想不起來。面試官繼續問:“剛才你介紹的項目裏有說到XXX功能,那在YYY異常情況下如果處理ZZZ問題呢?”。老王心想以前也沒考慮過這個,那我就直接現場推敲一下吧,“這裏要先這樣,對了,那裏要那樣,不對,這裏還有一種情況”。十分鐘過去了,老王還在原地兜著圈子,而且絲毫沒有停下來的意思。面試官只能打斷老王換了一個問題:“那你能介紹一個你有過深入了解的技術嗎?”,老王:“我好像這幾個都了解一點”。“那關系型數據庫中的聚集索引和非聚集索引有什麽區別呢?”,“好像這兩個的存儲方式有點不同,非聚集索引開銷會大一點”,“那麽為什麽非聚集索引開銷會比較大呢?”,“這個問題好像要涉及操作系統之類的知識,有點太深了”。40分鐘後,老王也結束了面試。

程序員何苦為難程序員?

為什麽面試官老是會問一些莫名其妙的問題?我怎麽可能了解計算機方面的所有問題呢?為什麽他問得這麽深,寫代碼的時候能有什麽用?

之前我在一次失敗的面試之後總是感覺有點不舒服,我感覺我的水平也是挺不錯的,為什麽到了面試就總感覺發揮不出,而且老是被“虐”呢?下面我們一起來想想辦法。

該怎麽辦?不打無準備之仗!

如何完成好一場高質量的面試?這是我們在文章一開頭提出的問題。首先我們要知道,我們掌握的知識一定是有限的,不管學到了多少,仍然還會有不知道的知識。特別是對技術深度有要求的資深開發崗位,想要面面俱到幾乎是一個不可能的任務。但是為什麽有些人就能很輕易地拿到offer呢?

首先,我們分析一下一場面試的結構。

面試的結構

一般技術面試都會分為四個部分:項目介紹/自我介紹、技術能力問答、綜合能力問答、反向提問環節。而其中前三個部分對面試的成敗影響最大。首先,面試一般都會以項目介紹/自我介紹來進行切入,其實技術面試的自我介紹主要也是介紹自己的項目經驗。然後會穿插著對技術能力和綜合能力的評估,一般這一步都會由之前的項目介紹引申出來。

一般來說,面試官在每個環節希望了解的主要是:

1、項目介紹——基本背景、擅長的業務領域、解決問題的能力、技術層級

2、技術能力問答——技術深度、分析能力、抽象能力、學習能力

3、綜合能力問答——工作素養、協作能力、學習素養

雖然看上去眼花繚亂的非常多,其實核心關註的就是幾點:技術好、好合作、主動性強。

對於大部分面試官來說,一般也不會做太多事前準備和細密的事後分析,大多都是靠一個大概的印象來做出判斷的。所以面試的一個訣竅就是:突出亮點。一旦面試中有讓人印象深刻的亮點,其他方面只要不是太差一般面試就十拿九穩了。

單點突破

但是很多讀者應該和我以前一樣,覺得自己好像也沒什麽亮點啊,總感覺沒什麽特別的可說。但是通過總結和準備,我相信每一個人都可以有自己的亮點,而且是很多個亮點。

首先,我們可以通過總結來得到一份優秀的項目介紹。關鍵點就在於不能光介紹項目完成的需求,因為這些對於面試官來說並沒有什麽價值,畢竟我們面的是開發崗位不是產品崗位:)在項目介紹中,我們應該明確描述我們在項目中解決的問題,包括技術難題和業務難題。如何表述可以參考一下現在流行的STAR法則,即在什麽情況下(Situation),面臨一項什麽樣的任務(Task),采取了什麽樣的行動(Action),達到了怎樣的結果(Result)。這樣的表述可以很好地展示自己的解決問題能力,充分顯示了自己在工作中的主動性。

然後,我們還可以通過準備來深挖幾個在工作中比較重要的技術點作為“技術亮點”展示,這指的不是僅僅通過“面試寶典”來準備的膚淺的理論知識,而應該是能做到真正的言之有物、切中工作要點的實踐性的深入知識點。這一步是本文所有面試準備技巧中唯一對技術水平有要求而且是要求很高的步驟,技術水平不夠的朋友可能發愁怎麽準備,技術水平比較高的朋友可能又會疑惑到底什麽是實踐性的深入知識點。大家不用擔心,我已經為大家準備好了學習材料或者說是參考樣例。大家可以加我的後端架構交流學習群:552391552,裏面已經為大家準備好了面試和架構學習視頻資料,歡迎大家加群討論面試問題與技術上的交流與學習。通過學習或參考工作經驗較豐富者的總結文章我們可以更容易地獲得自己的技術亮點。

實踐性的深入知識點的最大特點就是:工作中會使用且可以層層深入形成問題鏈條。關系型數據庫是後端開發離不開的技術,而數據庫索引又是程序中的SQL語句執行效率的關鍵,大家可以通過我之前編寫的一系列數據庫索引相關的文章來了解一個實踐性的深入知識點到底長什麽樣。後續我也會不斷更新更多淺顯易懂的高階技術,有興趣的朋友可以持續關註一下。下面的文章主要以知識點講解為主,需要具體的一系列相關面試題的朋友可以在文後留言,如果人數比較多我會考慮另外寫一篇文章講解具體的面試題並鏈接到對應的知識點。

連點成面

但是有了準備之後,我們怎麽能防止面試官問出很多超出我們準備範圍的“奇怪”的問題呢?這就需要我們有效地引導和填充整個面試的過程。一般一場技術面試會在40分鐘到60分鐘,如何完成好一場技術面試的關鍵就在於如何用亮點來充滿這40到60分鐘。

一般一個技術亮點會包含一系列層層遞進的內容,所以可以問出大概三到五個問題。如果發現面試官不知道應該如何追問,那麽你可以簡短一些地把後續知識點一次性介紹完。一般這些問題都說完時間就過去了十到十五分鐘,而項目介紹和相關的問答會占用大概10分鐘。如果我們準備了兩個技術亮點,加上前後的一些非技術性問題和反向提問,那麽基本上一場面試就圓滿地結束了。

那麽如何讓面試官問出自己想問的問題呢?這就需要我們準備好一個“劇本”了。

首先,面試的開場一定是項目介紹,可以將我們準備好的技術亮點與項目介紹中解決的技術難題結合起來,這樣面試官基本都會根據這個點繼續往下追問。

其次,我們還可以對簡歷內容進行特意的編排來誘導面試官主動提出我們準備好的問題。例如在簡歷中把擅長的技術放在更靠上的位置突出顯示,並且增加更多的深入解釋。這樣不僅可以引起面試官的註意,還能使簡歷顯得更有技術含量,更容易通過篩選。

最後,還可以厚著臉皮主動提出自己對某一個領域比較了解,嘗試詢問面試官對這一部分有沒有興趣。

通過上述這三點,基本上80%以上的面試就能夠順順利利地圓滿完成了。

問題總結

在掌握了面試的技巧之後,我們再來看看之前小黃和老王到底犯了什麽錯誤,我們也能避免踩坑。

初級開發小黃的問題:

1、惜字如金,沒有充分回答問題;

對於面試官提出的“是否用過”“是否了解”這樣的問題,應該補充上能夠證明自己是內行的解釋。

2、等著面試官提問,沒有主動地引導。

我們應該主動將問題引導向自己擅長的方面。

資深開發老王的問題:

1、項目經歷沒有準備;

只講了項目的功能,而不講過程中遇到的業務難點和技術難點。

2、過分糾結細節,但是表述又不流暢;

3、問題抓不住重點,從細節開始推敲,反反復復。

表述復雜問題時應該從宏觀到微觀。先從比較高的層次入手,劃分大的模塊,確定模塊間的交互,然後再逐個模塊地細化細節。這樣不僅自己能夠更容易地解決問題,而且面試官也更容易理解,避免發生即使回答了正確答案但是面試官也不認同的情況。

技術面試老是有勁使不出,該怎麽辦?