春招面試經驗系列(九)螞蟻金服

2021-08-18 01:34:55 字數 3694 閱讀 6051

螞蟻金服

一、spring mvc中scope的作用

二、spring bean的生命週期

三、hadoop和spark框架理解,mapreduce與spark之間處理有什麼不同?

spark和hadoop的關係:

spark是類hadoop mapreduce的通用並行框架, 專門用於大資料量下的迭代式計算。是為了跟 hadoop 配合而開發出來的,不是為了取代 hadoop, spark 運算比 hadoop 的 mapreduce 框架快的原因是因為 hadoop 在一次 mapreduce 運算之後,會將資料的運算結果從記憶體寫入到磁碟中,第二次 mapredue 運算時在從磁碟中讀取資料,所以其瓶頸在2次運算間的多餘 io 消耗。 spark 則是將資料一直快取在記憶體中,直到計算得到最後的結果,再將結果寫入到磁碟,所以多次運算的情況下, spark 是比較快的。其優化了迭代式工作負載。

四、mapreduce怎麼能夠避免資料傾斜?

在map端解決,或對key操作從而緩解reduce的壓力:

1、引數調優:

(1)hive.map.aggr=true

(2)hive.groupby.skewindata=true:為了讓結果是相同的groupby key有可能被分到不同的reduce中,從而達到負載均衡的目的。

2、在key上做文章,在map階段將造成傾斜的key先分成多組,在為計算之前將多的key後邊加上例如1,2,3,4這些字元,先進行乙個運算,之後再恢復key進行最終的運算。

3、先進行group操作,把key先進行一次reduce,之後再進行count或者distinct count操作。

4、join操作中,使用map join在map端就進行join,免得reduce時卡住。

mapreduce過程:

1、 map過程:資料從hdfs中傳入乙個maptask,資料經過partition之後存入map的記憶體緩衝區(每個map task都會有乙個內容緩衝區),當緩衝區滿了之後就會將緩衝區的內容存到磁碟上,然後再用緩衝區來接受新的資料,這個網磁碟存資料的過程就是spill。當整個map task結束後再對磁碟中所有的臨時檔案做合併。

2、 在mapreduce中reduce的用法規定在從map中取數之後到合併計算的過程中,其實在資料傳入reduce之前也有「reduce」過程,稱作combine。combiner等同於reducer,combiner將有相同的key/value對的value加起來,減少寫到磁碟的數量。

3、 map端的所用工作結束後,最終生成的merge後的檔案存放在tasktracker能夠檢測到的某個本地目錄中,每個reduce task不斷的通過rpc從jobtracker**獲取maptask是否完成的資訊,如果reduce task得到通知已經完成,在啟動shuffle的後半段過程。

4、 reduce task 執行之前,就是從不同的map task的最終結果,將他們merge到一起,形成reduce task的輸入檔案。

5、 reduce端的shuffle過程:(1)copy過程:不停的從本地磁碟通過對tasktracker的訪問來拉取map的輸出檔案。(2)merge過程:copy過來的資料將先存放在緩衝區,這裡和map的緩衝區原理一樣(這個過程如果設定了combiner,也會啟動),然後知道沒有了map端的資料才停止merge(這裡的merge有三種形式:記憶體到記憶體,記憶體到磁碟,磁碟到磁碟)。

6、 不斷的merge後,reducer獲得了最終的輸入檔案。整個shuffle過程結束!然後就是reducer執行,把結果放到hdfs上了。

combiner function可以減少需要在map和reduce之間傳輸的資料。

shuffle:後台執行緒根據reduce個數將輸出結果進行分組。

combiner:是乙個hadoop優化效能的步驟,它發生在map與reduce之間。目的是為了解決資料傾斜的問題,減輕網路壓力,實際上是減少了maper的輸出。

七、knn演算法與貝葉斯演算法原理

八、多執行緒有幾種實現方式?他們區別是什麼?有沒有返回值?如果想要返回值怎麼實現?

1、繼承thread類:thread本質上也是實現了runnable介面的乙個例項。啟動執行緒的唯一方法就是通過start()方法,然後執行run()方法。

2、實現runnable介面:自定義類並實現runnable介面,並建立thread物件。

3、實現callable介面:有返回值:與runnable功能類似,但是比runnable功能更強大。

九、堆排序的過程,時間複雜度,適用的場景。

每一次建立乙個堆,然後把最大值放到末尾。

時間複雜度為o(n^2)

