#### 先說些廢話 作為一個全棧開發工作者,曾經對公司專職的大數據開發有著濃厚的興趣,所以嘗試學習大數據開發所需要的各種技術棧。 本文就是我在學習過程中記錄下,所遇到的一些大數據面試的提問,僅供參考。 當然,因為時間精力有限,並非所有的問題我都去記錄了答案,如果您不瞭解某些問題或者不認可我記錄的解 ...
先說些廢話
作為一個全棧開發工作者,曾經對公司專職的大數據開發有著濃厚的興趣,所以嘗試學習大數據開發所需要的各種技術棧。
本文就是我在學習過程中記錄下,所遇到的一些大數據面試的提問,僅供參考。
當然,因為時間精力有限,並非所有的問題我都去記錄了答案,如果您不瞭解某些問題或者不認可我記錄的解答,可以帶著問題百度或者問ChatCPT,相信會給您留下更深刻的印象。
最後,讀者可以把本文當作模擬面試的提綱,歡迎各位在評論區交流,大家一起成長,努力變得更強!!!
高頻基礎知識點
執行過程
- MapReduce 的執行過程,如何進行一個文件的計算,shuffle的過程(不需要手寫MapReduce或者用java寫MapReduce)
- HDFS 的讀寫流程
- Yarn 的任務提交流程,如何查看任務日誌和報錯信息
- Hive 的執行過程(Hive SQL 如何解析成MapReduce的)
- Spark 任務的執行過程
- Spark SQL 的底層執行過程
Linux
- 如何查看記憶體,CPU占用
- Shell腳本如何定義函數調用
- Shell腳本第一行:
#!/bin/bash
的含義- 第一行的內容指定了shell腳本解釋器的路徑,而且這個指定路徑只能放在文件的第一行
- 第一行寫錯或者不寫時,系統會有一個預設的解釋器進行解釋
- Linux腳本授權是什麼?Linux授權命令是什麼?
chmod [{ugoa}{+-=}{rwx}] [文件或目錄]
chmod [mode=421] [文件或目錄]
- Shell標準輸出和標準錯誤是什麼?
- 工作中常用的Linux命令有哪些?
MySQL
- sql的執行計劃,執行錯誤報警機制
- 索引有什麼優缺點
- 什麼時候會導致索引失效
- 如果我給一張表的所有欄位添加索引會有什麼樣的問題
- 如何進行sql調優 高頻
Hadoop(HDFS/MapReduce/Yarn)
- Haddop3對於Hadoop2有哪些新特性
- HDFS 常用命令有哪些
- 工作中遇到 MapReduce 流程的相關問題如何排查
- 其他問題彙總
Hive
- 工作中如何進行Hive優化 高頻
- Hive中有任務跑的時間比較長,怎麼優化
- Hive任務處理過程中遇到過什麼樣的問題
- Hive SQL 查詢比較慢(數據傾斜),怎麼處理
- Hive的參數設置用過哪些,有什麼作用
- Hive中表關聯方式join的分類、用法、應用場景
- 什麼時候會走MapJoin
- 什麼情況下會產生Hive小文件,小文件有什麼危害
- Hive的查詢過程,哪些方法可以提高查詢效率 變相的問優化
- Hive的視窗函數,常用視窗函數,怎麼使用
- 視窗函數
row_number
、rank
、dense_rank
之間的區別row_number是行號,不會重覆
rank數據相同的,給出併列排名,但是會跳躍
dense_rank類似於rank,但不會跳躍
hive視窗函數之排名函數row_number、rank和dense_rank
Hive視窗函數保姆級教程
Hive視窗函數/分析函數詳解 - 如何用視窗函數去重
- 視窗函數
- Hive SQL的數據去重方式
- distinct、groupby、row_number
- hive中三種去重的方法
- 項目中Hive有多少表
- Hive查詢組件Impala瞭解嗎?簡單介紹下
- Hive中的行列轉換,除了case when,還有別的方法嗎
- 行轉列:
collect_set()
、collect_list()
、concat_ws()
- 列轉行:
explode()
、split()
、LATERAL VIEW
- Hive sql 行列轉換(行轉列,列轉行)
- 行轉列:
- Hive中內部表和外部表的區別?內部表和外部表如果刪除了元數據是由誰來維護?元數據的存儲位置和管理者是誰
- 從創建表和刪除表兩個方面說明
- metastore,master節點上
- mysql,metastore
- Hive分區和分桶的區別?分桶的原理?分區可以提高查詢效率嗎?分區越多越好嗎
- MR中:按照key的hash值去模除以reductTask的個數
- Hive中:按照分桶欄位的hash值去模除以分桶的個數
- 縮小數據查詢範圍,提高查詢效率,但是不是分區越多越好
- Hive中如果有過多的分區,由於底層是存儲在HDFS上,HDFS上只用於存儲大文件而非小文件,因為過多的分區會增加NameNode的負擔
- Hive SQL會轉化為MapReduce, MapReduce會轉化為多個task,過多小文件的話,每個文件一個task,每個taskー個JVM實例,JVM的開啟與銷毀會降低系統效率
- 合理的分區不應該有過多的分區和文件目錄,並且每個目錄下的文件應該足夠大
- Hive中分區是否越多越好?
- 如何反查哪條Hive SQL執行較慢?
- Hive查詢在工作中遇到什麼樣的難點?如何解決?
Hbase
- Hbase查詢用的多嗎,有沒有做過優化?
- 萬字長文詳解HBase讀寫性能優化
- Hbase快速入門(超精煉總結)
- 大多數key-value資料庫是為了高頻寫入而設計的,而不是為了高速讀取!用來做高性能查詢完全是個方向性錯誤
- Hbase查詢過濾器用過嗎,簡單介紹下
- RowFilter、FamilyFilter、QualifierFilter、ValueFilter
- SingleColumnValueFilter、SingleColumnValueExcludeFilter、PrefixFilter、PageFilter
- 多過濾器綜合查詢FilterList
- HBase過濾器查詢
- 用戶畫像的構建是Hbase做的嗎?特征值怎麼提取的?
- 項目Hbase的RowKey是如何設計的?
Scala
- Scala有什麼特性
- Scala的class和case class在使用層面有什麼區別
- Scala的Option類型的作用與使用方法
- Scala的泛型斜變逆變
- Scala的函數柯里化瞭解嗎?優點是什麼?
- Scala的隱式函數、隱式轉換
- Scala用過哪些函數
- Scala中的String是可變的嗎?
- String是一個不可變的對象,所以該對象不可被修改,這就意味著你如果修改字元串就會產生一個新的字元串對象,但其他對象,如數組就是可變的對象
- String對象是不可變的,如果你需要創建一個可以修改的字元串,可以使用
String Builder
類 - Scala:字元串
- Scala是否可以多繼承
- Scala中的多重繼承由特質(trait)實現並遵循線性化規則
- 在多重繼承中,如果一個特質已經顯式擴展了一個類,則混入該特質的類必須是之前特質混入的類的子類
- 這意味著當混入一個已擴展了別的類的特質時,他們必須擁有相同的父類
Spark
- 你瞭解Spark的序列化嗎?Spark提供了哪些序列化類?
- Spark中RDD持久化瞭解過嗎?
- Spark運算元分類?常用運算元?怎麼使用的? 高頻
- Spark的惰性電腦制瞭解過嗎?(懶載入)
- 工作中如何進行Spark優化? 高頻
- Spark的Stage和Task的劃分?Task數目由什麼決定?
- Spark的寬窄依賴瞭解過嗎?
- Spark如何查看日誌和排查報錯問題?
- 工作中跟有沒有遇到到Spark數據傾斜,如何處理的?
- Spark Streaming怎麼保證精準的消費?
- Spark在工作中遇到什麼樣的難點?如何解決?
Spark面試資料合集
Kafka
- 簡單介紹下kafka的核心概念及個人理解
- Kafka在數據傳輸過程中遇到重覆數據怎麼處理
- Kafka在使用過程中如何保證數據不丟失
- Kafka中的ack含義是什麼
Kafka面試八問
大廠面試官竟然這麼愛問Kafka,一連八個Kafka問題把我問蒙了?
- 為什麼要使用Kafka?
- Kafka消費過的消息如何再消費?
- Kafka的數據是放在磁碟上還是記憶體上,為什麼速度會快?
- Kafka數據怎麼保障不丟失?
- 採集數據為什麼選擇Kafka?
- Kafka重啟是否會導致數據丟失?
- Kafka宕機瞭如何解決?
- 為什麼Kafka不支持讀寫分離?
Java
- Java的io流分類
- Java怎麼寫事務
- MyBatis怎麼使用事務
- Java的內部類和外部類
- 在Java中,可以將一個類定義在另一個類裡面或者一個方法裡面,這樣的類稱為內部類
- 內部類一般來說包括這四種:成員內部類、局部內部類、匿名內部類和靜態內部類
- 靜態成員內部類:使用static修飾類
- 非靜態成員內部類:未用static修飾類,在沒有說明是靜態成員內部類時,預設成員內部類指的就是非靜態成員內部類
- Java中全局變數、靜態全局變數、靜態局部變數和局部變數的區別
- Java中重寫與重載之間的區別
- Java中的final關鍵字
- Java的jvm瞭解嗎
- 多線程,線程啟動個數如何確定?最多多少?
Flink
- Flink-cdc介紹一下
- Flink和Spark的區別是什麼?
- 你們之前使用Spark做實時,後來為什麼使用Flink了?
- Flink的windowapi的分類介紹一下
- Flink常用運算元介紹一下
- Flink的cep瞭解麽?怎麼使用的?
- Flink的水位線瞭解嗎?可以具體講講嗎?
- 你們Flink主要使用api開發還是sql開發?
- 能講講Flink雙流join是如何實現的嗎?
Flink面試資料合集
clickhouse
- 你們有有過clickhouse做join嗎?如何保證秒級延遲?
涉及到項目和數倉的問題
- 簡單介紹一下你們項目中的業務吧
- 能結合業務說說你們的數倉怎麼搭建的嗎?你負責哪些模塊?
- 你們項目中的人員怎麼分配的?
- 你們的
主題
是根據什麼來劃分,為什麼這麼劃分? - 你們源數據大概多少張表?
- 你們的日誌數據到建立
事實表
的過程中,主要做了什麼? - 你們的
維度層
是怎麼建設的 - 如果在解析日誌文件時遇到很多的硬編碼,如何使用維度去解決?
- 你們的項目中有多少個
指標
?負責過多少個?怎麼編寫的? - 如果指標出現同義不同名的情況如何解決?
- 阿裡的
oneData體系
有瞭解嗎? - 你們如何保證
數據質量
的?你日常遇到最多的數據質量
問題是什麼? - 你的項目中
離線任務
有多少個?任務執行的時間是什麼時候? - 你的項目中
數據量,日活,漏斗分析
大概是多少?以及其他分析的方向? - 你們項目中的
業務數據清洗
是怎麼做的? - 數倉的
整體架構
是什麼樣的?數倉是如何分層
的? - 介紹一下項目中的
數據流向
- 介紹一下項目中
處理後的數據用途
? - 數倉中的
增量表
和全量表
分別是怎麼做的?有沒有用過拉鏈表
? - 工作中有沒有遇到的
數據傾斜
?如何處理的? - 工作中有沒有遇到過
斷點續傳
的問題?怎麼處理的 這個問題具體技術具體處理 - 你的
數據建模經驗
介紹一下? Java框架
在你們項目中的應用?- 你在實時開發的過程中遇到什麼問題?如何解決的?
- 你們的實時模型是如何進行優化的?怎麼評估它是否是一個優質的模型?
- 你們的
任務監控
有做過嗎?主要監控什麼? - 你們如何保證
數據的準確性
? - 埋點數據缺失怎麼處理,埋點數據相關的表示如何設計的?
- 零點漂移如何解決?
- 有做過用戶路徑模型嗎?每條路徑的轉化率是多少?(是不是類似頁面單跳率那種)
- 你們的OLAP引擎主要用的什麼?為什麼這樣選型?
- 能聊聊
端到端的一致性
和精準一次消費
嗎?
工作內容的問題
- 你們的需求周期一般是多久?拿到需求之後怎麼分析?
- 在完成需求的過程中,有沒有考慮過數倉的通用性,你們是如何體現的?
- 你在工作中的最大收穫是什麼,帶給你什麼樣的能力?
- 你們的工作強度怎麼樣,能接受加班嗎?
- 如果一周內讓你做十個緊急的需求,你會怎麼辦?
- 你們部門之間是直接進行對接嗎?
- 有沒有反駁過產品提出的需求,如果不合理怎麼辦?
各種組件需要學到什麼樣的程度
hadoop學習到什麼樣的程度
- hdfs、mapreduce、yarn 基本原理即可
- 各種面試基本題完成即可
- MapReduce的執行過程,如何進行一個文件的計算,shuffle的過程(不需要手寫mapreduce或者用java寫mapreduce)
- HDFS的讀寫流程
- Yarn的任務提交流程,如何查看任務日誌和報錯信息
- 大多數公司可能都進入spark階段了
spark學習到什麼樣的程度
- 主要為了優化mapreduce2的一些問題,利用記憶體計算,減少磁碟IO
- spark streaming + hbase 離線實時 -> 使用flink搭建一整套實時
- 熟悉spark開發的api和常用的運算元
- 熟悉spark調優
- spark的應用:批處理,流處理流計算(flink和sparkstreaming),數據分析,圖形計算
spark面試重點
- 一些八股文知識點,基本原理,是高頻且必須熟練知曉的,核心原理的流程和圖
- spark常見報錯的解決方案
- real spark衝突怎麼解決
- om怎麼處理,driver的om和excute的om分別怎麼處理
- 參數調優,集群層面調優,應用層面調優
- 為什麼這麼做
- 有沒有更好的方案
- sparksql調優
- 調優場景
- 怎麼發現問題的
- 發現問題後怎麼定位問題的
- 定位問題後怎麼解決的
- 解決之後達到什麼樣的一個效果
- 還有哪些更好的一些優化方案嗎
- 根據業務場景現場寫sql,根據數倉的理論優化sql
- 常規的業務邏輯,join,for函數,截取字元串,嵌套多個高級函數
- 企業開發使用場景的解決方案
- udf管理:統一倉庫管理還是自己提交,怎麼解決相同含義的sql function被重覆的udf提交
- thift server怎麼用的,怎麼用的,怎麼解決多租戶,怎麼解決許可權,怎麼解決負載均衡
- spark平臺和二次開發,源碼,遇到的問題詳細問
- 面試流程相關
- 10-20分鐘問項目
- 20分鐘問編程基礎
- 20分鐘問組件
- spark問20分鐘左右
spark暢談
- 小公司大部分業務場景是離線開發,實時場景也較少
- 大公司80%離線,20%實時
- sparkstreaming批處理比flink批處理更快,性能差百分之五十左右,spark使用門檻較低
- 入職後可以想老員工討教經驗,核心組件
- 博客快速瀏覽一些內容
- 官網提供的一些例子
未來技術趨勢
附錄
面試資料總結
大廠面試總結
我是 fx67ll.com,如果您發現本文有什麼錯誤,歡迎在評論區討論指正,感謝您的閱讀!
如果您喜歡這篇文章,歡迎訪問我的 本文github倉庫地址,為我點一顆Star,Thanks~