全文共3357字,預計學習時長11分鐘
今年年初的一個周三上午,筆者在公寓裡瘋狂踱步,背著常見的面試問題。我距離得到理想的工作崗位還差三次編程面試。能得到面試機會實屬不易,為了通過面試,我付出了很大努力。
那時英國的新冠疫情才開始有嚴重的跡象,因此我們採取的是線上面試的形式。
第一場面試的時候,筆者竭力克制住要把攝像頭藏起來的衝動。在最後一刻,把襯衫換成了一件更舒適的黑色T恤。等重新坐下來,就該開始了。與面試官愉快地交流了幾句話之後,就直接進入了編程挑戰,筆者當時緊張得發抖。還好幸運之神站在我這邊,我遇到了複習過的類似題目。
第二次面試就難得多。面試官在操作方面進行轟炸式提問,筆者只剩下20分鐘的編程時間。筆者盡力去理解這個問題,最終縮小範圍,找到了一個最佳的解決辦法。其實筆者的解釋不夠清晰,但不管怎樣,我還是通過了那次面試。
在腦子被榨乾的狀態下,筆者開始了最後一場面試,還好這次也和第一次一樣順利。筆者詳細地解釋了自己的方法,並著手編寫最佳解決方案。
回饋社會的時候到了,這裡就和大家分享一下筆者是如何準備線上面試的。其中將談到我用的最多的資源,以及如何有效地利用它們。
免責聲明:本文的內容並未透露任何與亞馬遜面試過程相關的具體信息。大家都知道多數科技公司通過編程面試對候選人進行篩選,筆者的目的是儘可能地概括自己的建議, 可以適用於任何公司的面試。
我是誰?為什麼會成功?
筆者是謝菲爾德大學計算機科學碩士生,專攻機器學習和軟體工程。去年夏天,我在一家小型網絡工作室實習,任職後端網絡工程師,負責構建一個內部工具,涉及到的一些技術包括Nodejs、GraphQL和AWS。
筆者和大多數人一樣,並不是那種學習能力極強的人。是努力和堅持,讓我從能解決第1個編碼問題到解決第50個問題。世上沒有什麼能代替堅持,才華也不會,懷才不遇者比比皆是。
如果說我在大學生活中只學到了一件事,那就是如果花足夠的時間去理解某件事,最終會破解它的。這也許看起來微不足道,但這個信念會幫助你走過想要放棄的時日。
如果要開始一個長期的項目,不管是準備面試還是什麼,盡最大的努力對自己充滿信心。切記,一個總是懷疑自己能力的人其實是在做雙倍的工作。
什麼是編程面試?
為了衡量應聘者的編程、解決問題和溝通能力,科技公司為應聘者安排了許多編程面試。一般來說,每次面試都有一個問題要解決,而剩下的一部分時間是專門針對行為問題的。
應聘者需要做的是消化問題,在規定條件下設計解決問題的算法。一旦描述出算法並且經證明是正確的,面試官就會要求用程式語言的書寫解決方案。
編程面試的重點是計算機科學的基礎知識——希望畢業生在大學期間多關注這門課。具體而言,應聘者應全面掌握以下內容:
· 搜索算法——如何使用、實現和比較。
· 常用數據結構——如何實現,以及它們的優缺點。
· 大O符號——一種數學符號,用於描述算法在運行時和空間複雜性方面的最壞情況。
如何準備編程面試
水滴石穿,必費時間
在被許多公司拒絕簡歷後,筆者幾乎確信自己將會畢業即「失業」了。儘管如此,筆者還是明確了個人目標——不惜一切代價進入Facebook、蘋果、亞馬遜或谷歌。
我給自己設定了一個挑戰——每天解決一個編碼問題,直到我得到面試機會。等到第二年招聘期到來時,我已經做好了充分的準備。
這還不夠,得有一種方法讓自己堅持下去。筆者決定創建一個YouTube頻道,每天上傳一個視頻,在那裡解決熱門的編碼問題,並詳細解釋方法。這樣不僅能在解決許多困難問題的過程中受益,還能提高了溝通和檢驗解決方案合理性的能力。
在哪裡找到可以練習的編碼問題
1.Leetcode
如果你曾為編程面試做過準備,那麼leetcode.com這個網站你肯定不陌生。截止到寫這篇文章時,上面有1485個問題——所有問題都按主題和難度分類,它還會為高級用戶專門提供特定於特定公司的精選的問題列表。
如果想認真複習,我認為Leetcodepremium是最好的資源。我90%的準備工作都是用leetcode完成的。
2.AlgoExpert
AlgoExpert上目前有100個獨特的問題可練習,所有問題都按難度和主題分類。創始人克萊門特為每一個問題製作了深入的視頻解釋。他解決每一個問題的方法都是先實現一個簡單的解決方案,然後再改進到一個更複雜的解決方案。
他的解釋是網際網路上最好的解釋之一,筆者使用AlgoExpert來解決在Leetcode上無法解決的棘手問題。
3.其他
下面這些網站上也可以進行練習,但是我自己沒有用過:
· Hackerrank
· GeeksforGeeks
· CodeSignal
如何有效使用Leetcode
從Leetcode開始可能會有點兒難。前10-20個問題沒有快速的方法,但是筆者學到了一些技巧來,可以幫你最大限度地利用在網站上的時間。
1.不要試圖前進太快
至少在前30-40個問題時堅持簡單的問題。簡單的問題也並不容易,所以遇到困難時候不要難過。如果試圖前進太快,很可能會因為不知所措而放棄。
2.尋找每個問題的秘密
在leetcode上解決一個問題時,試問自己:有什麼知識可以讓這個問題變得更簡單?例如它可能需要使用特定的數據結構或特定的搜索算法。
你不會記得解決每一個問題的每一行代碼,這不現實。但如果試圖在每個問題中找出一個核心原則,那麼你最終會發現它們的相似之處。當遇到一個新問題時,問問自己:這和解決的其他問題有什麼相似之處?
3.不要使用冗長的程式語言
使用諸如python這樣的程式語言可以集中精力解決問題,而不是在單調乏味的語言語法間糾結。大多數面試官都會要求選擇一種語言,所以使用喜歡的語言練習是非常重要的。
4.始終分析算法的複雜性
面試時你會被要求分析代碼的時間和空間複雜性。記住,練習得越多,就越容易應對。
最後
一個月以來,筆者每天都在YouTube上製作一段視頻,後來突然收到了一份現場面試邀請。準備的時間只有5天,筆者陷入了極度興奮和緊張之中。這時不可能再保持每天只回答一個問題,我需要加快速度。
所有的大學作業都擱置在一邊了,在接下來的5天裡,從早上10點到晚上7點筆者一直坐在圖書館裡磨leetcode。雖然很無聊也很累,但筆者不在乎,因為對自己的目標很清楚,對自己的能力很有信心。
什麼是行為面試?
行為面試問題用於評估應聘者的「軟技能」,是所有行業中最常見的問題方式。諸如「描述你最近做出的一個艱難的決定」或者「描述你上一次工作地點衝突」這樣的問題,為了使應聘者陷入困境,讓僱主了解應聘者是如何思考的,以及如何處理工作場所可能發生的不同情況。
性格「合適」和編程能力一樣重要,所以不要輕視行為面試。
如何準備行為面試
查找公司特有的熱門面試問題
網上有很多「面試問題」列表。筆者瀏覽了一堆網站,列出一個大名單。鑑於筆者應聘的公司非常有名,所以很容易就找到了這家公司的具體問題。在刪除重複項後,只剩下23個獨特的問題。下一個任務是坐下來思考問題,確保對每個問題都使用STAR技巧。
STAR代表以下內容:
· 情境(Situation):故事背景。在哪裡發生的?你在做什麼項目?具體點。
· 任務(Task):手頭的任務是什麼?需要解決什麼?
· 行動(Action):描述處理這種情況的方法。這應該是回答的重點,所以一定要把重點放在這一部分。多使用「我」而不是「我們」。
· 結果(Result):描述結果。成功了嗎?學到了什麼?如何改進?
在面試過程中,應該儘可能多地運用STAR技巧來回答問題,這將有助於塑造一個深思熟慮、聰明有邏輯的自我形象。筆者記住了23個答案,反覆練習大聲說出來,這是為行為面試部分做的最有效的準備。
模擬面試練習
背答案是一種有效方法,但這不足以為面對面試環境的壓力做好準備。面試是一項技能——和其他技能一樣,需要練習。最好的方法是模擬。
筆者用了一個叫Pramp的網站,它可以安排你與其他人模擬面試。課程分為兩部分,你既可以體驗面試官又可以是應聘者。它也不局限於行為面試——還可以練習算法、數據科學和前端面試,
鑽研leetcode或許很無聊,所以你得想辦法讓它變得有趣起來。人際交往能力和編程能力同樣重要,忽視行為面試是大忌。
準備面試不是短跑衝刺,而是一場馬拉松。你需要擁有長遠的心態和堅持不懈的精神,你需要對自己的能力充滿信心,並明確自己的目標。做好充分的準備,你會得到滿意的結果。
留言點讚關注
我們一起分享AI學習與發展的乾貨
如轉載,請後臺留言,遵守轉載規範