學歷要求?技能?


想要了解演算法工程師的崗位要求,不妨先仔細閱讀一下各大公司的招聘要求。

一、了解招聘需求

下面是騰訊的兩則招聘:

(1)演算法工程師

(2)數據挖掘工程師

總體而言,機器學習和數據挖掘類職位主要考察兩方面的知識:

  • 機器學習和數據挖掘的理論知識
  • 編程開發和數據結構演算法的基礎

對於已有工作經驗的同學,還要加上業務理解能力。

我們利用以上三個維度,將應聘者大概分為 10 類,下面我們看下各位同學都適合哪些崗位和發展方向。

圖片來源:36 大數據
  • A 類在機器學習和數據挖掘的理論知識方面有很深的造詣

主要是負責做最頂尖機器學習相關學術研究。比如創造一些新的演算法,例如早期的 SVM,LDA 以及最近的一些深度學習模型。但是處在塔尖的的他們對於這些演算法在業務場景的應用或者演算法的實現興趣並不大,主要精力都花在了理論研究上。主要成果發表在頂會或者頂期上。他們主要存在於一些研究機構中,如國外高校或者企業研究院。一般企業如果需要這樣的人,也是挖過來當鎮廠之寶,不屬於我們討論的範圍。

  • B 類既對演算法有比較深入的了解,又有高超的編程技術

這類同學對演算法有深刻的理解,但可能沒有達到創造新演算法的層次,這類同學的數學水平可能也達不到爐火純青的地步。他們的興趣不在於各種繁瑣的理論推導,而是在於對已有演算法進行改進,並且給出最好的實現,造福廣大人民群眾,例如 LIBSVM,SVDFeature,paramater server 這樣的工具。當然,這樣的人才也是可遇不可求,而且他們也需要一個比較大的平台來施展自己的能力。他們的工作應該能夠成為一個企業數據挖掘的大殺器。

  • C 類對演算法有一定的了解,但是不夠深入,開發的經驗有限

很多理論方向的研究生博士生可能就處於這個狀態,即使能夠發表一些看起來不錯的文章,但離真正做出好的實際的數據挖掘工作還有很長的一段距離,需要一步一個腳印的踏實前進。但以目前的情況,去不錯的大企業工作也是很容易的。

  • D 類碼農中的翹楚,橫掃各路 ACM、ICPC 比賽的英雄

雖然他們對於機器學習理論和數據挖掘的應用場景不是很了解,但憑藉他們強大的編程能力,在應用開發方面無人能及,適用於任何需要落地的場景。

  • E 類: 屬於一般的碼農,能寫一手好代碼,但是對機器學習知之甚少

這種情況的同學,如果希望成為一名演算法工程師,那麼需要花費比較多的時間在理論基礎上,要能夠沉得下心去推公式,總之,還是有一段路要走。

  • F 類工作貼近業務,對數據也有一定敏感性,可能是 excel 和 sql 的高手

但是這和數據挖掘的工作還有一定差別。最適合他們的崗位可能是 BI 或者數據產品經理。在這些崗位上,他們同樣可以發光發熱,做出卓越的貢獻。

  • G 類他們有一定的演算法基礎,同時對數據挖掘的業務落地也有豐富的經驗,瓶頸主要在於編程開發能力

這在大數據的場景下尤為明顯。畢竟最好的方式是自己想 idea,自己實現,至少實現一個原型。那麼 R 或者 Python 是一個很好的選擇。沒有 coding 能力,再好的演算法也出不來。同時又不能像理論大牛對理論基礎有很深刻的理解和研究。這種情況非常被動,只能努力提高自己的編程能力。

  • H 類對機器學習演算法有一定的了解,熟悉各種業務,也有一定的開發能力

在數據挖掘的具體工作中,可以從業務出發,設計演算法,也能對演算法進行基本的實現。實際上這樣的工程師還是很多的,特別是有一定工作經驗的。他們的工作經驗會對數據挖掘的工作起到很大的幫助。他們在演算法以及編程的上的能力可能不是很高,但是足以豐富他們的思維方式,也方便與人溝通。

  • I 類對機器學習演算法有一定了解,也有較強的開發能力

這類同學適合做偏向開發的數據挖掘崗位。他們很可能是學校的應屆畢業生,學習了一些理論知識,也鍛煉了開發的能力,但還缺乏實際的工作經驗。互聯網的數據挖掘崗位正是他們大展拳腳的好地方。

  • J 類各項技能都很全面,也很適合做 Leader

但是這樣的人畢竟可遇不可求。另外,每一項都好其實也就是每一項都不好,人的精力總是有限的。在一到兩個方面做的比較突出,同時另外的方面也不要太弱以至於成為短板,這樣就挺好的了。

各位同學目前分別是哪種類型,並希望自己成為哪種類型呢?總體而言,如果是希望以後做科研的同學,就把精力主要放在理論上即可,編程語言使用高效的 Python 以及 Matlab,能夠快速實現自己的想法。希望成為企業中的演算法工程師的同學,要在對演算法的理解上以及開發能力上,提升自我。最後,如果是希望做開發的同學,主要需要提升自己的開發能力。

?

在實際招聘過程中,對於大多數一般的有一定經驗的程序員或者應屆畢業生。除了基本的代碼能力外,以下幾個方面通常是演算法工程師考察的重點:

  • 機器學習演算法的理解,比如常見演算法的基本思想原理、應用場景、特點和求解方法。 可以從兩個分支考察,一個是使用經驗,比如實際的調參經驗,使用技巧,面向 H 類。還有就是一些演算法的實現方法,面向 I 類。
  • 實際的項目經驗,特別是數據挖掘工作。一方面考察他之前的工作情況,另外也看他的歸納總結能力與解決問題的能力。針對項目的一些細節提問,也可以看出他的做事方式和對一些知識的掌握情況。
  • 對於業務的理解能力和敏感性,可以結合實際工作中的一些問題來考察。即使沒有實際工作經驗,也是可以看出他們在這個方面的潛力。同時也考察出理論和實際結合的能力。
  • 溝通表達能力。相對於純開發的程序員,數據挖掘崗位對這個能力的要求高出不少。在整個面試的過程中,其實都有對這個能力的考察。

二、夯實演算法基礎

力扣 (LeetCode) 作為全球極客摯愛的技術成長平台,致力於為同學們面試、求職提供幫助。

在這裡,力扣君也為大家整理了一些程序員在 面試中 需要掌握的演算法,熟練掌握它們可以幫你在面試中如虎添翼,百戰百勝。

演算法 - Algorithms

  1. 排序演算法:快速排序、歸併排序、計數排序
  2. 搜索演算法:回溯、遞歸、剪枝技巧
  3. 圖論:最短路、最小生成樹、網路流建模
  4. 動態規劃:背包問題、最長子序列、計數問題
  5. 基礎技巧:分治、倍增、二分、貪心

數據結構 - Data Structures

  1. 數組與鏈表:單 / 雙向鏈表、跳舞鏈
  2. 棧與隊列
  3. 樹與圖:最近公共祖先、並查集
  4. 哈希表
  5. 堆:大 / 小根堆、可並堆
  6. 字元串:字典樹、後綴樹

在 互聯網公司最常見的面試演算法題有哪些? 問題下的回答中,力扣君更加詳細地整理了一些面試常見的演算法並且對每種演算法羅列了很多題目,在此就不贅述了,感興趣的同學可以點擊鏈接了解更多內容。

互聯網公司最常見的面試演算法題有哪些??

www.zhihu.com圖標

如果不談面試的需求,對於程序員來說上面提到的那些演算法依然非常重要,可以說上述內容都是作為一個程序員必須掌握的演算法

有人可能會覺得,這些基礎的演算法在工作中完全用不到,安安靜靜地做一個 CRUD Boy 多好。

其實不然,雖然同是程序員,程序員之間也是可以分出個三六九等的。一名出色的程序員一定是熟練掌握各種演算法的。紮實地理解與掌握這些基礎演算法,能幫助你收穫更強的競爭力,在自己的崗位上快速晉陞。

那熟練掌握這些演算法,到底可以為身為程序員的我們帶來什麼呢?

提升代碼效率比如,現在讓你實現這樣一個功能:給你一些有序的數字,動態地查找目標數字。實現這一功能的方法有很多種,當面臨不同情況的時候,我們需要使用不同的方法。
  1. 查找頻率很低時,對於每一次查詢,暴力從前向後遍歷,每次查詢的複雜度為 O(N),能解決問題。
  2. 當查找頻率很高時,對有序數字使用二分查找,每次查詢複雜度為 O(logN)。或者使用哈希表,每次查詢的複雜度為 O(1)。
  3. 如果數字非常多存不進內存里,可以使用 B 樹 的思路來優化查詢。
  4. 當引入密集的插入操作,查詢不太密集的時候,可以使用 LSM 樹 的思想完成這一功能。

如果你熟知各種基礎演算法,那麼你就可以很容易地針對不同的場景找到合適的解決方案,並且將它們變成代碼,以提升程序的效率。而不是遇事不決,先上暴力,雖然解決了問題,但是在時間與空間上還有很多不足。

提升能力、借鑒思路、獲得啟發

通過學習這些演算法,可以提升我們在計算機方面的能力:抽象建模能力、邏輯思維能力等,並且積累一些解決問題的基本思路:折半、倍增、貪心、分治等。

現實中的問題都大相徑庭,但是我們通過將其抽象並建模之後,會發現問題的本質是相似的,我們往往可能從某一個基礎演算法中獲得啟發,從而高效地解決問題。而達到這一境界,就要求我們首先對基礎演算法能非常了解,並達到熟練運用,融會貫通的地步。

下面給大家推薦幾個演算法學習的網站:對於演算法的學習的平台,只要關注以下三個維度來進行選擇:
  • 第一、能夠學習演算法的原理,在動態規劃之後的很多演算法,都需要花時間去理解,需要有一個學習的過程。所以,學習演算法的過程無論是邊學邊做還是簡單的學習,最好可以附帶一定的教學功能。
  • 第二、可以對演算法進行練習的在線測評系統 (OnlineJudge)。如何選擇一個適合自己的 OJ 去練習?力扣君認為首先要看其支持的語言種類與檢索功能,另外是否有定期的原創題目,原創比賽。
  • 第三、針對第二點,明確進行演算法練習的目的,單純為了提升演算法能力還是在提升的同時也想為自己的技術面試做準備。

一、力扣 Leetcode(http://leetcode-cn.com)

  • 集教學與和練習與一體

力扣的 探索卡片 針對每一種演算法都有詳細的教學和習題,非常適合初學者來進行練習。

  • 技術面試必備刷題平台

擁有上千道原創演算法題的 力扣題庫,國內外不少知名 IT 公司技術面試時的首選題庫。如果你正在準備技術面試,來力扣刷題肯定沒錯。

題庫 - 力扣 (LeetCode)?

leetcode-cn.com圖標
  • 活躍的社區

在力扣 題解 版塊發起對一道題的討論,如果你沒有好的解題思路,可以和其他小夥伴一起學習交流。

  • 每周一次的原創競賽題

參加每周一次的 力扣周賽,你可以通過周賽來贏取力扣積分兌換相應獎勵,如果時間沒有那麼充裕,也可以參加力扣的虛擬競賽。力扣的競賽題更偏求職風格,比賽過程中錯誤的數據會顯示出來以方便選手調式,對多數程序員來說可以說相當友好啦!

二、Github (https://github.com)

Github 除了開源項目以外,也有一些大型的學習演算法的項目。比如:
  • 著名的演算法可視化項目

https://github.com/algorithm-visualizer/algorithm-visualizer

其中將許多著名的演算法都做了可編輯的動畫,對於後期理解圖論等相關演算法有很大幫助。
  • 基於 Python 的演算法合集

https://github.com/qiwsir/algorithm

亮點是這個項目是中文的,演算法由淺入深,相對適合從零開始學演算法的。

三、Topcoder(http://topcoder.com)

想挑戰自我?可以試下 TopCoder 參加過 TopCoder 比賽的童鞋可能會對它印象深刻,它有它獨特的魅力。TopCoder 沒有測試用例,在比賽中,完成代碼後可以去直接閱讀別人的演算法,並構造錯誤用例來為對方扣分。可以說 TopCoder 很適合學有所成的人去尋找下刺激,不過建議有一定的刷題基礎再進行嘗試。

四、Coursera(Coursera | Online Courses Credentials by Top Educators. Join for Free)

Coursera 上有各所大學的演算法課程。有很多都是世界頂尖的演算法課,有興趣學習的程序員也可以不妨前去一試。發佈於 2019-08-26繼續瀏覽內容知乎發現更大的世界打開Chrome繼續Jack-CuiJack-Cui公眾號:JackCui-AI,分享技術,樂享生活。

一、前言

工作時長2年的演算法工程師來強答一波~

一直以來,被問到最多的問題就是「演算法的學習路線」。

今天,它來了。

我會帶著大家看看,我們需要學些啥,利用這個假期,我甚至還收集整理了配套視頻和資料,暖男石錘啊,這期文章有用的話,別忘三連哦!

二、學習路線

主要分為 4 個部分:數學基礎、編程能力、演算法基礎、實戰。

本文提到的資料,我都整理好了,有需要的自取(提取碼:jack):

https://pan.baidu.com/s/12tbVrUF056pY7aCyMpgl1w

1、數學基礎

在機器學習演算法中,涉及到最為重要的數學基本知識有兩個:線性代數概率論

這兩也是大學的必修課了,如果知識早已還給老師,也沒關係,哪裡不會學補哪裡

線性代數研究的是線性空間的性質,數據通常會被表示為歐式空間中的點,而這些點經過一系列變換後會映射到另一個空間,在新的空間中隱藏在數據中的規律才得以顯現。

所以線性代數作為研究空間的一門科學,是入門機器學習的最要基礎之一

視頻:推薦 MIT 的老教授 Gilbert Strang 的線性代數上課視頻。

沒學過線代的同學會發現這門課程,講得清晰而且直觀,深入線代的精髓,完全不是那種理論堆砌的講法,而且老教授幽默風趣,很有人格魅力。

英文不好,也不用擔心,字幕是中文的

教材:推薦《線性代數及其應用》,作者是 David C. Lay 。

喜歡看書的朋友,這本書一定不能錯過。

這本書詳細地介紹了線性代數在幾何學、計算機圖形學、經濟學、概率論、信號與系統、微分方程等領域的應用,給人以直觀的認識。

概率論是研究不確定性的一門科學,生活處處是概率。機器學習演算法需要對現實情況建模,自然是少不了將概率論作為工具。

這門課入門並不難,大家可以挑一本評分還可以的書開始學習。

這裡推薦陳希儒的《概率論與數理統計》,講得很詳細,如同聽一個老者回憶自己的概率與統計心得,相信讀者也會有所收穫。

如果時間充裕,推薦先學好數學基礎。如果時間不夠,那就跳過數學基礎部分,學演算法的時候,哪裡不會補哪裡。

2、編程能力

編程語言,需要至少掌握兩門, Python 和 C++。

工作中,Python 主要用於處理數據演算法調研模型訓練的工作,而 C++ 則是負責工程落地

演算法工程師,需要針對落地場景,對演算法的可靠性和實時性等方面進行優化,C++ 工程能力必不可少。

Python 是一門非常友好的編程語言,不但易於入門而且功能強大,在進行機器學習演算法開發的過程中會大量使用 Python。

視頻:我上學看的第一個視頻,就是小甲魚 Python 課程,風趣幽默,涉及Python 語法基礎、網路爬蟲、Pygame 飛機大戰等內容,內容很豐富。

實戰是最好的老師,學習 Python 的時候,可以找一個自己喜歡的方向,去實戰。

邊實戰,邊學習。比如寫爬蟲、做小遊戲、玩各種有趣的演算法等。

這裡面,爬蟲是最簡單的,很容易有成就感,讓你堅持學習下去,下載小說、下載漫畫、下載音樂、下載電影、搶票等等小程序。

這個推薦我的一個 Github star 量 11.4k+、fork 4.5k+的爬蟲項目。

每個實戰,都有對應的文章教程,代碼開源

項目地址:https://github.com/Jack-Cherish/python-spider

教材:推薦《流暢的Python》,書看完有些難度,但是哪來當個手冊用,很方便,哪些語法忘記了,翻閱一番,必能有所收穫。

C++ 是一種面向對象的程序設計語言,無論你是做演算法,還是做開發,亦或者是做測開。C++ 都應該掌握,它是一個基礎的編程語言。學會了這門編程語言,再學其它,就會更得心應手。

視頻:這部分推薦慕課網的免費教程,很好的入門視頻,老師講得繪聲繪色、形象生動、通熟易懂。

一共分為 7 章,每章視頻的時間是 2-3 個小時,半個月可以輕鬆刷完,學習順序是:

  • C++遠征之起航篇
  • C++遠征之離港篇
  • C++遠征之封裝篇(上)
  • C++遠征之封裝篇(下)
  • C++遠征之繼承篇
  • C++遠征之多態篇
  • C++遠征之模板篇

教材:推薦被譽為「聖經」的《C++ Primer》,經典巨著,非常棒的書。

編程語言基礎學完了,接下來就是數據結構與演算法。

數據結構與演算法是程序員的內功,每一個工程師的必修課。

數據結構的學法,我推薦是直接看書,一邊學習一邊刷題,同時進行,這樣學的速度快。

就如同書名一樣,這是一本像小說一樣有趣的演算法入門書,非常易懂,強烈推薦。

可以與這本書一同學習的,就是《劍指Offer》,裡面講解了 66 道+ 常見數據結構題,解析思路,簡單易懂。

兩門書一起看,輕鬆入門數據結構與演算法。

不過《劍指Offer》講解的代碼都是 C/C++,沒有 Python 版本,想看 Python 版本的,可以看我整理的教程,C++ 和 Python 都有實現和講解,題目已按照類型劃分好。

項目地址:https://github.com/Jack-Cherish/LeetCode

兩本書都看完,題也刷完了,那就算是入門了。

想進階,進一步學習,直接上 LeetCode。

力扣可以從 HOT 100 或 精選演算法 200 題刷起,題目相對於《劍指Offer》要增加一些難度,但每道題目都有對應的解題思路和答案。

堅持刷完 200 道,大多的面試輕鬆搞定,完全夠用。

當然要面試谷歌級別的大佬,Hard 題是不能放過的。

刷題地址:https://leetcode-cn.com/

Tip:刷一遍題,回頭看還會忘,不要懷疑自己,要反覆刷,反覆練習。

同時,推薦一個非常好的谷歌大佬的刷題筆記:

Jack-Cui:看完谷歌師兄的刷題筆記,多語言通吃,秒殺 88% Leetcode 題目?

zhuanlan.zhihu.com圖標

3、演算法基礎

恭喜大家,在做了前面這麼多基礎工作之後,終於可以開始入門機器學習演算法了。

機器學習

視頻:推薦吳恩達老師的機器學習視頻,吳恩達是整個領域的巨頭之一,學術地位很高。同時,他出的視頻也對新手非常友好,入門的不二之選。

教材:還是那句話,光看不練是不行的。《機器學習實戰》,理論結合實戰,適合新手。

《機器學習實戰》使用 Python2 實現,有些細節講的不夠細緻,對此我進行了完善,使用 Python3 復現了一遍,並結合 sklearn 以及更多的好玩例子,進行講解。

全網閱讀量 500w+:

對應的 Github 開源代碼 Star 3.3k+,fork 3.1k+。

在線閱讀地址:

https://cuijiahua.com/blog/ml/

深度學習

深度學習是現在的演算法工程師繞不開的一個子領域,是機器學習的子集。

視頻:還是推薦吳恩達老師的深度學習視頻,也是對新手非常友好。

教材:說實話,深度學習,我並沒有看過書,都是視頻+ Github 開源項目學習的,不過被譽為深度學習領域聖經的「花書」,可以備一本。

深度學習框架

深度學習框架有很多,Tensorflow、Pytorch、Paddle、MXNet、Caffe等。

我在工作過程中,用的最多的是 Pytorch,其次是 Tensorflow。

新手上手,推薦先學 Pytorch,可以直接看 Yunjey Choi 大佬的 Github 教程,簡單入門:

項目地址:

https://github.com/yunjey/pytorch-tutorial

Pytorch 深度學習框架學習,也可以看我寫的 Pytorch 深度學習實戰系列教程,有垃圾分類、圖像分割等結合實戰的小項目。

Github 開源代碼 Star 400+,fork 250+。

項目地址:

https://github.com/Jack-Cherish/Deep-Learning

4、實戰

實戰實戰,文章反覆提到了這麼多次,僅僅這些還是遠遠不夠的。

因為更多時候,你是跟著視頻 or 文章的思路去實戰,這缺少了獨立思考的過程。

學了這麼多,你並沒有獨立完成過一個項目,數據怎麼處理,怎麼分析問題,用什麼演算法解決問題,也沒有獨立思考過。

演算法工程師的崗位競爭也比較激烈的,為了在茫茫人海中脫穎而出,我們需要以團隊個人的形式,獨立完成一些項目,只有這樣,你才能更具競爭力。

對於學生黨,做項目,最簡單直接的方法就是參加競賽

推薦兩個參加競賽的地方,一個是國外的 Kaggle,另一個是國內的阿里雲天池

兩個競賽的獎金也都很豐富,根據自己的喜好,參賽即可。

Kaggle:https://www.kaggle.com/

阿里天池:https://tianchi.aliyun.com/competition/gameList/activeList

既能打比賽,又能贏獎金,何樂而不為呢?

上文提到的資料,都放在了 Github,需要的自取:

上文提到的資料,都放在了Github,需要的自取。?

github.com

三、絮叨

這篇文章整理的也是我的學習路線。

要說需要學多久,那就看個人的學習動力了。

如果你想去一家不錯的公司,但是目前硬實力不過關,我覺得還是有必要去努力一下的,技術能力的高低決定你能走多遠,平台的高低,決定你能飛多高。

如果可以通過自己的努力,進入自己心儀的公司,一定不要鬆懈怠慢,職場成長和學習新技術一樣,不進則退。

你往往會發現,身邊實力越強的人越努力,最高級的自律就是享受孤獨

創作不易本期硬核,感謝點贊支持!筆芯~ 記得關注我喲 @Jack-Cui

刷題的話,也可以看另外一個大佬的刷題筆記。

Jack-Cui:看完谷歌師兄的刷題筆記,多語言通吃,秒殺 88% Leetcode 題目?

zhuanlan.zhihu.com圖標

祝點贊的人,人人都是offer收割機!


一、前言

工作時長2年的演算法工程師來強答一波~

一直以來,被問到最多的問題就是「演算法的學習路線」。

今天,它來了。

我會帶著大家看看,我們需要學些啥,利用這個假期,我甚至還收集整理了配套視頻和資料,暖男石錘啊,這期文章有用的話,別忘三連哦!

二、學習路線

主要分為 4 個部分:數學基礎、編程能力、演算法基礎、實戰。

本文提到的資料,我都整理好了,有需要的自取(提取碼:jack):

https://pan.baidu.com/s/12tbVrUF056pY7aCyMpgl1w

1、數學基礎

在機器學習演算法中,涉及到最為重要的數學基本知識有兩個:線性代數概率論

這兩也是大學的必修課了,如果知識早已還給老師,也沒關係,哪裡不會學補哪裡

線性代數研究的是線性空間的性質,數據通常會被表示為歐式空間中的點,而這些點經過一系列變換後會映射到另一個空間,在新的空間中隱藏在數據中的規律才得以顯現。

所以線性代數作為研究空間的一門科學,是入門機器學習的最要基礎之一

視頻:推薦 MIT 的老教授 Gilbert Strang 的線性代數上課視頻。

沒學過線代的同學會發現這門課程,講得清晰而且直觀,深入線代的精髓,完全不是那種理論堆砌的講法,而且老教授幽默風趣,很有人格魅力。

英文不好,也不用擔心,字幕是中文的

教材:推薦《線性代數及其應用》,作者是 David C. Lay 。

喜歡看書的朋友,這本書一定不能錯過。

這本書詳細地介紹了線性代數在幾何學、計算機圖形學、經濟學、概率論、信號與系統、微分方程等領域的應用,給人以直觀的認識。

概率論是研究不確定性的一門科學,生活處處是概率。機器學習演算法需要對現實情況建模,自然是少不了將概率論作為工具。

這門課入門並不難,大家可以挑一本評分還可以的書開始學習。

這裡推薦陳希儒的《概率論與數理統計》,講得很詳細,如同聽一個老者回憶自己的概率與統計心得,相信讀者也會有所收穫。

如果時間充裕,推薦先學好數學基礎。如果時間不夠,那就跳過數學基礎部分,學演算法的時候,哪裡不會補哪裡。

2、編程能力

編程語言,需要至少掌握兩門, Python 和 C++。

工作中,Python 主要用於處理數據演算法調研模型訓練的工作,而 C++ 則是負責工程落地

演算法工程師,需要針對落地場景,對演算法的可靠性和實時性等方面進行優化,C++ 工程能力必不可少。

Python 是一門非常友好的編程語言,不但易於入門而且功能強大,在進行機器學習演算法開發的過程中會大量使用 Python。

視頻:我上學看的第一個視頻,就是小甲魚 Python 課程,風趣幽默,涉及Python 語法基礎、網路爬蟲、Pygame 飛機大戰等內容,內容很豐富。

實戰是最好的老師,學習 Python 的時候,可以找一個自己喜歡的方向,去實戰。

邊實戰,邊學習。比如寫爬蟲、做小遊戲、玩各種有趣的演算法等。

這裡面,爬蟲是最簡單的,很容易有成就感,讓你堅持學習下去,下載小說、下載漫畫、下載音樂、下載電影、搶票等等小程序。

這個推薦我的一個 Github star 量 11.4k+、fork 4.5k+的爬蟲項目。

每個實戰,都有對應的文章教程,代碼開源

項目地址:https://github.com/Jack-Cherish/python-spider

教材:推薦《流暢的Python》,書看完有些難度,但是哪來當個手冊用,很方便,哪些語法忘記了,翻閱一番,必能有所收穫。

C++ 是一種面向對象的程序設計語言,無論你是做演算法,還是做開發,亦或者是做測開。C++ 都應該掌握,它是一個基礎的編程語言。學會了這門編程語言,再學其它,就會更得心應手。

視頻:這部分推薦慕課網的免費教程,很好的入門視頻,老師講得繪聲繪色、形象生動、通熟易懂。

一共分為 7 章,每章視頻的時間是 2-3 個小時,半個月可以輕鬆刷完,學習順序是:

  • C++遠征之起航篇
  • C++遠征之離港篇
  • C++遠征之封裝篇(上)
  • C++遠征之封裝篇(下)
  • C++遠征之繼承篇
  • C++遠征之多態篇
  • C++遠征之模板篇

教材:推薦被譽為「聖經」的《C++ Primer》,經典巨著,非常棒的書。

編程語言基礎學完了,接下來就是數據結構與演算法。

數據結構與演算法是程序員的內功,每一個工程師的必修課。

數據結構的學法,我推薦是直接看書,一邊學習一邊刷題,同時進行,這樣學的速度快。

就如同書名一樣,這是一本像小說一樣有趣的演算法入門書,非常易懂,強烈推薦。

可以與這本書一同學習的,就是《劍指Offer》,裡面講解了 66 道+ 常見數據結構題,解析思路,簡單易懂。

兩門書一起看,輕鬆入門數據結構與演算法。

不過《劍指Offer》講解的代碼都是 C/C++,沒有 Python 版本,想看 Python 版本的,可以看我整理的教程,C++ 和 Python 都有實現和講解,題目已按照類型劃分好。

項目地址:https://github.com/Jack-Cherish/LeetCode

兩本書都看完,題也刷完了,那就算是入門了。

想進階,進一步學習,直接上 LeetCode。

力扣可以從 HOT 100 或 精選演算法 200 題刷起,題目相對於《劍指Offer》要增加一些難度,但每道題目都有對應的解題思路和答案。

堅持刷完 200 道,大多的面試輕鬆搞定,完全夠用。

當然要面試谷歌級別的大佬,Hard 題是不能放過的。

刷題地址:https://leetcode-cn.com/

Tip:刷一遍題,回頭看還會忘,不要懷疑自己,要反覆刷,反覆練習。

同時,推薦一個非常好的谷歌大佬的刷題筆記:

Jack-Cui:看完谷歌師兄的刷題筆記,多語言通吃,秒殺 88% Leetcode 題目?

zhuanlan.zhihu.com圖標

3、演算法基礎

恭喜大家,在做了前面這麼多基礎工作之後,終於可以開始入門機器學習演算法了。

機器學習

視頻:推薦吳恩達老師的機器學習視頻,吳恩達是整個領域的巨頭之一,學術地位很高。同時,他出的視頻也對新手非常友好,入門的不二之選。

教材:還是那句話,光看不練是不行的。《機器學習實戰》,理論結合實戰,適合新手。

《機器學習實戰》使用 Python2 實現,有些細節講的不夠細緻,對此我進行了完善,使用 Python3 復現了一遍,並結合 sklearn 以及更多的好玩例子,進行講解。

全網閱讀量 500w+:

對應的 Github 開源代碼 Star 3.3k+,fork 3.1k+。

在線閱讀地址:

https://cuijiahua.com/blog/ml/

深度學習

深度學習是現在的演算法工程師繞不開的一個子領域,是機器學習的子集。

視頻:還是推薦吳恩達老師的深度學習視頻,也是對新手非常友好。

教材:說實話,深度學習,我並沒有看過書,都是視頻+ Github 開源項目學習的,不過被譽為深度學習領域聖經的「花書」,可以備一本。

深度學習框架

深度學習框架有很多,Tensorflow、Pytorch、Paddle、MXNet、Caffe等。

我在工作過程中,用的最多的是 Pytorch,其次是 Tensorflow。

新手上手,推薦先學 Pytorch,可以直接看 Yunjey Choi 大佬的 Github 教程,簡單入門:

項目地址:

https://github.com/yunjey/pytorch-tutorial

Pytorch 深度學習框架學習,也可以看我寫的 Pytorch 深度學習實戰系列教程,有垃圾分類、圖像分割等結合實戰的小項目。

Github 開源代碼 Star 400+,fork 250+。

項目地址:

https://github.com/Jack-Cherish/Deep-Learning

4、實戰

實戰實戰,文章反覆提到了這麼多次,僅僅這些還是遠遠不夠的。

因為更多時候,你是跟著視頻 or 文章的思路去實戰,這缺少了獨立思考的過程。

學了這麼多,你並沒有獨立完成過一個項目,數據怎麼處理,怎麼分析問題,用什麼演算法解決問題,也沒有獨立思考過。

演算法工程師的崗位競爭也比較激烈的,為了在茫茫人海中脫穎而出,我們需要以團隊個人的形式,獨立完成一些項目,只有這樣,你才能更具競爭力。

對於學生黨,做項目,最簡單直接的方法就是參加競賽

推薦兩個參加競賽的地方,一個是國外的 Kaggle,另一個是國內的阿里雲天池

兩個競賽的獎金也都很豐富,根據自己的喜好,參賽即可。

Kaggle:https://www.kaggle.com/

阿里天池:https://tianchi.aliyun.com/competition/gameList/activeList

既能打比賽,又能贏獎金,何樂而不為呢?

上文提到的資料,都放在了 Github,需要的自取:

上文提到的資料,都放在了Github,需要的自取。?

github.com

三、絮叨

這篇文章整理的也是我的學習路線。

要說需要學多久,那就看個人的學習動力了。

如果你想去一家不錯的公司,但是目前硬實力不過關,我覺得還是有必要去努力一下的,技術能力的高低決定你能走多遠,平台的高低,決定你能飛多高。

如果可以通過自己的努力,進入自己心儀的公司,一定不要鬆懈怠慢,職場成長和學習新技術一樣,不進則退。

你往往會發現,身邊實力越強的人越努力,最高級的自律就是享受孤獨

創作不易本期硬核,感謝點贊支持!筆芯~ 記得關注我喲 @Jack-Cui

刷題的話,也可以看另外一個大佬的刷題筆記。

Jack-Cui:看完谷歌師兄的刷題筆記,多語言通吃,秒殺 88% Leetcode 題目?

zhuanlan.zhihu.com圖標

祝點贊的人,人人都是offer收割機!


本人目前武漢某211高校碩士,今年畢業,找的工作也是演算法工程師。今年演算法工程師崗爆火,競爭慘烈啊,若非之前拿到了某為的實習,並轉了正,怕是要做炮灰了。

進入正文:

首先不能說學歷不重要,但更重要的是技術,分享一篇文章給你,算是雞湯文,不過也是有啟發的——大專生也能進阿里?

再次對於演算法崗的要求,你完全可以去大公司或心怡的公司招聘官網上看看他們是怎麼要求的,然後針對之加強訓練。

基礎是很重要的,決定著你在筆試中的成績和部分面試中的表現。要說基礎包括什麼,就看計算機科班學什麼了。計算機網路技術和操作系統是必不可少,對編程語言的掌握程度,對編程能力的強弱也是一定會考查的。

最後一點是個人建議,翻看了你以前的問題,覺得你可能在考研上還有些想法。如果技術不是很強,或不想要低薪資的話,可以考慮考研,到985、211高校鍍個金,順便把自己的技術提上來。我本科時找工作最高只給6000,研究生時是16000。最後一句,如果真要考的話,一定要找個好導師,一定要找個好導師,一定要找個好導師,不然會在畢業時噁心你,甚至在讀研期間讓你很痛苦。。。我深有體會啊。。。

願有助於你。


以阿里演算法團隊招聘要求為例,要考察候選人的哪些能力?

有個普遍規律:在前序階段做嚴格的控制會大大降低後序階段的實現難度,比如招聘,人招進來之後是要管的,招聘的時候高標準、嚴要求,後續管理起來就會輕鬆很多。這也是阿里巴巴高級演算法專家威視(張榮)認為招聘極其重要的原因。日前,威視分享了自己在組建阿里巴巴 CRO 線 NLP 演算法團隊時的經驗,以及在招聘時更看重哪些能力。以下為重點內容。

威視認為,招聘時首先要確定職位模型( job model )。對於我們所處的時代背景來說,新演算法層出不窮,但唯一不變的是數學基礎、計算機基礎和動手能力。

你很難預測新技術的具體實現,但當新技術出現時,你需要快速地分析、學習並掌握它。而且,工作中經常要解決從來沒有遇到過的新問題,這就要求候選人在面對沒見過的問題時具備分析判斷,在具體約束條件下找完整解決方案的能力。另外,在複雜的業務場景中,問題經常沒有確定性的答案,往往是通過對過程的合理性來判斷整個方案是否合乎要求。尋找答案的過程很少有一帆風順的,大概率會遭遇挫折,這就要求候選人不斷嘗試、不斷修正,去抵達終點。

至於教育背景、之前的從業經歷,威視認為不怎麼重要。如果一個人能力強,是不需要靠學校學位來旁證的,直接用行動證明就行了。

對於候選人的考察,威視往往從基礎的硬技能、創新性 / 開放性思維、精神素質三方面考察。

硬技能

1. 數學:包括概率論與數理統計、矩陣論、隨機過程。

2. 計算機基礎:包括操作系統、組成原理、數據結構。

3. 演算法能力:包括對領域內主流模型進行優缺點對比、在設定的場景中選擇合適的方案等。

創新性 / 開放性思維

前面的硬技能,看的往往是結果,而對思考能力的考察,看的是過程,看候選人是否有方法論、思路是否清晰、是否言之有據。所以,威視經常在面試過程中考智力題,這種面試方式往往是討論式的。

如果候選人能夠完成,最後再請他做個總結,觀察其歸納要點的能力和視線的高度。

有些候選人結束面試後仍然會繼續思考,給出更好的回答。

精神素質

公司對人才的要求是:樂觀、皮實、聰明、自省。

四個詞裡面有兩個都在強調堅韌不拔。在面試過程中,威視會看候選人在解題不順時的表現,有時甚至故意刺激一下候選人,觀察他的反應,偶爾還會故意在中途改變限制條件。這是因為阿里巴巴內部競爭激烈,經常需要擁抱變化,如果心理承受力脆弱,是不適合當同路人的。

還有一點很重要:自我驅動力,這是從降低對內管理成本來要求的。

在威視看來,硬技能、創新性 / 開放性思維和精神素質缺一不可。即使這三方面都滿意了,如果主管、主管的主管、 HR 對候選人明確提出疑慮,威視一般不會申辯,而是直接放棄該候選人。因為,威視認為他們閱人無數,不會看錯人。

你可能會問:這樣做,會不會錯失優秀人才?威視認為,他的方式幾乎可以確保招進來的同學肯定是好的,但有時候確實會錯失一些優秀的候選人,不過這不會造成嚴重的後果。相比之下,招進來不合格的人才會造成大麻煩。


9年廣告演算法背景推薦以下回答:

https://www.zhihu.com/question/426743420/answer/1555802922


推薦閱讀:
相关文章