阿里,頭條,美團,快手大數據開發崗面試總結

從3月份開始,陸續面了阿里,頭條,美團,快手四家公司的大數據開發崗位,近20場面試面下來挺耗費腦力的,不過結果還行,除了頭條外,目前拿到了其他三家的offer,今天把還能記住的題目做個整理,整理是按技術分類的,因為確實記不太清哪一場問了哪些題了。

先說一下這幾場面試的整體感受,頭條和快手風格相似,每一面基本都有演算法或實現題,演算法主要是leetcode easy, middle難度的題,這跟你面試情況有關,可能項目上沒有亮點的演算法題會出的難一點。筆者刷題不多,也就100多道吧,還好沒有遇到太難的演算法,不過刷題還是平時沒事多刷刷的好,畢竟每次面試才突擊刷有點累,刷題也有助於開闊思維。實現題主要是讓你實現下HashMap,LRU,生產消費者模型,單例模式等,面試官通過這些可以看出你對數據結構的理解和程式碼實現能力。阿里和美團的話,演算法題不是很多,但會比較注重問項目里的亮點,我理解的亮點包括你開發或優化過比較有價值的功能,解決過複雜或有難度的問題等,這個需要自己根據做過的項目總結好。數倉的話SQL,建模理論問的比較多。

建議剛開始面試不要海投簡歷,可以先找一家練練手,面試過程中查漏補缺,不斷完善知識盲點,這些公司,你只要表現不是太差,一個部門面不過還可以面其他部門的。投簡歷可以在脈脈,拉鉤,boss直聘上找HR,內部員工內推,也可以通過獵頭投,不過獵頭參差不齊,好的獵頭會對公司在招的崗位給出詳細的介紹,這個尤其在後面你有多個offer做選擇時比較方便,你可以通過獵頭了解這些offer的利弊,不過好獵頭不好碰。

好了,下面開始羅列這次面試中遇到的面試問題,這些題沒有答案,不過會先給出一些我看過的書籍和課程。後續的文章中會對這些知識點進行總結,敬請關注。

1 Java基礎

  1. 說說Java里的多態什麼意思
  2. Java 里的final關鍵用過嗎
  3. 講講volatile關鍵字的作用,與synchronized關鍵字的不同
  4. 了解HashMap的內部結構嗎?自己實現一個HashMap
  5. HashMap、Hashtable、ConcurrentHashMap的原理與區別
  6. 用Java實現一個生產者消費者模型,可以用BlockingQueue阻塞隊列
  7. 了解哪些設計模式,實現一個單例模式

感言:做大數據開發,java基礎是必須的,一般一面,二面都會問到,java基礎答的不好,一般都不會給過。

推薦閱讀:

最新整理JAVA面試題附答案

2 數據結構與演算法

演算法:

  1. 搜索旋轉排序數組,leetcode 33,中等難度
  2. 實現一個LRU快取,leetcode 146 ,中等難度
  3. 用兩個棧實現一個隊列,leetcode 232 , 簡單難度
  4. 給定一個非空的整數數組,返回其中出現頻率前 k 高的元素。Leetcode 347 , 中等難度
  5. 二叉樹的最近公共祖先, Leetcode 236 , 中等難度

感言:就記住了這幾個,大家也能看出來,基本都是leetcode上的題,刷題還是很有必要的。
刷題時建議先按分類刷,像二分查找,動態規劃都有一些固定的模式的。

數據結構:

  1. 布隆過濾器
  2. Bitmap
  3. B+樹
  4. LSM Tree
  5. 跳錶
  6. Hyperloglog

推薦閱讀:
強烈推薦極客時間王爭老師的《數據結構與演算法之美》課程,目前已有8萬多人購買,應該是極客時間購買人數最多的課程,有需要的可以掃下面二維碼購買。品質絕對優質,反正我讀了受益匪淺。比如講Redis的有序集合底層數據結構為什麼用跳錶時,老師會從二叉搜索樹,B+樹開始講起,讓你同時了解了這三種數據結構的異同和應用場景。

3 Hive

做大數據,Hive SQL也是必問的,大廠的ETL任務很多都是Hive SQL,主要問題如下:

  1. Hive row_number,rank兩個函數的區別
  2. Hive窗口函數怎麼設置窗口大小
  3. Hive order by,sort by,distribute by,cluster by 區別
  4. Hive map,reduce數怎麼設置
  5. Hive SQL數據傾斜有哪些原因?怎麼優化
  6. parquet數據格式內部結構了解嗎
  7. Hive數據選擇的什麼壓縮格式
  8. Hive SQL 如何轉化成MR任務的
  9. Hive 分桶了解嗎
  10. Hive的udf、udaf和udtf了解過嗎?自己有沒有寫過udf
  11. 怎麼驗證Hive SQL 的正確性
  12. lateral view explode關鍵字來拆分數組
  13. join操作底層的MapReduce是怎麼去執行的

SQL應用題:

  1. 一個login_in表,userid、login_time、ip,數據量很大,一個人可能有多條登錄數據,取出最近10個登錄的用戶。
  2. 還是login_in表,統計登錄的總條數( PV )和登錄的總人數 (UV)。
  3. 一個用戶好友表 userid , follow_list (該用戶的好友id數組)
    A [B, C, D]
    B [A, C]
    C [D]
    統計這個表有多少對好友

感言:這個主要考察你平時寫SQL多不多,數倉開發崗會比較在意SQL能力

推薦閱讀:

為什麼我們選擇 Parquet

4 MapReduce&Spark

  1. MapReduce的作業流程,涉及到幾次排序
  2. Spark任務執行過程
  3. MapReduce Shuffle 和 Spark Shuffle的區別
  4. Spark的記憶體管理模型
  5. 講講Spark Shuffle
  6. Spark Shuffle bypass模型了解嗎
  7. Spark使用中遇到什麼問題,怎麼解決的

感言:MapReduce&Spark是主要的離線計算引擎,需要對任務調度流程和可能出現性能瓶頸的點熟悉,
懂得組件原理和調優,如果工作中遇到並解決過大數據工程性能問題會有加分

推薦閱讀:

MapReduce Shuffle 和 Spark Shuffle 原理概述

Spark 記憶體管理的基本原理

Spark性能調優-Shuffle相關參數配置

  1. Spark Streaming 與Flink的對比
  2. Flink怎麼做到Exactly Once
  3. Spark Streaming能做到Exactly Once語義嗎
  4. Flink的StateStore有哪些,工作中用過哪些
  5. 做過Flink記憶體調優嗎
  6. 遇到過OOM的情況嗎,怎麼處理的
  7. 講講Spark Streaming 與Flink的反壓機制
  8. Flink的窗口函數,時間機制,CheckPoint機制,兩階段提交
  9. Flink 雙流Join
  10. Flink State TTL怎麼設置
  11. Flink 維表關聯有哪些方式,數據量大時怎麼處理

其他一些應用題:

  1. 實時PV,UV統計
  2. 實時TOP N 統計
  3. 廣告曝光流和點擊流實時join

感言:不僅要對組件的原理清楚,還要實際做過實時相關的業務開發,面試官也會出一些他們場景的業務讓你說下你會怎麼設計,所以需要多關注些實時業務場景的應用實現。

推薦閱讀:

Flink DataStream 關聯維表實戰

基於 Kafka + Flink + Redis 實現電商大屏實時計算

阿里蔣曉偉談計算引擎Flink和Spark的異同與優勢

Flink基礎 | 深入理解Apache Flink核心技術

6 數據倉庫

  1. 你們公司數倉是怎麼構建的,怎麼做的分層
  2. 說說範式建模和維度建模的區別
  3. 說說星型模型和雪花模型的區別
  4. 設計一個統計各渠道用戶留存的模型
  5. 緩慢變化維怎麼處理
  6. 你們數據怎麼同步到數倉的,怎麼保證數據不丟失
  7. 數據品質怎麼控制
  8. 數據規範怎麼定義的
  9. 如果進行元數據管理

感言:數倉方法論的東西需要了解,數倉整體的構建理念要對,給一個業務需求,能夠給出合理的數倉構建模型。

推薦閱讀:

辨析BI、數據倉庫、數據湖和數據中台內涵及差異點(建議收藏)

【漫談數據倉庫】數據倉庫的分層理論

7 Kafka

  1. 說說對kafka的了解
  2. Kafka基本原理說一下,和其他的MQ相比的優勢
  3. 講講Kafka的高階,低階消費者API的區別
  4. Kafka的ack有哪幾種
  5. Kafka 消費者怎麼從Kafka取數據的
  6. Kafka生產消費怎麼保證Exactly Once
  7. Kafka怎麼保證有序性的
  8. Kafka Controller是做什麼用的
  9. Kafka 多副本leader如何選舉
  10. Kafka 消費者組重平衡流程是怎樣的
  11. 新版和老版Kafka offset的管理有什麼不同
  12. 如何查看消費者的消費進度

推薦閱讀:

Kafka常見面試知識點總結

Kafka高可用性實現原理

8 HBase

  1. HBase rowkey如何設計的
  2. 談談熱點問題以及如何解決
  3. 說下HBase的讀寫流程
  4. HBase使用過程中做過哪些優化
  5. HBase的Compaction機製作用

推薦閱讀:

HBase: 為高效可擴展的分散式系統而設計

數據存儲檢索之B+樹和LSM-Tree

HBase Compaction流程詳解

一張圖看懂HBase架構

9 Redis

  1. Redis 包含哪些數據結構
  2. Redis 有序集合的底層實現
  3. Redis 有哪幾種數據持久化方式及各自優缺點
  4. 一致性哈希了解嗎

推薦閱讀:

為什麼我們要使用Redis

如何用 Redis 統計獨立用戶訪問量?

Redis架構進化論

總結

平時工作中一定要注意總結和積累,查漏補缺,不斷完善自己的知識體系。