刷題難題?

GivemepasS
Apr 18, 2022

每個人都在刷題,好像我不刷一下,今天就會落後其他人,明天就被淘汰了,沒錯!你就等著被淘汰吧。ㄏㄏ

開玩笑的,主要還是看自身的目的,沒有刷題的確不會怎樣,也不會因此被評估成能力不佳,但是同時也損失不少機會,畢竟現在許多公司都列入基本門檻,如果因此被篩掉而損失讓你展示更多強項的機會不也是很可惜嗎?

什麼是刷題?

Leetcode 是一種集合各大公司考題,讓你可以在線上練習各種題型的大型資料庫,透過練習這些題目,可以熟悉基礎資料結構、演算法以及各種技巧跟工具的使用方式,除此之外,還可以透過這樣的練習,來熟悉你使用的語言的語法,整理腦海中的想法以及測試與邊界,透過沒有 自動補完 的平台,可以讓你在腦海中練習如何執行程式,進而更為熟捻你腦海中的想法。

刷題應該先從哪邊開始?

如果要刷題,其實我個人的經驗來看是比較推崇從一些比較好入門的上手的類題開始做起,譬如說 Top K Elements、Two Pointers、Sliding Window 開始著手,一來會比較有成就感,二來這些大多是熱門題目中的基礎題,也就是說純刷手感用,那說完一些入門題,是不是有一些類題對於新手來說是比較不友善的淚題呢? 當然有,譬如說 Recursive、Dynamic Problem、DFS 以及 BFS 等,這些類題通常會打擊比較大,而且也容易讓人放棄,如果從這些類題著手,就會讓大腦產生許多抗拒感,甚至做完就忘,忘了不想複習,因此,找到一個適合自己的策略是相當重要的。

面試為什麼要考刷題?

很多人會覺得面試刷題是一種非常無效的手段,有人表示工作這麼多年,從來沒用到刷題的技巧,為什麼一定要刷?其實這個問題跟考研究所類似,這麼多年來,研究所真的會用到資工所六大分類的東西嗎?但是已經很少人在抱怨為什麼考研究所要考這些沒有用到的東西,因為它就是門檻,門檻是什麼意思?它就是一種 篩選機制,您可以想想看,如果一間熱門的公司,他想要篩選一些真的有能力的工程師時,通常都是在面試上經過一連串的測試後,才決定是否要錄取,但是面試未必真的能夠篩選出公司想要的人才,所以每間公司或多或少都會加入一些屬於自己的元素,而現階段的刷題手段,就是一種新式的手段,它可以驗證出幾種特質,第一個你會為了一個職缺投入時間去刷題嗎?你會透過刷題去思考各種變形以及問題嗎?你能否在寫程式時,列許多個測試案例以及在腦海中能否編譯過一遍?是否對於基礎語法夠熟悉等等...,這些都可以考驗到種種面向,有些公司只需要60分鐘的工程師,所以考題可以針對難易度上進行調整,有些給於優厚薪資,但要求的基本就是高分通過門檻測試,而題庫測驗是這麼一個好用且方便的工具,怎麼可能讓公司放棄使用呢?

如何透過面試看公司?

如同前所講,面試一種測試手段,測驗你平時對於程式開發是否有足夠深入以及對於問題的敏銳度還有跟企業文化契不契合等,它不代表你面試通過即可適應這個文化,但是通過一場面試,為你帶來的不單單只是通過這個企業的考核而已,其實,你面試公司也意味著你在 考驗這間公司,一間公司的文化以及面試流程,可以呈現出這間公司的對於開發人員的重視程度,除此之外,還可以透過題型相關問題進行討論,藉此來了解這間公司的未來同事或主管是否對於技術面的認知到什麼樣的程度,同時你也可以透過對談來確認公司開發以及管理的流程是否達到你心中的期許。

刷題會獲得什麼好處?

