美團面試經(jīng)歷+答案

我認識不少在美團工作的朋友,從他們口中得知美團的技術面試,面試官都會從幾百道基礎題中隨機拿十來道來考察應聘者的基礎實力,只有過了這些基礎才會有下文,我記得我的讀者中曾經(jīng)有一位分享過美團的面試成功的經(jīng)歷《圈內(nèi)小伙伴美團點評校招面試經(jīng)驗分享》,而今天分享經(jīng)歷的這位小伙伴還是有點遺憾,掛在最后一輪。

原文如下。

一面

1、自我介紹

答:自我介紹是面試中唯一的自己主動介紹自己的環(huán)節(jié),一定要好好把握好,你數(shù)據(jù)結構學的號可以手撕一個紅黑樹你就說我數(shù)據(jù)結構掌握地很好,反正就是要把自己的優(yōu)勢凸顯出來,比如我是保研的以及對于java的知識較熟悉,我介紹完自己的本科經(jīng)歷以后,我就說我是保送到本校繼續(xù)讀研究生,然后最末尾會加上自己熟悉java,然后面試官就會問java的一些東西;

2、項目介紹及其亮點

答:開始吹牛逼。。。

3、Java的8種數(shù)據(jù)類型有哪些?

答:感覺這個問題被問爛了,int,short,long,float,double,byte,boolean,char;

3、問了Integer緩存數(shù)據(jù)的范圍?

答:-128-127

4、緊接著問了Object類有哪些方法?

答:這個我有背過,clone,getClass,toString,finalize,equals,hashCode,wait,notify,notifyALL。

5、問到這里然后拿出了一個題,面試官有小紙條,題目在上面,String A = "123"; String B = new String("123");,問我生成了幾個String對象?

答:我說如果常量池中,原來沒有“123”那么就是生成了2個對象,如果常量池中有“123”那么只要1個對象生成。

6、由于提到了wait,順帶問了wait和sleep有什么區(qū)別?

答:wait 的話會釋放對象鎖,sleep 的話不會釋放的對象鎖。

7、由于還提及了hashcode,面試官接著問我,hashcode用在哪里?

答:這個我不假思索地說,hashmap和ConcurrentMap,這里我猜面試官肯定要繼續(xù)問我這兩個東西了。

8、果不其然,面試官說,講一講hashmap?

答:hashmap我講了hashmap的數(shù)據(jù)結構數(shù)組鏈表結構,講了hashmap的put,get,擴容的底層原理,同時講了hashmap在1.7與1.8中的區(qū)別,put中引入了紅黑樹,以及擴容的時候不同,這些就講了挺長時間,最后我說了一句hashmap不是線程安全的。

9、這里提及了hashMap是非線程安全的,面試問我為啥不是線程安全的,舉幾個例子?

答:我說了,在擴容的時候hashmap會可能產(chǎn)生環(huán),造成死循環(huán);hashmap在插入新的階段的時候,多個線程同時插入,會把除了最后的那個線程的其它線程插入的結點丟失;對于修改的時候,多個線程修改,對只保留最后的一個線程的修改結果;擴容的時候,會只保留最后一個線程的擴容后的那個數(shù)組;從擴容修改增加說了一遍;

10、我本以為要接著問ConCurrentMap,額,出乎我的意料,并沒有問,可能覺得我hashmap準備的很充分,然后接著問了我JVM了解嗎?

答:我說了解;

11、讓我說意思JVM的分為哪幾塊?

答:方法區(qū),虛擬機棧,本地方法棧,堆,程序計數(shù)器,然后我就自己沒等面試官問新的問題,繼續(xù)接著說,方法區(qū)和堆是線程共享的,虛擬機棧本地方法棧和程序計數(shù)器是線程私有的,除了程序技術器不會發(fā)生內(nèi)存溢出,其它都會發(fā)生內(nèi)存溢出,并說了哪些會發(fā)生堆溢出哪些會發(fā)生棧溢出;這里就是大家要學會自己吧啦吧啦地說一堆,因為據(jù)我觀察每個面試官面試每個是有一個固定時間的,超過這個時間段就結束了,所以只要面試官不打斷你,你就一頓說;

