最近在觀察一些大數據方面的職位。特貢獻一套面試題,希望對找工作的博友們一點幫助! 1.簡述Linux以及Linux命令 cd命令 ls命令 mkdir和rmdir命令 cp命令 mv命令 rm命令 cat命令 tac命令 more命令 head命令 tail命令 touch命令 chown命令 fi ...
最近在觀察一些大數據方面的職位。特貢獻一套面試題,希望對找工作的博友們一點幫助! 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.簡述圖資料庫