1程序員
京東提早批Java開發web
電話面試面試
原本想等面完再發個面經,等了半個月了沒等到。算法
一面:設計模式
0 自我介紹,講一下項目中的多線程實現api
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查看是否使用了索引等。
一、表的主鍵、外鍵必須有索引;
二、數據量超過300的表應該有索引;
三、常常與其餘表進行鏈接的表,在鏈接字段上應該創建索引;
四、常常出如今Where子句中的字段,特別是大表的字段,應該創建索引;
五、索引應該建在選擇性高的字段上;
六、索引應該建在小字段上,對於大的文本字段甚至超長字段,不要建索引;
七、頻繁進行數據操做的表,不要創建太多的索引;
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...