在2015年冬天,儘管沒有成功,我還是在Microsoft擔任軟體工程師,正在尋找我的下一個軟體工程工作。我記得11月一個寒冷多雨的夜晚,在西雅圖巴拉德(Ballard)街區的一家時髦酒吧裡,我喝了天鵝絨的烈性黑啤酒,向朋友表示沮喪。我清楚地記得他的話:
"所以,有了這個平臺,您可以透過它來玩系統"
今天,如果您正在準備面試,那麼您將不得不花一些深夜在LeetCode上練習面試問題。用我的一位好朋友和同事的話說:
LeetCode是出色的均衡器。無論您是要面試實習,剛大學畢業的應屆畢業生,還是經驗豐富的工程經理,您都最好成為LeetCoding。
那個11月晚上,我從酒吧爬回家,開始練習LeetCode上的問題。在接下來的幾周裡,我練習了幾十個問題。那段時間的練習產生了巨大的變化,我最終在2016年登陸並接受了Google的報價。
我以前從未見過類似LeetCode的東西。在LeetCode變得被動之前,我一直在使用平臺進行採訪準備-資訊流向一個方向(從作者到我)。有一本典型的面試準備書" Cracking the Coding Interview"。然後是CareerCup / Glassdoor,它具有使用者生成的內容,可用於查詢常見的採訪問題。這些平臺的主要缺點是:
· 他們並沒有真正為您做好面試的準備,因為它們與實際面試的方式有所不同
· 他們參與度較低(由於缺少社群)
· 由於缺乏反思,很難將概念/學習內部化。這是因為為您提供了一個(或零個)問題解決方案,這些問題通常可以透過許多不同的方式來解決。
像TopCoder這樣的幾種程式設計平臺是互動式的,並具有基於瀏覽器的IDE。但是,它們是針對競爭性程式設計進行了最佳化的,其中問題描述本身會跨越多頁,並且您將花費一半的時間來嘗試找出正確的輸入/輸出格式,而不是構建實際的演算法。
快進到2020年中期,我再次接受採訪。編碼訪談似乎與2016年有很大不同,這不僅是因為我們處於大流行之中(不是本文的重點),還因為LeetCode如何發展成為一個平臺。
這是平臺問題的螢幕截圖,顯示了用公司名稱標記的面試問題:
> The platform contains 905 interview questions reportedly asked by Google
在Google工作期間,我瀏覽了標記為" Google"的面試問題列表,並在Google內部面試問題列表中找到了其中的幾個問題(Google試圖透過"禁止"公開已知為Google提出的問題來對此進行反擊。)。
"作弊模式"的結果是面試標準最終被抬高了-很大程度上是因為該行業充斥著自稱"多產的LeetCoders",他們已經解決了1000多個問題,並希望獲得已經解決的面試問題。之前。這是Blind應用程式(技術人員匿名論壇)的螢幕截圖,其中我們有一個自稱"多產的LeetCoder"的人,他解決了LeetCode上1132個問題中的1059個:
> A self proclaimed "Prolific LeetCoder" who has solved 1059/1132 problems on the platform
我做了一個小小的思想實驗,看看我全職工作要花多長時間才能解決1059個問題。根據我的經驗,大約需要1–1.5個小時才能嘗試解決方案,然後查詢/研究解決問題的替代方法。因此,解決1059個問題將花費1059個小時。假設您正在嘗試全職工作時做準備,並且每天下班後1.5個小時致力於LeetCoding,並且從未錯過任何一天,那麼解決1059個問題將使您總共花費1059天,或者大約2年。2年?!好的,WTF。
在我們探討如何保持競爭力之前,讓我指出,嘗試解決LeetCode上的每個問題,希望您會收到一個已經解決的問題,其中有幾個問題:
· 在道德上非常可疑。這就像練習洩漏問題的測試一樣。
· 即使放眼望去,它也無法擴充套件。您可能沒有那麼多時間。即使您這樣做了,這也不是準備時間的最佳利用。
· 無論如何,您可能不會從該列表中遇到面試問題。這是因為標記的是面試問題的一部分。並不是每個公司都會問LeetCode風格的問題。
無論您是喜歡還是討厭LeetCode(或平臺代表什麼),LeetCode現象都是猖and無處不在。幾個月前,當我搞砸了Netflix的編碼電話螢幕採訪時(被問到我以前從未見過的經典LeetCoding問題,但並不能很快解決),善解人意的招聘經理問道我要重新整理一下LeetCoding,並在一個月左右的時間裡再次接受採訪。
公司正在採取措施解決洩漏的問題:
· 一些公司不斷提出新的問題。例如,在Square,面試官被要求建立自己的面試問題(然後由委員會批准以保持標準一致)。
· 然後,有一些公司根本不提出LeetCode樣式問題(我的英雄)。Stripe和Shopify的更新方法專注於解決問題,這些問題可以更準確地表示您每天要解決的問題(例如,根據特定限制對專案列表進行排序)。Twitter(以及Netflix的某些團隊)的採訪也往往是針對特定團隊的,通常不是LeetCode風格。Lyft的現場工作包括開放式膝上型電腦程式設計挑戰,建議您使用任何公共圖書館。
好吧,現在您應該怎麼做才能與多產的LeetCoders保持競爭力?當然,有比填塞1059問題更好的方法嗎?我將在本文的後續文章中進行介紹。跟我來通知!