12、由于提及到了內(nèi)存溢出,面試官問我內(nèi)存溢出和內(nèi)存泄漏的區(qū)別?

答:內(nèi)存泄露我說就是一塊申請了一塊內(nèi)存以后,無法去釋放掉這塊內(nèi)存,丟失了這段內(nèi)存的引用;內(nèi)存溢出就是申請的內(nèi)存不夠,撐不起我們需要的內(nèi)存;

13、這里問完我就去問了數(shù)據(jù)庫,4大特性是啥,舉個例子?

答:原子性,我說就是一個事務要么全部完成,要么全部失敗,要么做要么不做;一致性,比如a+b=100,一個事務改變了a比如增加了a的值,那么必須同時改變b,保證在事務結束以后a+b=100依然成立,這就是一致性;持久性,額就是修改完以后,在數(shù)據(jù)庫中生效是永久的;隔離性,我就是說對于A對B進行轉(zhuǎn)賬,A沒把這個交易完成的時候,B是不知道A要給他轉(zhuǎn)錢。

14、數(shù)據(jù)的隔離級別有啥,每個隔離級別舉個例子?

答:額,(怎么都要舉例子啊,啊啊啊啊~),內(nèi)心波瀾,臉上面無表情地說:1.未提交讀,事務中發(fā)生了修改,即使沒有提交,其它事務也是可見的,舉例子我就說對于一個數(shù)A原來50修改為100,但是我還沒有提交修改,另一個事務看到這個修改,而這個時候原事務發(fā)生了回滾,這時候A還是50,但是另一個事務看到的A是100,這就是未提交讀;2.提交讀,就是說,對于一個事務從開始直到提交之前,所做的任何修改是其它事務不可見的,舉例就是對于一個數(shù)A原來是50,然后提交修改成100,這個時候另一個事務在A提交修改之前,讀取到了A是50,剛讀取完,A就被修改成100了,這個時候另一個事務再進行讀取發(fā)現(xiàn)A就突然變成100了;3.可重復讀;可重復讀,就是對于一個記錄讀取多次的記錄是相同的,舉例就是對于一個數(shù)A讀取的話一直是A,前后兩次讀取到的A是一致的;可串行化讀,就是說在并發(fā)情況下,和串行化的讀取的結果是一致的,沒有什么不同,這個舉例我就說,不會發(fā)生臟讀和幻讀;然后數(shù)據(jù)庫這一塊就過去了。

15、接著問我計算機網(wǎng)絡,問了我7層有哪7層?

答:物理層,數(shù)據(jù)鏈路層,網(wǎng)絡層,傳輸層,會話層,表示層,應用層;

16、接著問了我TCP在哪層,UDP在哪層,HTTP在哪層?

答:TPC和UDP在傳輸層,然后HTTP問我在哪個層,我一下有點忘了,這個沒答上來,會去看了是在應用層。

17、問到這里就結束了,然后面試官問我有啥想問的,我就問如何評價我的面試表現(xiàn)?

答:因為一面都是問基礎的知識,面試官和我說,我感覺你基礎很扎實,他直接和我說我這里的話是通過的,不知道后面的面試官怎么問你,然后我說了聲謝謝,就去酒店的一個會議廳等待二面;

二面

一面過了沒多久,就立馬通知二面了,中途感覺有點餓了,美團還挺人性話的,在后面的桌子上放了一堆餅干,忘了餅干的名字了,總之特別好吃,我吃了好幾塊。

1、自我介紹

2、項目介紹,及其亮點介紹。

答:繼續(xù)吹牛逼。

3、然后問了我集合了解嗎,讓我說話ArrayList和LinkedList的區(qū)別?

