【非廣告,純乾貨】這大概是我看過最有溫度的面經分享(已收割京東美團技術專家offer)...

公衆號後臺回覆「面試」,獲取精品學習資料


掃描下方二維碼瞭解詳情,試聽課程


《互聯網 Java 工程師面試突擊(第3季)》重磅升級,由原來的70講增至150講,內容擴充一倍,升級部分內容請參見文末

說明:本文來源於中華石杉架構班學員 dasthinker 同學在拿下美團、京東兩家互聯網大廠技術專家offer之後的面經總結

簡單自我介紹

作多年的枚「碼農」,對的年輕朋友們,是有點「⽼」哈,最近作是在家幾百人規模的互聯公司作。大家可能覺得,這個時期出來看機會,是往跳嗎?

 

不這麼認爲,藉此疫情的特殊時期,通過企業市場招聘情況也能幫你把握致業務發展向,這其實是好事。

 

當然了,招聘崗位有限,狼多少,崗位競爭肯定往年更加激烈的,所以需要珍惜每個機會。

 

如在新浪的位朋友也很缺,內部還在商討,少量HC還沒有正式放開...本次薪資漲幅還算滿意,具體就不便透露了。在談薪資⽅⾯,如果你能提前拿到其他公司Offer,且你之前Base還可以,那麼還是容易談的。

 

試結果:

京東、美團試已通過。具體定級對標P7上下這樣吧,個理解是資深、專家崗,因爲進去也基本都是活的,帶與否看情況。

 

試流程:

京東、美團多個部都是並⾏⾯試的,這個沒有正式談薪前都是沒問題的。

京東:三 / 四技術 + HRBP美團:四技術 + HRBP + 專職HR

感受美團HR專業性、與候選溝通⽅⾯體驗相對更好些,因招旺季,HR也都很忙。

HR職責也會細分,聯繫協調試的有專的HR、技術過會HRBP試,最後都通過確定職級,然後會有專職HR談薪資。

京東HR...,這⽅⾯相對美團吐槽也更多,所以後同學去引起注意即可,如果你是「不確定」的候選,各種情況可能都會遇到,家知道就好。

 京東⾯面試過程總結

式:電話試,他們都不露臉呀!好處是不⽤⼿擼代碼了。

京東物流:三輪或四輪技術

通常⼆⾯是研發同學(即未來跟你作的同事)、或三(架構師T7或T8,要給你定級的)、三或四(部負責,也會有技術)。你的定級是在最後兩綜合來確定的。

 

【京東⼆⾯】因爲⼀⾯⼆⾯都是研發同學,基本都是常試題,也不會很深,羣同學肯定都會。個在部內曾推過 Apollo 配置中試官也會讓你說出實現原理。

京東內部應該是不使 Dubbo 的,他們的RPC框架叫做「JSF」,內部實現機制 應該是跟 Dubbo 很像。所以京東試官要問RPC,基本都問到 Dubbo 實現原理,內部擴展機制等等,肯定不會問 JSF 了,也沒開源。

【京東架構師】 項問的很詳細,說的我很累~ 基本每個項具體實現案、亮點都講了下,遇到的問題。

具體的技術面

  1. JVM & GC 1)你們JVM線上使⽤的什麼垃圾回收算法?CMS、G1

  2. 詳細說⼀下CMS垃圾回收算法回收過程?4個階段

  3. CMS中的remark階段⽐較慢,怎麼分析和解決?

  4. - XX: +CMSScavengeBeforeRemark Remark前提前來⼀次YGC;增加CMS回收的線程數...

  5. 線上如何來分析GC問題?

  6. JVM線上是如何調優的?

  7. 1.7和1.8中jvm內存結構的區別?

  8. 發⽣Full GC時會回收Metaspace空間內存嗎?

這裏推薦一下「儒猿技術窩JVM專欄」,有不少作者親身經歷的JVM調優實戰案例。感興趣的朋友可以掃碼看看,面試來說足夠用了。

2、數據庫

1)鎖等待問題如何處理?個事務中調了本地事務,還調了RPC接

我說這涉及了分佈式事務了,他說不,把RPC接調放在最後...然實際邏輯並不定都這樣的...他應該是想問出現死鎖、間隙鎖問題應該如何來處理,說了下死鎖的解決思路,沒有太get到點上。

 

3、緩存 & 併發

1)併發下緩存與數據庫致性如何保證?

2)併發情況下扣減庫存如何處理?如何優化?參考杉架構筆記

