【新鮮出爐】大廠面經的大數據面試之路

一、Java基礎

1.string、stringbulider、stringbuffer的區別

2.ArrayList、LinkedList、Vector區別

3.Class.forName和classloader的區別

Java中Class.forName和classloader都可以用來對類進行加載。

Class.forName除了將類的.class文件加載到jvm中之外,還會對類進行解釋,執行類中的static塊。這裏向大家推薦一個大數據交流圈q羣:813383827

而classloader只將.class文件加載到jvm中,不會執行static中的內容,只有在newInstance纔會去執行static塊。

4.Java設計模式

23種設計模式。

設計模式(Design pattern):是針對設計問題的通用解決方案。

使用設計模式:可以把它應用到特定的應用中,用於解決相似的問題。

使用設計模式是爲了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。

5.mysql索引的好處以及對應的數據結構

創建索引可以大大提高系統的性能,優點:

第一,通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。

第二,可以大大加快數據的檢索速度,這也是創建索引的最主要的原因。

第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。

第四,在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。

第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。

mysql索引的數據結構是B+樹

6.CocurrentHashMap底層結構

CocurrentHashMap是由Segment數組和HashEntry數組組成。Segment是重入鎖(ReentrantLock),作爲一個數據段競爭鎖,每個HashEntry一個鏈表結構的元素,這裏向大家推薦一個大數據交流圈q裙:894951460

利用Hash算法得到索引確定歸屬的數據段,也就是對應到在修改時需要競爭獲取的鎖。

鎖分段技術就是對數據集進行分段,每段競爭一把鎖,不同數據段的數據不存在鎖競爭,從而有效提高 高併發訪問效率。

CocurrentHashMap在get方法是無需加鎖的,因爲用到的共享變量都採用volatile關鍵字修飾,巴證共享變量在線程之間的可見性(每次讀取都先同步緩存和內存,直接從內存中獲取值,

雖然不是原子操作,但根據JAVA內存模型的happen before原則,對volatile字段的寫入操作先於讀操作,

能夠保證不會髒讀),volatile爲了讓變量提供線程之間的內存可見性,會禁止程序執行結果的重排序(導致緩存優化的效果降低)

7.ThreadLocal底層結構

8.HashMap底層結構

9.Java解決Hash衝突的四種方式

10.JVM的具體細節(內存結構、GC算法、GC工具、引用方式等)

二、數據結構與算法

1.二叉樹前序、中序、後續遍歷方式(遞歸以及非遞歸)

2.二叉樹的深度以及廣度遍歷方式

3.二叉樹遍歷情況中所有連續節點的最大的值

4.求數組所有可能的子數組

5.給定一個數,求一個有序數組的兩個數的和滿足這個數(可以拓展一下變成兩個無序的數組)

6.求一個數組的第二大值

7.大文件(不能加載進內存)的排序問題

8.快速排序、歸併排序、冒泡排序、選擇排序(複雜度分別是多少)

9.hash、HashMap、索引(b tree/ b+ tree) 時間複雜度?

hash表時間複雜度爲O(1)

HashMap在最理想的情況下,時間複雜度爲O(1)(此情況下,hash表沒有數據衝突),

否則時間複雜度爲O(n)(此情況下,主要是查詢鏈表用時)

二叉查找樹查詢的時間複雜度是O(logN)

三、大數據框架

1.hadoop

HDFS、Yarn、MapReduce原理以及執行過程,特別是MapReduce最好能結合源碼說一些

2.Flume+Kafka一個實時流採集框架

熟悉flume的工作流程,source、channel、sink、攔截器、以及自定義source、自定義sink、自定義攔截器

熟悉kafka的主要組件(broker節點、副本、partition)、kafka工作原理(kaffka生產消費模型)、kafka跟其他MQ

對比的一個情況、kafka怎麼保證三種消費狀態(at most once、at least once、at exactlt once)

結合kafka具體可能出現的網絡瓶頸、zookeeper的GC情況

3.storm

storm具體結構(spout + bolt)、storm調優具體方式、storm的如何保證高可靠、ack確認機制、storm的雪崩解決辦法、

strom計算pv、uv 、dv的具體方式(最好別採用set的方式)

4.Hbase

hbase具體架構,(架構圖),hbase讀寫過程(着重強調bulkload)、hbase的表以及rowkey設計(預防熱點問題)、hbase熱點

問題帶來的危害

5.redis

redis使用方式、redis數據結構類型、redis的bitmap結構、redis持久化、redis的淘汰機制、redis的緩存擊穿

6.spark

spark提交一個任務的執行過程(job劃分、stage劃分、task生成、資源調度、shuffle詳細過程等)、spark core的一些經典編程(spark core的二次排序,spark core的分組求top N)、spark 的優化、spark sql的堆外內存溢出情況、spark的優化(大概七八個)

四、項目具體問題

1.集羣資源情況

2.數據量

3.具體項目(以及具體項目遇到的問題,解決方案)

五、其他

1.rpc框架通信協議

2.談自己對一些具體問題的看法(包括產品設計、分析)

結語

感謝您的觀看,如有不足之處,歡迎批評指正。

獲取資料

本次給大家推薦一個免費的學習羣,裏面概括數據倉庫/源碼解析/Hadoop/Flink/Spark/Hive/hbase/Flink/kylin以及面試資源等。
對大數據開發技術感興趣的同學,歡迎加入Q羣:813383827,不管你是小白還是大牛我都歡迎,還有大牛整理的一套高效率學習路線和教程與您免費分享,同時每天更新視頻資料。
最後,祝大家早日學有所成,拿到滿意offer,快速升職加薪,走上人生巔峯!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章