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























