來源:北大青鳥長沙大計教育|發(fā)布時間:2021-08-08 16:45:02
作為程序員,在面試過程中都需要經(jīng)歷一次又一次編程的考驗,這其中有何技巧可言?又該如何通關成功拿到心儀的 offer 呢?
關于編程面試中遇到的困難和算法問題,我們已經(jīng)討論了很多,但是首先在面試環(huán)境中讓自己保持舒適本身就是一種技巧。
除了提出正確的解決方案之外,在每次編程面試中,你還需要做一些額外的事情。
要求澄清問題。
運行你的算法并用測試用例進行驗證。
主動提供算法的時間復雜度和空間復雜度信息。
很多時候,應聘者會立即全神貫注于編寫代碼,而忽略了做上面的一件或多件事情,這會對他們的面試結果產(chǎn)生負面影響。面試官肯定會發(fā)掘出應聘者編寫正確算法的能力,但他們也會基于溝通能力和驗證能力等其他技能來評估應聘者。
要求澄清問題
在開始編寫代碼之前,一個好的應聘者總是會問清楚面試官提出的問題。這有三個主要目的:
它縮小了問題的范圍。例如,也許你會問面試官,“這個數(shù)組中的所有整數(shù)都是正的嗎?”。如果答案是肯定的,那么你就不必考慮整個負整數(shù)空間,這可能使問題更容易解決。
它向面試官表明你正在積極考慮邊緣案例。面試是為了證明你有能力進行批判性和周密的思考,同樣也是為了證明你的原始編碼能力。
它允許你和面試官就問題的理解達成一致。因為有些時候,我給了應聘者一個問題,他們提出的解決方案卻稍有偏差。所以在開始之前,確保你和面試官對你要解決的問題的理解一致。
驗證算法
在面試過程中,僅僅在黑板上寫好代碼并稱之為“完成”是不夠的。一個高質量的應聘者總是會用邊緣案例和例子逐步檢查他們的算法以找出任何錯誤。這是幾乎每個面試官都希望看到的關鍵步驟。
在驗證算法時,盡可能周密。下面是一些提示:
在算法的每個步驟,寫出存儲在任何數(shù)據(jù)結構或變量中的內容。
如果執(zhí)行for-或while循環(huán),請確保運行算法直到完成,以捕獲任何“off-by-one”錯誤或終止錯誤。
選擇non-trivial的測試用例?赡苁窃撍惴ㄟm用于特定的輸入集,但不適用于更復雜的輸入集。嘗試提出破壞算法的測試用例。
理想情況下,你寫的算法沒有任何缺陷,但現(xiàn)實中更可能發(fā)生的是,你會發(fā)現(xiàn)一些小錯誤。通過修改算法來修復這些錯誤,并再次運行幾個測試用例,將能很好地反映出你的代碼調試能力。
提供算法的時間復雜度和空間復雜度
幾乎每個面試官都會關心算法的時間復雜度和空間復雜度。主動提供這些信息,而不是等待他們詢問,可以向面試官表明你熟悉這些概念,并且可以輕松計算這些信息。
需要牢記的一些事情:
當開始考慮一個問題時,試著想想絕對的最好和最壞情形時的復雜度是什么。例如,要在未排序的列表中查找某個元素,我們知道必須至少查看列表中的每個元素一次,所以這個算法的復雜度至少是O(n)。
試著用“壓力測試”測算一下你的算法的復雜度,尤其是當它依賴于兩個或更多的變量時。例如,如果你的算法執(zhí)行次數(shù)是O(n*k):如果k非常小會發(fā)生什么?當k接近n時會發(fā)生什么?有時,你會發(fā)現(xiàn)一個算法對于特定的n和k值是最優(yōu)的,另一個算法對于不同的n和k值是最優(yōu)的。
對于內存限制,如果你確實需要跟蹤數(shù)據(jù)結構中的所有值,請嘗試解釋。此外,還要認識到一個事實,即不同編碼語言中的某些函數(shù)可能會使用額外的內存。一個很好的例子是在Python中進行列表切片,這會創(chuàng)建一個新的列表(可能會產(chǎn)生另一個O(n)內存使用)。
編碼面試是很困難的,精通算法和編碼問題并不能保證總是能夠通過面試。幸運的是,有了這三個技巧,你可以更好地了解如何進行編程面試。祝你好運!
你正在面試編程工作嗎,還是只是喜歡有趣的編程問題?查看我們的時事通訊-Daily Coding Problem,你就能每天在你的收件箱中收到一個關于編程的問題。
作者 | Daily Coding Problem
譯者 | 蘇本如,責編 | 屠敏
出品 | CSDN(ID:CSDNnews)
招生熱線: 4008-0731-86 / 0731-82186801
學校地址: 長沙市天心區(qū)團結路6號
Copyright © 2006 | 湖南大計信息科技有限公司 版權所有
湘ICP備14017520號-3