還記得面試時被演算法支配的恐懼嗎?
- 2020 年 3 月 2 日
- 筆記
面試造火箭,上班擰螺絲
大多數程式設計師心裡會想"總結的真精闢",當面試到演算法時,各種「跪」、「再跪」、「還是跪」……,多少人因為演算法而拿不到心儀的offer,演算法毀一生啊。
智力面試時代
現在演算法已經成為大廠面試的重中之重,甚至一些國外的大廠只面試演算法,為什麼會這樣呢?其實在早期,也就是微軟當老大的時候,大廠面試最愛考「智力題」,比如:
- 井蓋為什麼是圓的?
- 如何用3升和5升桶量取4升水?
- 有一對夫婦,先後生了兩個孩子,其中一個孩子是女孩,問另一個孩子是男孩的概率是多少
等等等等等等等等等等等等。
實在想像不出面試程式設計師還需要會「腦筋急轉彎」,不過按照當時微軟的半官方說法是:
電腦行業是一個新興的行業,前面沒有燈塔可以對齊,每天都有大量新鮮的問題需要解決,擁有
創新性
的員工是公司急需的,公司需要這些人去打破常規,創造奇蹟。
不得不說擁有「創新性」的人才不僅是公司,甚至是全社會都急需的,但真理畢竟只掌握在少數人的手中,大神也屈指可數,公司需要這些高屋建瓴的人來掌舵,也需要普通的水手來划槳,做為普通人中的一員,我僅僅是來應聘「水手」的,我能踏踏實實、認認真真的完成領導交給我的任務,就像一個團隊需要「孫悟空」一樣的大神,也需要「沙僧」一樣踏踏實實幹活的人。
這樣選拔人才是否合理有待商榷,畢竟當時的互聯網是新興的行業,大家都在摸著石頭過河,從歷史的結果看,目前的微軟已經被Google、Apple等企業反超了。
演算法面試時代
隨著互聯網行業的高速發展,從業人員的專業能力越來越高,公司對像「沙僧」一樣能踏踏實實幹活同時具備一定解決專業問題能力的人越來越重視,解決專業問題能力是一個很寬泛的概念,反應力、敏銳力、溝通能力等等,說白了就是有動手解決問題的能力,為什麼現在很多公司面試有筆試甚至是真槍實彈(直接上機寫程式碼)的考核,當下大部分面試人員面試前都刷題,準備的很充足,紙上談兵能力比得上「趙括」。
Linux 的創始人 Linus Torvalds 在 2000-08-25 給linux-kernel 郵件列表的一封郵件提到的:
Talk is cheap, show me the code
文明的解釋是:
能說算不上什麼,有本事就把你的程式碼給我看看。
通俗的解釋是:
屁話少說,放碼過來。
因此如何在短時間內找到專業能力和動手解決問題的能力的人?解決實際演算法問題是一個很好的學以致用的過程,不僅考察了專業能力,也考察了動手解決問題的能力,經典演算法和數據結構就那麼多,設計思想也就那麼多,如何用這些知識解決實際問題並不是想的那麼簡單,需要很強的邏輯能力。
這就是為什麼大廠都愛考演算法問題的原因,他們需要在短時間內判斷面試者是否是他們需要的人才,那演算法不好的人就一定不是人才嗎?不,這是一個概率問題,從概率學上來說,懂演算法的人要比不懂演算法的人更適合他們。那放棄那些演算法不過關的人他們不後悔嗎?說句扎心的話:他們不在乎,大廠的簡歷源源不斷,這個不行,馬上下一個。
除非你做出了非一般的成就,他們會因為沒有錄取你而感到惋惜。不知道大家記不記得 Max Howell,這位就是發明Homebrew
的大神,這位牛人曾經就因為一個演算法問題而被Google拒絕,讓我們來看一看是多麼複雜的演算法題:
給出一棵二叉樹,求這棵二叉樹的鏡像
其實就是翻轉二叉樹,這道題怎麼說呢?在Leetcode上級別被定義為『easy』,沒錯,你沒有看錯,就是『easy』,只要你答對這道題,就可以超越世界級大牛,問鼎碼林之巔。
這位IOS界的大牛就這樣折戟在沙灘上:
所以大家不要因為演算法面試不好而自我否定,面試本身就處於一個資訊不對稱的位置,面試官都已經知道答案了。
還有下面這位:
如何跨越演算法面試
在我看來,要想跨越演算法面試有2個方法:成為領域專家和理解演算法
先來說說第一種成為領域專家,讓公司不再把你當成是普通的求職者,當然想成為領域專家難度還是非常大的,不僅需要再某一領域深耕多年,還需要能拿出亮眼的成績,比如下面這位:
Java之父——詹姆斯·高斯林,用Java的童鞋一定都很熟悉這位天才,他出生於加拿大,是一位公認的電腦編程天才。在卡內基·梅隆大學攻讀電腦博士學位時,他編寫了多處理器版本的Unix作業系統,是JAVA程式語言的創始人。
再比如這位:
Python之父——Guido van Rossum,1982年獲得阿姆斯特丹大學的數學和電腦科學的碩士學位的他在7年後創立了Python語言。1991年初,Python發布了第一個公開發行版。到今天,Python語言已經從眾多程式語言中脫穎而出成為最受歡迎的語言。
這樣的牛人,如果想去某一公司,面試流程肯定不一樣,做為普通大眾的我,未來10年或者20年,不知道能不能讓別人也稱我為「大牛」,至少目前我還不能讓公司為我單獨設計面試流程,演算法面試還是要經歷的,既然不可避免,就讓我們擁抱吧。
刷題刷題,刷出來的不僅是題,還有我們的思維,既要知其然,也要知其所以然,而不僅僅是完成題目+1。
最近2天Github上有一個非常火熱的開源庫,短短几天star已經3.4K了,這個開源庫整理了60多篇乾貨,目錄如下:
還有很多,這就不一一截圖了,看完這些是不是感覺乾貨滿滿,最後奉上GitHub地址:https://github.com/labuladong/fucking-algorithm
今天的文章對大家是否有幫助?如果有,請在文章底部留言和點贊,以表示對我的支援,你們的留言、點贊和轉發關注是我持續更新的動力!