阿里,頭條,美團,快手大數據開發崗面試總結
從3月份開始,陸續面了阿里,頭條,美團,快手四家公司的大數據開發崗位,近20場面試面下來挺耗費腦力的,不過結果還行,除了頭條外,目前拿到了其他三家的offer,今天把還能記住的題目做個整理,整理是按技術分類的,因為確實記不太清哪一場問了哪些題了。
先說一下這幾場面試的整體感受,頭條和快手風格相似,每一面基本都有演算法或實現題,演算法主要是leetcode easy, middle難度的題,這跟你面試情況有關,可能項目上沒有亮點的演算法題會出的難一點。筆者刷題不多,也就100多道吧,還好沒有遇到太難的演算法,不過刷題還是平時沒事多刷刷的好,畢竟每次面試才突擊刷有點累,刷題也有助於開闊思維。實現題主要是讓你實現下HashMap,LRU,生產消費者模型,單例模式等,面試官通過這些可以看出你對數據結構的理解和程式碼實現能力。阿里和美團的話,演算法題不是很多,但會比較注重問項目里的亮點,我理解的亮點包括你開發或優化過比較有價值的功能,解決過複雜或有難度的問題等,這個需要自己根據做過的項目總結好。數倉的話SQL,建模理論問的比較多。
建議剛開始面試不要海投簡歷,可以先找一家練練手,面試過程中查漏補缺,不斷完善知識盲點,這些公司,你只要表現不是太差,一個部門面不過還可以面其他部門的。投簡歷可以在脈脈,拉鉤,boss直聘上找HR,內部員工內推,也可以通過獵頭投,不過獵頭參差不齊,好的獵頭會對公司在招的崗位給出詳細的介紹,這個尤其在後面你有多個offer做選擇時比較方便,你可以通過獵頭了解這些offer的利弊,不過好獵頭不好碰。
好了,下面開始羅列這次面試中遇到的面試問題,這些題沒有答案,不過會先給出一些我看過的書籍和課程。後續的文章中會對這些知識點進行總結,敬請關注。
1 Java基礎
- 說說Java里的多態什麼意思
- Java 里的final關鍵用過嗎
- 講講volatile關鍵字的作用,與synchronized關鍵字的不同
- 了解HashMap的內部結構嗎?自己實現一個HashMap
- HashMap、Hashtable、ConcurrentHashMap的原理與區別
- 用Java實現一個生產者消費者模型,可以用BlockingQueue阻塞隊列
- 了解哪些設計模式,實現一個單例模式
感言:做大數據開發,java基礎是必須的,一般一面,二面都會問到,java基礎答的不好,一般都不會給過。
推薦閱讀:
2 數據結構與演算法
演算法:
- 搜索旋轉排序數組,leetcode 33,中等難度
- 實現一個LRU快取,leetcode 146 ,中等難度
- 用兩個棧實現一個隊列,leetcode 232 , 簡單難度
- 給定一個非空的整數數組,返回其中出現頻率前 k 高的元素。Leetcode 347 , 中等難度
- 二叉樹的最近公共祖先, Leetcode 236 , 中等難度
感言:就記住了這幾個,大家也能看出來,基本都是leetcode上的題,刷題還是很有必要的。
刷題時建議先按分類刷,像二分查找,動態規劃都有一些固定的模式的。
數據結構:
- 布隆過濾器
- Bitmap
- B+樹
- LSM Tree
- 跳錶
- Hyperloglog
推薦閱讀:
強烈推薦極客時間王爭老師的《數據結構與演算法之美》課程,目前已有8萬多人購買,應該是極客時間購買人數最多的課程,有需要的可以掃下面二維碼購買。品質絕對優質,反正我讀了受益匪淺。比如講Redis的有序集合底層數據結構為什麼用跳錶時,老師會從二叉搜索樹,B+樹開始講起,讓你同時了解了這三種數據結構的異同和應用場景。
3 Hive
做大數據,Hive SQL也是必問的,大廠的ETL任務很多都是Hive SQL,主要問題如下:
- Hive row_number,rank兩個函數的區別
- Hive窗口函數怎麼設置窗口大小
- Hive order by,sort by,distribute by,cluster by 區別
- Hive map,reduce數怎麼設置
- Hive SQL數據傾斜有哪些原因?怎麼優化
- parquet數據格式內部結構了解嗎
- Hive數據選擇的什麼壓縮格式
- Hive SQL 如何轉化成MR任務的
- Hive 分桶了解嗎
- Hive的udf、udaf和udtf了解過嗎?自己有沒有寫過udf
- 怎麼驗證Hive SQL 的正確性
- lateral view explode關鍵字來拆分數組
- join操作底層的MapReduce是怎麼去執行的
SQL應用題:
- 一個login_in表,userid、login_time、ip,數據量很大,一個人可能有多條登錄數據,取出最近10個登錄的用戶。
- 還是login_in表,統計登錄的總條數( PV )和登錄的總人數 (UV)。
- 一個用戶好友表 userid , follow_list (該用戶的好友id數組)
A [B, C, D]
B [A, C]
C [D]
統計這個表有多少對好友
感言:這個主要考察你平時寫SQL多不多,數倉開發崗會比較在意SQL能力
推薦閱讀:
4 MapReduce&Spark
- MapReduce的作業流程,涉及到幾次排序
- Spark任務執行過程
- MapReduce Shuffle 和 Spark Shuffle的區別
- Spark的記憶體管理模型
- 講講Spark Shuffle
- Spark Shuffle bypass模型了解嗎
- Spark使用中遇到什麼問題,怎麼解決的
感言:MapReduce&Spark是主要的離線計算引擎,需要對任務調度流程和可能出現性能瓶頸的點熟悉,
懂得組件原理和調優,如果工作中遇到並解決過大數據工程性能問題會有加分
推薦閱讀:
MapReduce Shuffle 和 Spark Shuffle 原理概述
5 Spark Streaming&Flink
- Spark Streaming 與Flink的對比
- Flink怎麼做到Exactly Once
- Spark Streaming能做到Exactly Once語義嗎
- Flink的StateStore有哪些,工作中用過哪些
- 做過Flink記憶體調優嗎
- 遇到過OOM的情況嗎,怎麼處理的
- 講講Spark Streaming 與Flink的反壓機制
- Flink的窗口函數,時間機制,CheckPoint機制,兩階段提交
- Flink 雙流Join
- Flink State TTL怎麼設置
- Flink 維表關聯有哪些方式,數據量大時怎麼處理
其他一些應用題:
- 實時PV,UV統計
- 實時TOP N 統計
- 廣告曝光流和點擊流實時join
感言:不僅要對組件的原理清楚,還要實際做過實時相關的業務開發,面試官也會出一些他們場景的業務讓你說下你會怎麼設計,所以需要多關注些實時業務場景的應用實現。
推薦閱讀:
基於 Kafka + Flink + Redis 實現電商大屏實時計算
Flink基礎 | 深入理解Apache Flink核心技術
6 數據倉庫
- 你們公司數倉是怎麼構建的,怎麼做的分層
- 說說範式建模和維度建模的區別
- 說說星型模型和雪花模型的區別
- 設計一個統計各渠道用戶留存的模型
- 緩慢變化維怎麼處理
- 你們數據怎麼同步到數倉的,怎麼保證數據不丟失
- 數據品質怎麼控制
- 數據規範怎麼定義的
- 如果進行元數據管理
感言:數倉方法論的東西需要了解,數倉整體的構建理念要對,給一個業務需求,能夠給出合理的數倉構建模型。
推薦閱讀:
辨析BI、數據倉庫、數據湖和數據中台內涵及差異點(建議收藏)
7 Kafka
- 說說對kafka的了解
- Kafka基本原理說一下,和其他的MQ相比的優勢
- 講講Kafka的高階,低階消費者API的區別
- Kafka的ack有哪幾種
- Kafka 消費者怎麼從Kafka取數據的
- Kafka生產消費怎麼保證Exactly Once
- Kafka怎麼保證有序性的
- Kafka Controller是做什麼用的
- Kafka 多副本leader如何選舉
- Kafka 消費者組重平衡流程是怎樣的
- 新版和老版Kafka offset的管理有什麼不同
- 如何查看消費者的消費進度
推薦閱讀:
8 HBase
- HBase rowkey如何設計的
- 談談熱點問題以及如何解決
- 說下HBase的讀寫流程
- HBase使用過程中做過哪些優化
- HBase的Compaction機製作用
推薦閱讀:
9 Redis
- Redis 包含哪些數據結構
- Redis 有序集合的底層實現
- Redis 有哪幾種數據持久化方式及各自優缺點
- 一致性哈希了解嗎
推薦閱讀:
總結
平時工作中一定要注意總結和積累,查漏補缺,不斷完善自己的知識體系。