京東&美團研發面經
本文首發於微信公衆號:程序員江湖
京東Java工程師
美團點評 後臺開發工程師
1
京東提前批Java開發
電話面試
本來想等面完再發個面經,等了半個月了沒等到。
一面:
0 自我介紹,講一下項目中的多線程實現
1 Java的線程池的參數,拒絕策略,阻塞隊列等實現和使用
2 fixethreadpool使用的是什麼阻塞隊列,如果使用arrayblockingqueue或者linkedblockingqueue會有什麼問題。
3 ArrayList和linkedlist有什麼區別,擴容呢
4 hashmap,hashtable,concurrenthashmap1.7和1.8選一個說一下。
5 jdk1.8針對hashmap使用紅黑樹優化目的是什麼,紅黑樹的結構說一下。
紅黑樹的特性:
(1)每個節點或者是黑色,或者是紅色。
(2)根節點是黑色。
(3)每個葉子節點(NIL)是黑色。 [注意:這裏葉子節點,是指爲空(NIL或NULL)的葉子節點!]
(4)如果一個節點是紅色的,則它的子節點必須是黑色的。
(5)從一個節點到該節點的子孫節點的所有路徑上包含相同數目的黑節點。
6 JVM瞭解麼,說一下內存結構,堆區的分代,垃圾回收以及所用算法。
7 爲什麼要劃分年輕代和老年代,方法區是否會垃圾回收,還問了gc時要掃描哪些位置,說了gc root,他問具體呢,虛擬機棧的局部變量,然後說其他忘了。
在Java虛擬機中判斷一個對象是否可以被回收,有一種做法叫可達性分析算法,也就是從GC Root到各個對象,如果GC Root到某個對象還有可達的引用鏈,那麼這個對象就還不能被回收,否則就等着被收割吧。
這裏既然提到了GC Root,那麼哪類對象可以作爲GC Root呢,這是一個在面試中經常被問到的問題。
《深入理解Java虛擬機》一書中是這麼說的,一下幾種對象可以作爲GC Root:
虛擬機棧中的引用對象
方法區中類靜態屬性引用的對象
方法區中常量引用對象
本地方法棧中JNI引用對象
8 MySQL瞭解麼,說一下建立索引要考量的點,說了索引篩選率,過濾使用的字段,以及explain查看是否使用了索引等。
1、表的主鍵、外鍵必須有索引;
2、數據量超過300的表應該有索引;
3、經常與其他表進行連接的表,在連接字段上應該建立索引;
4、經常出現在Where子句中的字段,特別是大表的字段,應該建立索引;
5、索引應該建在選擇性高的字段上;
6、索引應該建在小字段上,對於大的文本字段甚至超長字段,不要建索引;
7、頻繁進行數據操作的表,不要建立太多的索引;
9 MySQL的隔離級別有哪些,默認級別是什麼,他說是可重複讀。
10 爲什麼select方法默認可以不加鎖呢,明明可能會有併發衝突,我說根據隔離級別判斷是否加鎖,他說可重複讀級別下select是不加鎖的,爲什麼。
我說應該是用了樂觀鎖,也就是MVCC多版本併發控制,適用於讀多寫少,所以不加鎖。
11 Redis提供有哪些數據類型
二面:
1 講一下兩個項目,分別做了什麼,覺得跟自己做的項目有什麼不同,如何看待這種不同,應該如何改進。
2 平時怎麼學習,你的博客一般寫了什麼,覺得和高質量博客的差距在哪裏。
我說我原創的都是比較基礎的,進階一點的博客主要是整理別人的文章。
3 Java虛擬機瞭解麼,講一下內存分區和gc,如何排查堆內存的問題,說使用jmap轉儲dump文件分析或者使用jstat等工具檢測gc。
4 Java的線程池瞭解麼,看過它的源代碼麼,怎麼修改源碼可以實現線程狀態的監控呢。
visualvm工具
5 web框架了解什麼,講講SpringMVC的啓動過程,講了mvc上下文以及dispatcher初始化過程和請求流程。
6 設計模式瞭解麼,單例,工廠,分別出現在什麼場景。
Spring,servlet,Spring的工廠方法
7 MySQL的select1和select *有什麼區別,爲什麼加索引訪問比不加索引要快。
8 負載均衡的幾種算法,緩存的幾種淘汰策略。
9 計算機網絡瞭解麼,http的header有哪些字段,是否包含ip地址。
10 有什麼想問,能先來實習麼,不能。
我說了不能先實習,然後就沒有然後了,emmm,等了2周沒有動靜,估計涼涼。
美團一面
後臺開發工程師
電話面試
1 實習經歷
2 object類有哪些方法,hashcode,equals,clone,notify,wait。問我hashcode用在哪,說了hashmap
3 hashmap的結構,1.7和1.8有哪些區別,除了紅黑樹優化以外還有哪些改進,說了擴容時頭插法改尾插法。
4 開始問我頭插法和尾插法的區別,頭插法在多線程時會出現什麼問題,我說的是擴容時的死鏈,後來引導我說了併發插入的數據丟失問題。
5 concurrenthashmap的實現原理,1.7和1.8有什麼區別,分段鎖,synchronized和cas操作。
6 cas操作是怎麼實現的,爲什麼是原子性的。wait和notify方法用在哪裏,wait和sleep的區別,notify後面的代碼會不會運行。
7 synchronized和lock的區別在哪裏,使用方式上有什麼區別。lock的trylock方法做了什麼,我說了cas操作和加入阻塞隊列,以及公平鎖和非公平鎖的區別。
8 你的項目用到countdownlatch,爲什麼要用,有什麼問題,如何監控這個問題。
9 線程池用過哪些,線程池有哪些參數,然後問我幾個常用線程池的用法和實際場景問題。
10 cas操作是哪個包裏的,volatile變量用過麼,有什麼作用,原理是什麼。i++是不是原子操作,爲什麼。
11 ArrayList和linkedlist有什麼區別,如何遍歷,使用for循環遍歷linkedlist爲什麼不行,linkedlist能使用索引訪問麼,使用迭代器呢。
這裏我打錯了。linkedlist也可以使用for循環遍歷。因爲jdk提供了api。
12 JVM內存模型介紹一下,堆區怎麼分代,分代垃圾回收算法說一下,老年代使用標記清除有什麼問題。
13 說幾個垃圾回收器,cms回收器有哪幾個過程,停頓幾次,會不會產生內存碎片。老年代產生內存碎片會有什麼問題。問我有沒有做過JVM優化。
14 jvm場景問題, 標記清除多次後老年代產生內存碎片,引起full gc,接下來可能發生什麼問題。我說分配大對象可能引起full gc。
15 哪些情況會觸發full gc,full gc是否包括young gc和major gc,如果只包括這兩個,爲什麼要特地做full gc,我回答的是full gc還會回收方法區和堆外內存。
16 Java中有哪些引用,分別有什麼用。
17 Spring的ioc和aop說一下。
aop記錄日誌,什麼方法需要記錄日誌呢,增刪改查都要麼,我說前三個要把。他說那麼如果有多級調用的rpc查找操作是不是也要記錄日誌,我說那是的。
18 分佈式用過哪些技術,我說自己跑過一些demo,問我zookeeper有什麼用,然後問我dubbo裏的zookeeper是做什麼的,我說服務註冊中心。
19 服務註冊中心實現什麼功能,消費者的本地緩存如果失效了怎麼辦,我剛開始說多次失敗重新拉取,他說這樣不行吧,我就說讓生產者和註冊中心維持心跳,失效時刪除該節點並且更新消費者緩存即可。
20 MySQL用的挺多,問你一下,innodb的b+樹索引,主鍵索引,聚簇索引有什麼區別。
21 MySQL裏有哪些鎖,行鎖表鎖,樂觀鎖呢,我說了版本號和MVVC,開始問我MVVC。
22 事務的實際場景問題,兩個事務,一個查一個新增,問能否查到新增的,我問他隔離級別,他說RR。MySQL的RR避免幻讀,所以讀不到新增數據。
23 MySQL的死鎖怎麼產生的,舉了兩個例子。
24 三個事務,兩個加讀鎖,另一事務嘗試刪除,應該是不行的。
25 兩個事務,一個寫提交,另一個能不能讀到,可以讀到。
26 大概就是這些了。
美團貌似涼涼,這次確實答得不是很好。
▼更多精彩內容
更多校招乾貨請關注公衆號:程序員江湖
喜歡記得來一個
更多校招乾貨請關注公衆號:程序員江湖。
--------------------- 本文來自 How_2_Play_Life 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/a724888...