面試遇到問大資料量的問題到底在考什麼?這裡討論在程式中並非資料庫中,也並不考慮借助資料庫或者其他輔助工具。
他是考驗你演算法?會不會遍歷?集合的使用?還是考驗計算機記憶體大小的?我感覺都不是,是在考你思路。前面有人發表了「兩個1000w個元素的陣列,如何有效的找出他們的交集」,等會我說下思路,對的話大家頂下,謝謝。
先說我以前我也遇到過一道類似的題,4g大小的檔案,裡面全部是整數,求出最大,最小值。別告訴我拿8g記憶體的計算機用陣列儲存,然後遍歷,比較。。。如果人家說8g的檔案呢?16g的檔案呢?當時我第一反應是把4g檔案分開,但是後來馬上想到的是多執行緒,最後說出了思路,描述如下:
a,b兩個執行緒
定義兩個變數int max,min;
乙個int陣列,大小任意(決定大小的因素,計算機,語言等因素,這裡不詳細說了),例如大小10000的陣列x
a讀取檔案寫入x,寫滿a暫停,b啟動在陣列x種找到最大最小分別賦值給變數max,min
遍歷完後清空x,暫停b,然後啟動a同樣是讀取檔案,寫入陣列,之後暫停a,遍歷和max,min比較,遍歷完最大和最小值分別賦值給變數max和min
重複操作,直到全部讀取比較完,結束。
這只是個思路,其中多執行緒的操作和io等操作不做詳細說明了。
下面來說下前面有人說到的「兩個1000w個元素的陣列,如何有效的找出他們的交集」,如果記憶體夠大,當然好了,直接操作最好。如果元素的最小值是,1e呢?記憶體怎麼辦?如果是幾個億的元素呢?
看題來說,兩個陣列元素不太可能存在記憶體中,就假設存在檔案一和檔案二中吧。
給個簡單思路,兩個陣列的資料存在檔案一,檔案二
定義a,b,c三個執行緒
x,y兩個陣列,每個大小就拿10000個來說吧(決定大小的因素,計算機,語言等因素,這裡不詳細說了)
a讀檔案一寫入x陣列寫滿a停止,b讀取第二個檔案寫入y陣列寫滿b停止,這時候c啟動,在x,y兩個陣列找出交集,大小10000的兩個陣列怎麼找交集這個大家自由發揮總之取到後寫入另外個檔案中,就當是檔案三吧。
比較完後,清空y,然後c停止,啟動b接著讀取寫入y,然後再啟動c去重複上面的步驟,直到檔案二完全操作完。
檔案二操作完成後,再清空x再啟動a,再重複上面的步驟,直到檔案一全部操作完。
這個時候檔案三就是結果了,記得別忘了去除重複元素。如果檔案小,很好去除,如果檔案依舊很大,那麼還是按多執行緒的思路去解決。
取最大最小值的演算法和取交集的演算法本人不發表了,本人雖然是個程式設計師但是非數學,計算機專業,演算法不敢和各位大蝦去比,當然多執行緒和io等其他操作中的問題,各自去解決吧,以上的思路覺得對的大家頂下,覺得不對的儘管提出,有更好思路的還望賜教。
sparkline 在大資料量下的應用
常在前端業務應用中,圖形視覺化方案大都是基於基本的幾種圖形型別,比如line,bar column,area,pie,scatter,heatmap,histogram 等等開發,輔以使用者可自定義的選項,來實現目的和功能比較明確和單一的圖形化需求。當單一的圖形化應用過於笨重,或者難以組合來達到更多...
大資料面試遇到的問題
1.yarn排程有哪幾種方式,優缺點是什麼?job 占用相同資源 2.大資料集群資料丟失了如何恢復?3.你平時遇到過那些故障並且如何解決?4.namenode如何優化?5.namenode啟動流程是什麼?6.flume 有幾種模式,你們常用那些模式?7.hadoop如何調優?8.kafka執行流程圖...
讀大資料量的XML檔案的讀取問題
對於資料量較大的xml檔案,使用xmldocument讀取時,雖然支援xpath,查詢比較方便,但是需要先load,這樣就浪費了記憶體,使用起來速度比較慢。而如果使用xmlreader的話,不需要快取,讀取速度很快,但是如果要查詢就不那麼方便了,不支援xpath,只能通過reader 方法前向迴圈。...