或許很多人沒考慮過這個問題,或者會說因為面試要考啊,沒錯,就是這個原因,就這乙個理由足以讓我們去刷題。但今天我們來聊點不一樣的,希望給你新的啟發。
我曾在這篇文章《從 lru cache 帶你看面試的本質》中提到過部分,美國大廠面試 80% 都是在考演算法,這其實是最近 5-10 年以谷歌、雅虎為首才興起的;國內大廠對於演算法的考察雖然沒有這麼狂熱,但也越來越重視了。
那為什麼會形成這種局面?在考演算法之前它們在考什麼?
你有兩個罐子,容量分別是 5 公升和 3 公升,還有一池塘的水。在沒有測量工具的輔助下,問能否準確的取出 4 公升水來?
煎乙個雞蛋需要 15 分鐘,可是你手頭沒有計時器。現在給你兩根繩子,燒完一根繩子需要乙個小時;而繩子是粗細不均勻的,有可能半根繩子幾分鐘就燒完了。
填滿一輛校車需要多少個高爾夫球?這類題被稱為"brain teaser",不只是十幾年前的科技公司在考,如今的金融公司還在考,比如我在剛畢業面試 quant,risk 的職位時都會被問這種問題,為此也專門準備過。
那時候網際網路行業剛剛興起,每天都會面對很多未知的問題,那麼就需要「聰明人」來想辦法解決這些問題,所以面試的核心是選拔最聰明的人。
後來網際網路大規模的興起,需要大量的工程師去解決問題,那麼面試的核心就變成了如何選拔出能夠解決普通問題、寫出有效**的人。
乙個基本功紮實,思維邏輯強,能夠寫出有效**的人就能夠勝任這些職位,因此網際網路公司的面試規則也隨之改變。
網際網路行業的大規模擴張降低了行業的門檻,雖然目前依舊是高薪行業,但對個人的門檻已經大幅降低了,甚至不問背景和專業,每個人都有機會進入頂尖的公司。
大部分網際網路公司認為,演算法是非常有效的篩選出他們想要的工程師的。
演算法,一是能夠考察面試者思考解決問題的能力,二是考察寫**的基本功。
乙個能通過演算法面試的人大概率是能夠勝任工程師的職位的,不能勝任那還有 pip 等著呢;乙個不能通過演算法面試的人大概率是無法勝任這項工作的。
當然了,可能會漏掉某些優秀的人才,但真相就是,大廠不在乎。
面試是能夠最高效的選出需要的人才,最好還能夠流程化、標準化,如果需要員工在面試上投入太多,哪有時間好好工作呢?
所以演算法就像是高考一樣,可以幫助企業快速篩選人才,並且相對其他方法來說價效比更高:成本低、效果好。
但如果你是在某些方面有所特長,或者是某個領域的專家,就不需要經歷這種標準化的面試了。就像高考時也會有特長生、奧賽保送之類的,但實際上,這種方式,更難。
所以以上我所說的更多的是針對初級工程師,也就是剛畢業的同學,沒有實習沒有重量級專案的同學,你說要考察什麼呢?這麼一算,演算法真的是通往大廠的捷徑了。
那有些人又說了,學了演算法工作中根本用不到,學它有什麼用?不學我也一樣可以工作。
那我想問,你學了作業系統工作中也沒讓你寫個作業系統啊,學了前端也沒讓你開發瀏覽器,學了資料庫也沒讓你造個資料庫啊,那怎麼學個資料結構你就一定要想著造個資料結構呢?
現在工作中大都是直接用這些工具而不是重新造輪子,這也是網際網路行業能夠大規模發展的原因,就像連鎖店的產生,也不需要每個員工都會去生產核心產品。
但是,一旦需要你去造輪子,比如開發新的產品,一定離不開大量的演算法;那如果你不在這些職位上,自然是用不著的。
那這也解釋了為什麼大廠都喜歡考演算法,而小公司更注重你是否熟悉某乙個框架的使用,畢竟小公司是要你直接來幹活的。
那不在這些崗位上,就一點都用不到演算法了嗎?也不是。
對我來說,演算法已經影響了我的方方面面。
比如乙個很常見的問題,工作中 debug 時,不是從第乙個開始查,而是要用二分查詢的思想,先找到乙個中間位置設定斷點,檢視到這個位置的資訊是否正確,然後再逐漸縮小查詢範圍,最終找到問題所在。這個思想就**於 leetcode 上的二分查詢的演算法題原題。
說到二分查詢,有同學都有問過我哪個模版好,我都驚呆了,原來還有很多個模版?!
關於二分查詢確實有很多變種,有些人總想用乙個模版套所有情況,是會有這種模版,但這個模版一定不是所有情況的最優解。
在面試時面試官稍微變化一下條件,多問你幾個這樣行不行,那樣可不可以,你就露餡了。
更重要的是,這樣背模版來做題才是真的沒有用!這樣刷出來的演算法工作中真的用不到,到實際 debug 時你還想套模版嗎?難道在 debug 時,你還先翻翻模版,再確定往哪個方向去查詢 bug?
公司招人是來解決問題的,如果套模版就能解決的問題,何必花高薪招人來解決呢?
所以刷題有沒有用,還要看你怎麼刷,不同的人刷同樣的題,效果可能完全不一樣。就像我們高中時做數學題一樣,做題不是為了高考時碰到原題,而是鍛鍊自己的思維、思考方式,這樣才能在遇到新題時迎刃而解。
當然了,我也不想神話刷題的作用,有些工作就是用不著,沒錯,那就好好工作。
工作幾年之後演算法所佔面試的比例一定會減小,乙個工作 5 年的工程師去面試,如果問演算法題,那通過之後會給乙個 senior 的職位;而乙個剛畢業的學生去面試同樣的演算法題,哪怕答的再好,也只是 entry level,這就是區別,區別在於演算法之外的內容。
我是小齊,終身學習者,我們下期見!
刷題到底有什麼用?你這麼刷題還真沒用
或許很多人沒考慮過這個問題,或者會說因為面試要考啊,沒錯,就是這個原因,就這乙個理由足以讓我們去刷題。但今天我們來聊點不一樣的,希望給你新的啟發。我曾在這篇文章 從 lru cache 帶你看面試的本質 中提到過部分,美國大廠面試 80 都是在考演算法,這其實是最近 5 10 年以谷歌 雅虎為首才興...
介面到底有什麼用
我們定義乙個介面 public inte ce ibark 再定義乙個類,繼承於ibark,並且必需實現其中的bark 方法 public class dog ibark public void bark 然後,宣告dog的乙個例項,並呼叫bark 方法 dog 旺財 new dog 旺財.bark...
學歷到底有什麼用
每年都會有不少想考研又在猶豫的學弟學妹問我,考研有用嗎?我也跟不少高學歷的朋友聊過,這個 學歷 到底有什麼用。乙個有趣的現象是,一般上了研的,都喜歡自嘲說,學歷啊 名校啊什麼的,都是浮雲。或者大呼後悔,說想到又 浪費 了自己幾年的光陰,很是悔不當初。問起當年考研的原因,多半是興趣所致,或是覺得自己的...