從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ǔ)
- 說(shuō)說(shuō)Java里的多態(tài)什么意思
- Java 里的final關(guān)鍵用過(guò)嗎
- 講講volatile關(guān)鍵字的作用,與synchronized關(guān)鍵字的不同
- 了解HashMap的內(nèi)部結(jié)構(gòu)嗎?自己實(shí)現(xiàn)一個(gè)HashMap
- HashMap、Hashtable、ConcurrentHashMap的原理與區(qū)別
- 用Java實(shí)現(xiàn)一個(gè)生產(chǎn)者消費(fèi)者模型,可以用BlockingQueue阻塞隊(duì)列
- 了解哪些設(shè)計(jì)模式,實(shí)現(xiàn)一個(gè)單例模式
感言:做大數(shù)據(jù)開(kāi)發(fā),java基礎(chǔ)是必須的,一般一面,二面都會(huì)問(wèn)到,java基礎(chǔ)答的不好,一般都不會(huì)給過(guò)。
推薦閱讀:
2 數(shù)據(jù)結(jié)構(gòu)與算法
算法:
- 搜索旋轉(zhuǎn)排序數(shù)組,leetcode 33,中等難度
- 實(shí)現(xiàn)一個(gè)LRU緩存,leetcode 146 ,中等難度
- 用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列,leetcode 232 , 簡(jiǎn)單難度
- 給定一個(gè)非空的整數(shù)數(shù)組,返回其中出現(xiàn)頻率前 k 高的元素。Leetcode 347 , 中等難度
- 二叉樹(shù)的最近公共祖先, Leetcode 236 , 中等難度
感言:就記住了這幾個(gè),大家也能看出來(lái),基本都是leetcode上的題,刷題還是很有必要的。
刷題時(shí)建議先按分類刷,像二分查找,動(dòng)態(tài)規(guī)劃都有一些固定的模式的。
數(shù)據(jù)結(jié)構(gòu):
- 布隆過(guò)濾器
- Bitmap
- B+樹(shù)
- LSM Tree
- 跳表
- 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)景。
更多大數(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)題如下:
- Hive row_number,rank兩個(gè)函數(shù)的區(qū)別
- Hive窗口函數(shù)怎么設(shè)置窗口大小
- Hive order by,sort by,distribute by,cluster by 區(qū)別
- Hive map,reduce數(shù)怎么設(shè)置
- Hive SQL數(shù)據(jù)傾斜有哪些原因?怎么優(yōu)化
- parquet數(shù)據(jù)格式內(nèi)部結(jié)構(gòu)了解嗎
- Hive數(shù)據(jù)選擇的什么壓縮格式
- Hive SQL 如何轉(zhuǎn)化成MR任務(wù)的
- Hive 分桶了解嗎
- Hive的udf、udaf和udtf了解過(guò)嗎?自己有沒(méi)有寫(xiě)過(guò)udf
- 怎么驗(yàn)證Hive SQL 的正確性
- lateral view explode關(guān)鍵字來(lái)拆分?jǐn)?shù)組
- join操作底層的MapReduce是怎么去執(zhí)行的
SQL應(yīng)用題:
- 一個(gè)login_in表,userid、login_time、ip,數(shù)據(jù)量很大,一個(gè)人可能有多條登錄數(shù)據(jù),取出最近10個(gè)登錄的用戶。
- 還是login_in表,統(tǒng)計(jì)登錄的總條數(shù)( PV )和登錄的總?cè)藬?shù) (UV)。
- 一個(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能力
推薦閱讀:
4 MapReduce&Spark
- MapReduce的作業(yè)流程,涉及到幾次排序
- Spark任務(wù)執(zhí)行過(guò)程
- MapReduce Shuffle 和 Spark Shuffle的區(qū)別
- Spark的內(nèi)存管理模型
- 講講Spark Shuffle
- Spark Shuffle bypass模型了解嗎
- 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性能調(diào)優(yōu)-Shuffle相關(guān)參數(shù)配置
5 Spark Streaming&Flink
- Spark Streaming 與Flink的對(duì)比
- Flink怎么做到Exactly Once
- Spark Streaming能做到Exactly Once語(yǔ)義嗎
- Flink的StateStore有哪些,工作中用過(guò)哪些
- 做過(guò)Flink內(nèi)存調(diào)優(yōu)嗎
- 遇到過(guò)OOM的情況嗎,怎么處理的
- 講講Spark Streaming 與Flink的反壓機(jī)制
- Flink的窗口函數(shù),時(shí)間機(jī)制,CheckPoint機(jī)制,兩階段提交
- Flink 雙流Join
- Flink State TTL怎么設(shè)置
- Flink 維表關(guān)聯(lián)有哪些方式,數(shù)據(jù)量大時(shí)怎么處理
其他一些應(yīng)用題:
- 實(shí)時(shí)PV,UV統(tǒng)計(jì)
- 實(shí)時(shí)TOP N 統(tǒng)計(jì)
- 廣告曝光流和點(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ù)
- 你們公司數(shù)倉(cāng)是怎么構(gòu)建的,怎么做的分層
- 說(shuō)說(shuō)范式建模和維度建模的區(qū)別
- 說(shuō)說(shuō)星型模型和雪花模型的區(qū)別
- 設(shè)計(jì)一個(gè)統(tǒng)計(jì)各渠道用戶留存的模型
- 緩慢變化維怎么處理
- 你們數(shù)據(jù)怎么同步到數(shù)倉(cāng)的,怎么保證數(shù)據(jù)不丟失
- 數(shù)據(jù)質(zhì)量怎么控制
- 數(shù)據(jù)規(guī)范怎么定義的
- 如果進(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
- 說(shuō)說(shuō)對(duì)kafka的了解
- Kafka基本原理說(shuō)一下,和其他的MQ相比的優(yōu)勢(shì)
- 講講Kafka的高階,低階消費(fèi)者API的區(qū)別
- Kafka的ack有哪幾種
- Kafka 消費(fèi)者怎么從Kafka取數(shù)據(jù)的
- Kafka生產(chǎn)消費(fèi)怎么保證Exactly Once
- Kafka怎么保證有序性的
- Kafka Controller是做什么用的
- Kafka 多副本leader如何選舉
- Kafka 消費(fèi)者組重平衡流程是怎樣的
- 新版和老版Kafka offset的管理有什么不同
- 如何查看消費(fèi)者的消費(fèi)進(jìn)度
推薦閱讀:
Kafka常見(jiàn)面試知識(shí)點(diǎn)總結(jié)
8 HBase
- HBase rowkey如何設(shè)計(jì)的
- 談?wù)劅狳c(diǎn)問(wèn)題以及如何解決
- 說(shuō)下HBase的讀寫(xiě)流程
- HBase使用過(guò)程中做過(guò)哪些優(yōu)化
- HBase的Compaction機(jī)制作用
推薦閱讀:
HBase: 為高效可擴(kuò)展的分布式系統(tǒng)而設(shè)計(jì)
數(shù)據(jù)存儲(chǔ)檢索之B+樹(shù)和LSM-Tree
9 Redis
- Redis 包含哪些數(shù)據(jù)結(jié)構(gòu)
- Redis 有序集合的底層實(shí)現(xiàn)
- Redis 有哪幾種數(shù)據(jù)持久化方式及各自優(yōu)缺點(diǎn)
- 一致性哈希了解嗎
推薦閱讀:
如何用 Redis 統(tǒng)計(jì)獨(dú)立用戶訪問(wèn)量?
總結(jié)
平時(shí)工作中一定要注意總結(jié)和積累,查漏補(bǔ)缺,不斷完善自己的知識(shí)體系。