【CSDN 編者按】作爲一個代碼在線評測平台,LeetCode 是許多程序員提高編程技能和算法能力的極佳場所,它包含了算法、數據庫、Shell、多線程等多種分類的題目,其中以算法題目爲主。那麽當一個人在 LeetCode 上狂刷 400 道題後,會得到什麽新的感悟嗎?
原文鏈接:https://dev.to/durgesh4993/after-solving-400-leetcode-questions-here-are-five-things-that-i-have-learned-c60
未經允許,禁止轉載!
作者 | Durgesh kumar prajapati
譯者 | 明明如月
責編 | 夏萌
出品 | CSDN(ID:CSDNnews)
在我成功刷完了 LeetCode 上 400 道題之後,我獲得了一些寶貴的經驗,這些經驗對我在軟件開發方面的理解和方法産生了深遠的影響。本文将介紹我從中悟到的五點經驗。
LeetCode 這個網站對許多正在找工作的軟件開發人員來說并不陌生,它整理了來自谷歌、Facebook、微軟等頂尖公司的技術面試題目和題解。然而,讓人感到困惑的是,現在越來越多的小公司也開始大量采用關注數據結構和算法的面試題,這讓一些人産生了疑問,因爲他們認爲 "Leetcode 能力 " 并不能準确衡量他們的工作實力。
我贊同這個觀點,擅長 LeetCode 并不等同于你就是一個出色的開發者,而且在實際工作中,你可能永遠不需要反轉二叉樹。然而,通過練習 LeetCode,你會學到很多有價值的東西,這些都将在你的職業生涯中發揮重要的作用。
數據結構和算法的重要性
LeetCode 并不提供全面的數據結構和算法(DSA)課程,因此在使用這個平台前,你需要對這個數據結構和算法有基礎的了解。我強烈建議你刷題之前要系統地學習數據結構和算法的基礎課程。然而,一旦你在 數據結構和算法(DSA)上打下了基礎,再去刷 LeetCode 就将如虎添翼,而且刷題也會反向加深你對數據結構和算法的理解。
值得一提的是,對于任何開發者來說,具備紮實的數據結構基礎都極爲重要。最近國外就有一位大神玩家通過對算法進行小改進,成功讓遊戲的加載時間縮短了 70%。在大規模使用的情況下,數據結構和算法的有效實現對于應用程序的性能和穩定性影響深遠。
總有人比你更懂 - 學無止境
我經常會對找到的解決方案和自己寫出的代碼進行對比,經常會爲自己的解法感到自豪,但每當我浏覽評論區時,可能會破受打擊。我看到過一些解決方案,它們甚至優于官方提供的答案。在使用 LeetCode 刷題過程中,我學到的很多内容都源于對他人代碼的仔細研究,并将他們的建議融入我的工作。
這種 " 總有更多可以學習 " 的觀念同樣适用于我的職業生涯。我很幸運,有經驗豐富的同事們願意慷慨分享他們的知識,幫助我提升自己。這種向他人學習的方法讓我能盡可能多地吸取他們的專業知識。
看似微小的細節可能對你的工作産生深遠影響
在正式工作之前,代碼中的錯誤基本上不會産生任何實際的後果。那些隻在特定情況下才會顯露的 bug 往往可以被忽視。但如果你已經工作,代碼将推到生産環境,如果你的産品用戶量龐大,任何一個哪怕隻在一個極端情況下出現的 bug,都可能給大量用戶造成麻煩。
LeetCode 提供了對這種場景的極好訓練,因爲每個問題都有數百個測試用例,這其中往往包含很多邊界用例。如果未能正确處理好邊界情況,代碼就會失敗。
最近,我需要處理一個缺乏适當約束的數據庫,其中許多行包含一些意料之外的數值。我非常感謝在 LeetCode 上積累的技能,因爲這讓我能在這些問題影響生産環境之前就識别并解決它們。
勤奮勝于天賦
" 當天賦未得以施展時,勤奮勝于天賦。" 這句話出自 Tim Notke,對我個人來說,其影響深遠,尤其是在使用 LeetCode 刷題時。我曾遇到許多在處理中等難度問題時掙紮的天才開發者,因爲他們對解決問題的方法和所需工具的經驗和理解不足。
起初,我在 LeetCode 上解決最簡單的問題也會感到困難。然而,在參加了幾門數據結構和算法課程并經過一段時間的練習後,我提升到了在合理時間内解決大多數中等難度,甚至一些難度較大的問題的水平。
爲了更好地提高我的 Java 編程能力,我最近将 LeetCode 的解題語言從 Python 切換到 Java。盡管我每天在工作中都在使用 Java,但在解決這些問題時,我并不覺得自如。然而,我并沒有感到沮喪。我堅信,隻要有足夠的實踐,我在 Java 的技巧就能達到和 Python 一樣的熟練程度。
戰略規劃在軟件開發中至關重要
規劃是軟件開發的核心環節,不容忽視。無論是在實際編程中還是參加正式面試中,都能深刻意識到編碼隻是整個過程的一部分。有時我們往往會陷入這樣一個誤區:讀到問題提示後,立即進入編碼階段,這是一種常見的錯誤,很容易因爲了解和思考地不夠清楚導緻結果不盡人意。
軟件開發中充滿了模糊不清和意外的情況,編程面試試圖通過提供通常模糊或不完全的問題來模拟這個現象。與面試官溝通,尋求對任何不确定性或限制的明确解釋是非常重要的。建議在開始編寫代碼之前,先提出解決方案,評估其優點和局限性,隻有當所有人都接受了提出的計劃,才開始編碼。
否則,如果解決方案不滿足時間和空間要求,将無法進行任何必要的更改。這一點同樣适用于專業環境,因爲如果在沒有适當分析需求和考慮所有選項的情況下開始編碼,可能最終導緻大規模重構。
結論
作爲一個個體,我很幸運可以享受在 LeetCode 上學習和挑戰,甚至在找工作之外的時間裏也能從中獲得樂趣。然而,我也理解并不是每個人都有同樣的看法,有些人可能會認爲它是浪費時間,或者刷題得到的經驗在實際開發中毫無用武之地。