3)當隊列滿了,核線程空閒、擴展線程也空閒,誰從隊列獲取?

4、JUC 1)爲什麼線程池要先創建coreSize⼤⼩的核線程?2)線程池中的各個參數的含義解釋下?

 

5、框架 & 源碼

1)SpringCloud和RPC具體都有哪些區別?

2)SpringCloud中遇到過哪些坑,具體降級了Eureka註冊中的坑。

3)最近分鐘上報的次數計算錯誤,bug

4)我保護機制,剔除Down掉服務器並不是90秒,也是個bug,少180秒以上。

 

6、算法題

1)編程珠璣道題:個40億的序數字,請找出不存在的數字

2)個很的List,⾥⾯都是int類型,如何實現加和?因爲電,就說了下思路

京東四⾯部⻔領導

1、介紹下項的亮點,有成就感的項

 

2、JVM相關深

  • 1)深⼊探討了CMS、GC Roots,跨代是如何進⾏GC的?有點發散,提到了GC Roots Tracing,Rset、Card Table

  • 2)ParallelScavenge瞭解嗎,什麼算法?實際是複製算法【⽼年代可以搭配Serial Old或者Parallel Old】

  • 3)爲什麼不能和CMS⼀起使⽤呢??後來聽說這個負責jvm源碼他都看過,研究很深。

 

3、MySQL索引如何做優化的?

1)假設有個表字段⼏⼗個,索引如何創建的?所有字段都能建嗎?區分度、選擇性、列基數

2)MySQL爲什麼是B + 樹的結構,爲什麼不能是紅樹呢?優化的是什麼,優化的是磁盤IO,減少磁盤尋址。

 

4、MQ隊列了哪些?答:Kafka。那融場景下,Kafka如何保證消息不丟失?答:ack = -1,Leader-->ISR寫所有的follower 

5、Redis過哪些數據結構?zset底層是什麼結構,hash和跳錶,爲什麼是跳錶,查找效率

 

6、其他

1)身優缺點?

2)句話總結下⾃⼰

3)對待加班的看法?

接下來,重磅節選美團的兩個部門的面試過程。

美團A部⻔⾯面試過程

式: 視頻鏈接,因爲可以⼿擼代碼,般職級越,技術試輪次越多

3-1以下應該是三輪技術⾯,3-1通常四輪技術輪技術和項負責⼈⾯,三、四輪是交叉或部

 

領導,五是HRBP,六專職HR談薪收到offer後接受開始背調,般需要5個背調結果給到公司,聯繫作時間必須準確誤。

3-2以上據少五輪技術,沒這待遇啊。體這樣,當然每個部安排順序不定相同。因爲是兩個部都做了試,試官格也不⼤⼀樣。

美團A部門一面技術

1、JVM如何優化的?CMS算法執流程?什麼情況下發的Full GC?

2、分佈式事務講下?結合項想講的可靠消息致性實現案 + 最送達通知案,最後也提到了單應多DB(JPA)、TCC事務以及適場景。

3、ES是如何調優的?副本機制作?寫doc操作執過程?

4、其他也都是基礎問題,印象不是很深刻了。

 

【美團A部門二面技術】

1、將最近做的兩個項詳細講解 + 現場畫出整體系統架構圖並結合架構圖講解+ 設計模式類圖

我是拿了張紙,畫出來然後對着電腦屏幕開講,這試畫可以想象下哈,試官隔着屏幕看。

2、因聊的項時間,也因爲電腦快沒電了,所以接下來道技術題他出完我很快回答出來了。

3、MySQL數據庫底層實現結構?B+樹結構,也講了數據,以及⻚⽬錄相關的

4、Spring Bean循環依賴如何解決的?

5、MyBatis級緩存如何實現的?

6、有個項⽬⽤的分佈式緩存是CouchBase,要求講下CouchBase基本原理?

7、RabbitMQ如何保證的?queue數據在節點之間如何同步的?死信隊列

如何實現的?

 

技術回答的很快,最後丟句「等HR電話」,我是有點懵逼,難道都該聊到hr

了,這不才2技術麼。

因爲電腦上沒電了,沒有多問,已經聊了個半時了。

後來才知道,是等HR電話通知我約下試官啊。。。果然是好久沒

了^_^

 

【美團A部門三面技術】

 講解了項的從客戶端到後端的具體流程。主要問了些擴展技術如Http2都有哪些改進的?Redis最新特性瞭解哪些?等等吧,總體也不是很難的。

 