答:ArrayList底層是數(shù)組,LinkedList底層是鏈表,ArrayLIst查找數(shù)據(jù)快,LinkedList插入刪除快;

4、繼續(xù)問我linkedList可以用for循環(huán)遍歷嗎?

答;能不用盡量不要用,linkedList底層是鏈表,它使用for進行遍歷,訪問每一個元素都是從頭開始訪問然后直到找到這個元素,比如說找第三個節(jié)點,需要先找到第一個節(jié)點然后找到第二個節(jié)點;繼續(xù)找第4個節(jié)點,不是從第三個節(jié)點開始找的,還是從第一個節(jié)點開始,所以非常的慢,不推薦,可以用迭代器進行遍歷。

5、介紹一下ConCurrenthashmap

答:我感覺是因為一面問了hashmap,所以二面面試官可能是看見了面試記錄,額,這塊我非常熟,這個我又講了很長時間,講了ConCurrentHashMap的底層的分段鎖的結構,講了ConCurrentHashmap的get源碼,get源碼是沒有使用鎖的,這里我把get源碼背寫了下來,并給面試官講了get源碼在插入修改刪除的多線程下是安全的;然后講了put操作,remove,擴容操作,然后講了在1.7和1.8的區(qū)別,引入了紅黑樹,鏈表長度大于8轉(zhuǎn)換成紅黑樹,采用了CAS+synchronized來保證并發(fā)安全,吧啦吧啦又講了挺長時間;

6、來看看這道題,說著拿出來一個小紙條

答:這個紙條感覺每個面試官都是只有紙條,所以盡可能地和周圍的同學多交流,有一定的肯可能他的面試官就你的面試官。題目:讓我自己手算a,b,c,d的值。

結果是a = 8b=5,c=7,d=35.計算完我問他對不對,他沒勒我。。。

7、然后問我單利模式了解不,寫一個單例模式?

答:這個之前準備過,我寫了一個雙重鎖的單例模式。

8、接著問了我虛擬機了解嗎,介紹一些虛擬機的內(nèi)存模型?

答:這個之前也準備過,這里要注意了,虛擬機的內(nèi)存模型和運行時的數(shù)據(jù)區(qū)域不是一回事;虛擬機內(nèi)存模型又叫JMM,就是每個線程有自己的工作內(nèi)存,然后又一個主內(nèi)存,線程工作的時候都是在自己的工作內(nèi)存中拷貝一個主內(nèi)存的副本;還說了JMM的happens before原則,程序順序原則,鎖原則,線程中斷原則,傳遞性原則,還有其他的沒想起來就沒說了。

9、介紹一些你了解的垃圾回收算法?

答:標記清除,標記整理,復制算法,把每個算法是啥說了一遍;

10、問到這里,問了我你知道SurvivorRatio這個參數(shù)為啥初始是默認的8:1:1嗎?

答:這個由于剛才剛問了垃圾回收算法,我覺得可能有關聯(lián),于是我說,方便復制算法操作,Eden區(qū)域大多數(shù)都是朝生夕死的,這個比例,可以方便復制算法的中from和to來回進行復制存活的對象,額,說完,他沒有說啥,感覺是默許了吧;

11、突然又問,二叉樹了解嗎,寫一個二叉樹的深度搜索遍歷?

答:當時我聽到中道題,有點懵,什么是二叉樹的深度搜索遍歷,我只知道層次遍歷,前序后序中序遍歷啊,我想了想,感覺和后序遍歷挺像的,我覺得應該就是后序遍歷吧,我就先寫了個后序遍歷的遞歸寫法。

然后他看了一眼,沒說啥,感覺這個面試官有點話少冷淡,全程不和我互動,emmmm....下來自己百度了下,對的。。。

這個代碼問完我,讓后讓我去等通知,我感覺回答的還行,果然沒過幾分鐘,通知我去三面;

三面

1、照例自我介紹和項目介紹;

2、上來就讓我手撕一個單例模式。。。

答:繼續(xù)寫我的雙重鎖模式

