大數據研發

大數據工程師(開發)面試題(附答案)

 

MapReduce

1. 不指定語言,寫一個WordCount的MapReduce

:最近剛學了scala,而且就有scala版本的WordCount,恰好學以至用了一下:html


:至於java版本,蝦皮博主的一篇文章講解的很是細緻: 
Hadoop集羣(第6期)_WordCount運行詳解java

http://www.cnblogs.com/xia520pi/archive/2012/05/16/2504205.htmlnode

 

2. 上述寫的程序中.map((_,1))的輸出結果是什麼

:經過flatMap將其扁平化,而.map((_,1)) 則是每一個出現單詞,1這樣的形式展示,此時還沒歸併。git

 

3. 你能用SQL語句實現上述的MapReduce嗎?要求按照基於某個字段的值的頻次倒序,而且以維度——頻次的形式結果展示?

:基於某個字段——決定了要用group By,頻次要用count聚合,倒序天然少不了desc。 
:框架搭好就是往裏塞了:面試

4.給你一份亂序的100萬個數字的文件,你如何來排序?

:先拆分紅若干小的,而後再排(思路是從希爾排序出發的) 
:內部排序算法:希爾排序算法

http://www.xiapistudio.com/archives/291.html數據庫

Spark

1. 說一說Spark程序編寫的通常步驟?

:初始化,資源,數據源,並行化,rdd轉化,action算子打印輸出結果或者也能夠存至相應的數據存儲介質 
:具體的可看下圖:編程

2. Spark有哪兩種算子?

:Transformation(轉化)算子和Action(執行)算子。設計模式

3. Spark提交你的jar包時所用的命令是什麼?

:submit。 
面試官:spark-submit? 
:嗯,spark-submit。api

4. Spark有哪些聚合類的算子,咱們應該儘可能避免什麼類型的算子?

:aggeragate 
面試官:還有呢? 
:記不清了。。。 
面試官:還有你剛剛寫的那個groupByKey哈 

在咱們的開發過程當中,能避免則儘量避免使用reduceByKey、join、distinct、repartition等會進行shuffle的算子,儘可能使用map類的非shuffle算子。這樣的話,沒有shuffle操做或者僅有較少shuffle操做的Spark做業,能夠大大減小性能開銷。

5. 你所理解的Spark的shuffle過程?

:spark shuffle處於一個寬依賴,能夠實現相似混洗的功能,將相同的Key分發至同一個Reducer上進行處理。 
:詳細探究Spark的shuffle實現

http://blog.csdn.net/johnny_lee/article/details/22619585

 

6. 你如何從Kafka中獲取數據?

:topic 
:分佈式消息系統:Kafka

7. 對於Spark中的數據傾斜問題你有什麼好的方案?

:能夠先分析基數大形成數據傾斜的維度,將其適當的拆分。 
:Spark性能優化指南:高級篇

編程

1.若是我有兩個list,如何用Python語言取出這兩個list中相同的元素?

list(set(list1).intersection(set(list2))),經過set 的intersection取交集的函數實現相同元素的提取。

* 2.請你給出在Python中較快獲取一個元素的數據結構,而且說出其時間複雜度以及它的缺陷是什麼?*

:由於以前也在作一些leetcode上的題目,多多少少重溫了下數據結構,當時腦海裏呈現的是數組方便查找,隊列和棧方便插入刪除,因此一聽到較快獲取果斷數組了。 
面試官:dict(字典) 
:厲害!! 
面試官:那它的時間複雜度你曉得嘛? 
:不是特別瞭解,O(1),常數時間複雜度? 
面試官:嗯,那你知道它的缺陷嗎? 
:(中午吃撐了,TradeOff哈)不曉得 
面試官:空間複雜度較高哈 
: 
反思了一下,之因此說錯,可能和之前學習算法時,起承轉合的過分,並未將棧、隊列和map,或者dict直接比較,而是從數組切換到隊列和棧,因此就和以前的那個PUT和POST差很少,訓練邏輯正確,確實數組查詢記錄方便,但訓練廣度有些多樣性不夠。 

 算法備忘錄——基礎數據結構與複雜度 
經常使用數據結構和算法操做效率的對比總結

3. 作幾道OJ的題目(英文的),說一說這個問題的要求和注意點,以及能夠得到正確結果的你的思路?

恢復IP地址

Given a string containing only digits, restore it by returning all possible valid IP address combinations. 
Example 
Given 「25525511135」, return 

「255.255.11.135」, 
「255.255.111.35」 

Order does not matter.

:思考了一下子,沒想出來,只能想出個不通用的思路。 
面試官:給你個提示,嘗試用樹這個數據結構。 
:此處埋一個坑,學完樹的數據結構再回來解決。

快樂數

Write an algorithm to determine if a number is happy. 
A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers. 
Example 
19 is a happy number 
1^2 + 9^2 = 82 
8^2 + 2^2 = 68 
6^2 + 8^2 = 100 
1^2 + 0^2 + 0^2 = 1

:思路是模擬過程法,即按照它驗證一個數是不是快樂數的方式進行模擬,固然也有些取巧的方式,若是某個中間結果曾出現過,妥妥滴死循環嘛,即刻跳出。 
面試官:思路是對的 
:我以爲這會TLE,確定有取巧的方法(這道題目以前好像接觸過) 
:回去搜了一下,發現以前一直求助的一個大神的博客經過模擬過程用Python實現的: 
Happy Number (以前的懷疑有更巧方法在於時常保持偷懶的思惟也是必要的)

4. 你經常使用的IDE有哪些?

:Java:Eclipse;Python:PyCharm;Scala:IntelliJ IDEA;Shell:VIM

5. 你瞭解設計模式嗎?

:不瞭解,但之後回去買本O’Really的《設計模式》 
:封面以下:

6. 什麼是Restful API?

:因爲對Restful的瞭解只停留在使用層面,給個人感受像是一種資源的提交獲取,GET獲取,POST/DELETE/PUT均可以看做是一種提交操做 

【專業定義】:一種軟件架構風格,設計風格而不是標準,只是提供了一組設計原則和約束條件。它主要用於客戶端和服務器交互類的軟件。基於這個風格設計的軟件能夠更簡潔,更有層次,更易於實現緩存等機制。

RESTful百度百科

Devops

1. 數據庫讀寫分離的目的是什麼?

:①減輕負載;②權限控制 
:讀寫分離的做用 
看了上面的文章,減輕負載是首要目的,至於權限控制,更像是一種實現方式,不像目的。

2. ZooKeeper是什麼?非大數據領域,咱們能夠用ZooKeeper來作些什麼?

:ZooKeeper是分佈式協調組件,非大數據領域,能夠用ZooKeeper來作HA或者存儲數據,好比配置信息啥的。(Znode) 
:ZooKeeper 典型應用場景一覽

相關文章
相關標籤/搜索