【美團A部門四面技術】

1、我介紹、介紹具體項突出貢獻

2、離職原因?業務向如何考慮的?職業規劃?

3、併發與性能的關係?根據項經驗有發揮吧,但儘量還是答案宏觀點。

4、緩存和數據庫致性如何保證的?談到了分佈式鎖,那詳細講講分佈式鎖實現?redis setnx、redisson、zookeeper

5、項架構中如何做技術選型?

6、有什麼要問我的嗎?

【美團A部門五⾯】

1、爲什麼要離職,基於什麼原因考慮的?

2、你的未來職業規劃是什麼樣的?項中的⻆⾊是什麼樣的?

3、你認爲⾃⼰還有哪些需要提升的嗎?

4、你在團隊中的績效如何?

5、有什麼需要問我的嗎?

美團B部⻔門⾯面試過程彙總

講真,這個部門面試覆蓋面夠全面的,多數的中間件底層原理必問~

【美團B部門一⾯ 技術】

1、JVM中的CMS和G1垃圾回收算法具體區別?

2、問了兩道線程池相關問題,覺得沒啥問題了 此時,話鋒轉,咱們聊聊中間件相關吧 【後來聽說,家是有個模板^+^ ,都是套路哦~】

 

接下來開始問中間件相關:

 

1、Dubbo

    1.1 說下Dubbo的具體執流程,涉及哪些模塊,作

    1.2 使過過Dubbo哪些特性,做過哪些擴展?Dubbo的泛化有了解過嗎?

    1.3 Dubbo中的註冊中Zookeeper是如何註冊上去的?

2、Zookeeper

    2.1 Zookeeper節點有哪種類型(臨時、持久)?

    2.2 如何註冊的,如何選舉的(選舉算法?),

    2.3 如何完成監聽或者說是訂閱的?

    2.4 提到了分佈式鎖,在Curator框架中是如何實現的,watch機制本地數據結構啥樣的?

3、Redis

    3.1 都過哪些數據類型?分別介紹下使場景?

    3.2 持久化機制,AOF、RDB具體區別有哪些?

    3.3 Redis 主從同步機制是怎麼樣的,如slave啓動之後同步過程?

    3.4 Redis Cluster集羣如何選主的?

    3.5 Redis Cluster 跟哨兵模式有什麼區別嗎?

    3.6 Sentinel 哨兵模式是如何選主的?這說跟cluster差不多,追問了下,其實還是有些區別的, sdown odown 主觀宕機、客觀宕機式不太

4、Kafka

    4.1 產端是如何發送條消息到Broker的?

    4.2 具體可以調整哪些參數提升吞吐量?

    4.3 消費端發rebalance的過程是怎樣的?如有個新的consumer加

    到了Group中是個什麼流程?

5、⼿寫算法

 算法題:個鏈表,輸k,如k=3,翻轉前3個鏈表值  【你擼不出來,也得寫

talk is cheap,show me your code】

 

【美團B部門二⾯技術】

1、 都是發散探討性的題⽬⽐過CouchBase,那你覺得CouchBase有哪些不的地,哪些不夠專注的?

談到專注,我也提到了Redis不夠專注,因爲Redis5.0還提供了Stream作爲持久化隊列解決案,Redis應該更專注分佈式緩存這塊,反也很,還要持類似MQ的功能,並且也參考了Kafka設計思想,所以也不夠專注。

 

2、 ⼿寫多線程題:T1線程輸出都是A,T2線程輸出的都是B,T3線程輸出的都是C要求三個線程啓動後輸出順序:ABCABCABC

 【還有其他一些發散性題目,就是跟你來探討技術以及實現,由淺深,看看你是如何思考的,爲什麼這麼來設計?有沒有什麼更好的解決案?】

 

【美團B部門三⾯ 技術】

總監,主要聊項,也聊到了Reactor模式。因爲已確定去另外個部,沒有安排交叉,或者已經有過交叉了,如果決定去這個部也不定會再重新安排了,

交叉⾯⾯試官也不是很好約的,其主要作就是把把關已,其決定作的還是本部試。

 面試前準備&⼩小技巧

1、⾯試前準備

儒猿技術羣之前也有夥伴都做了量值得借鑑的經分享了,我也說一下我的面試準備。

 

我個主要是通過公衆號儒猿技術窩 + 極客時間 + 架構課程 + 自身項經驗+ 石杉老師指導爲主要針,這樣基本不會偏離太向,在這再次感謝師。

 

