大家好,我是維特,去年鐵人賽介紹 VS Code 的人。
經過一年的洗禮,增加不少開發經驗、對於未來職涯上的想法也越來越清晰,因此今年的主題想要正經一下,寫一個系列關於刷 LeetCode 來理解資料結構與演算法。
開始寫這主題之前,讓我談談現在刷 LeetCode 的幾個原因。
隨著大資工時代的到來,越來越多人憑藉著非大學課程的訓練,自己練出軟體世界的基本功,尤其以網路開發為主。工程師本身的起薪高,容易吸引到大量的人才投入。當好的職缺出現在求職市場時,眾多求職者將湧入其中爭取面試機會,企業使用履歷進行篩選之外,會考驗應徵者的基本開發能力以及專案經歷。前者常見的測試方式為白板題與線上題庫測驗;後者則看求職者的作品集來了解。而 LeetCode 便是常見了解題目的手段,其記錄各式各樣的題目好讓求職者有個底。
LeetCode 的題庫內容有:
最常見的以演算法為主,這次的系列將著重於此。
說穿了,刷 LeetCode 好比學生時代刷題庫,目的是熟悉題型好應對各式各樣的基本題與變形題。目的只有一個,面試中遇到的技術問題可以順利通過。
自然而然會連結到資料結構。深入來看,演算法是基於不同類型的資料結構開發出來的,即使是不同的資料結構,基本的 CRUD 功能是必要的,而演算法便是思索如何改善 CRUD 的速度。因此,往後在工作上面對不同的需求時,使用較符合需求的資料結構,再搭配適合該結構的演算法,便能有效提升計算速度。
其實刷 LeetCode 的需求,往往有幾種背景需要練習:
題庫刷得再多也要記得,專案的能力也要一併培養。刷很多題庫卻沒有規劃專案的能力,往往是致命的,因為題庫的能力可以藉由反覆練習獲得,規劃專案的能力卻不太能藉由反覆練習取得,因此不少資深職缺會希望求職者擁有好的專案經驗。
我不是大專院校資訊相關科系出身,自然沒有接觸過演算法與資料結構。學習過程以網頁開發為起點,學習 HTML、CSS、JavaScript,後續在公司的專案上接觸到 Java 與 C,整個過程由簡入難。
說實在的,沒有接觸到靜態語言前,覺得全世界都用 JS 開發是件多美好的事情。隨著經驗的累積後,慢慢了解每種語言因為獨特的能力而有存在的必要性。
可見的,這系列的內容將傾向個人學習資料結構與演算法的筆記心得,力求口吻平易近人,往後自己複習時可以輕鬆讀懂、他人閱讀時也能輕鬆閱讀。
順序是這樣的:
因為我最熟悉的語言是 JS,所以相關的術語概念將以 JS 為主。
前陣子聽大人學的 small talk,某集來賓提及每一年都要幫自己的職涯製作該年度的代表作。平常不怎麼寫 side project 的我,決定用今年的鐵人賽當作是年度代表作。
從轉行開始,學習基礎資料結構與演算法一直是我的軟體相關知識的待辦事項之一,很開心今年有機會能完成這件事。