大資料某公司面試題-附答案

老馮談BigData發表於2018-09-12
最近在觀察一些大資料方面的職位。特貢獻一套面試題,希望對找工作的博友們一點幫助!
 
1.簡述Linux以及Linux命令
 
       cd命令
       ls命令
       mkdir和rmdir命令
       cp命令
       mv命令
       rm命令
       cat命令
       tac命令
       more命令
      head命令
      tail命令
      touch命令
      chown命令
      find命令
      tar命令
      grep命令
      source命令
 
   2.Java支援的資料型別有哪些,什麼是自動拆裝箱
       
       1)8種基本資料型別:
byte  8位  取值範圍 -2^7 ~ 2^7 -1
short 16位  取值範圍  -2^15 ~ 2^15 – 1
char  16位  取值範圍 0 ~ 2 ^16 – 1
boolean 位數不明確   取值  true false
int 32位   取值範圍 -2^31 ~ 2^31 – 1
long 64位 取值範圍 -2^63 ~ 2^ 63 – 1
float 32位 取值範圍 1.4e-45 ~ 3.40e38
double 64位 取值範圍 4.9e-324 ~ 1.79e308
2)引用型別,包括類、介面、陣列
需要注意的是,String不是基本資料型別,而是引用型別
引用型別宣告的變數,是指該變數在記憶體中實際上儲存的是個引用地址,建立的物件實際是在堆中
 
自動拆裝箱,是指基本資料型別和引用資料型別之間的自動轉換
如Integer 和 int 可以自動轉換; Float和float可以自動轉換
 
   3.遍歷一個List有哪幾種不同的方式
      List<String>  list =new ArrayList<String>();
      list.add(“圖書”);
      list.add(“水彩筆”);
  
      //number1
      for (int i=0;i<list.size();i++){
             // list.get(i);
      }
      //number2
       Iterator<String> iterator =list.iterator();
 
             while(iterator.hasNext())
            {
                      // iterator.next();
 
           }   
      //number3
 
        for(String  item : list){
               //System.out.print(item);
            } 
 
 
   4.隨機產生20個不能重複的字元並排序
 
Set noreapeat =new TreeSet();
 
 
Random rdm = new Random();
 
while (noreapeat.size()<20){
 
int bb =Math.abs(rdm.nextInt())%26+97;
 
char cc =(char)bb;
noreapeat.add(cc);
}
 
System.out.print(noreapeat);
 
 
   5.給定一個字串(包括字母、數字等),找出這個字串中首先出現三次的那個英文字元
 
String str =”dsds221sdsddsds”;
int nArr[] = new int[256]; //桶排序
      for(int i=0;i<str.length();i++) { 
if(++nArr[str.charAt(i)] == 3)
char c =str.charAt(i);
if(c>=`a`&& c<=`z` || c>=`A`&&c<=`Z`)
{
System.out.println(c); break;
}
}
}
 
 
   6.什麼是協同過濾、map reduce 、餘弦距離
 
     協同過濾 : 借鑑和你相關人群的觀點來進行推薦
 
     map reduce :MapReduce是一種分散式計算模型,Map(對映)”和”Reduce(歸約).Map的作用是過濾一些原始資料,Reduce則是處理這些資料,得到我們想要的結果.
 
map函式:接受一個鍵值對(key-value pair),產生一組中間鍵值對。MapReduce框架會將map函式產生的中間鍵值對裡鍵相同的值傳遞給一個reduce函式。 
 
  reduce函式:接受一個鍵,以及相關的一組值,將這組值進行合併產生一組規模更小的值(通常只有一個或零個值)。 
 
在統計詞頻的例子裡,map函式接受的鍵是檔名,值是檔案的內容,map逐個遍歷單詞,每遇到一個單詞w,就產生一箇中間鍵值對<w, “1”>,這表示單詞w我們又找到了一個;MapReduce將鍵相同(都是單詞w)的鍵值對傳給reduce函式,這樣reduce函式接受的鍵就是單詞w,值是一串”1″(最基本的實現是這樣,但可以優化),個數等於鍵為w的鍵值對的個數,然後將這些“1”累加就得到單詞w的出現次數。最後這些單詞的出現次數會被寫到使用者定義的位置,儲存在底層的分散式儲存系統(GFS或HDFS)。 
 
 1.MapReduce庫先把user program的輸入檔案劃分為M份(M為使用者定義),每一份通常有16MB到64MB,如圖左方所示分成了split0~4;然後使用fork將使用者程式拷貝到叢集內其它機器上。 
 
  2.user program的副本中有一個稱為master,其餘稱為worker,master是負責排程的,為空閒worker分配作業(Map作業或者Reduce作業),worker的數量也是可以由使用者指定的。 
 
  3.被分配了Map作業的worker,開始讀取對應分片的輸入資料,Map作業數量是由M決定的,和split一一對應;Map作業從輸入資料中抽取出鍵值對,每一個鍵值對都作為引數傳遞給map函式,map函式產生的中間鍵值對被快取在記憶體中。 
 
  4.快取的中間鍵值對會被定期寫入本地磁碟,而且被分為R個區,R的大小是由使用者定義的,將來每個區會對應一個Reduce作業;這些中間鍵值對的位置會被通報給master,master負責將資訊轉發給Reduce worker。 
 
  5.master通知分配了Reduce作業的worker它負責的分割槽在什麼位置(肯定不止一個地方,每個Map作業產生的中間鍵值對都可能對映到所有R個不同分割槽),當Reduce worker把所有它負責的中間鍵值對都讀過來後,先對它們進行排序,使得相同鍵的鍵值對聚集在一起。因為不同的鍵可能會對映到同一個分割槽也就是同一個Reduce作業(誰讓分割槽少呢),所以排序是必須的。 
 
  6.reduce worker遍歷排序後的中間鍵值對,對於每個唯一的鍵,都將鍵與關聯的值傳遞給reduce函式,reduce函式產生的輸出會新增到這個分割槽的輸出檔案中。 
 
  6.當所有的Map和Reduce作業都完成了,master喚醒正版的user program,MapReduce函式呼叫返回user program的程式碼。 
 
  所有執行完畢後,MapReduce輸出放在了R個分割槽的輸出檔案中(分別對應一個Reduce作業)。使用者通常並不需要合併這R個檔案,而是將其作為輸入交給另一個MapReduce程式處理。整個過程中,輸入資料是來自底層分散式檔案系統(GFS)的,中間資料是放在本地檔案系統的,最終輸出資料是寫入底層分散式檔案系統(GFS)的。而且我們要注意Map/Reduce作業和map/reduce函式的區別:Map作業處理一個輸入資料的分片,可能需要呼叫多次map函式來處理每個輸入鍵值對;Reduce作業處理一個分割槽的中間鍵值對,期間要對每個不同的鍵呼叫一次reduce函式,Reduce作業最終也對應一個輸出檔案。
 
 
     餘弦距離: 兩向量之間的夾角,    餘弦相似度用向量空間中兩個向量夾角的餘弦值作為衡量兩個個體間差異的大小。相比距離度量,餘弦相似度更加註重兩個向量在方向上的差異,而非距離或長度上。
 
 
   7.簡述圖資料庫

    常見的有:Neo4j    圖形資料庫是一種非關係型資料庫 Neo4j基於Java實現

                           最主要的組成有兩種,結點集和連線結點的關係

 

   FlockDB  AllegroGrap   InfiniteGraph

相關文章