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