基礎知識必備:

數據結構與算法(如果不是面頭條這種公司,掌握常用數據結構算法就夠了)、Java基礎、JVM、併發、絡&NIO、設計模式

 

中間件相關:

緩存(Redis爲主)、消息隊列(Kafka、RabbitMQ、RocketMQ)、數據庫(MySQL)、搜索(ES)

 

分佈式相關:

分佈式理論(CAP、BASE)、分佈式鎖、分佈式事務、分佈式冪等框架&源碼相關:Spring、MyBatis、SpringBoot、SpringCloud、RPC(如:Dubbo)、Netty等常框架

 

架構&容器相關:

微服務架構(架構演進過程)、微服務拆分原則、容器化(瞭解Docker & Kubernetes)

 

經驗:

整體架構(能畫出來)、項上下游關係(能將明)、項實現細節、項主要亮點

 

技術之外:

你有什麼要問我的嗎?、離職原因?、職業規劃?項管理?身優缺點?挫敗感的事身哪些需要提的?績效怎麼樣?突出貢獻?

 

這些技能要想深不是短時間內突擊就能完成的,需要期做項加上平時的有的性的學習和積累。技術棧較多,我個建議在試前提前準備階段,通過思維導圖的式梳理,對抗遺忘曲線,推薦使ProcessOn具。

2、⾯試時⼩技巧

儘管羅列了很多技術棧,但是要儘量做到個技術棧能更擅⻓⼀些,如對 JVM調優、併發、分佈式等技術都有深實踐和研究,或者對某些框架源碼深研究,並做過次開發之類的,都是有加分的。

 

因爲家不可能都是樣樣精通的,也最好別都樣樣稀鬆,所以關鍵夯實住⾃⼰的,然後其他技術棧查缺補漏。

 

同時,在試中開始我介紹後,建議你要有意識的說出你擅的領域、技術棧等。其的也很簡單,就是將試官的思路往⾃⼰向引導。不然呢,當我介紹結束之後,試官基本就按照他的套路出牌了,或許你此時會有點被動的~

 

但是,有的試官也不吃這套,那你就準備應戰就好了。某些技術你簡歷寫了,試官正好問到了,但是其實你並不是很擅,或者時間久沒有了解的很深,如果追着問,就有點尷尬了?

 

試官都是結合你簡歷問的,很少試官是隻問他會的東東,如果真遇到這樣的,也是有點尷尬,不也罷!

 

小結&問題答疑

最後也提醒各位要換作的夥伴,家加油!

1、社招算法:算法雖然在社招裏面佔據的比重不大(大概10%),但作爲基礎,也是要準備的。我這次也不是很充分,算法還在平時的積累和練習。

2、思維導圖:平時儘量畫畫思維導圖(processon),對抗技術知識的遺忘曲線。

3、技術應:這個是重點,將學到的技術應到項⽬⾥,使你的項看上去更有亮點,更有聊的價值。

4、臨場應變:有些題會發散,要提臨場隨機應變的能

5、技術積累:基礎和經驗相結合

舉個例:有家C輪公司的試官哥,很直接的說我僅出兩道題,剩下你來

問我:

1、輸⼊⼀如jd.com到底發了什麼?請你講的越詳細越好

2、後端服務如何做性能優化的?講的越詳細越好。

 

驚不驚喜意不意外啊。。。第個題可以考察:絡、CDN、DNS解析、TCP 三次握⼿/四次揮⼿、Http協議。第個題可以考察:DB、SQL(索引)、緩存、Tomcat、JVM上等性能優化等等?

 

說是兩個問題可以擴展出很多個問題,所以要回答的全且到位,也不是那麼容易的對吧。當你提到某個技術優化的時候他會詳細追問如何做的,這哪是兩個問題啊。這家公司也是過了的,也具備定的發展潛,個也是常看好的。

 

⼆⾯架構師:JUC問的很多,volatile、synchronized、aqs、cas、鎖升級機

制、閉鎖等等及各中間件原理,反正問的很全

 

以上就是我今天的面試經驗分享哈,希望能跟正在找工作或者以後找工作的同學有幫助,大家有什麼問題可以積極留言,或者定個flag,2020年是個不平凡的一年,轉瞬間已經過去一半了,大家一起加油!

END

《Java工程師面試突擊第三季》加餐部分大綱:(注:1-66講的大綱請掃描文末二維碼,在課程詳情頁獲取)

詳細的課程內容,大家可以掃描下方二維碼瞭解: