(轉)美團面試題整理


背景:最近美團在招聘,打算好好准備准備簡歷,然后投遞一波。


美團點評 社招 一面(3.6中午)結果通過 美女面試官

1 HashMap的put怎么實現,如何解決hash沖突。
調用putval,計算相應hash碼,然后初始化(默認64的capacity)或調用resize函數調整大小,判斷bucket是否有值,若沒有在數組初始化改值。若有則以拉鏈法(鏈表的形式)解決hash沖突,這里和ThreadLocalMap不一樣,ThreadLocalMap使用的是線性探測法,接着將相應節點加入鏈表頭部。如果超過8個元素會進化為RBtree,防止hash攻擊。
RBtree是怎樣的數據結構,有什么性質?
二叉樹,有序的,四種性質。從而推得路徑最長2n,最短n。復雜度為log2N.(此處省略n多話,感興趣的同學請自行Google)
RBtree什么時候會變色?
旋轉時,共有四種旋轉方式。一般是為了保持平衡,如左邊太長,右邊太短這樣。(打哈哈過去,具體記不清了)
hashmap什么時候會調整大小?
根據負載因子來搞事,默認為0.75。
什么是負載因子?
根據capacity來,舉個例子,當capacity為100時,如果HashMap的ele的數量到了75就會resize,resize后的大小為原來的2倍,這樣可以直接使用位運算得到原來的元素新的hash值。
擴容存在什么問題?
(楞了一會,發現應該是說多線程的情況)然后說了多線程會有死循環問題。如果要解決可以使用concurrentHashMap。

多線程下容易出現resize()死循環 本質 = 並發 執行 put()操作導致觸發 擴容行為,從而導致 環形鏈表,使得在獲取數據遍歷鏈表時形成死循環,即Infinite Loop