十、深度優先、廣度優先的過程,適用場景

1、深度優先:用棧實現,適用於記憶體小的情況。

2、廣度優先搜尋:用佇列實現,速度較快,占用記憶體較大。

十一、陣列和鍊錶的區別?

陣列是將元素在記憶體中連續存放,由於每個元素占用記憶體相同,可以通過下標迅速訪問陣列中任何元素。但是如果要在陣列中增加乙個元素,需要移動大量元素,在記憶體中空出乙個元素的空間,然後將要增加的元素放在其中。同樣的道理,如果想刪除乙個元素,同樣需要移動大量元素去填掉被移動的元素。如果應用需要快速訪問資料,很少或不插入和刪除元素,就應該用陣列

鍊錶恰好相反,鍊錶中的元素在記憶體中不是順序儲存的,而是通過存在元素中的指標聯絡到一起。比如:上乙個元素有個指標指到下乙個元素,以此類推,直到最後乙個元素。如果要訪問鍊錶中乙個元素,需要從第乙個元素開始,一直找到需要的元素位置。但是增加和刪除乙個元素對於鍊錶資料結構就非常簡單了,只要修改元素中的指標就可以了。如果應用需要經常插入和刪除元素你就需要用鍊錶資料結構了。

總之,想要快速訪問元素,就用陣列結構,想要多次增刪元素,就用鍊錶結構。

十二、內連線和外連線的區別?

1、內連線:合併兩個表中都有的部分。(即從結果行中刪除與其他連線表中沒有匹配的所有行,所以內連線可能會造成資訊的丟失)

2、外連線:不僅包含符合連線條件的行,而且還包括左表、右表或兩個外連線表中的所有資料行。

十三、spark與hadoop相比的優勢?

1、中間資料快取,mapreduce快取在磁碟上,spark快取在記憶體中。

2、api:mapreduce:map函式和reduce函式。spark:靈活性高。對應map和reduce階段有相應的函式。

3、程式排程:mapreduce需要用oozie。spark:自行排程。

4、適合計算型別:spark適合迭代計算。

5、使用場景:mapreduce離線的海量資料統計分析。spark:實現實時的演算法和機器學習。

十四、專案介紹

十五、資料建模的目的、建模方法、怎麼調優、怎麼判斷模型好壞、特殊情況怎麼處理?

十六、資料清洗怎麼做?

資料清洗需要從兩個角度看待:解決資料質量問題和使資料更適合資料分析。

1、資料質量問題:(1)資料完整性:通過其他資訊進行補全;通過前後資料補全;資料補全的可以刪除。

(2)資料唯一性:去重,按照主鍵去重和按照規則去重。

(3)資料合法性問題:設定合法規則;字段型別規則;字段內容合法規則。

2、使資料更適合資料分析:

(1)高緯度:pca主成分分析

(2)解決緯度低的問題:彙總;平均;加權;最大;最小

(3)解決冗餘手段

(4)解決多指標資料、單位不同問題:最小最大,零均值,小數。

十七、最近閱讀了什麼書籍,對你有什麼啟示。

春招面試經驗系列(八)阿里 螞蟻金服

阿里 一 linux啟動指令碼順序 1 先識別儲存器分割槽,掛載檔案 2 執行檔案系統中的init sbin init執行啟動指令碼 3 一般這個時候指令碼中可能會有分割槽識別指令碼,將分割槽再識別一次,或者重新掛載nfs 當然,直接在root nfs,讓核心去掛載網路檔案系統也是可以的 二 lin...

螞蟻金服面試涼經

自我介紹,專案介紹,印象比較深刻的專案 影象質量評價方面的評價指標 專業性的問題,主要是機器學習方面的,roc計算公式,過擬合與欠擬合原因與解決辦法,relu優缺點,l1和l2正則化區別,優劣 歸一化的方法,為什麼進行歸一化,歸一化是必須的嗎 正例和反例數目不一樣時,如何做 ps,還問了很多常用的機...

iOS 螞蟻金服面試題(一)

原文首發位址 由洲洲哥整理提供,有些地方說的不準確的地方還希望各位看官指正!下面進入整體 1 在kvo中,他是怎麼知道監聽的物件發生了變化?kvo簡單介紹 中文名稱 觀察者 功能描述 是乙個第三者的觀察方,在不改變被觀察物件任何屬性的情況下,監聽屬性和物件的改變。並有自己的功能函式去處理。特性 方便...