公衆號後臺回覆「面試」,獲取精品學習資料
掃描下方二維碼瞭解詳情,試聽課程
《互聯網 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 了,也沒開源。
【京東架構師⾯】 項⽬問的很詳細,說的我很累~ 基本每個項⽬具體實現⽅案、亮點都講了⼀下,遇到的問題。
具體的技術面
JVM & GC 1)你們JVM線上使⽤的什麼垃圾回收算法?CMS、G1
詳細說⼀下CMS垃圾回收算法回收過程?4個階段
CMS中的remark階段⽐較慢,怎麼分析和解決?
- XX: +CMSScavengeBeforeRemark Remark前提前來⼀次YGC;增加CMS回收的線程數...
線上如何來分析GC問題?
JVM線上是如何調優的?
1.7和1.8中jvm內存結構的區別?
發⽣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講的大綱請掃描文末二維碼,在課程詳情頁獲取)
詳細的課程內容,大家可以掃描下方二維碼瞭解: