推薦算法工程師學習路線及工作指南
作者在《推薦算法工程師的成長之道》這篇文章中講到推薦算法工程師是一個好的職業選擇,並且講解了職業發展路徑及定位、怎么成長等話題(還沒看的可以看起來)。
如果大家認可我講的並且也願意將來從事推薦算法的工作,但是不知道需要學什么才可以更好地入門,那么你一定要讀讀這篇文章。
在本篇文章中,作者基於自己近10年的大數據與推薦系統項目經驗來講講我們該怎么入門推薦算法工程師,怎樣更容易找一個推薦算法的職位,以及找到相關職位后怎么更快的融入工作。
希望本文對於畢業后想從事推薦算法的學生以及有工作經驗但是准備轉行推薦算法的讀者提供一些指導。讓大家可以輕松應對面試,入職時快速上手。
本文從我自己的學習成長經歷、如何判斷自己是否適合從事推薦算法、推薦算法工程師需要的知識儲備、怎么找一份合適的推薦算法工作、怎么可以更快的適應工作5個部分來講解。
在作者正式介紹怎么入門推薦算法工程師時,先講講自己入門推薦算法工程師的經歷,可以給大家一些啟發和思考。
Part 1
作者從零開始學習推薦系統的心路歷程
作者算是從零開始學習推薦系統的。2010年到2011年之間在一家公司做了一年算法工程師,其中有大半年研究了Netflix Prize相關的推薦算法(2006年Netflix公司發起了一次推薦算法競賽,希望參賽團隊可以將Netflix的推薦預測算法的RMSE提升10%,第一個做到的團隊將獲得100w美元大獎,最終這個獎在3年后的2009年被三個團隊的混合算法拿到了),當時用matlab的分布式計算實現了幾個推薦算法。算是對推薦系統的初步入門。
然后2012年9月份加入現在的公司,從零開始搭建大數據平台和推薦系統,一直到現在。雖然之前做過半年的推薦算法研究,但是作者當時對Java編程是零基礎,也從未學習過大數據相關技術,對機器學習也不太了解,所有這些都需要從零開始學習。當時公司沒有一個人懂大數據與推薦系統,學習難度可想而知。
好在作者學的是數學專業,自認為數學學得不錯,自學能力強。經過自己多年的努力學習和實踐,看過大量相關的書和材料,參加過很多線下的分享,通過無數次的掉坑與填坑,邊學習、邊實踐、邊總結,最終對大數據與推薦系統有了比較全面深入的了解。
我自己的整個學習過程是比較曲折的,寫作本文及這一系列公眾號文章的目的也是想通過自己的經驗幫助更多有志於從事推薦系統的讀者可以少走彎路,盡快成長起來。
經過近10年的學習成長,我發現自己還是非常喜歡這個職業的,並且自認為做得還可以。那么是不是推薦算法就沒有門檻,所有人都適合從事推薦算法呢?其實是不一定的,要想在這個方向上做得好,是有一定前提條件的。
Part 2
如何判斷自己是否適合從事推薦算法
推薦算法工程師對數學、機器學習、編程等技能都有一定的要求,在這些方面是需要有一定基礎的。如果想做好推薦算法,還是有一定難度的。如果你這些方面基礎還不錯,並且對推薦算法也非常感興趣,那么你將推薦算法作為自己的職業是比較好的選擇。
但是如果你不具備上面這些基礎(比如數學基礎太差、非常討厭數學等),但是覺得推薦算法工資高,現在是人工智能時代,推薦算法職位很火,完全憑工資和追熱點去選擇推薦算法,那么你很難在這個職位上做的好。
作者強烈建議數學基礎需要足夠好才更適合做推薦系統,否則很難在這個領域做到足夠深,后面肯定會遇到瓶頸的。如果數學基礎太差或者非常不喜歡數學,就不要選擇推薦算法作為自己的終生職業了。
推薦系統是一門實用的綜合性學科,構建一套完善的、對業務產生價值的推薦系統需要了解很多知識、掌握大量相關技術,並且需要不斷思考、不斷總結,結合產品的發展和用戶的訴求,逐步完善,好的推薦系統不是一天建成的,是一個持續優化和迭代的過程。下面對構建推薦系統需要的知識儲備做一個比較全面的說明,方便立志從事推薦系統研發並將推薦系統作為自己事業的讀者有一個大致了解,初步指明學習的方向。
Part 3
推薦系統推薦算法工程師需要的知識儲備
下面圖1是一種可行的推薦系統業務流圖,用戶通過終端(如手機)訪問推薦業務,終端調用推薦系統web服務接口(可能會用CDN加速,同時通過Nginx等web服務做反向代理),推薦接口從推薦結果庫中將用戶的推薦結果取出來,組裝成合適的數據格式再返回用戶。從另外一側,用戶在終端上的行為會通過日志收集系統收集到大數據平台,通過ETL處理進入數據倉庫,我們構建推薦算法模型為用戶生成推薦結果,將推薦結果通過kafka管道存入推薦庫中。
我會結合該圖來說明學習推薦系統需要用到哪些技術,需要學習哪些相關知識點。當然,你去一個公司做推薦算法並非一定會接觸到下圖的所有方面(如果是創業公司,很有可能都會接觸,因為創業公司沒有這么多資源招聘各個模塊的人,一般一個人要頂幾個人,所以覆蓋的面也會更廣,在大公司可能只會接觸其中某一個小點)。但是如果你對所有模塊有更好的認識和了解,對幫助你形成推薦系統全局認識是大有裨益的。
圖1:推薦系統的業務流
我們可以將上圖中涉及到的知識點分為基本技能、核心技能、補充技能三大塊。推薦算法工程師一般也分為偏算法類與偏工程類,偏算法類主要是根據產品特性、已有的數據資源設計一個高效可行的算法,也可能會涉及到實現相關算法,而偏工程類主要是推薦算法相關模塊編碼及推薦支撐模塊開發等。
偏算法類的工程師需要數學基礎好,機器學習理論扎實,最好有相關學術經驗。偏工程類的需要編程能力強,熟悉軟件架構設計、向對象思想、設計模式等,最好有開發較大工程項目的經驗。
推薦算法工程師的核心技能主要是機器學習相關技術、推薦算法理論、推薦算法工程實現等。數學知識、編程知識、數據結構與算法、數據庫、大數據相關知識、英文閱讀能力等是基礎技能。而產品UI交互、網絡協議、web服務、CDN、數據交互協議等屬於補充技能。
入門推薦算法工程師,基礎技能和核心技能是需要學習的,如算法基礎、機器學習相關技術、推薦系統相關常用算法是需要掌握的。但是為了完整性,我將推薦系統涉及到的所有知識點都羅列出來了,其他非必須掌握的知識點讀者可以分階段選擇性學習。
下面我們對推薦系統涉及到的技術和知識點做一個較全面的整理說明,作為大家學習的參考指南。你可以根據剛剛提到的基本技能、核心技能、補充技能等選擇性學習。
01
數學基礎
數學是一切自然科學的基礎,任何自然科學(甚至人文科學)的發展離不開數學的貢獻,甚至有人說過一個學科發展的成熟程度與它使用數學知識的深度正相關。
要想學好推薦算法,是需要具備一定數學基礎的,具體需要對如下幾個領域的數學知識有所了解。
我認為只要學好大學的高等數學、線性代數、概率與統計這三門課就足夠了,是完全可以應付推薦系統需要的數學儲備的。
離散數學作為計算機系的必修課程,對理解計算機體系結構、更好地理解很多機器學習算法是非常有幫助的。如果你想在推薦上有更深的造詣是需要學習了解的,初學者前期可以不必花很多時間在這門課上。
a.高等數學
微積分是整個高等數學的核心,現代科技的發展得益於微積分的發明,它讓整個高等數學知識在工程科技領域得到非常廣泛的運用,大大促進了自然科學和工程學科的發展壯大。機器學習是計算機與數學的交叉學科,當然也離不開高等數學。
推薦模型(甚至絕大多數機器學習算法模型)其實最終可以歸結為一個最優化問題。簡單來說,最優化問題就是求函數極值的問題,需要利用各種數學技術來求解模型的最優參數,常用的有極大似然估計,梯度下降算法等。
深度學習的激活函數、機器學習模型的目標函數的性質我們需要了解,需要計算梯度來逐步迭代求解最優解,這些都涉及到微積分相關知識。
另外,關於算法的時間空間復雜度(比如歸並排序的時間復雜度是O(nlogn))等都需要用高等數學無窮小的形式來描述。
我們需要掌握的高等數學知識主要有初等函數的基本性質、極限、積分、微分、求極值、無窮小量等。
b 線性代數
矩陣運算是非常簡潔高效的一種數學運算。如果用矩陣來描述線性方程組是非常簡單的(Ax=b,A是系數矩陣,b是數值向量,x是未知向量),有很多機器學習算法都利用了矩陣相關知識,如奇異值分解、降維方法等。矩陣運算非常適合在GPU等現代芯片架構上做並行處理。
推薦系統中比較出名的利用矩陣運算的算法是矩陣分解算法,深度學習中從一層到下一層的信息傳遞本質上就是矩陣乘法。計算相似度的余弦相似計算也需要利用向量的內積運算。
我們需要掌握基、矩陣及向量相關運算、解線性方程、正交性、特征值、特征向量等基本知識點。
c 概率統計
用於模型訓練的樣本可以看成是從滿足某個概率分布中的一次抽樣,基於該觀點,任何一個推薦算法可以看成是一個概率估計問題。很多機器學習問題可以采用概率的思想來解釋,最后通過極大似然估計相關參數。
很多推薦算法可以利用概率的思想來建模,推薦系統的navie bayes方法就是一種簡單的利用概率方法來做推薦的算法。我們也可以將推薦系統看成是二分類問題,可以將用戶是否喜歡某個標的物看成一個概率,概率值的大小代表用戶喜歡的程度,從而可以用logistic回歸來做推薦。貝葉斯估計也是常用的概率估計方法,在推薦系統中得到了大量的使用,比如主題模型。
我們需要掌握什么是概率、概率的計算、頻率與概率的關系、常用分布、貝葉斯公式、極大似然估計、先驗估計、概率密度函數、均值、方差、樣本、抽樣、置信度、置信區間等相關概率統計知識。
d 離散數學
學計算機專業的同學本科時必學的一門課程是離散數學,包括的內容有集合論、圖論、代數結構、組合數學、數理邏輯等部分。
計算機運算本質上就是布爾代數,通過二進制數來解決所有計算問題。深度學習的神經網絡模型其實就是一種有向圖的結構,像滴滴打車為司機尋找最短路徑到達目的地其實是圖的最短路徑問題。機器學習的維度災難就是一種組合爆炸。
對於這部分的理解有助於大家更好的理解計算機體系結構及相關算法原理。
02
機器學習
推薦系統是機器學習的一個分支,主要是解決為海量用戶推薦標的物的問題,可以將推薦系統看成是一個監督學習問題。機器學習中的各種算法都可以用於推薦系統中,比如回歸、聚類、奇異值分解、深度學習、強化學習、遷移學習等。
對傳統機器學習算法有深入的了解和掌握,對學好推薦系統,對推薦系統算法的深刻理解非常有幫助。常用的聚類、分類、回歸、集成學習需要有較好的掌握。
另外,對於機器學習的一些基本概念和相關知識點,如訓練集、測試集、驗證集、模型訓練、模型推斷、特征工程、模型效果評估等要有所了解和掌握。這些是構建推薦算法模型過程中一定會涉及到的概念和知識點。
03
推薦系統
既然是入門推薦算法工程師,當然需要對推薦算法有所了解了。首先,需要知道推薦系統是一種解決信息過載的技術手段,知道在什么場景下需要推薦算法、什么場景不需要推薦算法、推薦算法會面臨哪些挑戰、推薦算法在工業界的應用場景等。
推薦系統常用的算法有基於內容的推薦和協同過濾推薦(包括基於用戶的協同過濾和基於物品的協同過濾)。對這兩類算法要有比較好的理解,能夠說清楚算法原理,能夠大致推導這些算法的實現方案。同時,也需要知道怎么評估推薦算法的好壞,有哪些衡量推薦算法質量的指標,這些指標是怎么計算的,怎么解決推薦系統冷啟動問題等。
最好可以基於一些開源的數據集,采用第三方開源機器學習框架,自己能夠獨立實現這些算法,這樣你會理解比較深刻。
04
編程能力
推薦算法工程師除了設計算法外,可能需要將算法付諸實踐,自己實現算法,即使是利用現有的算法框架做推薦,在處理數據、模型訓練、模型推斷等階段也需要動手編程。所以,推薦算法工程師一定需要有一定的編程基礎。
在工業界最常用的編程語言是Java語言,Java有非常成熟的生態系統,並且推薦系統前期數據處理是需要依賴大數據技術的,而大數據技術基本是基於Java(或者基於JVM的Scala語言)生態系統的。所以掌握Java/Scala開發是可以幫助你快速熟悉掌握各類大數據開源技術的。
隨着深度學習驅動的第三次人工智能浪潮的到來,出現了越來越多的深度學習框架,如Tensorflow、Pytorch、MxNet等等,這些框架基本是采用python語言來跟用戶交互的(底層是用C++寫的),間接促使Python語言火爆起來。Python作為一個較古老的編程語言,生態相對豐富,易於學習,並且Python有非常成熟的數據處理分析庫及流行的機器學習框架scikit-learn。
作為推薦算法工程師,熟悉Java/Scala、Python兩類編程語言基本就夠了。
05
數據結構與算法
上面一節提到了做推薦算法需要掌握編程技能,任何類型的編程都或多或少會涉及到一些數據結構與算法。我們需要了解常用的數據結構,比如集合、列表、哈希、鏈表等。常用的排序算法等肯定是需要掌握的。同時要對算法的時間復雜度和空間復雜度要有一定的了解。布隆過濾器,壓縮算法,加密算法等更高深的算法也需要有所了解,知道他們可以解決哪些問題,在需要的時候可以通過搜索相關材料快速學習。
06
工程技能
推薦算法的實現也需要考慮很多工程問題,數據處理平台采用什么,用什么編程語言,推薦結果存儲在哪里,推薦結果怎么給到用戶,這些問題都需要很好的工程實現。
隨着用戶規模的擴大,數據量越來越大,處理數據和訓練推薦模型花的時間越來越長,怎么有效的處理大規模數據和並發計算是擺在大家面前的棘手問題。
用戶訪問推薦頁面是否有延遲,是否會開天窗,怎么應對開天窗,怎么縮短訪問時長,怎么提升推薦服務的並發能力,這些問題都需要結合工程的知識和行業經驗來改善和優化。
怎么設計一套高效的推薦算法組件,讓整個團隊開發效率更高,更容易將推薦算法落地到實際產品中,怎么在算法精准度、效率、計算復雜度上做平衡是一種工程實現的哲學。
總之,你需要有足夠多的工程實踐經驗,才可以設計一套高效易用的、有業務價值的推薦算法體系。
07
大數據相關開源技術
推薦系統是一個系統性工程,從上面圖1可以知道,要搭建一個穩定有效的推薦系統還是相當復雜的,涉及到很多知識。toC互聯網產品是構建在規模用戶基礎上的生意,好的toC互聯網產品一定是服務於大量用戶的,大量用戶的行為會產生海量數據,這時大數據相關技術就有了用武之地。
幸好隨着互聯網和信息技術的發展,隨着開源技術的流行和開源社區的壯大,出現了很多優秀的開源框架,如Hadoop、Spark、Flink、Tensorflow、Pytorch等,這些框架是我們構建工業級推薦系統的基石,下面我對推薦系統需要用到的一些開源技術做一些簡單介紹,方便大家了解熟悉,基於這些開源技術是非常容易構建一套推薦系統的。
a 數據收集系統
構建推薦算法模型需要依賴用戶行為數據等各類數據,而這些數據來源於用戶在客戶端的操作,所以我們需要將這些操作日志“運輸”到數據中心,這個過程就是數據收集。
大數據生態系統中常用的收集轉運數據的組件有flume、kafka等。當我們將所有需要的數據收集到數據中心存下來后就可以進行處理、訓練、構建推薦算法模型了。
b 數據存儲系統
通過上面收集到的數據后,我們需要將數據存下來。由於互聯網公司數據量很大,單台服務器一般存不下,這時就需要利用分布式數據存儲技術,因此Hadoop的HDFS分布式文件系統就派上用場了。HDFS可以橫向擴容,具備數據讀取等常用文件操作,並且每個數據塊可以保留多份副本,即使一台服務器壞了也不會丟失數據,安全可靠性極高。
在做數據分析時,我們需要更好的存儲、獲取、處理數據,我們一般將數據采用Parquet的數據格式存儲,Parquet是基於Hadoop生態之上的一種列式數據存儲格式,不管采用Hadoop生態上的什么分析組件,不管什么數據模型及編程語言,Parquet格式都可以輕松應對。Parquet對數據有比較好的壓縮,可以極大減少存儲資源的消耗。
另外,隨着公司數據的增大,業務規模的擴大,我們會從更多的維度對數據進行分析處理,這時就有必要構建一套完善的數據倉庫了,大數據社區構建數倉的組件主要有Hive和HBase。Hive是基於關系型數據庫查詢語言SQL的結構化數據存儲組件,Hive采用表的形式存儲結構化數據,利用SQL查詢,非常適合批處理的數據分析形式。如果你需要對數據進行實時的分析處理,可以將數據存到HBase上,它是一種列式數據存儲組件。
c 數據分析系統
隨着Google在2003發表了3篇划時代意思的論文(見參考文獻1,2,3),大數據逐步從萌芽到繁榮壯大,這其中最重要的大數據技術當屬2006年啟動的Hadoop工程,Hadoop包含HDFS和MapReduce兩個組件,HDFS用於存儲海量數據,可以利用廉價的服務器構建分布式集群,方便存儲大量數據,並且數據有很好的容錯性。而MapReduce是一個基於HDFS之上的數據分析組件。經常十幾年的發展,圍繞Hadoop形成了一套完善的大數據生態系統,正式Hadoop生態系統引爆了大數據浪潮。
后續陸續出現的Spark、Flink等基於Hadoop之上的數據分析軟件,拓展了大數據分析的能力,這些軟件的發展也壯大了整個大數據生態系統。Spark、Flink上有非常多的算子操作,同時也有相關機器學習庫(Spark的mllib機器學習庫包括ALS推薦算法),這些算法和庫方便我們構建各種推薦模型。
08
其他支撐技術
除了上面提到的技能點外,我們還需要對下面的一些知識有所了解。這些技能點有些是構建完備的推薦系統必不可少的部分,有些是支撐推薦系統服務更好運轉的基礎能力。
a 數據庫
在推薦系統架構中,需要將為用戶生成的推薦結果存入數據庫中,方便web服務提取推薦結果返回給用戶,而業界主要有關系型數據庫和NoSQL數據庫兩大類。
關系型數據庫是最早被大量使用的數據庫,在整個互聯網發展史上占有非常重要的地位,大量用於各類公司作為最核心的數據存儲(如交易數據、用戶注冊信息等)。關系型數據庫最大的特點是采用行列的形式存儲數據,類似二維的電子表格,現實生活中非常多的數據都可以抽象為這種表格的形式。從這些表格數據中操作數據(增刪改查)采用SQL語言,它簡單易學,非常高效。目前比較火的開源關系型數據庫有MySQL和ProgreSQL等。
推薦系統雖然不直接利用關系型數據庫作為最終推薦結果的存儲,但是推薦的標的物相關的信息、用戶相關的信息等基本會存放在關系型數據庫中,推薦算法工程師至少需要了解熟悉一種關系型數據庫,並且需要熟練使用SQL語言。
推薦系統每天(甚至是每分鍾或者每秒)需要為每個用戶計算推薦結果,如果用戶量大的話,將這些推薦結果插入數據庫是一個非常頻繁的讀寫操作,采用關系型數據庫是非常不合適的,這時
NoSQL就派上用場了。NoSQL采用key-value的形式存儲數據,是非常適合用於存儲用戶的推薦結果的,key就是用戶的id,value就是為用戶的推薦結果。非常流行的NoSQL如CouchBase, Redis等都適合做推薦的結果存儲,他們讀寫都是非常高效的,並且可以橫向擴容。我們公司的推薦結果存儲就是采用的這兩個NoSQL數據庫。
b 操作系統
除了微軟體系外,整個互聯網行業的基礎架構基本是構建在Linux操作系統之上的,推薦系統的任務調度、任務監控等都是部署在linux服務器上,所以作為推薦算法工程師是需要熟悉linux操作系統的。常用的磁盤、內存、核、進程、網絡、文件目錄結構、基礎命令等常用操作是必須熟練掌握的。
c 網絡
推薦系統的結果需要存到數據庫,用戶訪問推薦服務時需要從數據庫中將推薦結果取出來,這個過程中都會涉及到數據在網絡上的傳輸,因此需要對網絡延遲、網絡傳輸等過程有所了解。同時數據傳輸遵守網絡協議,我們需要對http、https、tcp等網絡協議有所了解。為了加速用戶獲取推薦結果,讓用戶體驗更好,一般互聯網公司都會通過CDN來加速用戶查詢過程,對CDN技術也需要有所了解。
d 互聯網上常用的數據交互協議
像 json,xml,protobuf,Avro等常用的數據交互和序列化協議需要大家熟悉。特別是json,可讀性強,很多互聯網公司采用json格式來作為數據交互的協議,大量用於數據接口中。
e Web服務
從上面圖1可以知道,用戶獲取推薦數據,需要通過web服務模塊,該模塊的作用是通過從推薦結果數據庫中將用戶的推薦結果取出來,組裝成合適的格式返回給用戶。
常用的web服務組件有基於java語言的Tomcat,基於go語言的gin、Beego,以及基於python語言的Flask等等。如果你的工作中涉及到為推薦業務開發接口,就需要對這塊熟悉,否則只要知道即可。
f AB測試與指標體系
前面講過推薦算法是一個逐步迭代優化的過程,我們需要根據公司業務場景構建一套完善的指標體系,搭建一套好用的AB測試平台來評估推薦算法的好壞及對業務的價值,通過不斷優化迭代,讓推薦算法朝着驅動公司業務發展的方向前進。
作為一個推薦算法工程師,在平時工作中是會經常接觸到這兩塊的,因此是有義務也是有必要對這兩塊知識點有所了解的。由於這兩塊比較偏業務,初學者提前知道就可以了,未來在需要的時候希望可以針對性地學習。
09
實踐(項目)經驗
在你准備找一個推薦算法工作時,如果你有推薦或者機器學習相關項目經驗,簡歷是更容易被選中,有更多面試機會的。我建議可以參加一些推薦或者機器學習的競賽,比如阿里的天池競賽。通過競賽可以提前接觸工業級的數據,提前熟悉整個算法的流程,對個人學習成長是非常有幫助的。
當然,如果你還沒有畢業,在實驗室做過相關項目,或者找一份相關的實習鍛煉一下,對找到相關的職位也是非常有幫助的。有相關的項目經驗,也會讓你在入職時更容易上手。
10
產品與交互
產品是推薦系統價值呈現的載體。用戶通過使用產品中推薦模塊,獲得推薦結果。所以推薦系統怎么和用戶交互,操作是否便捷流暢,這些因素都會影響推薦系統的最終效果。往往好的UI及交互方式產生的價值比好的算法還大。
推薦算法工程師對UI展示與交互邏輯需要有一定的了解,雖然不必對這塊了解太深入,知道一些基本的交互和展示邏輯有助於更好的理解推薦業務,並通過適當的算法邏輯來滿足特定的UI交互。
11
英文文獻閱讀能力
目前關於推薦系統、機器學習等計算機相關書本及學習資料,比較好的還是國外的。遇到復雜的問題,自己搞不定,也需要去google上搜索解決方案的。好的開源項目也基本是國外的,參考學習材料都是英文的。平時學習參考相關專業論文,也基本是英文的。因此為了讓自己的能力得到更大的提升,需要具備讀懂英文原版材料或者書籍的能力。
英文看起來比較難的就是一些專業的詞匯,我建議可以嘗試先看英文的,遇到不懂的單詞查查,當你看完弄懂3本以上的英文參考書時,基本就具備閱讀計算機行業英文文獻的能力了。
至此,推薦算法工程師需要的知識儲備基本講完了,我們在下表中對相關知識點及比較好的學習資源做了一個歸類整理,方便大家參考。
類別 | 知識點 | 學習材料 | 掌握程度 |
---|---|---|---|
數學基礎 | 高等數學 | 本科《高等數學》教材,如同濟大學版 | 對基本概念、原理要比較熟悉 |
線性代數 | 本科《線性代數》教材,如同濟大學版 | ||
概率與統計 | 本科《概率論與數理統計》教材,如浙大版 | ||
離散數學 | 如,普通高等教育"十一五"國家級規划教材:離散數學(第2版) | ||
機器學習 | 監督學習無監督學習 | 周志華的《機器學習》西瓜書李航的《統計學習方法》 | 必須掌握常用監督與無監督算法 |
推薦系統 | 推薦系統解決什么問題什么時候需要推薦系統推薦系統常用算法怎么評估推薦系統推薦系統冷啟動 | 項亮的《推薦系統實踐》《推薦系統:技術、評估及高效算法》(原書第2版) | 熟悉基於內容的推薦算法和協同過濾算法原理,並會公式推導 |
編程能力 | Java/Scala,Python熟悉面向對象編程 | 《計算機科學叢書:Java語言程序設計(基礎篇)》《Learning Scala》《Python學習手冊》(第4版) | 有較好的編程能力 |
數據結構與算法 | 常用數據結構常用算法 | 圖靈程序設計叢書:算法(第4版) | 熟悉集合、列表、鏈表、哈希等數據結構熟悉排序等常用算法了解算法時間空間復雜度 |
工程技能 | 熟悉常用設計模式 | Head First設計模式(中文版) | 掌握常用設計模式多讀一些優秀開源軟件源碼,如Hadoop、Spark、Flink源碼等 |
大數據相關技術 | 數據收集 | 熟悉flume、Kafka等 | 了解常用API,會使用即可 |
數據存儲系統 | 熟悉HDFS、Parquet、Hive、HBase等 | 熟悉常用API,會使用 | |
數據分析系統 | 熟悉Hadoop、Spark、Flink等 | Spark、Flink是非常火的兩個數據分析平台,需要較熟悉,會利用他們來做數據分析處理,並且他們都有相關的機器學習組件 | |
其他支撐技術 | 數據庫 | 熟悉Mysql、Redis、CouchBase等數據庫 | 了解基本原理,會進行數據的crud操作[增加(Create)、讀取查詢(Retrieve)、更新(Update)和刪除(Delete)] |
操作系統 | 鳥哥的Linux私房菜:基礎學習篇(第四版) | 熟悉linux操作系統常用操作 | |
網絡 | 熟悉http、https、tcp等網絡協議,對CDN有所了解 | 需要有基本的了解即可 | |
數據交互協議 | 熟悉json,xml,protobuf,Avro等協議 | 特別是json和xml是需要了解的,會利用相關包進行處理protobuf,Avro了解即可 | |
web服務 | 熟悉tomcat、gin、beego、Flask等web服務框架 | 建議可以學習一下Flask,比較容易上手 |
表1:推薦系統需要具備的知識點匯總