為什么有死循環?(ps:此處要搞清楚了
扯了半天,發現不畫圖,只通過電話根本扯不清。然后說就是因為1.7擴容后鏈表會逆序,1.8不會,所以1.8沒這個問題,1.7就是兩個線程同時擴容,一個擴到一半,到另一個了開始並完成擴容,之前那個再繼續,就會出現。(然后說小姐姐,有機會我當面畫給你看,開個玩笑)
  8.你剛才提到concurrentHashMap,你知道怎么實現嗎?
     1.7使用分段鎖,分為16個,每個segment可以視為一個hashtable,然后一次一個線程只鎖一個segment,減小了鎖的粒度,提高了並發。1.7使用的是Lock的實現類,可重入鎖來同步的。1.8使用的是CAS和synchronized。如果已有元素,需要解決hash沖突,會使用synchronized鎖住相應的bucket,然后再添加,同樣元素在八個以上會轉化為RBtree。
  9.你提到Lock,知道哪些相應的鎖?
   讀寫鎖,可重入鎖
10.知道AQS嗎,他的實現是怎樣的?AQS可重入嗎?
知道,讀寫鎖,可重入鎖都是通過AQS實現的,AQS維護一個鏈表,並主要提供tryacquire和tryrelease方法。默認為非公平鎖,此時當一個線程需要請求鎖時...

11.AQS如何實現可重入

維護一個int類型的status作為計數器,同一個線程acquire就加1,release就減1.到0就釋放鎖。讀寫說則是將status分為兩部分使用。內部維護一個shift變量做位運算的變化。。。(AQS可以看占小狼的blog或者並發編程的藝術)

12.這個計數器的修飾符是什么
volatile

13.volatile什么作用
指令重排序,內存可見性
14、指令重排序指什么?指令重排序的好處是什么?如何防止指令重排序。
編譯器重排序,cpu重排序,內存重排序。好處是流水線技術,提高並發性能等。通過禁止編譯器優化,以及匯編使用Lock信號,java中的cpp加入volatile等防止。
15.內存可見性具體指什么?volatile通過什么機制防止

講了下JMM,以及計組原理中的三級cache,buffer,緩存行等。

順便扯了下c語言的volatile只保證防止編譯器優化以及內存可見性的語義,而不能保證順序性。然后是C11的acquire,release語義 接着回歸java,扯了下內存屏障的實現與作用。(並發編程的藝術)然后扯了下#LOCK信號,包括總線鎖,mesi的緩存一致性等。最后是先行發生的語義(語無倫次,不過基本點都講到了)

16.synchronized內部分為幾種鎖,他們的使用場景是什么
偏向鎖,輕量級鎖,重量級鎖(又有自旋鎖等),然后詳細講了實現和使用場景(周志明的書和並發編程的藝術都有講,此處省略)。

 17.nio用過沒有

沒有,講了下自己准備學習netty,然后談了下c語言的nio,包括Nginx和redis的多路復用,然后講了下select和epoll的區別。以及epoll的優點和實現。然后設想java里的nio應該也是映射到epoll里面。

18. 操作系統調度進程有哪些算法?

優先級,時間片,FIFO,最近deadline什么的。

19.Redis有幾種持久化方式?

四種,2種被廢棄,比如磁盤交換。目前主要使用rdb,aof。rdb屬於物理備份,aof屬於邏輯日志(逐行追加)。然后又講了aof重寫。rdb和aof的配置。以及aof的rewrite機制。

18.Redis分布式的實現方式

(此處省略,Redis的設計與實現有詳解)

19。 數據庫特性
ACID,順便分別提了下實現原理

20.具體講下隔離性。
四種隔離級別和實現方式

21.如何理解一致性?

說了下單個事務的一致性,以及分布式一致性。

22 一致性的三種級別
強,弱,最終一致性

23,持久性的實現方式

redo,同時使用insert buffer等方式。

24. 問了下希望base在成都還是北京

25. 結束,有什么問題嗎?

java開發3輪技術面+hr面 面經

java開發3輪技術面+hr面 面經

技術一面:
一面基本上面的還算基礎 沒有過多的刁難 不過問題量特別大
1、自我介紹
巴拉巴拉,大致說了下實習和自己平時自己喜歡做的事情
2、我們先聊聊java基礎知識吧,說出Object類的常用方法?

toString(),clone(),線程的三個方法:wait()notify()notifyAll(),hashcode(),finallize(),equals()
1
大致講了上面這些個方法 並說了下各個方法的作用。。。。
3、剛剛說到object的常用方法,這些方法你應該都很熟悉吧,那你說說你對equal和hashcode這兩個方法的認識?
主要談了下兩個的作用 以及 當重寫equal方法時候一定要記得重寫hashcode方法,然后面試官就問了為什么,然后就繼續巴拉巴拉。。。
然后面試官緊接着問 兩個對象如果equals那么這兩個對象的hashcode一定相等么 回答是! 那如果兩個對象的hashcode相等那么這兩個對象是否一定equals?回答 不一定!理由其實 就是 關於 講重寫這兩個方法的情況。。。。
4、多線程用過吧?寫過一些demo,那你說說多線程之間的通信,回答用wait sleep notify notifyAll配合使用 然后就問 wait和sleep一樣嗎?回答不一樣,然后巴拉巴拉談了下,關於對象鎖的釋放,是否需要喚醒。。。
5、嗯,剛剛談到了鎖,一下面試官就扯出了鎖,看你簡歷上ssh mybatis都熟悉,那你知道悲觀鎖和樂觀鎖吧?答知道,然后講了下兩個的區別以及應用場景
6、你平時數據庫一般用的什么 mysql 那你說說在工作中一般用的什么數據庫引擎 答 mysql默認的是InnoDB存儲引擎 敢情面試官想給我使絆子來着,接着就讓說InnoDB和MyISAM之間使用場景問題了,然后就就着這兩種存儲引擎的區別 以及 優缺點巴拉巴拉說了一通
7、平時是怎么處理事務的,講下對事務的了解
巴拉巴拉。。。。
8、看你簡歷上講了分庫分表 談談兩個的使用 以及 在工作中 怎么去設計
這里主要是結合自己實習的項目來說的
9、mybatis緩存 以及談談你們項目為什么用spring mvc+mybatis 而不用Hibernate?
主要是說說一級緩存 二級緩存 然后 講講mybatis相對於Hibernate來說的優點好處之類
10、項目里用到了redis 為什么用它?
巴拉巴拉講了一通業務需要 緩存數據 實現會話緩存的機制之類
11、.java如何實現多態
講了下重載和重寫
12、談談java的垃圾回收機制
從java提供垃圾回收機制說起,談到了回收時機 何時回收 以及幾個常用的垃圾回收算法,然后面試官問了解G1嗎,聽過但沒具體了解了,實話實說,就沒再繼續了。。
13、談談網頁登錄模塊里記住我這個功能?
從session一直到cookie,巴拉巴拉說了下各自的實現原理 以及緩存機制。。。
14、談談三次握手四次揮手 以及為什么是三次 為什么是四次 一定要是四次嗎?
巴拉巴拉 結合網絡中 那兩個圖來就行了,肯定不一定是四次 具體原因 大家知道。。。
15、如果讓你設計一個大型網站,你覺得哪些東西是需要考慮的 為什么?
巴拉巴拉 談了負載 談了緩存 談了框架 然后面試官繼續問 就這些嗎 然后繼續扯 服務器 接着扯 。。。。
16、數據結構學的怎么樣 算法這塊?
還行吧,一直有刷題(其實是最近才刷 想哭)
好吧 問的差不多了 今天到這里吧,這兩天手機保持通暢,然后問我有什么問題要問的,然后我就問了團隊,問了面試情況,問了招聘最后會考慮學校嗎 實在沒底 因為看小哥聊得挺好 所以才敢問的。。。。

技術二面;
1、三次握手四次揮手
(其實沒搞明白為毛mt這么喜歡問這個問題 之前看面經好的童鞋提到了這個問題 還有就是沒讓自我介紹 我以為是要走過場了)
2、sql注入了解么
談了下 注入的原理 以及登錄功能模塊中 sql注入的 實現
3、集合框架肯定經常用吧?
於是自覺的從Collection聊到list arrayList vector LinkedList set map HashMap hashtable都通通扯了一遍,語速太快 感覺就跟背書一樣 面試官笑逗了,就說 小伙子背的不錯嗎,面試寶典沒少看吧 我無語!!接着就繼續說,你剛剛說的那些都是比較淺的東西,我問個比較基礎的吧,你知道HashMap的數據結構和實現原理吧? 數組和鏈表的結合體 順便談了下底層數組Entry 實現原理這塊 主要是說了下 hashing、put和get的實現過程,以及當遇到空值以及當兩個鍵有相同hashcode值的處理。。。然后問我知道ConcurrentHashMap不 於是又講了下這個和synchronizedMap的區別 以及 效率問題。。。
4、談談volatile
。。。。然后又問知道ThreadLoca不。。。。。
5、寫代碼:解決生產者消費者問題
用了Semaphore手寫的代碼 大概花了一些時間 跟面試官講了下實現。。。
6、問設計模式,百問不爽的答單例模式 讓說了四種單例模式的實現辦法?餓漢式 飽漢式 枚舉 然而我只說了這三種(好像還有一種最佳實踐 用內部類來實現)。。。
7、問了下java內存模型 講了下垃圾回收算法
又是一通巴拉巴拉 比較了各個算法的優劣和問題之類的。。。再問G1,幸虧一面后來去看了下,於是說了下大概的認知。。。
8、Java內存泄露的問題
大致又扯了下垃圾回收 然而好像不是面試官要的答案 尷尬。。。。
9、談redis和memcached
。。。。
10、用過NIO么,沒用過(我是講真話沒用過 不敢說用過)跳過
11、聊get post,http狀態碼,http header
巴拉巴拉說了下自己了解的,不是很滿意感覺。。。
12、講ssh搭建
。。。。
13、談spring mvc
。。。。
這講框架的兩個問題 就跟聊天一樣 你一句我一句的。。。。
14、談spring的事物管理
。。。。
15、談線程池
。。。。。
16、你有師兄之類的在mt么 為什么想來mt
巴拉巴拉。。。。
最后沒讓問問題 沒說下一面任何事情(以為掛了)

技術三面:
1、自我介紹+項目
。。。
2、懟項目,死懟,談業務需求,談遇到的問題
。。。。
3、還是項目,你在項目中做了以圖搜圖,你是怎么實現的,談談你的處理過程?
談了下圖像檢索的認識 聊了下自己用的sparse coding算法 談了下降維算法 說了一大通 不知道面試官挺懂沒。。。。
4、講下數據庫優化
主要說了索引、數據庫結構優化,然后牽扯出紅黑樹,讓手撕紅黑樹,然而寫不出來,講了下大概實現。。。數據庫結構優化主要講了下在項目中做到的表拆分和分區。。。
5、談談tomcat服務器
巴拉巴拉。。。。
6、講下sql的left join、right join、inner join
這個簡單。。。。
7、談spring的過濾
大致講了下登錄過濾的實現。。。
8、繼續談spring mvc的分層 以及問了些常用的注解
。。。
9、談談IOC
。。。。(又一送菜題)
10、連表查詢:笛卡爾積通過什么連接得到sql
巴拉巴拉 談笛卡爾積的實現。。。。
11、對‘a’,‘b’,‘c’,‘d’排序,排成指定的順序
這個我不會。。。
12、算n個數內的質數的和
這個簡單,用一個數組保存所有質數 然后計算數組的sum即可。。。
13、一個圓環上有n個點 a從任意一個點出發 到達下一個點都需要Ag能量,每一個點都有cg能量補給,假設a最初有Bg能量,問a最初Ag能量為多少能保證a繞圓環一周。。。
最后一個問題大致是這樣的。。。。。
14、談談自己的學校
第一次遇到這樣的問題,還是技術面里。。。。。。。

hr面:
1、why投mt
。。。。。
2、why投外賣配送bu
。。。。
3、自己最想從事什么行業
。。。。。
4、為什么打算在上海工作,打算長期發展嗎?
。。。。。
5、三個詞語概括自己的性格
。。。。。
6、為什么讀研?
。。。。。
(又一次遇到這個問題 第二次了 因為是工作的時候考研的)
7、換我來問問題了。。。。

大概想起來的就上面那些 技術面的比較深刻 就大概記錄下吧 很多問題 回答起來估計要很多時間,大家參考參考就行 祝大家早日收到offer。。。。

美團內推(一面+二面+三面)面試題目

美團一面(電話)

  1.  自我介紹
  2.  項目介紹
  3.  Redis介紹
  4.  了解redis源碼么
  5.  了解redis集群么
  6.  Hashmap的原理,增刪的情況后端數據結構如何位移
  7.  hashmap容量為什么是2的冪次
  8.  hashset的源碼
  9.  object類你知道的方法
  10.  hashcode和equals
  11.  你重寫過hashcode和equals么,要注意什么
  12.  假設現在一個學生類,有學號和姓名,我現在hashcode方法重寫的時候,只將學號參與計算,會出現什么情況?
  13.  往set里面put一個學生對象,然后將這個學生對象的學號改了,再put進去,可以放進set么?並講出為什么
  14.  Redis的持久化?有哪些方式,原理是什么?
  15.  講一下穩定的排序算法和不穩定的排序算法
  16.  講一下快速排序的思想

美團二面(現場)

  1.  自我介紹
  2.  講一下數據的acid
  3.  什么是一致性
  4.  什么是隔離性
  5.  Mysql的隔離級別
  6.  每個隔離級別是如何解決
  7.  Mysql要加上nextkey鎖,語句該怎么寫
  8.  Java的內存模型,垃圾回收
  9.  線程池的參數
  10.  每個參數解釋一遍
  11.  然后面試官設置了每個參數,給了是個線程,讓描述出完整的線程池執行的流程
  12.  Nio和IO有什么區別
  13.  Nio和aio的區別
  14.  Spring的aop怎么實現
  15.  Spring的aop有哪些實現方式
  16.  動態代理的實現方式和區別
  17.  Linux了解么
  18.  怎么查看系統負載
  19.  Cpu load的參數如果為4,描述一下現在系統處於什么情況
  20.  Linux,查找磁盤上最大的文件的命令
  21.  Linux,如何查看系統日志文件
  22.  手撕算法:leeetcode原題 22,Generate Parentheses,給定 n 對括號,請寫一個函數以將其生成新的括號組合,並返回所有組合結果。

美團三面(現場)

  1.  三面沒怎么問技術,問了很多技術管理方面的問題
  2.  自我介紹
  3.  項目介紹
  4.  怎么管理項目成員
  5.  當意見不一致時,如何溝通並說服開發成員,並舉個例子
  6.  怎么保證項目的進度
  7.  數據庫的索引原理
  8.  非聚簇索引和聚簇索引
  9.  索引的使用注意事項
  10.  聯合索引
  11.  從底層解釋最左匹配原則
  12.  Mysql對聯合索引有優化么?會自動調整順序么?哪個版本開始優化?
  13.  Redis的應用
  14.  Redis的持久化的方式和原理
  15.  技術選型,一個新技術和一個穩定的舊技術,你會怎么選擇,選擇的考慮有哪些
  16.  說你印象最深的美團點評技術團隊的三篇博客
  17.  最近在學什么新技術
  18.  你是怎么去接觸一門新技術的
  19.  會看哪些書
  20.  怎么選擇要看的書

 

 https://www.zhihu.com/question/60949531/answer/579002882

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM