阿里,頭條,美團(tuán),快手大數(shù)據(jù)開(kāi)發(fā)崗面試總結(jié)

從3月份開(kāi)始,陸續(xù)面了阿里,頭條,美團(tuán),快手四家公司的大數(shù)據(jù)開(kāi)發(fā)崗位,近20場(chǎng)面試面下來(lái)挺耗費(fèi)腦力的,不過(guò)結(jié)果還行,除了頭條外,目前拿到了其他三家的offer,今天把還能記住的題目做個(gè)整理,整理是按技術(shù)分類的,因?yàn)榇_實(shí)記不太清哪一場(chǎng)問(wèn)了哪些題了。

先說(shuō)一下這幾場(chǎng)面試的整體感受,頭條和快手風(fēng)格相似,每一面基本都有算法或?qū)崿F(xiàn)題,算法主要是leetcode easy, middle難度的題,這跟你面試情況有關(guān),可能項(xiàng)目上沒(méi)有亮點(diǎn)的算法題會(huì)出的難一點(diǎn)。筆者刷題不多,也就100多道吧,還好沒(méi)有遇到太難的算法,不過(guò)刷題還是平時(shí)沒(méi)事多刷刷的好,畢竟每次面試才突擊刷有點(diǎn)累,刷題也有助于開(kāi)闊思維。實(shí)現(xiàn)題主要是讓你實(shí)現(xiàn)下HashMap,LRU,生產(chǎn)消費(fèi)者模型,單例模式等,面試官通過(guò)這些可以看出你對(duì)數(shù)據(jù)結(jié)構(gòu)的理解和代碼實(shí)現(xiàn)能力。阿里和美團(tuán)的話,算法題不是很多,但會(huì)比較注重問(wèn)項(xiàng)目里的亮點(diǎn),我理解的亮點(diǎn)包括你開(kāi)發(fā)或優(yōu)化過(guò)比較有價(jià)值的功能,解決過(guò)復(fù)雜或有難度的問(wèn)題等,這個(gè)需要自己根據(jù)做過(guò)的項(xiàng)目總結(jié)好。數(shù)倉(cāng)的話SQL,建模理論問(wèn)的比較多。

建議剛開(kāi)始面試不要海投簡(jiǎn)歷,可以先找一家練練手,面試過(guò)程中查漏補(bǔ)缺,不斷完善知識(shí)盲點(diǎn),這些公司,你只要表現(xiàn)不是太差,一個(gè)部門(mén)面不過(guò)還可以面其他部門(mén)的。投簡(jiǎn)歷可以在脈脈,拉鉤,boss直聘上找HR,內(nèi)部員工內(nèi)推,也可以通過(guò)獵頭投,不過(guò)獵頭參差不齊,好的獵頭會(huì)對(duì)公司在招的崗位給出詳細(xì)的介紹,這個(gè)尤其在后面你有多個(gè)offer做選擇時(shí)比較方便,你可以通過(guò)獵頭了解這些offer的利弊,不過(guò)好獵頭不好碰。

好了,下面開(kāi)始羅列這次面試中遇到的面試問(wèn)題,這些題沒(méi)有答案,不過(guò)會(huì)先給出一些我看過(guò)的書(shū)籍和課程。后續(xù)的文章中會(huì)對(duì)這些知識(shí)點(diǎn)進(jìn)行總結(jié),敬請(qǐng)關(guān)注。

1 Java基礎(chǔ)

  1. 說(shuō)說(shuō)Java里的多態(tài)什么意思
  2. Java 里的final關(guān)鍵用過(guò)嗎
  3. 講講volatile關(guān)鍵字的作用,與synchronized關(guān)鍵字的不同
  4. 了解HashMap的內(nèi)部結(jié)構(gòu)嗎?自己實(shí)現(xiàn)一個(gè)HashMap
  5. HashMap、Hashtable、ConcurrentHashMap的原理與區(qū)別
  6. 用Java實(shí)現(xiàn)一個(gè)生產(chǎn)者消費(fèi)者模型,可以用BlockingQueue阻塞隊(duì)列
  7. 了解哪些設(shè)計(jì)模式,實(shí)現(xiàn)一個(gè)單例模式

感言:做大數(shù)據(jù)開(kāi)發(fā),java基礎(chǔ)是必須的,一般一面,二面都會(huì)問(wèn)到,java基礎(chǔ)答的不好,一般都不會(huì)給過(guò)。

推薦閱讀:

最新整理JAVA面試題附答案

2 數(shù)據(jù)結(jié)構(gòu)與算法

算法:

  1. 搜索旋轉(zhuǎn)排序數(shù)組,leetcode 33,中等難度
  2. 實(shí)現(xiàn)一個(gè)LRU緩存,leetcode 146 ,中等難度
  3. 用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列,leetcode 232 , 簡(jiǎn)單難度
  4. 給定一個(gè)非空的整數(shù)數(shù)組,返回其中出現(xiàn)頻率前 k 高的元素。Leetcode 347 , 中等難度
  5. 二叉樹(shù)的最近公共祖先, Leetcode 236 , 中等難度

感言:就記住了這幾個(gè),大家也能看出來(lái),基本都是leetcode上的題,刷題還是很有必要的。
刷題時(shí)建議先按分類刷,像二分查找,動(dòng)態(tài)規(guī)劃都有一些固定的模式的。

數(shù)據(jù)結(jié)構(gòu):

  1. 布隆過(guò)濾器
  2. Bitmap
  3. B+樹(shù)
  4. LSM Tree
  5. 跳表
  6. Hyperloglog

推薦閱讀:
強(qiáng)烈推薦極客時(shí)間王爭(zhēng)老師的《數(shù)據(jù)結(jié)構(gòu)與算法之美》課程,目前已有8萬(wàn)多人購(gòu)買(mǎi),應(yīng)該是極客時(shí)間購(gòu)買(mǎi)人數(shù)最多的課程,有需要的可以掃下面二維碼購(gòu)買(mǎi)。質(zhì)量絕對(duì)優(yōu)質(zhì),反正我讀了受益匪淺。比如講Redis的有序集合底層數(shù)據(jù)結(jié)構(gòu)為什么用跳表時(shí),老師會(huì)從二叉搜索樹(shù),B+樹(shù)開(kāi)始講起,讓你同時(shí)了解了這三種數(shù)據(jù)結(jié)構(gòu)的異同和應(yīng)用場(chǎng)景。

image

更多大數(shù)據(jù)技術(shù)干貨,歡迎關(guān)注“大數(shù)據(jù)技術(shù)進(jìn)階”微信公眾號(hào)。

3 Hive

做大數(shù)據(jù),Hive SQL也是必問(wèn)的,大廠的ETL任務(wù)很多都是Hive SQL,主要問(wèn)題如下:

  1. Hive row_number,rank兩個(gè)函數(shù)的區(qū)別
  2. Hive窗口函數(shù)怎么設(shè)置窗口大小
  3. Hive order by,sort by,distribute by,cluster by 區(qū)別
  4. Hive map,reduce數(shù)怎么設(shè)置
  5. Hive SQL數(shù)據(jù)傾斜有哪些原因?怎么優(yōu)化
  6. parquet數(shù)據(jù)格式內(nèi)部結(jié)構(gòu)了解嗎
  7. Hive數(shù)據(jù)選擇的什么壓縮格式
  8. Hive SQL 如何轉(zhuǎn)化成MR任務(wù)的
  9. Hive 分桶了解嗎
  10. Hive的udf、udaf和udtf了解過(guò)嗎?自己有沒(méi)有寫(xiě)過(guò)udf
  11. 怎么驗(yàn)證Hive SQL 的正確性
  12. lateral view explode關(guān)鍵字來(lái)拆分?jǐn)?shù)組
  13. join操作底層的MapReduce是怎么去執(zhí)行的

SQL應(yīng)用題:

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

感言:這個(gè)主要考察你平時(shí)寫(xiě)SQL多不多,數(shù)倉(cāng)開(kāi)發(fā)崗會(huì)比較在意SQL能力

推薦閱讀:

為什么我們選擇 Parquet

4 MapReduce&Spark

  1. MapReduce的作業(yè)流程,涉及到幾次排序
  2. Spark任務(wù)執(zhí)行過(guò)程
  3. MapReduce Shuffle 和 Spark Shuffle的區(qū)別
  4. Spark的內(nèi)存管理模型
  5. 講講Spark Shuffle
  6. Spark Shuffle bypass模型了解嗎
  7. Spark使用中遇到什么問(wèn)題,怎么解決的

感言:MapReduce&Spark是主要的離線計(jì)算引擎,需要對(duì)任務(wù)調(diào)度流程和可能出現(xiàn)性能瓶頸的點(diǎn)熟悉,
懂得組件原理和調(diào)優(yōu),如果工作中遇到并解決過(guò)大數(shù)據(jù)工程性能問(wèn)題會(huì)有加分

推薦閱讀:

MapReduce Shuffle 和 Spark Shuffle 原理概述

Spark 內(nèi)存管理的基本原理

Spark性能調(diào)優(yōu)-Shuffle相關(guān)參數(shù)配置

5 Spark Streaming&Flink

  1. Spark Streaming 與Flink的對(duì)比
  2. Flink怎么做到Exactly Once
  3. Spark Streaming能做到Exactly Once語(yǔ)義嗎
  4. Flink的StateStore有哪些,工作中用過(guò)哪些
  5. 做過(guò)Flink內(nèi)存調(diào)優(yōu)嗎
  6. 遇到過(guò)OOM的情況嗎,怎么處理的
  7. 講講Spark Streaming 與Flink的反壓機(jī)制
  8. Flink的窗口函數(shù),時(shí)間機(jī)制,CheckPoint機(jī)制,兩階段提交
  9. Flink 雙流Join
  10. Flink State TTL怎么設(shè)置
  11. Flink 維表關(guān)聯(lián)有哪些方式,數(shù)據(jù)量大時(shí)怎么處理

其他一些應(yīng)用題:

  1. 實(shí)時(shí)PV,UV統(tǒng)計(jì)
  2. 實(shí)時(shí)TOP N 統(tǒng)計(jì)
  3. 廣告曝光流和點(diǎn)擊流實(shí)時(shí)join

感言:不僅要對(duì)組件的原理清楚,還要實(shí)際做過(guò)實(shí)時(shí)相關(guān)的業(yè)務(wù)開(kāi)發(fā),面試官也會(huì)出一些他們場(chǎng)景的業(yè)務(wù)讓你說(shuō)下你會(huì)怎么設(shè)計(jì),所以需要多關(guān)注些實(shí)時(shí)業(yè)務(wù)場(chǎng)景的應(yīng)用實(shí)現(xiàn)。

推薦閱讀:

Flink DataStream 關(guān)聯(lián)維表實(shí)戰(zhàn)

基于 Kafka + Flink + Redis 實(shí)現(xiàn)電商大屏實(shí)時(shí)計(jì)算

阿里蔣曉偉談?dòng)?jì)算引擎Flink和Spark的異同與優(yōu)勢(shì)

Flink基礎(chǔ) | 深入理解Apache Flink核心技術(shù)

6 數(shù)據(jù)倉(cāng)庫(kù)

  1. 你們公司數(shù)倉(cāng)是怎么構(gòu)建的,怎么做的分層
  2. 說(shuō)說(shuō)范式建模和維度建模的區(qū)別
  3. 說(shuō)說(shuō)星型模型和雪花模型的區(qū)別
  4. 設(shè)計(jì)一個(gè)統(tǒng)計(jì)各渠道用戶留存的模型
  5. 緩慢變化維怎么處理
  6. 你們數(shù)據(jù)怎么同步到數(shù)倉(cāng)的,怎么保證數(shù)據(jù)不丟失
  7. 數(shù)據(jù)質(zhì)量怎么控制
  8. 數(shù)據(jù)規(guī)范怎么定義的
  9. 如果進(jìn)行元數(shù)據(jù)管理

感言:數(shù)倉(cāng)方法論的東西需要了解,數(shù)倉(cāng)整體的構(gòu)建理念要對(duì),給一個(gè)業(yè)務(wù)需求,能夠給出合理的數(shù)倉(cāng)構(gòu)建模型。

推薦閱讀:

辨析BI、數(shù)據(jù)倉(cāng)庫(kù)、數(shù)據(jù)湖和數(shù)據(jù)中臺(tái)內(nèi)涵及差異點(diǎn)(建議收藏)

【漫談數(shù)據(jù)倉(cāng)庫(kù)】數(shù)據(jù)倉(cāng)庫(kù)的分層理論

7 Kafka

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

推薦閱讀:

Kafka常見(jiàn)面試知識(shí)點(diǎn)總結(jié)

Kafka高可用性實(shí)現(xiàn)原理

8 HBase

  1. HBase rowkey如何設(shè)計(jì)的
  2. 談?wù)劅狳c(diǎn)問(wèn)題以及如何解決
  3. 說(shuō)下HBase的讀寫(xiě)流程
  4. HBase使用過(guò)程中做過(guò)哪些優(yōu)化
  5. HBase的Compaction機(jī)制作用

推薦閱讀:

HBase: 為高效可擴(kuò)展的分布式系統(tǒng)而設(shè)計(jì)

數(shù)據(jù)存儲(chǔ)檢索之B+樹(shù)和LSM-Tree

HBase Compaction流程詳解

一張圖看懂HBase架構(gòu)

9 Redis

  1. Redis 包含哪些數(shù)據(jù)結(jié)構(gòu)
  2. Redis 有序集合的底層實(shí)現(xiàn)
  3. Redis 有哪幾種數(shù)據(jù)持久化方式及各自優(yōu)缺點(diǎn)
  4. 一致性哈希了解嗎

推薦閱讀:

為什么我們要使用Redis

如何用 Redis 統(tǒng)計(jì)獨(dú)立用戶訪問(wèn)量?

Redis架構(gòu)進(jìn)化論

總結(jié)

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容