關注個人公衆號,後臺回覆【JAVAPDF】獲取200頁面試題!5萬人關注的大數據成神之路,不來了解一下嗎?5萬人關注的大數據成神之路,真的不來了解一下嗎?5萬人關注的大數據成神之路,肯定真的不來了解一下嗎?java
願讀到這篇文章的技術人早日明白而且脫離技術自己,早登彼岸。一切技術最終只是雕蟲小技。面試
本系列主題是大數據開發面試指南,旨在爲你們提供一個大數據學習的基本路線,完善數據開發的技術棧,以及咱們面試一個大數據開發崗位的時候,哪些東西是重點考察的,這些公司更但願面試者具有哪些技能。本文不會對某一個知識點進行詳細的展開,後續會陸續出專題文章,但願讀者能當成一個學習或者複習的大綱,用以查漏補缺。算法
Java基礎篇整個大數據開發技術棧咱們從實時性的角度來看,主要包含了離線計算和實時計算兩大部分,而整個大數據生態中的框架絕大部分都是用 Java 開發或者兼容了 Java 的 API 調用,那麼做爲基於 JVM 的第一語言 Java 就是咱們繞不過去的坎,Java 語言的基礎也是咱們閱讀源碼和進行代碼調優的基礎。Java 基礎主要包含如下部分:數據庫
Java 的面向對象Java 語言的三大特徵:封裝、繼承和多態Java 語言數據類型Java 的自動類型轉換,強制類型轉換String 的不可變性,虛擬機的常量池,String.intern() 的底層原理Java 語言中的關鍵字:final、static、transient、instanceof、volatile、synchronized的底層原理Java 中經常使用的集合類的實現原理:ArrayList/LinkedList/Vector、SynchronizedList/Vector、HashMap/HashTable/ConcurrentHashMap 互相的區別以及底層實現原理動態代理的實現方式編程
CAS、樂觀鎖與悲觀鎖、數據庫相關鎖機制、分佈式鎖、偏向鎖、輕量級鎖、重量級鎖、monitor鎖優化、鎖消除、鎖粗化、自旋鎖、可重入鎖、阻塞鎖、死鎖死鎖的緣由死鎖的解決辦法CountDownLatch、CyclicBarrier 和 Semaphore 三個類的使用和原理緩存
併發和並行的區別線程與進程的區別線程的實現、線程的狀態、優先級、線程調度、建立線程的多種方式、守護線程本身設計線程池、submit() 和 execute()、線程池原理爲何不容許使用 Executors 建立線程池死鎖、死鎖如何排查、線程安全和內存模型的關係ThreadLocal 變量Executor 建立線程池的幾種方式:newFixedThreadPool(int nThreads)newCachedThreadPool()newSingleThreadExecutor()newScheduledThreadPool(int corePoolSize)newSingleThreadExecutor()ThreadPoolExecutor 建立線程池、拒絕策略線程池關閉的方式安全
JUC 包中 List 接口的實現類:CopyOnWriteArrayListJUC 包中 Set 接口的實現類:CopyOnWriteArraySet、ConcurrentSkipListSetJUC 包中 Map 接口的實現類:ConcurrentHashMap、ConcurrentSkipListMapJUC包中Queue接口的實現類:ConcurrentLinkedQueue、ConcurrentLinkedDeque、ArrayBlockingQueue、LinkedBlockingQueue、LinkedBlockingDeque網絡
進階篇部分是對 Java 基礎篇的補充,這部份內容是咱們熟讀大數據框架的源碼必備的技能,也是咱們在面試高級職位的時候的面試重災區。多線程
JVM 內存結構class 文件格式、運行時數據區:堆、棧、方法區、直接內存、運行時常量池堆和棧區別Java 中的對象必定在堆上分配嗎?Java 內存模型計算機內存模型、緩存一致性、MESI 協議、可見性、原子性、順序性、happens-before、內存屏障、synchronized、volatile、final、鎖垃圾回收GC 算法:標記清除、引用計數、複製、標記壓縮、分代回收、增量式回收、GC 參數、對象存活的斷定、垃圾收集器(CMS、G一、ZGC、Epsilon)JVM 參數及調優-Xmx、-Xmn、-Xms、Xss、-XX:SurvivorRatio、-XX:PermSize、-XX:MaxPermSize、-XX:MaxTenuringThresholdJava 對象模型oop-klass、對象頭HotSpot即時編譯器、編譯優化虛擬機性能監控與故障處理工具jps、jstack、jmap、jstat、jconsole、 jinfo、 jhat、javap、btrace、TProfiler、Arthas類加載機制classLoader、類加載過程、雙親委派(破壞雙親委派)、模塊化(jboss modules、osgi、jigsaw)架構
用戶空間以及內核空間Linux 網絡 I/O 模型:阻塞 I/O (Blocking I/O)、非阻塞 I/O (Non-Blocking I/O)、I/O 複用(I/O Multiplexing)、信號驅動的 I/O (Signal Driven I/O)、異步 I/O靈拷貝(ZeroCopy)BIO 與 NIO 對比緩衝區 Buffer通道 Channel反應堆選擇器AIO
RPC 的原理編程模型經常使用的 RPC 框架:Thrift、Dubbo、SpringCloudRPC 的應用場景和與消息隊列的差異RPC 核心技術點:服務暴露、遠程代理對象、通訊、序列化
瞭解 Linux 的經常使用命令遠程登陸上傳下載系統目錄文件和目錄操做Linux 下的權限體系壓縮和打包用戶和組Shell 腳本的編寫管道操做
分佈式中的一些基本概念:集羣(Cluster)、負載均衡(Load Balancer)等分佈式系統理論基礎:一致性、2PC 和 3PC分佈式系統理論基礎:CAP分佈式系統理論基礎:時間、時鐘和事件順序分佈式系統理論進階:Paxos分佈式系統理論進階:Raft、Zab分佈式系統理論進階:選舉、多數派和租約分佈式鎖的解決方案分佈式事務的解決方案分佈式 ID 生成器解決方案
Netty 是當前最流行的 NIO 框架,Netty 在互聯網領域、大數據分佈式計算領域、遊戲行業、通訊行業等得到了普遍的應用,業界著名的開源組件只要涉及到網絡通訊,Netty 是最佳的選擇。關於 Netty 咱們要掌握:Netty 三層網絡架構:Reactor 通訊調度層、職責鏈 PipeLine、業務邏輯處理層
Netty 的線程調度模型
序列化方式
鏈路有效性檢測
流量整形
優雅停機策略
Netty 對 SSL/TLS 的支持
Netty 的源碼質量極高,推薦對部分的核心代碼進行閱讀:
Netty 的 Buffer
Netty 的 Reactor
Netty 的 Pipeline
Netty 的 Handler 綜述
Netty 的 ChannelHandler
Netty 的 LoggingHandler
Netty 的 TimeoutHandler
Netty 的 CodecHandler
Netty 的 MessageToByteEncoder
Hadoop 體系是咱們學習大數據框架的基石,尤爲是 MapReduce、HDFS、Yarn 三駕馬車基本墊定了整個數據方向的發展道路。也是後面咱們學習其餘框架的基礎,關於 Hadoop 自己咱們應該掌握哪些呢?
掌握 MapReduce 的工做原理
能用 MapReduce 手寫代碼實現簡單的 WordCount 或者 TopN 算法
掌握 MapReduce Combiner 和 Partitioner的做用
熟悉 Hadoop 集羣的搭建過程,而且能解決常見的錯誤
熟悉 Hadoop 集羣的擴容過程和常見的坑
如何解決 MapReduce 的數據傾斜
Shuffle 原理和減小 Shuffle 的方法
十分熟悉 HDFS 的架構圖和讀寫流程
十分熟悉 HDFS 的配置
熟悉 DataNode 和 NameNode 的做用
NameNode 的 HA 搭建和配置,Fsimage 和 EditJournal 的做用的場景
HDFS 操做文件的經常使用命令
HDFS 的安全模式
Yarn 的產生背景和架構
Yarn 中的角色劃分和各自的做用
Yarn 的配置和經常使用的資源調度策略
Yarn 進行一次任務資源調度的過程
Hive 是一個數據倉庫基礎工具,在 Hadoop 中用來處理結構化數據。它架構在 Hadoop 之上,總歸爲大數據,並使得查詢和分析方便。Hive 是應用最普遍的 OLAP 框架。Hive SQL 也是咱們進行 SQL 開發用的最多的框架。關於 Hive 你必須掌握的知識點以下:HiveSQL 的原理:咱們都知道 HiveSQL 會被翻譯成 MapReduce 任務執行,那麼一條 SQL 是如何翻譯成 MapReduce 的?
Hive 和普通關係型數據庫有什麼區別?
Hive 支持哪些數據格式
Hive 在底層是如何存儲 NULL 的
HiveSQL 支持的幾種排序各表明什麼意思(Sort By/Order By/Cluster By/Distrbute By)
Hive 的動態分區
HQL 和 SQL 有哪些常見的區別
Hive 中的內部表和外部表的區別
Hive 表進行關聯查詢如何解決長尾和數據傾斜問題
HiveSQL 的優化(系統參數調整、SQL 語句優化)
咱們在提到列式數據庫這個概念的時候,第一反應就是 Hbase。HBase 本質上是一個數據模型,相似於谷歌的大表設計,能夠提供快速隨機訪問海量結構化數據。它利用了 Hadoop 的文件系統(HDFS)提供的容錯能力。它是 Hadoop 的生態系統,提供對數據的隨機實時讀/寫訪問,是 Hadoop 文件系統的一部分。咱們能夠直接或經過 HBase 的存儲 HDFS 數據。使用 HBase 在 HDFS 讀取消費/隨機訪問數據。 HBase 在 Hadoop 的文件系統之上,並提供了讀寫訪問。HBase 是一個面向列的數據庫,在表中它由行排序。表模式定義只能列族,也就是鍵值對。一個表有多個列族以及每個列族能夠有任意數量的列。後續列的值連續地存儲在磁盤上。表中的每一個單元格值都具備時間戳。總之,在一個 HBase:表是行的集合、行是列族的集合、列族是列的集合、列是鍵值對的集合。關於 Hbase 你須要掌握:Hbase 的架構和原理
Hbase 的讀寫流程
Hbase 有沒有併發問題?Hbase 如何實現本身的 MVVC 的?
Hbase 中幾個重要的概念:HMaster、RegionServer、WAL 機制、MemStore
Hbase 在進行表設計過程當中如何進行列族和 RowKey 的設計
Hbase 的數據熱點問題發現和解決辦法
提升 Hbase 的讀寫性能的通用作法
HBase 中 RowFilter 和 BloomFilter 的原理
Hbase API 中常見的比較器
Hbase 的預分區
Hbase 的 Compaction
Hbase 集羣中 HRegionServer 宕機如何解決
Kafka 是最初由 Linkedin 公司開發,是一個分佈式、支持分區的(partition)、多副本的(replica)的分佈式消息系統,它的最大的特性就是能夠實時的處理大量數據以知足各類需求場景:好比基於 Hadoop 的批處理系統、低延遲的實時系統、Spark 流式處理引擎,Nginx 日誌、訪問日誌,消息服務等等,用 Scala 語言編寫,Linkedin 於 2010 年貢獻給了 Apache 基金會併成爲頂級開源項目。Kafka 或者相似 Kafka 各個公司本身造的消息'輪子'已是大數據領域消息中間件的事實標準。目前 Kafka 已經更新到了 2.x 版本,支持了相似 KafkaSQL 等功能,Kafka 不知足單純的消息中間件,也正朝着平臺化的方向演進。關於 Kafka 咱們須要掌握:Kafka 的特性和使用場景
Kafka 中的一些概念:Leader、Broker、Producer、Consumer、Topic、Group、Offset、Partition、ISR
Kafka 的總體架構
Kafka 選舉策略
Kafka 讀取和寫入消息過程當中都發生了什麼
Kakfa 如何進行數據同步(ISR)
Kafka 實現分區消息順序性的原理
消費者和消費組的關係
消費 Kafka 消息的 Best Practice(最佳實踐)是怎樣的
Kafka 如何保證消息投遞的可靠性和冪等性
Kafka 消息的事務性是如何實現的
如何管理 Kafka 消息的 Offset
Kafka 的文件存儲機制
Kafka 是如何支持 Exactly-once 語義的
一般 Kafka 還會要求和 RocketMQ 等消息中間件進行比較
Spark 是專門爲大數據處理設計的通用計算引擎,是一個實現快速通用的集羣計算平臺。它是由加州大學伯克利分校 AMP 實驗室開發的通用內存並行計算框架,用來構建大型的、低延遲的數據分析應用程序。它擴展了普遍使用的 MapReduce 計算模型。高效的支撐更多計算模式,包括交互式查詢和流處理。Spark 的一個主要特色是可以在內存中進行計算,即便依賴磁盤進行復雜的運算,Spark 依然比 MapReduce 更加高效。Spark 生態包含了:Spark Core、Spark Streaming、Spark SQL、Structured Streming 和機器學習相關的庫等。學習 Spark 咱們應該掌握:(1)Spark Core:Spark的集羣搭建和集羣架構(Spark 集羣中的角色)
Spark Cluster 和 Client 模式的區別
Spark 的彈性分佈式數據集 RDD
Spark DAG(有向無環圖)
掌握 Spark RDD 編程的算子 API(Transformation 和 Action 算子)
RDD 的依賴關係,什麼是寬依賴和窄依賴
RDD 的血緣機制
Spark 核心的運算機制
Spark 的任務調度和資源調度
Spark 的 CheckPoint 和容錯
Spark 的通訊機制
Spark Shuffle 原理和過程
(2)Spark Streaming:原理剖析(源碼級別)和運行機制
Spark Dstream 及其 API 操做
Spark Streaming 消費 Kafka 的兩種方式
Spark 消費 Kafka 消息的 Offset 處理
數據傾斜的處理方案
Spark Streaming 的算子調優
並行度和廣播變量
Shuffle 調優
(3)Spark SQL:Spark SQL 的原理和運行機制
Catalyst 的總體架構
Spark SQL 的 DataFrame
Spark SQL 的優化策略:內存列式存儲和內存緩存表、列存儲壓縮、邏輯查詢優化、Join 的優化(4)Structured StreamingSpark 從 2.3.0 版本開始支持 Structured Streaming,它是一個創建在 Spark SQL 引擎之上可擴展且容錯的流處理引擎,統一了批處理和流處理。正是 Structured Streaming 的加入使得 Spark 在統一流、批處理方面能和 Flink 平起平坐。咱們須要掌握:Structured Streaming 的模型
Structured Streaming 的結果輸出模式
事件時間(Event-time)和延遲數據(Late Data)
窗口操做
水印
容錯和數據恢復
Spark Mlib:本部分是 Spark 對機器學習支持的部分,咱們學有餘力的同窗能夠了解一下 Spark 對經常使用的分類、迴歸、聚類、協同過濾、降維以及底層的優化原語等算法和工具。能夠嘗試本身使用 Spark Mlib 作一些簡單的算法應用。
Apache Flink(如下簡稱 Flink)項目是大數據處理領域最近冉冉升起的一顆新星,其不一樣於其餘大數據項目的諸多特性吸引了愈來愈多人的關注。尤爲是 2019 年初 Blink 開源將 Flink 的關注度提高到了史無前例的程度。那麼關於 Flink 這個框架咱們應該掌握哪些核心知識點?Flink 集羣的搭建
Flink 的架構原理
Flink 的編程模型
Flink 集羣的 HA 配置
Flink DataSet 和 DataSteam API
序列化
Flink 累加器
狀態 State 的管理和恢復
窗口和時間
並行度
Flink 和消息中間件 Kafka 的結合
Flink Table 和 SQL 的原理和用法
另外這裏重點講一下,阿里巴巴 Blink 對 SQL 的支持,在阿里雲官網上能夠看到,Blink 部分最引覺得傲的就是對 SQL 的支持,那麼 SQL 中最多見的兩個問題:1.雙流 JOIN 問題,2.State 失效問題也是咱們關注的重點。
本部分的算法包含兩個部分。第一部分是:面試中針對大數據處理的經常使用算法題;第二部分是:經常使用的機器學習和數據挖掘算法。咱們重點講第一部分,第二部分咱們學有餘力的同窗能夠去接觸一些,在面試的過程當中也能夠算是一個亮點。常見的大數據算法問題:兩個超大文件找共同出現的單詞
海量數據求 TopN
海量數據找出不重複的數據
布隆過濾器
bit-map
堆
字典樹
倒排索引
咱們先來看幾個典型的 BAT 招聘大數據開發工程師的要求:
以上三則招聘分別來自百度阿里和騰訊,那麼咱們把他們的要求分類概括:1~2 門語言基礎
紮實的後臺開發基礎
離線計算方向(Hadoop/Hbase/Hive 等)
實時計算方向(Spark/Flink/Kafka 等)
知識面更寬優先(對口經驗 + 其餘)
若是你是 Apache 頂級項目的 Committer 那麼恭喜你,你將會是各大公司競相挖角對象。咱們在寫簡歷時應該注意什麼?我曾經做爲面試官面試過不少人,我認爲一個比較優秀的簡歷應該包含:漂亮的排版,杜絕使用 word,格式化的模板,推薦使用 MarkDown 生成 PDF
不要堆砌技術名詞,不會的不瞭解的不要寫,不然你會被虐的體無完膚
1~2 個突出的項目經歷,不要讓你的簡歷看起來像Demo同樣淺顯
寫在簡歷上的項目我建議你要熟悉每個細節,即便不是你開發的也要知道是如何實現的
若是有一段知名企業的實習或者工做經歷那麼是很大的加分
技術深度和廣度?在技術方向,你們更喜歡一專多能,深度廣度兼具的同窗,固然這個要求已經很高了。可是最起碼應該作到的是,你用到的技術不只要熟悉如何使用,也應該要知曉原理。若是你曾經做爲組內的核心開發或者技術 leader 那麼要突出本身的技術優點和前瞻性,不只要熟悉使用如今已經有的輪子的優劣,也要對將來的技術發展有必定的前瞻性和預見性。如何投遞簡歷?最建議的方式是直接找到招聘組的負責人或者讓同窗或者同事內推。
歡迎掃碼關注個人公衆號,回覆【JAVAPDF】能夠得到一份200頁秋招面試題!