好處可多了,首先是透過刷題第一件事情就是刻意設計成不讓你使用 IDE 的方式,只有你在自己一個語法一個語法的練習之下,才能對於你操作的語言更為熟捻,當你對語法熟悉以後,對於該語言的操作上就會更為靈巧,因為你在撰寫程式的時候,不會被一些 基礎語法卡住,對於核心功能的開發效率才會往上提升一個等級,除此之外,刷題其實是在訓練你對於基礎資料結構的概念補強,當你平時用到一個情境的時候,如果你沒有刷過題目,很可能不知道你到底會有哪些工具可以使用?譬如說你面對一個字串,請你找出高頻率的字元,你會怎麼做?刷過的人可能會馬上直覺透過一些資料結構幫助你直接處理掉,沒有刷過的人,可能就直接暴力解法,這種程式日積月來,效率的差距就會變得非常巨大,演算法也是訓練的一個環節,透過各種刷題類型,可以 收集到各種情境的普遍認知的解決方案,基本上跟程式中的設計模式一樣,由於太常遇到類似的情境,所以會發展出一套模式來處理相關問題,更多的是可以透過討論區或者解答區的答案看到各種高手集思廣益的答案,讓你理解單一問題不是只能用同一套解決方案來處理。

面試考刷題技巧

面試考刷題其實不單單只是純粹想測驗你的做題程度,更重要的是 你會不會問? 很多人會掉入一個誤區,其實刷題本質上不是在於你解題速度夠不夠快,更多的企業在意的是你懂不懂問,什麼叫做問題,例如你看到你沒做過的一個題目,你腦海中的理解很大機率可能跟面試官理解不太相同,如果你不透過詢問的方式,把題目上沒有說明或者你跟面試官心中的規格不一致,那十之八九你很可能寫完題的同時就被刷掉了,因為面試除了想了解你是否能夠快速理解題目以外,還想要知道你是否在面對不熟悉的題目下,能夠透過溝通或討論的方式來進行 規格補齊,這樣就可以觀察到如果在團隊內,一個人是否能夠充分了解需求以及是否能夠進行團隊合作,如果面對一個需求不明確的狀況下,是否會想要把更多細節補齊,很多時候,許多人只關注在自身的思考,卻忘了其實我們常常在團隊合作的狀況下進行討論,把自己的想法告訴另外一個人,這就是溝通必要成本,除此之外,如果能夠把一個問題清楚的表達給面試官知道,那就代表著你有良好的 表達能力,表達能力在團隊是一個很重要的技能,因為它可以有效率的把你腦海中的想法迅速傳達給其他人知道,這也是透過刷題可以訓練到的重要技能之一。

刷題重理解而不是重題數多寡

我在很久以前面試都是透過死記硬背的方式來回答,因為這次突然又有面試需求,經過幾年的工作經驗,有些程式觀念已經 內化到我理解的程度,隨口就可以講出一些原理,因此,這代表著理解的重要性遠大於死記硬背,理解層度最重要的象徵就是你不需要刻意準備也可以隨時面試,這背後的含義非常重大,你隨時不用害怕轉職這件事情,因為每個組織都會屬於自己的問題,有些問題一但擴散,則不是工程師可以解決的,更甚之是會影響到職涯,反之,一旦有好的機會,不需要太過於長時間準備的情況下,就可以獲取更好的薪資或職位或者你想追求的職涯,這也是為什麼寫題目不要刻意去死背而是要重視理解的原因。

刷題到底有沒有用?

你只要閒來無事,打開 LeetCode 給他用力刷一題就對了,刷題就像你平常練基本功,今天沒磨刀明天也不會馬上就鈍化,但是如果你天天在磨刀,最終你會變成一把鋒利的劍(啊怎麼變成劍?),基本功就像新手村外的小怪,沒事去打一下練一下,對你來說不會增加太多經驗值,但是不無小補,你今天多刷了一題,日積月累你就會發現跟別人的差距就不只是這一丁點,你要相信刷這個題目就是在內化自己的程式語感跟解題能力,如果你想要成為一個優秀程式設計師,刷題將是你 投報率最高其中一條捷徑

--

--