為自學的夥伴打造,大數據開發上岸最詳細的知識點匯總
個人背景
學校:雙非本通訊工程,211碩電子與通訊工程,非科班,無實習(導師不讓實習),無項目,一個非常普通但努力的應屆生。
獎項:本科期間拿過一些數學建模競賽的獎(沒啥用),碩士期間什麼都沒有,全在給導師做一些破科研項目。
投遞崗位:大數據開發工程師或數據平台工程師或數據倉庫工程師或數據研發工程師。
拿到的offer:美團(白菜)、京東(SP)、蝦皮(白菜)、華為、shein、榮耀、龍湖…。其實拿到美團意向書後就沒怎麼找了,沒想到美團給了一個白菜,還好之前已經拿了幾個心儀的。
最後老劉選擇去東莞華為,主要因為家人在廣州打工,並且華為的總包還行,所以選擇了東莞華為。
大數據開發學習路線
大數據開發的自學可以分為四個部分,每個部分老劉結合親身經歷進行描述。
找個正能量夥伴
自學往往是孤獨的,網上資料又良莠不齊,自信心往往會受到打擊,需要尋找一個充滿正能量的人。老劉關注了一個大佬拓跋阿秀,雖然阿秀是搞C++的,但完全不影響阿秀成為老劉的偶像,學習阿秀的刻苦精神即可。阿秀是一個充滿正能量的人,在我低落的時候看阿秀的文章總能立馬振奮起來,推薦推薦。
如何刷演算法題
在秋招過程中,演算法是非常非常重要的,筆試要做演算法題(有些公司會出原題),面試幾乎每一輪都有演算法題考核,如果你面試過程中演算法題沒做出來但通過了這一輪,你的面評可能也不好,最後你的薪資也會受到很大影響。例如我實驗室大佬,拿到位元組SSP,快手SSP,騰訊SP,可拼多多給他一個白菜價格,他問為什麼工資會這麼低,那個人說你的演算法題做的不是很好(我同學說那天面試他幾乎在夢遊)。所以一定要重視演算法,並且老劉聽說很多公司工作中也有演算法考核,千萬要重視。
老劉的演算法題能力經歷了一個從0到力扣周賽平均2個題的水平,雖然力扣周賽一般只能做出前兩道,但比起開始一題不會,已經有了很大提高。這裡就不推薦買什麼書籍了,直接上力扣網先刷劍指offer,剛開始可能一道都不會(老劉開始也是這樣,不要慌),直接看精選的題解,直接總結別人的方法,總結完這些題後,就會大致了解數組題一般有什麼方法,鏈表一般有什麼方法,樹一般有什麼方法等。
接下來就可以練習力扣HOT100,現在就可以嘗試自己去解,解決不了再看題解。首先花10分鐘左右思考怎麼解決,有沒有思路,在草稿紙上畫一畫。如果10分鐘之後還沒有想法,就直接看題解吧,別再堅持了,時間是非常寶貴的,不要因為一個題影響一整天的安排,並且面試過程中面試官也不會花特別多時間等你思考(騰訊面試經典情景:給你多少時間,做完這幾個題)。如果你有思路,但是不知道怎麼寫程式碼,這種也是正常情況,直接看題解,看看大佬們怎麼寫,多總結多背,題刷多了就自然而然會了。
刷完這些題,演算法題中涉及的數據結構基本都接觸到了,自己也能解決一些題目了,但不要認為就不用刷了,你要保證你刷過的題一定能寫出來,常見題型都能寫出來。如果周末有空,建議參加力扣周賽,多鍛煉鍛煉。
注意老劉只是普通人,老劉的演算法建議也是比較適合普通人,大佬忽略這塊即可。
有個小技巧:如果你有某一家的面試,你這幾天可以多刷一下這家公司的演算法常考題,有可能會遇到原題或類似的題。
電腦網路和作業系統
電腦網路和作業系統幾乎是面試必問模組,例如百度面試官幾乎都會問從瀏覽器輸入一個URL後執行全過程,這模組絕對不能忽視,老劉剛開始這一塊沒有準備好,百度提前批面試就掛了,之後猛補這方面的知識點,才慢慢收穫意向。
如果你有足夠的時間,你可以去看B站上的一些影片,例如:B站哈工大的作業系統,B站清華大學的作業系統,B站韓立剛老師的電腦網路。
如果你沒有足夠的時間,時間已經來到金8銀9了,老劉這裡就推薦大佬小林Coding,直接背大佬總結電腦網路和作業系統的知識點,小林Coding YYDS。
其實,老劉就是參考小林Coding的資料,猛補的電腦網路和作業系統,從此老劉亂殺。
Linux相關知識點
這方面老劉面試過程中問過最多的就是select、poll、epoll的區別以及實現,老劉這方面推薦看鳥叔私房菜。
MySQL資料庫
補充:MySQL最常考的題是MySQL索引為什麼要用B+樹?
Java基礎知識
這塊老劉建議大家直接上b站看尚矽谷的java基礎影片,老劉怎麼講都沒有別的講的好,專業人干專業事,老劉主要精力放在大數據組件這塊。
大數據組件知識點
大數據組件有很多很多,老劉講述一些學習路線,並不會講述詳細知識點,詳細知識點以後在慢慢補充(如有遺漏,請批評指正)。
大數據常見組件包括:HDFS、MapReduce、YARN、Zookeeper、Kafka、Hive、HBase、Flume和Sqoop和Azkaban、Spark、Flink。
分散式存儲系統HDFS
-
Hadoop是什麼?什麼是分散式?
-
什麼是HDFS?HDFS怎麼用?有哪些命令?記住一些基礎的就行了,例如查看、創建、上傳、下載、修改、刪除。
-
數據塊的概念
-
HDF體系結構
-
HDFS心跳機制、負載均衡、安全模式
-
HDFS讀寫流程以及容錯機制
-
namenode元數據管理
-
block設計為128M的原因
-
HDFS優點和缺點
-
HDFS和SQL區別
-
機架感知以及節點距離計算
-
HDFS1.0 2.0 3.0區別
-
HDFS小文件的影響
如果還有時間,可以看看HDFS源碼,它的啟動流程以及HDFS NameNode的雙緩衝機制(能夠自己寫出來)
分散式計算框架MapReduce
-
MapReduce是什麼?
-
掌握MapReduce最常見的例子:統計一篇文章每個單詞出現的總次數
-
MapReduce原理、最核心的Shuffle詳細過程
-
序列化和反序列化
-
數據壓縮
-
MapReduce InputFormat過程 OutputFormat過程
-
MapReduce數據傾斜是什麼?怎麼判斷是否存在數據傾斜?如何減緩數據傾斜?
資源調度系統YARN
-
YARN是什麼?
-
YARN架構
-
YARN運行原理
-
YARN調度器
分散式相關原理
-
分散式的發展
-
分散式事務:2PC和3PC
-
分散式一致性演算法:Paxos演算法和ZAB協議
-
鴿巢原理
-
Quorum NWR機制
-
CAP理論
-
BASE理論
分散式協調框架ZooKeeper
-
什麼是ZooKeeper?為什麼要用ZooKeeper?怎麼用ZooKeeper?
-
ZooKeeper命令行、java編程
-
基本概念和操作
-
ZooKeeper工作原理
-
HDFS HA方案
-
ZooKeeper集群架構、讀寫流程
-
leader選舉、ZAB演算法
-
ZooKeeper狀態同步
分散式數據倉庫Hive
-
hive是什麼?
-
資料庫和數據倉庫的區別
-
架構原理
-
互動式方式
-
數據類型和DDL語法操作
-
數據導入方式和數據導出方式
-
創建分區表和使用方式
-
靜態分區和動態分區
-
分桶表作用
-
select查詢語句
-
hive表的數據壓縮和文件存儲格式
-
hive的自定義UDF函數
-
hive如何優化
-
如何避免或減輕數據傾斜
分散式列式資料庫HBase
-
HBase是什麼?怎麼用?
-
HBase shell 命令基本操作
-
HBase整體架構
-
HBase表的數據模型
-
HBase的數據存儲原理
-
HBase讀、寫數據流程
-
HBase的flush、compact機制
-
region 拆分機制
-
HBase表的預分區
-
region 合併
-
HBase與Hive的對比
-
HBase協處理器
-
HBase表的rowkey設計、熱點
-
HBase的數據備份、二級索引
分散式消息系統Kafka
-
為什麼有消息系統
-
Kafka核心概念、集群架構、集群啟動和停止、命令行的使用、生產者和消費者api程式碼開發
-
kafka分區策略、文件存儲機制
-
為什麼Kafka速度那麼快
-
Kafka的內核原理之ISR-HW-LEO機制
-
producer消息發送原理 、consumer消費原理、consumer消費者Rebalance策略
-
kafka監控工具安裝和使用
日誌採集框架Flume
-
Flume是什麼
-
Flume的架構
-
Flume採集系統結構
同步MySQL增量數據工具Canal
-
mysql主備複製實現原理
-
mysql二進位文件格式
-
Canal概念、工作原理、架構設計
數據遷移工具Sqoop
-
sqoop的核心概念
-
sqoop的架構原理
-
sqoop的導入、導出
工作流調度器Azkaban
-
為什麼需要工作流調度系統
-
Azkaban的核心概念
-
Azkaban的架構原理
-
Azkaban的安裝和使用
記憶體計算框架Spark
-
spark是什麼?有什麼用?怎麼用?
-
spark-shell的使用、通過IDEA開發spark程式
-
spark的RDD是什麼?有什麼用?它的五大屬性是什麼?怎麼創建?運算元分類?常見的運算元操作有哪些?
-
RDD的依賴關係、lineage(血統)、RDD的快取機制、RDD的checkpoint機制、DAG有向無環圖的生成、DAG如何劃分stage
-
spark運行架構、任務的提交、共享變數、application、job、stage、task之間的關係
-
spark on yarn原理和機制、collect 運算元操作剖析
-
任務中資源參數剖析、任務的調度模式、任務的分配資源策略、shuffle原理分析
-
sparksql是什麼?有什麼用?DataFrame是什麼?常用操作有哪些?DataSet是什麼?
-
Spark應用程式性能優化、基於Spark記憶體模型調優、數據傾斜原理和現象分析
-
sparkStreaming實時模組
實時計算框架Flink
-
Flink基本原理:是什麼?怎麼用?
-
Flink常用數據源
-
常見Transform操作、常見sink操作、DataSet運算元操作
-
Flink架構以及任務如何提交到集群
-
Flink的State知識、三種State Backend
-
Flink checkpoint和savepoint原理以及重啟策略
-
Flink的waterMark的機制
-
Flink window的類型和常用方法
老劉秋招大致就記了這麼多東西,如有遺漏,請多多批評指正!
總結
看到大數據組件這麼多,可能會有人問這麼多東西看得完嗎?說實話東西確實多,但是大數據開發組件就是前期可能困難點,因為很多東西沒有接觸過,老劉前期學習過程中非常痛苦,但把HDFS、MapReduce、YARN學習完之後,像打通任督二脈一樣,後面內容學得越來越順利。同時在學習過程中,要多看看牛客大數據開發面經,看看有沒有哪些知識點忽略了,查漏補缺是必須的!
老劉是研二開始學這些東西的,當時都沒有這些學習路線,全是老劉在網上各種找,各種總結,最後才知道應該如何學習大數據開發。因為要學的東西特別多,老劉於是每天早上早起一點,多背一點知識點,晚上遲點睡,把知識點鞏固一遍,日積月累終於從量變到質變。就像我持續關注的大佬阿秀說的慢慢學、慢慢看,慢慢的就會有收穫了。
笨鳥先飛,勤能補拙,從小就被教育這些東西是有用的,特別是對於老劉這種非科班雙非無實習無項目的平常人。
最後,送給大家一句話,挺住就意味著一切,加油各位!