美團超詳細面經(附答案)二三面

美團超詳細面經(附答案)二三面

二面

一面過了沒多久,就立馬通知二面了,中途感覺有點餓了,美團還挺人性話的,在後面的桌子上放了一堆餅乾,忘了餅乾的名字了,總之特別好吃,我吃了好幾塊。
  1. 自我介紹
  2. 項目介紹,及其亮點介紹。
  3. 答:這個繼續這篇文章就是背;可以作為你面試的項目亮點的文章,不來看看嗎?
  4. 然後問了我集合瞭解嗎,讓我說話ArrayList和LinkedList的區別?
  5. 答:ArrayList底層是數組,LinkedList底層是鏈表,ArrayLIst查找數據快,LinkedList插入刪除快;
  6. 繼續問我linkedList可以用for循環遍歷嗎?
  7. 答;能不用盡量不要用,linkedList底層是鏈表,它使用for進行遍歷,訪問每一個元素都是從頭開始訪問然後直到找到這個元素,比如說找第三個節點,需要先找到第一個節點然後找到第二個節點;繼續找第4個節點,不是從第三個節點開始找的,還是從第一個節點開始,所以非常的慢,不推薦,可以用迭代器進行遍歷。
  8. 介紹一下ConCurrenthashmap
  9. 答:我感覺是因為一面問了hashmap,所以二面面試官可能是看見了面試記錄,額,這塊我非常熟,這個我又講了很長時間,講了ConCurrentHashMap的底層的分段鎖的結構,講了ConCurrentHashmap的get源碼,get源碼是沒有使用鎖的,這裡我把get源碼背寫了下來,並給面試官講了get源碼在插入修改刪除的多線程下是安全的;然後講了put操作,remove,擴容操作,然後講了在1.7和1.8的區別,引入了紅黑樹,鏈表長度大於8轉換成紅黑樹,採用了CAS+synchronized來保證併發安全,吧啦吧啦又講了挺長時間;
  10. 來看看這道題,說著拿出來一個小紙條
  11. 答:這個紙條感覺每個面試官都是隻有紙條,所以儘可能地和周圍的同學多交流,有一定的肯可能他的面試官就你的面試官。題目:讓我自己手算a,b,c,d的值,
美團超詳細面經(附答案)二三面


  1. 結果是a = 8b=5,c=7,d=35.計算完我問他對不對,他沒勒我。。。
  2. 然後問我單利模式瞭解不,寫一個單例模式?
  3. 答:這個之前準備過,我寫了一個雙重鎖的單例模式。
美團超詳細面經(附答案)二三面



  1. 接著問了我虛擬機瞭解嗎,介紹一些虛擬機的內存模型?
  2. 答:這個之前也準備過,這裡要注意了,虛擬機的內存模型和運行時的數據區域不是一回事;虛擬機內存模型又叫JMM,就是每個線程有自己的工作內存,然後又一個主內存,線程工作的時候都是在自己的工作內存中拷貝一個主內存的副本;還說了JMM的happens before原則,程序順序原則,鎖原則,線程中斷原則,傳遞性原則,還有其他的沒想起來就沒說了。
  3. 介紹一些你瞭解的垃圾回收算法?
  4. 答:標記清除,標記整理,複製算法,把每個算法是啥說了一遍;
  5. 問到這裡,問了我你知道SurvivorRatio這個參數為啥初始是默認的8:1:1嗎?
  6. 答:這個由於剛才剛問了垃圾回收算法,我覺得可能有關聯,於是我說,方便複製算法操作,Eden區域大多數都是朝生夕死的,這個比例,可以方便複製算法的中from和to來回進行復制存活的對象,額,說完,他沒有說啥,感覺是默許了吧;
  7. 突然又問,二叉樹瞭解嗎,寫一個二叉樹的深度搜索遍歷?
  8. 答:當時我聽到中道題,有點懵,什麼是二叉樹的深度搜索遍歷,我只知道層次遍歷,前序後序中序遍歷啊,我想了想,感覺和後序遍歷挺像的,我覺得應該就是後序遍歷吧,我就先寫了個後序遍歷的遞歸寫法
美團超詳細面經(附答案)二三面


  1. ,然後他看了一眼,沒說啥,感覺這個面試官有點話少冷淡,全程不和我互動,emmmm....下來自己百度了下,對的。。。
這個代碼問完我,讓後讓我去等通知,我感覺回答的還行,果然沒過幾分鐘,通知我去三面;

三面

  1. 照例自我介紹和項目介紹;
  2. 上來就讓我手撕一個單例模式。。。
  3. 答:繼續寫我的雙重鎖模式
美團超詳細面經(附答案)二三面


  1. 讓我講了講代碼是啥啥意思?
  2. 答:STEP 1. 線程A訪問getInstance()方法,因為單例還沒有實例化,所以進入了鎖定塊。STEP 2. 線程B訪問getInstance()方法,因為單例還沒有實例化,得以訪問接下來代碼塊,而接下來代碼塊已經被線程1鎖定。STEP 3. 線程A進入下一判斷,因為單例還沒有實例化,所以進行單例實例化,成功實例化後退出代碼塊,解除鎖定。STEP 4. 線程B進入接下來代碼塊,鎖定線程,進入下一判斷,因為已經實例化,退出代碼塊,解除鎖定。STEP 5. 線程A初始化並獲取到了單例實例並返回,線程B獲取了在線程A中初始化的單例。大體是這麼回事。
  3. 由於我的項目中提及到JVM,所以給我出了一個場景題,垃圾會收器中,標記清除多次後,由於採用的是標記清除算法,那麼你覺得可能會出現什麼問題?
  4. 答:然後我說由於產生了內存碎片,所以當分配一個大對象的時候,由於內存不連續,那麼會產生full GC;
  5. 這裡提及到了full gc,問我,哪些情況會產生full GC,哪些情況產生minor GC?
  6. 答:minor會產生在eden區滿了,fullGC產生在老年代的剩餘空間不足,以及永久代內存不足也會發生fullGC。
  7. 除了你項目中的內存溢出問題,你還知道哪些關於內存溢出內存洩漏的?
  8. 答:這裡之前瞭解過ThreadLocal,我說,ThreadLocal中的鍵值對中的鍵是一個弱引用,那麼在內存回收的時候,這個鍵很可能會被回收掉,然後鍵沒了,就無法找到value的值,造成了內存洩漏;
  9. 然後給我出了一個動態規劃的手寫代碼題,說來寫個代碼吧,大體是在n*m的矩陣方格中,找一個最大的正方形是幾乘幾的,有點忘了,
  10. 答:由於沒有準備過動態規劃的題目,這個題目看到我只說了暴力解決的方法,然後面試官提示讓我用動態規劃做,我想了半天沒想出來。。。。當時感覺應該是涼了。。。
時間差不多的時候,面試官說,就到這裡吧,然後讓我出去等通知,果然通知我今天面試結束了,整整一個下午,特別特別累,前兩面結束的時候感覺特別穩,沒想到最後還是因為手寫代碼這一塊不會動態規劃掛掉了,當時感覺心態有點崩。。。
作者:喬戈裡
原文:轉載自公號,程序員喬戈裡,已獲授權


分享到:


相關文章: