㈠ 常見大數據公司面試問題有哪些
1、您對“大數據”一詞有什麼了解?
答: 大數據是與復雜和大型數據集相關的術語。關系資料庫無法處理大數據,這就是為什麼使用特殊的工具和方法對大量數據執行操作的原因。大數據使公司能夠更好地了解其業務,並幫助他們從定期收集的非結構化和原始數據中獲取有意義的信息。大數據還使公司能夠根據數據做出更好的業務決策。
2、告訴我們大數據和Hadoop之間的關系。
答: 大數據和Hadoop幾乎是同義詞。隨著大數據的興起,專門用於大數據操作的Hadoop框架也開始流行。專業人士可以使用該框架來分析大數據並幫助企業做出決策。
注意: 在大數據采訪中通常會問這個問題。 可以進一步去回答這個問題,並試圖解釋的Hadoop的主要組成部分。
3、大數據分析如何有助於增加業務收入?
答:大數據分析對於企業來說已經變得非常重要。它可以幫助企業與眾不同,並增加收入。通過預測分析,大數據分析為企業提供了定製的建議。此外,大數據分析使企業能夠根據客戶的需求和偏好推出新產品。這些因素使企業獲得更多收入,因此公司正在使用大數據分析。通過實施大數據分析,公司的收入可能會大幅增長5-20%。一些使用大數據分析來增加收入的受歡迎的公司是-沃爾瑪,LinkedIn,Facebook,Twitter,美國銀行等。
㈡ java面試題:將一個20G的數據,存入一個運行2G的電腦里,每個數據佔一行,怎麼去重
這題考的是大數據去重,數據量大於內存,即無法直接在內存中去重,那回么有兩個方案:
1、內存外去重答
也就是將數據存入資料庫,然後利用資料庫進行排序並去重。
優缺點:
1)優點:簡單直接
2)缺點:消耗大
2、演算法去重
題目中說明是20G數據,假設每行數據是1k,則數據行數是20M(如果每行數據是512位元組,則數據行數是40M),可使用MD5對每行數據進行映射,獲得16位元組映射嗎,即總共需要內存空間320M(或640M),滿足內存內去重的需求。
優缺點:
1)優點:在內存內進行處理,速度明顯比內存為要快。
2)缺點:需要進行額外的編碼,程序復雜度和效率要求較高。
㈢ java基礎面試題有哪些
下面是10道java基礎面試題,後附答案
1.什麼是 Java 虛擬機?為什麼 Java 被稱作是「平台無關的編程語言」?
Java 虛擬機是一個可以執行 Java 位元組碼的虛擬機進程。Java 源文件被編譯成能被 Java 虛擬機執行的位元組碼文件。
Java 被設計成允許應用程序可以運行在任意的平台,而不需要程序員為每一個平台單獨重寫或者是重新編譯。Java 虛擬機讓這個變為可能,因為它知道底層硬體平台的指令長度和其他特性。
2.「static」關鍵字是什麼意思?Java 中是否可以覆蓋(override)一個 private 或者是static 的方法?
「static」關鍵字表明一個成員變數或者是成員方法可以在沒有所屬的類的實例變數的情況下被訪問。
Java 中 static 方法不能被覆蓋,因為方法覆蓋是基於運行時動態綁定的,而 static 方法是編譯時靜態綁定的。static 方法跟類的任何實例都不相關,所以概念上不適用。
3.JDK 和 JRE 的區別是什麼?
Java 運行時環境(JRE)是將要執行 Java 程序的 Java 虛擬機。它同時也包含了執行 applet 需要的瀏覽器插件。Java 開發工具包 (JDK)是完整的 Java 軟體開發包,包含了 JRE,編譯器和其他的工具(比如:JavaDoc,Java 調試器),可以讓開發者開發、編譯、執行 Java 應用程序。
4.是否可以在 static 環境中訪問非 static 變數?
static 變數在 Java 中是屬於類的,它在所有的實例中的值是一樣的。當類被 Java 虛擬機載入的時候,會對 static 變數進行初始化。如果你的代碼嘗試不用實例來訪問非 static 的變數,編譯器會報錯,因為這些變數還沒有被創建出來,還沒有跟任何實例關聯上。
5.Java 支持的數據類型有哪些?什麼是自動拆裝箱?
Java 語言支持的 8 中基本數據類型是:
byte
short
int
long
float
double
boolean
char
自動裝箱是 Java 編譯器在基本數據類型和對應的對象包裝類型之間做的一個轉化。比如:把 int 轉化成 Integer,double 轉化成 double,等等。反之就是自動拆箱。
6.Java 支持多繼承么?
不支持,Java 不支持多繼承。每個類都只能繼承一個類,但是可以實現多個介面。
7.Java 中,什麼是構造函數?什麼是構造函數重載?什麼是復制構造函數?
當新對象被創建的時候,構造函數會被調用。每一個類都有構造函數。在程序員沒有給類提供構造函數的情況下,Java 編譯器會為這個類創建一個默認的構造函數。
Java 中構造函數重載和方法重載很相似。可以為一個類創建多個構造函數。每一個構造函數必須有它自己唯一的參數列表。
Java 不支持像 C++中那樣的復制構造函數,這個不同點是因為如果你不自己寫構造函數的情況下,Java 不會創建默認的復制構造函數。
8.Java 中的方法覆蓋(Overriding)和方法重載(Overloading)是什麼意思?
Java 中的方法重載發生在同一個類裡面兩個或者是多個方法的方法名相同但是參數不同的情況。與此相對,方法覆蓋是說子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。
9.介面和抽象類的區別是什麼?
Java 提供和支持創建抽象類和介面。它們的實現有共同點,不同點在於:
介面中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
類可以實現很多個介面,但是只能繼承一個抽象類
類如果要實現一個介面,它必須要實現介面聲明的所有方法。但是,類可以不實現抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。
抽象類可以在不提供介面方法實現的情況下實現介面。
Java 介面中聲明的變數默認都是 final 的。抽象類可以包含非 final 的變數。
Java 介面中的成員函數默認是 public 的。抽象類的成員函數可以是 private, protected 或者是 public。
介面是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含 main 方法的話是可以被調用的。
10.什麼是值傳遞和引用傳遞?
對象被值傳遞,意味著傳遞了對象的一個副本。因此,就算是改變了對象副本,也不會影響源對象的值。
對象被引用傳遞,意味著傳遞的並不是實際的對象,而是對象的引用。因此,外部對引用對象所做的改變會反映到所有的對象上。
最後祝你面試順利!
㈣ 誰有JAVA面試題分享一下唄,現在復習沒有頭緒浪費了很多時間
這里有10個經典的Java面試題,也為大家列出了答案。這是Java開發人員面試經常容易遇到的問題,相信你了解和掌握之後一定會有所提高。讓我們一起來看看吧。
1.Java的HashMap是如何工作的?
HashMap是一個針對數據結構的鍵值,每個鍵都會有相應的值,關鍵是識別這樣的值。
HashMap 基於 hashing 原理,我們通過 put ()和 get ()方法儲存和獲取對象。當我們將鍵值對傳遞給 put ()方法時,它調用鍵對象的 hashCode ()方法來計算 hashcode,讓後找到 bucket 位置來儲存值對象。當獲取對象時,通過鍵對象的 equals ()方法找到正確的鍵值對,然後返回值對象。HashMap 使用 LinkedList 來解決碰撞問題,當發生碰撞了,對象將會儲存在 LinkedList 的下一個節點中。 HashMap 在每個 LinkedList 節點中儲存鍵值對對象。
2.什麼是快速失敗的故障安全迭代器?
快速失敗的Java迭代器可能會引發在底層集合迭代過程中被修改。故障安全作為發生在實例中的一個副本迭代是不會拋出任何異常的。快速失敗的故障安全範例定義了當遭遇故障時系統是如何反應的。例如,用於失敗的快速迭代器ArrayList和用於故障安全的迭代器ConcurrentHashMap。
3.Java BlockingQueue是什麼?
Java BlockingQueue是一個並發集合util包的一部分。BlockingQueue隊列是一種支持操作,它等待元素變得可用時來檢索,同樣等待空間可用時來存儲元素。
4.什麼時候使用ConcurrentHashMap?
在問題2中我們看到ConcurrentHashMap被作為故障安全迭代器的一個實例,它允許完整的並發檢索和更新。當有大量的並發更新時,ConcurrentHashMap此時可以被使用。這非常類似於Hashtable,但ConcurrentHashMap不鎖定整個表來提供並發,所以從這點上ConcurrentHashMap的性能似乎更好一些。所以當有大量更新時ConcurrentHashMap應該被使用。
5.哪一個List實現了最快插入?
LinkedList和ArrayList是另個不同變數列表的實現。ArrayList的優勢在於動態的增長數組,非常適合初始時總長度未知的情況下使用。LinkedList的優勢在於在中間位置插入和刪除操作,速度是最快的。
LinkedList實現了List介面,允許null元素。此外LinkedList提供額外的get,remove,insert方法在LinkedList的首部或尾部。這些操作使LinkedList可被用作堆棧(stack),隊列(queue)或雙向隊列(deque)。
ArrayList實現了可變大小的數組。它允許所有元素,包括null。 每個ArrayList實例都有一個容量(Capacity),即用於存儲元素的數組的大小。這個容量可隨著不斷添加新元素而自動增加,但是增長演算法並沒有定義。當需要插入大量元素時,在插入前可以調用ensureCapacity方法來增加ArrayList的容量以提高插入效率。
6.Iterator和ListIterator的區別
●ListIterator有add()方法,可以向List中添加對象,而Iterator不能。
●ListIterator和Iterator都有hasNext()和next()方法,可以實現順序向後遍歷,但是ListIterator有hasPrevious()和previous()方法,可以實現逆向(順序向前)遍歷。Iterator就不可以。
●ListIterator可以定位當前的索引位置,nextIndex()和previousIndex()可以實現。Iterator沒有此功能。
●都可實現刪除對象,但是ListIterator可以實現對象的修改,set()方法可以實現。Iierator僅能遍歷,不能修改。
7.什麼是CopyOnWriteArrayList,它與ArrayList有何不同?
CopyOnWriteArrayList是ArrayList的一個線程安全的變體,其中所有可變操作(add、set等等)都是通過對底層數組進行一次新的復制來實現的。相比較於ArrayList它的寫操作要慢一些,因為它需要實例的快照。
CopyOnWriteArrayList中寫操作需要大面積復制數組,所以性能肯定很差,但是讀操作因為操作的對象和寫操作不是同一個對象,讀之間也不需要加鎖,讀和寫之間的同步處理只是在寫完後通過一個簡單的"="將引用指向新的數組對象上來,這個幾乎不需要時間,這樣讀操作就很快很安全,適合在多線程里使用,絕對不會發生 ,因此CopyOnWriteArrayList適合使用在讀操作遠遠大於寫操作的場景里,比如緩存。
8.迭代器和枚舉之間的區別
如果面試官問這個問題,那麼他的意圖一定是讓你區分Iterator不同於Enumeration的兩個方面:
●Iterator允許移除從底層集合的元素。
●Iterator的方法名是標准化的。
9.Hashmap如何同步?
當我們需要一個同步的HashMap時,有兩種選擇:
●使用Collections.synchronizedMap(..)來同步HashMap。
●使用ConcurrentHashMap的
這兩個選項之間的首選是使用ConcurrentHashMap,這是因為我們不需要鎖定整個對象,以及通過ConcurrentHashMap分區地圖來獲得鎖。
10.IdentityHashMap和HashMap的區別
IdentityHashMap是Map介面的實現。不同於HashMap的,這里採用參考平等。
●在HashMap中如果兩個元素是相等的,則key1.equals(key2)
●在IdentityHashMap中如果兩個元素是相等的,則key1 == key2
㈤ Java面試總結如何處理項目的高並發,大數據
這個來很簡單,高並發有多自種解決方法: 1、從代碼上分入手,必須得保證代碼沒有冗餘,不要有廢代碼; 2、從伺服器上入手,高並發一台伺服器並發量有限,我們可以採用多台伺服器來分擔壓力; 3、從存儲方便入手,像我們一般高並發但是數據卻可以不...
㈥ 大數據面試要准備哪些
一、大數據面試要准備一些應試須知:
1、讓面試官記住你的名字。很多人在介紹自己名字的時候僅僅只有簡單的一句「我叫某某某」,直到你的自我介紹完畢,面試官也沒有記住你的名字,如果後續的自我介紹中沒有突出的表現,那麼這樣的自我介紹註定是失敗的。
2、告訴面試官和應聘職位相關的工作經歷。在自我介紹自己的工作經歷時,一定要注意哪些經歷是和應聘職位相關,對應聘有幫助,哪些是毫無意義的。例如應聘技術人員的職位,我們主要講從事本職工作的經歷,如果有從事其他行業的經歷,比如從事過銷售,組織,管理工作的,也可以略微提一下,往往會對應聘起到一定的幫助。
3、在面試官面前展現性格陽光的一面。性格也是面試官需要考察的一項,一般來說活潑、外向的性格始終會受到大家的親睞,所以我們在面試官面前一定要展示性格陽光的一面,即使內向,也不能表現出來。
4、簡單的介紹一下自己的未來規劃。未來規劃這一項是為了告訴面試官,我是一個有計劃、有目標、有理想的人,我參加面試是因為我對這份工作比較熱愛,而不是為了混口飯吃而應聘這項工作。很多老闆最怕找到以混日子為目的的員工。
5、注意揚長避短。揚長避短也就是說在面試時盡量選擇自己好的方面來說,只說自己的優點,避免談及自己的缺點。從人性的角度來講,人們總是對負面的新聞感興趣,因此在面試時,面試官會千方百計的發現你的缺點,你的弱項,如果我們主動將缺點暴露給對方,那麼產生的影響往往是負面的。
細節決定成敗,一個簡單的自我介紹雖然只有短短的幾分鍾,但是其內容卻包羅萬象,因此在面試時自我介紹的完美與否是舉足輕重的。
二、大數據面試要准備一些常見的面試題:
1、你會Java語言嗎?熟悉到什麼程度?
2、你最喜歡的編程語言是什麼?為什麼?
3、處理過的最大的數據量?你是如何處理他們的?處理的結果如何。
2、在處理大數據過程中,如何保證得到期望值?
3、如何讓一個網路爬蟲速度更快、抽取更好的信息以及更好總結數據從而得到一干凈的資料庫?
4、點擊流數據應該是實時處理?為什麼?哪部分應該實時處理?
6、如何把非結構化的數據轉換成結構化的數據?這是否真的有必要做這樣的轉換?把數據存成平面文本文件是否比存成關系資料庫更好?
7、如何判別maprece過程有好的負載均衡?什麼是負載均衡?
8、Spark和Hive的區別,以及Spark和Hive的數據傾斜調優問題?
9、Hive和Hbase的區別?
10、MapRece的思想,以及MapRece調優問題?
11、你所了解的開源網站?
12、有兩個集群,每個集群有3個節點,使用hive分析相同的數據,sql語句完全一樣,一個集群的分析結果比另外一個慢的多,給出造成這種現象的可能原因?
13、Hbase的優化?
14、集群的版本,以及集群的瓶頸問題?
15、CRM項目,怎麼跟Spark結合?
16、如何創建一個關鍵字分類?
17、海量日誌數據,提取出某日訪問網路次數最多的那個IP?
18、Hadoop和Spark處理數據時,出現內存溢出的處理方法?
19、有一個1G大小的一個文件,裡面每一是一個詞,詞的大小不超過16位元組,內存大小限制大小1M,返回頻率最高的50個詞。
20、你是如何處理缺少數據的?你是推薦使用什麼樣的處理技術,或者說你是用什麼樣的技術處理呢?
㈦ Java基礎面試題都有哪些
1.java異常機制的原理與應用x0dx0a答:每當程序出現異常之後,如果程序沒有進行相應的處理,則程序會出現中斷現象。x0dx0a實際上,產生了異常之後,JVM會拋出一個異常類的實例化對象,如果此時使用了try語句捕獲的話,則可以進行異常的處理,否則,交給JVM進行處理。當try語句捕獲異常之後,將與catch語句的異常類型進行匹配,如果匹配成功則執行catch內的語句。簡單的應用:在所以throws語句的地方加入try-catch。標准應用:try-catch-finally-throw-throws一起使用。 x0dx0ax0dx0a2. 垃圾回收機制的優點x0dx0a答:釋放無用的對象所佔用的空間。方式:自動回收,手動回收。使用System.gc(),實際上調用Runtime.getRuntime().gc()x0dx0ax0dx0a3. Error與Exception區別x0dx0a答:Error是jvm進行處理,是jvm出錯x0dx0aexception是可以由程序處理的,可以用try-catch捕獲的x0dx0ax0dx0a4. final,finally,finallizex0dx0a答:final定義的變數的值不能改變,定義的方法不能被覆蓋,定義的類不能被繼承x0dx0afinally是異常的統一出口,finallize是垃圾回收前的收尾工作,是Object類定義的x0dx0ax0dx0a5. Anonymous Inner Class是否可以extends,是否可以implements Interfacex0dx0a答:允許繼承和實現,因為匿名內部類就是在抽象類和介面的基礎上發展起來的x0dx0ax0dx0a6. Static Nested Class 與Inner Class的區別x0dx0a答:使用Static定義的Class就是外部類,可以通過外部類. 內部類直接訪問x0dx0a而Inner Class是不能被外部訪問的,只能通過外部類的實例再找到內部類實例。x0dx0ax0dx0a7. HashMap and HashTable?x0dx0a答:HashMap:1) released in jdk 1.2,new Class 2)採用非同步處理方式,性能較高,是非線程安全的 3)允許nullx0dx0aHashTable:x0dx0a1)released in jdk 1.0 ,old Class x0dx0a2)採用同步處理方式,性能低,是線程安全的x0dx0a3)不允許nullx0dx0ax0dx0a8. assert代表什麼?x0dx0a答:asserts是jdk 1.4之後發布的新關鍵字,表示斷言,即程序執行到某個地方肯定是預計的值,一般開發很少使用。要使用assert,必須加上 -ea參數x0dx0ax0dx0a9. gc是什麼?x0dx0a答:gc是garbage collection,垃圾回收,使用gc可以進行垃圾空間的釋放x0dx0ax0dx0a10. String s = new String("xyz")產生了幾個對象?x0dx0a答:一個匿名對象xyz,在棧空間內。一個new實例化的對象,在堆空間內。x0dx0ax0dx0a11. sleep() and wait()?x0dx0a答:sleep()是Thread類定義方法,表示線程的休眠,可以自動喚醒x0dx0await()方法是Object類定義的方法,需要手動notify()和notifyAll()//sleep()不釋放資源,wait()釋放資源x0dx0ax0dx0a12. Overload與Override的區別x0dx0a答:Overload:重載x0dx0a |- 在一個類中定義的若干方法x0dx0a |- 所有的方法名相同,但參數類型或個數不同x0dx0a |- 只有參數有關,與返回類型無關x0dx0aOverride:覆寫x0dx0a |- 在繼承的關系中x0dx0a |- 子類定義了父類同名的方法,參數類型或個數最好完全一樣。x0dx0a |- 訪問許可權不能更嚴格x0dx0ax0dx0a13. abstract class 和 interface有什麼區別?x0dx0a答:抽象類:x0dx0a |-由抽象方法和常量、變數、全局常量、構造方法、普通方法組成x0dx0a |-使用abstract聲明x0dx0a |-子類要通過extends繼承抽象類,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法x0dx0a |-存在單繼承的局限x0dx0a |-抽象類可以實現若干個介面x0dx0a介面:x0dx0a |-由抽象方法和全局常量組成x0dx0a |-使用interface關鍵字x0dx0a |-子類要通過implements實現介面,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法x0dx0a |-一個子類可以實現多個介面x0dx0a |-介面不能繼承一個抽象類,但允許繼承多個介面
㈧ 大數據面試題以及答案整理(一)
一、Map端的shuffle
Map端會處理輸入數據並產生中間結果,這個中間結果會寫到本地磁碟,而不是HDFS。每個Map的輸出會先寫到內存緩沖區中,當寫入的數據達到設定的閾值時,系統將會啟動一個線程將緩沖區的數據寫到磁碟,這個過程叫做spill。
在spill寫入之前,會先進行二次排序,首先根據數據所屬的partition進行排序,然後每個partition中的數據再按key來排序。partition的目的是將記錄劃分到不同的Recer上去,以期望能夠達到負載均衡,以後的Recer就會根據partition來讀取自己對應的數據。接著運行combiner(如果設置了的話),combiner的本質也是一個Recer,其目的是對將要寫入到磁碟上的文件先進行一次處理,這樣,寫入到磁碟的數據量就會減少。最後將數據寫到本地磁碟產生spill文件(spill文件保存在{mapred.local.dir}指定的目錄中,Map任務結束後就會被刪除)。
最後,每個Map任務可能產生多個spill文件,在每個Map任務完成前,會通過多路歸並演算法將這些spill文件歸並成一個文件。至此,Map的shuffle過程就結束了。
二、Rece端的shuffle
Rece端的shuffle主要包括三個階段,、sort(merge)和rece。
首先要將Map端產生的輸出文件拷貝到Rece端,但每個Recer如何知道自己應該處理哪些數據呢?因為Map端進行partition的時候,實際上就相當於指定了每個Recer要處理的數據(partition就對應了Recer),所以Recer在拷貝數據的時候只需拷貝與自己對應的partition中的數據即可。每個Recer會處理一個或者多個partition,但需要先將自己對應的partition中的數據從每個Map的輸出結果中拷貝過來。
接下來就是sort階段,也稱為merge階段,因為這個階段的主要工作是執行了歸並排序。從Map端拷貝到Rece端的數據都是有序的,所以很適合歸並排序。最終在Rece端生成一個較大的文件作為Rece的輸入。
最後就是Rece過程了,在這個過程中產生了最終的輸出結果,並將其寫到HDFS上。
讀:
1、跟namenode通信查詢元數據,找到文件塊所在的datanode伺服器
2、挑選一台datanode(就近原則,然後隨機)伺服器,請求建立socket流
3、datanode開始發送數據(從磁碟裡面讀取數據放入流,以packet為單位來做校驗)
4、客戶端以packet為單位接收,現在本地緩存,然後寫入目標文件
寫:
1、與namenode通信請求上傳文件,namenode檢查目標文件是否已存在,父目錄是否存在
2、namenode返回是否可以上傳
3、client請求第一個 block該傳輸到哪些datanode伺服器上
4、namenode返回3個datanode伺服器ABC
5、client請求3台dn中的一台A上傳數據(本質上是一個RPC調用,建立pipeline),A收到請求會繼續調用B,然後B調用C,將真個pipeline建立完成,逐級返回客戶端
6、client開始往A上傳第一個block(先從磁碟讀取數據放到一個本地內存緩存),以packet為單位,A收到一個packet就會傳給B,B傳給C;A每傳一個packet會放入一個應答隊列等待應答
7、當一個block傳輸完成之後,client再次請求namenode上傳第二個block的伺服器
㈨ java 面試題
Spring的一大特點是利用配置的xml文件實現依賴注入。
所謂依賴注入是指把一個業務對象注入另一個業務對象,從而達到
對象間的松耦合。
下面我們來舉個例子。
http://davidgjy.javaeye.com/blog/437501
還是看看這里吧
那個延遲載入性能好,因為需要使用時才從資料庫里載入,減少沒必要的
延時載入:優點,大數據量時,可以逐條數據獲取.缺點,與資料庫產生長連接.
即時載入,優點,減少資料庫連接,只連接與查詢一次.缺點,大數據量時容易讓資料庫癱瘓
下面的哥們說的對