如今因爲互聯網時代的到來,愈來愈多的人去學習互聯網開發,成爲程序員大軍中的一員。也正是由於程序員大軍中人數衆多,致使瞭如今對於技術人員的要求也愈來愈高了。技術不斷的更新變化,所以技術人員也每一年都在跟着時代不斷的學習。今天移動開發火熱,一羣人去學習Android、iOS開發,明天人工智能火熱又一羣人去學習Python、人工智能技術。可是不少時候,咱們在學習完成了一門技術以後去面試找工做,一些公司在面試的時候每每須要考察算法知識。可是不少技術人員都知道,其實在工做中算法知識用的其實不多不多,那麼就產生了一個疑問,做爲一名程序員,數據結構和算法知識到底有沒有必要去學習?程序員
首先回答你,若是是通常崗位其實不用;若是是進BAT這種大公司,是須要會可是不用特別精通,若是是去國外加入Google、Facebook這種公司或者想拿高薪做爲一名算法工程師拿就必須精通。下面我對這三種說法結合自身來分別說下。面試
對於小公司或者通常的公司來講,其實按照個人說法是不只不須要精通,甚至能夠說你徹底無知也不要緊。由於小公司或者通常的公司入門門檻低,不要說算法了,就算是面試官可能都不太懂技術,他主要面試的是人,也就是看人,以爲你合適就來,並且真正牛逼的人根本就不是靠小公司走招聘市場招來的,大牛通常都是靠挖來的。並且在通常的小公司都是專一去寫業務邏輯代碼,不少公司只須要你實現了這個功能就OK,對於代碼編寫規範或者時間空間複雜度等最優實現根本就不會去管你。因此你在這裏面其實會不會算法都沒有任何須要,會算法不會爲你加分,不會算法也不會爲你減分。算法
若是你是一個有追求的程序員,不甘心知足每天在小公司待着,而是想去BAT或者TMD這種大型公司或者超級獨角獸公司的話,那算法是絕對繞不開的一個話題。就拿本人還有周圍去面試過大公司的朋友來舉例子。BAT面試全都要涉及到算法。騰訊我去面試過,在二面掛了,一面和二面其實都有算法題目,一面相對而言簡單一些,二面的算法就有難度了。而我有一個朋友,拿到了騰訊和阿里的offer,他回來講騰訊五輪面試中有一輪面試是專門考察算法,總共六道算法題目給了你兩個小時時間做答。阿里的電話面試裏面也有一輪視頻面試專門考察算法,也是當着他們的面手寫算法。光講思路在騰訊行不通的。本人曾面對騰訊的題目跟面試官說我談談思路吧,面試官直接懟回來講不要談什麼思路,直接寫出來給我看,平時怎麼敲代碼如今就怎麼寫出來。可見對待算法徹底沒有任何商量的餘地。至於頭條公司那就更是如此了,由於頭條就是一家以算法驅動的公司,對算法要求也比較高。可是即使如此,BAT對待算法還遠達不到稱之爲精通的地步。編程
其實最兇殘的公司是硅谷這些公司,例如Google和Facebook這類的公司。他們面試你問的全是算法,歷來不會去問你專業知識,並且他們的算法問的是超級可貴地步。只要你經過了Google、Facebook公司的算法面試,那麼你進入公司想作什麼技術崗位均可以。好比,你一個歷來沒學過Android的人,只要經過了他們面試,進去作Android也徹底沒問題。由於在老外眼裏,算法是很是可貴東西,你連這麼難的東西還能經過他們的面試,那麼其餘的編程知識進去給你時間學也可以立刻學會。因此你想經過他們Google和Facebook的面試,那麼算法確實要達到精通的地步,若是隻是初級水平可能只有進去參觀的份了。而無論時代如何變,算法工程師永遠是市面上的稀缺物種,稀缺就表明值錢,因此學好編程不如學好算法,語言只是編程工具,算法纔是編程之魂!數據結構
若是須要去面試考察算法的,這裏能夠推薦通常本書《劍指offer》,這本書基本上涵蓋了國內全部公司面試考察的算法題目,只要把這本書上的代碼敲一遍,相信在算法領域面試基本應該沒啥問題。或者想要動手操做的話也能夠去LeetCode上刷刷題目,在練習當中纔能有所提升和進步!數據結構和算法