作為程序員,在面試過程中都需要經(jīng)歷一次又一次編程的考驗(yàn),這其中有何技巧可言?又該如何通關(guān)成功拿到心儀的 offer 呢?
關(guān)于編程面試中遇到的困難和算法問題,我們已經(jīng)討論了很多,但是首先在面試環(huán)境中讓自己保持舒適本身就是一種技巧。 除了提出正確的解決方案之外,在每次編程面試中,你還需要做一些額外的事情。
要求澄清問題。
運(yùn)行你的算法并用測(cè)試用例進(jìn)行驗(yàn)證。
主動(dòng)提供算法的時(shí)間復(fù)雜度和空間復(fù)雜度信息。
很多時(shí)候,應(yīng)聘者會(huì)立即全神貫注于編寫代碼,而忽略了做上面的一件或多件事情,這會(huì)對(duì)他們的面試結(jié)果產(chǎn)生負(fù)面影響。面試官肯定會(huì)發(fā)掘出應(yīng)聘者編寫正確算法的能力,但他們也會(huì)基于溝通能力和驗(yàn)證能力等其他技能來評(píng)估應(yīng)聘者。要求澄清問題 在開始編寫代碼之前,一個(gè)好的應(yīng)聘者總是會(huì)問清楚面試官提出的問題。這有三個(gè)主要目的:
它縮小了問題的范圍。例如,也許你會(huì)問面試官,“這個(gè)數(shù)組中的所有整數(shù)都是正的嗎?”。如果答案是肯定的,那么你就不必考慮整個(gè)負(fù)整數(shù)空間,這可能使問題更容易解決。
它向面試官表明你正在積極考慮邊緣案例。面試是為了證明你有能力進(jìn)行批判性和周密的思考,同樣也是為了證明你的原始編碼能力。
它允許你和面試官就問題的理解達(dá)成一致。因?yàn)橛行r(shí)候,我給了應(yīng)聘者一個(gè)問題,他們提出的解決方案卻稍有偏差。所以在開始之前,確保你和面試官對(duì)你要解決的問題的理解一致。
驗(yàn)證算法 在面試過程中,僅僅在黑板上寫好代碼并稱之為“完成”是不夠的。一個(gè)高質(zhì)量的應(yīng)聘者總是會(huì)用邊緣案例和例子逐步檢查他們的算法以找出任何錯(cuò)誤。這是幾乎每個(gè)面試官都希望看到的關(guān)鍵步驟。 在驗(yàn)證算法時(shí),盡可能周密。下面是一些提示:
在算法的每個(gè)步驟,寫出存儲(chǔ)在任何數(shù)據(jù)結(jié)構(gòu)或變量中的內(nèi)容。
如果執(zhí)行for-或while循環(huán),請(qǐng)確保運(yùn)行算法直到完成,以捕獲任何“off-by-one”錯(cuò)誤或終止錯(cuò)誤。
選擇non-trivial的測(cè)試用例。可能是該算法適用于特定的輸入集,但不適用于更復(fù)雜的輸入集。嘗試提出破壞算法的測(cè)試用例。
理想情況下,你寫的算法沒有任何缺陷,但現(xiàn)實(shí)中更可能發(fā)生的是,你會(huì)發(fā)現(xiàn)一些小錯(cuò)誤。通過修改算法來修復(fù)這些錯(cuò)誤,并再次運(yùn)行幾個(gè)測(cè)試用例,將能很好地反映出你的代碼調(diào)試能力。 提供算法的時(shí)間復(fù)雜度和空間復(fù)雜度 幾乎每個(gè)面試官都會(huì)關(guān)心算法的時(shí)間復(fù)雜度和空間復(fù)雜度。主動(dòng)提供這些信息,而不是等待他們?cè)儐枺梢韵蛎嬖嚬俦砻髂闶煜み@些概念,并且可以輕松計(jì)算這些信息。 需要牢記的一些事情:
當(dāng)開始考慮一個(gè)問題時(shí),試著想想絕對(duì)的最好和最壞情形時(shí)的復(fù)雜度是什么。例如,要在未排序的列表中查找某個(gè)元素,我們知道必須至少查看列表中的每個(gè)元素一次,所以這個(gè)算法的復(fù)雜度至少是O(n)。
試著用“壓力測(cè)試”測(cè)算一下你的算法的復(fù)雜度,尤其是當(dāng)它依賴于兩個(gè)或更多的變量時(shí)。例如,如果你的算法執(zhí)行次數(shù)是O(n*k):如果k非常小會(huì)發(fā)生什么?當(dāng)k接近n時(shí)會(huì)發(fā)生什么?有時(shí),你會(huì)發(fā)現(xiàn)一個(gè)算法對(duì)于特定的n和k值是最優(yōu)的,另一個(gè)算法對(duì)于不同的n和k值是最優(yōu)的。
對(duì)于內(nèi)存限制,如果你確實(shí)需要跟蹤數(shù)據(jù)結(jié)構(gòu)中的所有值,請(qǐng)嘗試解釋。此外,還要認(rèn)識(shí)到一個(gè)事實(shí),即不同編碼語言中的某些函數(shù)可能會(huì)使用額外的內(nèi)存。一個(gè)很好的例子是在Python中進(jìn)行列表切片,這會(huì)創(chuàng)建一個(gè)新的列表(可能會(huì)產(chǎn)生另一個(gè)O(n)內(nèi)存使用)。
編碼面試是很困難的,精通算法和編碼問題并不能保證總是能夠通過面試。幸運(yùn)的是,有了這三個(gè)技巧,你可以更好地了解如何進(jìn)行編程面試。祝你好運(yùn)! 你正在面試編程工作嗎,還是只是喜歡有趣的編程問題?查看我們的時(shí)事通訊-Daily Coding Problem,你就能每天在你的收件箱中收到一個(gè)關(guān)于編程的問題。
-
算法
+關(guān)注
關(guān)注
23文章
4617瀏覽量
93031 -
編程
+關(guān)注
關(guān)注
88文章
3623瀏覽量
93799 -
代碼
+關(guān)注
關(guān)注
30文章
4798瀏覽量
68714
原文標(biāo)題:9 大技巧拯救你的編程面試!
文章出處:【微信號(hào):weixin21ic,微信公眾號(hào):21ic電子網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論