3、讓我講了講代碼是啥啥意思?

答:STEP 1. 線程A訪問getInstance()方法,因為單例還沒有實例化,所以進入了鎖定塊。STEP 2. 線程B訪問getInstance()方法,因為單例還沒有實例化,得以訪問接下來代碼塊,而接下來代碼塊已經(jīng)被線程1鎖定。STEP 3. 線程A進入下一判斷,因為單例還沒有實例化,所以進行單例實例化,成功實例化后退出代碼塊,解除鎖定。STEP 4. 線程B進入接下來代碼塊,鎖定線程,進入下一判斷,因為已經(jīng)實例化,退出代碼塊,解除鎖定。STEP 5. 線程A初始化并獲取到了單例實例并返回,線程B獲取了在線程A中初始化的單例。大體是這么回事。

4、由于我的項目中提及到JVM,所以給我出了一個場景題,垃圾會收器中,標記清除多次后,由于采用的是標記清除算法,那么你覺得可能會出現(xiàn)什么問題?

答:然后我說由于產(chǎn)生了內(nèi)存碎片,所以當分配一個大對象的時候,由于內(nèi)存不連續(xù),那么會產(chǎn)生full GC。

5、這里提及到了full gc,問我,哪些情況會產(chǎn)生full GC,哪些情況產(chǎn)生minor GC?

答:minor會產(chǎn)生在eden區(qū)滿了,fullGC產(chǎn)生在老年代的剩余空間不足,以及永久代內(nèi)存不足也會發(fā)生fullGC。

6、除了你項目中的內(nèi)存溢出問題,你還知道哪些關于內(nèi)存溢出內(nèi)存泄漏的?

答:這里之前了解過ThreadLocal,我說,ThreadLocal中的鍵值對中的鍵是一個弱引用,那么在內(nèi)存回收的時候,這個鍵很可能會被回收掉,然后鍵沒了,就無法找到value的值,造成了內(nèi)存泄漏;

7、然后給我出了一個動態(tài)規(guī)劃的手寫代碼題,說來寫個代碼吧,大體是在n*m的矩陣方格中,找一個最大的正方形是幾乘幾的,有點忘了。

答:由于沒有準備過動態(tài)規(guī)劃的題目,這個題目看到我只說了暴力解決的方法,然后面試官提示讓我用動態(tài)規(guī)劃做,我想了半天沒想出來。。。。當時感覺應該是涼了。。。

時間差不多的時候,面試官說,就到這里吧,然后讓我出去等通知,果然通知我今天面試結束了,整整一個下午,特別特別累,前兩面結束的時候感覺特別穩(wěn),沒想到最后還是因為手寫代碼這一塊不會動態(tài)規(guī)劃掛掉了,當時感覺心態(tài)有點崩。。。

結束語

最終美團面試還是掛了,,,留下了沒有技術的眼淚。。。所以痛下決心要好好學習算法,這不今天又刷了一道 leetcode。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 本文作者在一年之內(nèi)參加過多場面試,應聘崗位均為 Java 開發(fā)方向。在不斷的面試中,分類總結了 Java 開發(fā)崗位...
    TheOne_6e96閱讀 983評論 0 9
  • 所有知識點已整理成app app下載地址 J2EE 部分: 1.Switch能否用string做參數(shù)? 在 Jav...
    侯蛋蛋_閱讀 2,711評論 1 4
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,674評論 1 32
  • 互聯(lián)網(wǎng)提前批基本告一段落,大大小小的offer也拿了一些,秉著回報社會,堅持中國特色社會主義,挽救新一代碼農(nóng)的思想...
    java成功之路閱讀 575評論 0 0
  • 作為一個男人,永遠奔跑在路上。你不一定英俊,也不一定瀟灑,但你要懂得擔當、胸懷要大。你不一定有卓越的才華,只要你能...
    秦時明月wk閱讀 3,539評論 55 115

友情鏈接更多精彩內(nèi)容