刷題到底有什麼用?你這麼刷題還真沒用

  • 2020 年 11 月 10 日
  • 筆記

關於刷題,上一篇文章講了 How,今天我們來聊聊 Why —— 為什麼要刷題?

或許很多人沒考慮過這個問題,或者會說因為面試要考啊,沒錯,就是這個原因,就這一個理由足以讓我們去刷題。但今天我們來聊點不一樣的,希望給你新的啟發。

算法之前,面試考什麼?

我曾在這篇文章《從 LRU Cache 帶你看面試的本質》中提到過部分,美國大廠面試 80% 都是在考算法,這其實是最近 5-10 年以谷歌、雅虎為首才興起的;國內大廠對於算法的考察雖然沒有這麼狂熱,但也越來越重視了。

那為什麼會形成這種局面?在考算法之前它們在考什麼?

你有兩個罐子,容量分別是 5 升和 3 升,還有一池塘的水。在沒有測量工具的輔助下,問能否準確的取出 4 升水來?

煎一個雞蛋需要 15 分鐘,可是你手頭沒有計時器。現在給你兩根繩子,燒完一根繩子需要一個小時;而繩子是粗細不均勻的,有可能半根繩子幾分鐘就燒完了。

填滿一輛校車需要多少個高爾夫球?

這類題被稱為”Brain teaser”,不只是十幾年前的科技公司在考,如今的金融公司還在考,比如我在剛畢業面試 Quant,Risk 的職位時都會被問這種問題,為此也專門準備過。

那時候互聯網行業剛剛興起,每天都會面對很多未知的問題,那麼就需要「聰明人」來想辦法解決這些問題,所以面試的核心是選拔最聰明的人。

為什麼考算法?

後來互聯網大規模的興起,需要大量的工程師去解決問題,那麼面試的核心就變成了如何選拔出能夠解決普通問題、寫出有效代碼的人。

一個基本功紮實,思維邏輯強,能夠寫出有效代碼的人就能夠勝任這些職位,因此互聯網公司的面試規則也隨之改變。

互聯網行業的大規模擴張降低了行業的門檻,雖然目前依舊是高薪行業,但對個人的門檻已經大幅降低了,甚至不問背景和專業,每個人都有機會進入頂尖的公司。

大部分互聯網公司認為,算法是非常有效的篩選出他們想要的工程師的。

算法,一是能夠考察面試者思考解決問題的能力,二是考察寫代碼的基本功。

一個能通過算法面試的人大概率是能夠勝任工程師的職位的,不能勝任那還有 pip 等着呢;一個不能通過算法面試的人大概率是無法勝任這項工作的。

當然了,可能會漏掉某些優秀的人才,但真相就是,大廠不在乎

面試是能夠最高效的選出需要的人才,最好還能夠流程化、標準化,如果需要員工在面試上投入太多,哪有時間好好工作呢?

所以算法就像是高考一樣,可以幫助企業快速篩選人才,並且相對其他方法來說性價比更高:成本低、效果好。

但如果你是在某些方面有所特長,或者是某個領域的專家,就不需要經歷這種標準化的面試了。就像高考時也會有特長生、奧賽保送之類的,但實際上,這種方式,更難。

所以以上我所說的更多的是針對初級工程師,也就是剛畢業的同學,沒有實習沒有重量級項目的同學,你說要考察什麼呢?這麼一算,算法真的是通往大廠的捷徑了。

算法,僅僅是算法嗎?

那有些人又說了,學了算法工作中根本用不到,學它有什麼用?不學我也一樣可以工作。

那我想問,你學了操作系統工作中也沒讓你寫個操作系統啊,學了前端也沒讓你開發瀏覽器,學了數據庫也沒讓你造個數據庫啊,那怎麼學個數據結構你就一定要想着造個數據結構呢?

現在工作中大都是直接用這些工具而不是重新造輪子,這也是互聯網行業能夠大規模發展的原因,就像連鎖店的產生,也不需要每個員工都會去生產核心產品。

但是,一旦需要你去造輪子,比如開發新的產品,一定離不開大量的算法;那如果你不在這些職位上,自然是用不着的。

那這也解釋了為什麼大廠都喜歡考算法,而小公司更注重你是否熟悉某一個框架的使用,畢竟小公司是要你直接來幹活的。

那不在這些崗位上,就一點都用不到算法了嗎?也不是。

對我來說,算法已經影響了我的方方面面。

比如一個很常見的問題,工作中 debug 時,不是從第一個開始查,而是要用二分查找的思想,先找到一個中間位置設置斷點,查看到這個位置的信息是否正確,然後再逐漸縮小查找範圍,最終找到問題所在。這個思想就來源於 Leetcode 上的二分查找的算法題原題。

模版,你還在用模版嗎?

說到二分查找,有同學都有問過我哪個模版好,我都驚呆了,原來還有很多個模版?!

我在上一篇講我的刷題方法中並沒有提到模版,因為我根本不用模版,我認為但凡是用模版的就是你對這個算法根本沒理解清楚。

關於二分查找確實有很多變種,有些人總想用一個模版套所有情況,是會有這種模版,但這個模版一定不是所有情況的最優解。

在面試時面試官稍微變化一下條件,多問你幾個這樣行不行,那樣可不可以,你就露餡了。

更重要的是,這樣背模版來做題才是真的沒有用!這樣刷出來的算法工作中真的用不到,到實際 debug 時你還想套模版嗎?難道在 debug 時,你還先翻翻模版,再確定往哪個方向去查找 bug?

公司招人是來解決問題的,如果套模版就能解決的問題,何必花高薪招人來解決呢?

所以刷題有沒有用,還要看你怎麼刷,不同的人刷同樣的題,效果可能完全不一樣。就像我們高中時做數學題一樣,做題不是為了高考時碰到原題,而是鍛煉自己的思維、思考方式,這樣才能在遇到新題時迎刃而解。

當然了,我也不想神話刷題的作用,有些工作就是用不着,沒錯,那就好好工作。

工作幾年之後算法所佔面試的比例一定會減小,一個工作 5 年的工程師去面試,如果問算法題,那通過之後會給一個 senior 的職位;而一個剛畢業的學生去面試同樣的算法題,哪怕答的再好,也只是 entry level,這就是區別,區別在於算法之外的內容。


好了,想進自習室刷題的可以繼續加我微信,上周沒加上的抓緊時間了。

還不了解自習室的小夥伴可以看這個視頻了解一下,學習內容不局限於刷題,英語健身前端後端各種都有打卡,歡迎你的加入。

我是小齊,終身學習者,我們下期見!