Java面試“整活”自己會一點大數據被瘋狂diss
本文轉載自微信公眾號「Java極客技術」,作者Java極客技術。轉載本文請聯系Java極客技術公眾號。
阿粉不知道大家面試的時候,有沒有被面試官問到,我看你簡歷上寫了了解一點某某某,你說一下這塊的內容吧?當我們聽到這段話的時候,是不是感覺非常的熟悉,對,就是這么熟悉,因為有很多面試官看你是 Java 開發的時候,問過了 Java 相關的知識,既然看到了你自己敢在自己的簡歷上面寫了解一點其他的技術的時候,都會很 “熱心” 的問候一波,而阿粉的朋友,就被簡歷上寫的了解大數據的相關內容被瘋狂 diss 了一波,阿粉順便也給大家說說面試都問了些啥?
Java面試問了這些
1.基礎知識之 ArrayList 和 LinkedList 使用性能對比。
實際上這個問題就是非常基礎的,實際上面試官就是想問你,二者的數據結構是什么樣子的,以及他們各自適用于什么樣子的場景上。
阿粉的回答就是從這開始入手,然后開始回答面試官的問題。
ArrayList和LinkedList都是實現了Collection和List接口。
ArrayList 底層實際上是大小可變數組的實現,并允許包括 null 在內的所有元素,還提供一些方法來操作內部用來存儲列表的數組的大小。
LinkedList 底層就是鏈表的結構實現,并且允許所有元素(包括 null)LinkedList 類還為在列表的開頭及結尾get、remove 和insert 元素提供了統一的命名方法。
這個時候我們就能從數組和鏈表的不同來分析性能的比較了,畢竟這都是老生常談,數組結構查詢速度快,添加和刪除操作慢,而相對的鏈表結構,查詢速度相對來說比較慢,而添加和刪除操作比較快。
一般這個答案都是面試官需要的,也有面試官會問你,為什么查詢數組就快,鏈表就慢,這個就涉及到底層的知識了,如果不會,那么肯定只能說,自己寫過測試用例,實際對比的,這確實沒錯,但是肯定不是面試官想要的答案,面試官想要的答案都是:
針對查詢操作來說,在數組中,只需對 [基地址+元素大小*k] 就能找到第k個元素的地址,對其取地址就能獲得該元素,
而鏈表要獲得第k個元素,首先要在其第k-1個元素尋找到其next指針偏移,再將next指針作為地址獲得值,
這樣就要從第一個元素找起,多了多步尋址操作,尋址操作次數鏈表要多一些。
如果你能回答出類似這種方式的答案,一般面試官就放過你了,阿粉面試的時候,十次有九次都是這種,說到這里之后,這個問題就簡單的結束了,面試官也就不再進行深挖了。
2.JVM的垃圾回收機制
這么說比較籠統。能夠細致問出來的問題就是那些,OOM可能發生在哪些區域上?堆內存結構是怎么樣的?Minor Gc和Full GC 有什么不同?
一般出來的問題都是根據這幾種的來回變換的,萬變不離其宗,阿粉遇到的面試問這個的,大部分都是問的 Minor Gc和Full GC 有什么不同?
Minor Gc和Full GC 有什么不同
Minor GC :發生新生代的的垃圾收集動作,Minor GC非常頻繁,回收速度一般也比較快
Full GC :發生在老年代的GC,出現了Major GC經常會伴隨至少一次的Minor GC(并非絕對),Major GC的速度一般會比Minor GC的慢10倍以上
然后我們就開始我們對垃圾回收機制的表演就行了,這個要是拆開了說,那可就太多了,如果大家有想深入了解的,阿粉已經準備好了 面試大全PDF 送給大家,大家在后臺回復 java極客技術PDF 就可以獲取到由阿粉精心為大家準備的內容。
3.你們項目中 Redis 是怎么用的。
如果面試官問出了這塊的內容,實際上就是考察 Redis 的一些特性了,比如你們使用 Redis 實現分布式鎖,那么實現分布式鎖的必要性在哪里。
還有如果你們使用了 Redis 做分布式數據緩存,那么必然導致 Redis 和數據庫雙寫一致性問題,這些問題如果你開始回答了,那就就會掉進一些坑里面,比如說Redis 和數據庫雙寫一致性問題,這玩意阿粉之前面試的時候被問到過,最終的解決方案也就是保證了最終一致性,如果對數據有強一致性要求,不能放緩存。我們所做的一切,只能保證最終一致性。就這么簡單。
面試官大致就問了一些這么基礎的內容,剩下的都是項目中的了,阿粉就不再給大家贅述了,但是接下來,阿粉就開始被面試官瘋狂 diss 了,阿粉在自己的簡歷上面,寫了一句話,了解大數據的相關知識。比如 Hadoop , MapReduce,這些東西,面試官有點感興趣,就開始了無情的追問。
關于大數據的面試悲劇
面試官:我看你簡歷上寫了了解大數據的相關內容是么?
阿粉朋友:是呀,因為做了好幾年的開發了,總想著也學習一下這塊的內容啥的。
面試官:那你說說你了解的這些內容吧。
阿粉朋友:了解的哪些內容?
面試官:就你在簡歷上寫的這幾個,Hadoop,MapReduce,還有就HDFS。
這時候阿粉朋友心中一萬個 ZZ 飄過,這東西咋說,說自己安裝?搭建?還是啥,但是這時候也不能慌呀,畢竟也算是自己學習過一點的,雖然沒有正式在項目中使用過,于是阿粉朋友就開始說:
Hadoop項目結構實際上由很多個組成部分,像我在簡歷中寫的,HDFS 分布式文件系統,MapReduce 分布式并行編程模型,YARN 資源管理和調度器,Hive 數據倉庫,還有就是 HBase 非關系型數據庫,
HDFS三個核心組件是 NameNode,DataNode,SecondaryNameNode,比如說 NameNode 是集群的核心, 是整個文件系統的管理節點也是維護者,DataNode 存放具體數據塊的節點, 主要負責數據的讀寫, 定期向 NameNode 發送心跳,而 SecondaryNameNode 算是輔助節點, 同步NameNode中的元數據信息。
然后面試官就開始打斷我了,就對阿粉說,這塊內容在實際的工作中,你用過么?阿粉朋友的回答的也確實是沒有用過這塊,自己只是在工作之余,利用業余的時間去學習了一下有關這方面的內容,擴充一下自己的知識面,接下來面試官就好像盯著阿粉不是很了解這塊的內容就開始了無情的發問。
1.NameNode 的工作機制你了解么?
阿粉朋友回答:主要分為了2個階段,第一階段是 NameNode 啟動,第二階段是 Secondary NameNode 工作,然后簡單細說了一下,于是面試官給阿粉的朋友糾正了一些不合適的地方。
2.正常工作的hadoop集群中hadoop都需要啟動哪些進程
這阿粉的朋友因為沒有在工作中使用過,于是說了不知道,面試官就開始說起了這塊的內容,
最后在面試結束的時候,就說了一句,這就是你自學的這塊的內容?當阿粉聽到面試官有說這句話的時候,是不是就是有點過分的含義,畢竟人家只是自學的,也沒有實際的開發經驗,就算學的不怎么樣,也沒必要這么過分不是么?
也可能是面試官確實會這塊的內容,但是阿粉聽到這里實際上就已經開始聽不下去了,畢竟你是面試官,你的主要內容是不是應該面試,畢竟人家面試的是 Java 開發,也不算是大數據工程師,你直接給“整活”,是不是有點不太好。
于是阿粉也勸了自己的這個朋友,盡管這個面試可能面試不上,但是不要放棄,畢竟大部分的面試官對這個東西還是不看重的,畢竟你只是說了自己在開發的過程中自己學習的,只是了解,也不是專門做大數據的,即使你回答的不好,也不能打擊到你的自信心,影響你接下來的面試不是嗎?
馬上金九銀十面試季就要來到了,又到了一個跳槽的好月份,大家都準備好了么?如果沒有準備好,那么就趕緊回復 java極客技術PDF 獲取最新的面試題,找個高薪的工作吧。