【美團】Java后端一面復盤|網絡+線程+MySQL+Redis+設計模式+手撕算法

📍 面試公司:美團
🎯 面試崗位:Java后端開發工程師
📞 面試形式:電話面試
🕒 面試時長:約 50 分鐘
🔁 面試輪次:第一輪技術面


? 面試整體節奏:

這場美團 Java 一面屬于“廣度覆蓋+重點深挖”的類型,基礎知識問得細致,例如 TCP 的可靠機制、線程私有變量、CAS 弱點等,同時還穿插設計模式、Redis 內核、慢 SQL 優化思路等多方面內容。最后加了一道手撕變式題,整體節奏偏快,面試官追問比較多,建議提前熟悉面試項目中你主動提到的關鍵詞。


? 面試題目逐題整理與解析:

1. 請做一個簡短的自我介紹

考察點:溝通能力、項目整體概況


2. TCP 和 UDP 有什么區別?

考察點:網絡協議基礎
答案:

  • TCP 面向連接,可靠,順序,基于字節流
  • UDP 無連接,不保證可靠性、順序,基于報文

3. TCP 和 UDP 分別適用于哪些場景?

考察點:協議應用理解
答案:

  • TCP:文件傳輸、HTTP 請求、數據庫連接等要求可靠性的場景
  • UDP:視頻直播、DNS、語音通話等對速度要求高但可容忍部分丟包的場景

4. TCP 如何實現可靠性?

考察點:協議細節理解
答案:

  • 三次握手、四次揮手
  • 滑動窗口
  • ACK 確認機制
  • 超時重傳
  • 校驗和
  • 流量控制(基于窗口)
  • 擁塞控制(慢啟動、擁塞避免、快重傳、快恢復)

5. 流量控制 vs 擁塞控制的區別?

考察點:網絡層協議細節辨析
答案:

  • 流量控制:防止接收方來不及處理(接收方能力)
  • 擁塞控制:防止網絡過載(網絡本身能力)

6. 進程和線程的區別是什么?

考察點:操作系統基礎
答案:

  • 進程:資源分配單位,擁有獨立地址空間
  • 線程:調度單位,同一進程下線程共享資源,切換開銷小

7. 線程如何維護私有變量?

考察點:線程隔離技術
答案:
通過 ThreadLocal 實現線程內變量隔離,不同線程訪問的是獨立副本。


8. ThreadLocal 的底層原理是什么?會不會造成內存泄漏?

考察點:源碼理解、JVM 內存管理
答案:

  • 每個線程維護一個 ThreadLocalMap,Key 是弱引用
  • 如果不手動調用 remove(),會導致 Value 無法被回收,從而內存泄漏

9. 如何避免 ThreadLocal 的內存泄漏?

答案:

  • 每次使用后及時調用 remove() 方法
  • 盡量使用自動清理機制(如在 try-finally 中清除)

10. synchronized 的底層原理是什么?

考察點:JVM 同步機制
答案:
依賴對象頭的 Monitor,底層依賴 JVM 的 monitorenter/monitorexit 指令。加鎖過程可能涉及偏向鎖、輕量級鎖和重量級鎖的升級過程。


11. synchronized 有哪些鎖優化手段?

答案:

  • 偏向鎖
  • 輕量級鎖
  • 自旋鎖
  • 鎖粗化、鎖消除等編譯期優化

12. CAS 是什么?它有哪些缺點?

考察點:無鎖編程思想
答案:

  • Compare-And-Swap,用于原子操作
  • 缺點包括:ABA 問題、只能一個變量、循環開銷大
  • 可通過版本號、AtomicStampedReference 解決 ABA 問題

13. 提交任務到線程池后是怎么執行的?

考察點:線程池執行流程
答案:
線程池執行步驟大致如下:

  1. 判斷核心線程是否已滿
  2. 如果未滿則新建線程執行任務
  3. 如果滿了就入隊等待
  4. 隊列滿則判斷是否可以創建非核心線程
  5. 若不能則執行拒絕策略

14. 核心線程數、最大線程數怎么設置?

答案:

  • CPU 密集型:核心線程數 = 核心數 + 1
  • IO 密集型:核心線程數 = 核心數 / (1 - 阻塞系數) ≈ 核心數 * 2 ~ 5

15. 為什么設置線程池核心線程數要考慮 CPU 核心數?

答案:
為了最大化利用 CPU,不讓線程過多導致上下文切換,也不浪費資源。


16. 哪些字段不適合建索引?

考察點:索引使用原則
答案:

  • 頻繁更新的字段
  • 重復率高的字段(如性別)
  • 長文本字段(如 text、blob)
  • 不參與查詢條件的字段

17. 如何優化慢 SQL?

考察點:數據庫調優實操
答案:

  • 使用合適索引
  • 避免 select *
  • 使用覆蓋索引
  • 減少 join 數量
  • 查看執行計劃(EXPLAIN

18. 什么是索引下推?

考察點:MySQL 查詢優化細節
答案:
從 MySQL 5.6 開始,支持將查詢條件下推至存儲引擎層進行過濾,減少回表,提高查詢效率。


19. Redis 的 ZSet 是怎么實現的?

答案:
ZSet(有序集合)底層由 跳表 + Hash 表 組成:跳表負責排序結構,Hash 表提供快速定位。


20. 什么是跳表?

考察點:高級數據結構
答案:
跳表通過多層鏈表提高查找效率,時間復雜度 O(log n),空間復雜度 O(n),比紅黑樹實現簡單,適合有序結構需求場景。


21. Redis 的過期刪除策略有哪些?

答案:

  • 定期刪除(定時掃描)
  • 惰性刪除(訪問時發現已過期)
  • 內存淘汰策略(如 LRU、LFU)

22. Redis 為何這么快?

答案:

  • 基于內存存儲
  • 單線程模型避免鎖競爭
  • 高效的數據結構
  • 多路復用 IO

23. Redis 是單線程的,為什么還能高性能?

答案:

  • 只在主線程處理請求,避免加鎖開銷
  • IO 多路復用處理高并發
  • 大部分操作是 O(1),延遲低

24. 什么是 IO 多路復用?Redis 怎么用的?

答案:

  • 一種讓單線程監聽多個 socket 的技術(select、epoll)
  • Redis 使用 epoll(Linux)實現事件驅動機制處理并發連接

25. 項目相關內容介紹

考察點:項目深度、技術選型、問題解決思路
建議: 突出業務目標、性能優化、分布式處理等關鍵詞,便于面試官引申提問。


26. 手撕算法:LeetCode 第 2 題變式(鏈表加法變減法)

考察點:鏈表操作、邊界處理

原題:兩數相加(https://leetcode.cn/problems/add-two-numbers/)
面試中變為了“鏈表減法”,邏輯類似但需要處理借位問題

// 假設兩個鏈表 l1、l2 表示兩個正整數,返回 l1 - l2 的結果,數字倒序存儲
public ListNode subtractTwoNumbers(ListNode l1, ListNode l2) {ListNode dummy = new ListNode(0), curr = dummy;int borrow = 0;while (l1 != null || l2 != null) {int x = l1 != null ? l1.val : 0;int y = l2 != null ? l2.val : 0;int diff = x - y - borrow;if (diff < 0) {diff += 10;borrow = 1;} else {borrow = 0;}curr.next = new ListNode(diff);curr = curr.next;if (l1 != null) l1 = l1.next;if (l2 != null) l2 = l2.next;}return dummy.next;
}

🧾 總結 & 面試復盤:

這場美團一面涵蓋了以下重點模塊:

模塊關鍵詞
網絡TCP、UDP、IO 多路復用、可靠機制
并發ThreadLocal、synchronized、CAS、線程池執行流程
數據庫索引優化、慢 SQL、索引下推
Redis跳表、ZSet、過期刪除、多路復用
設計模式觀察者模式、策略模式(未展開但建議準備)
手撕代碼鏈表處理能力,變式適應能力

建議在準備社招時,深入掌握項目中的關鍵技術點,并根據關鍵詞延伸到基礎原理,這樣更容易應對面試官的追問。


📢 最后:

如果你也在準備 Java 后端崗位,可以關注我、留言交流,我會持續整理大廠面經、高頻八股與項目拆解,陪你一起穩穩上岸!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905722.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905722.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905722.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Go語言八股文之Mysql鎖詳解

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 非常期待和您一起在這個小…

實戰案例:采集 51job 企業招聘信息

本文將帶你從零開始&#xff0c;借助 Feapder 快速搭建一個企業級招聘信息數據管道。在“基礎概念”部分&#xff0c;我們先了解什么是數據管道和 Feapder&#xff1b;“生動比喻”用日常場景幫助你快速理解爬蟲組件&#xff1b;“技術場景”介紹本項目中如何使用代理等采集策略…

GMT之Bash語言使用

GMT的操作有自己的邏輯和“命令”&#xff0c;但GMT是可以用Bash語言控制的&#xff0c;所以常常以.sh為后綴寫GMT程序。 GMT程序運行步驟如下&#xff1a; 采用cd &#xff0c;定位到指定文件夾&#xff1b;以sh ***.sh運行GMT&#xff0c;得到結果。 另外&#xff0c;遇到…

整合Redis

整合Redis 引入依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency><groupId>org.apache.commons</groupId><art…

Vue3——Watch偵聽器

目錄 手動指定監聽對象 偵聽ref對象 偵聽ref對象中的某個屬性 reactive寫法 watchEffect 自動偵聽 多源偵聽 一次性偵聽器 watch 是?個?于觀察和響應Vue響應式系統中數據變化的?法。它允許你指定?個數據源&#xff08;可以是 響應式引?、計算屬性、組件的屬性等&#xf…

1、數據結構與算法(Python版-啃書)-緒論

1.1 計算機問題求解 一般而言&#xff0c;人們需要的不是解決一個具體問題的程序&#xff0c;而是解決一類問題的程序。 對于求平方根這樣的簡單問題&#xff0c;人們希望的也不是專用于求某個數(例如2)的平方根的函數&#xff0c;而是能求任何數的平方根的函數。 用計算機解…

微信小程序之將輪播圖設計為組件

在components文件夾上點右鍵&#xff0c;新建component&#xff0c;命名為swiper 然后將我們之前的代碼都拷貝到對應文件中&#xff0c; 然后我們的頁面要引用這個組件&#xff0c; 在pages\index\index.json中引入&#xff1a; { "usingComponents": {"van…

【視頻】解決FFmpeg將RTSP轉RTMP流時,出現的卡死、出錯等問題

【視頻】郭老二博文之:圖像視頻匯總 1、簡述 如果不修改圖像內容,可以使用FFmpeg命令來將RTSP轉RTMP流。 SRS視頻服務器就是這么干的,它沒有使用FFmpeg接口,而是直接使用FFmpeg命令來轉流。 但是在使用中,約到了一些問題,比如轉流時卡死、轉流出錯等等,下面描述怎么解…

報銷單業務筆記

文章目錄 業務點業務點-對公對私業務點-多系統標志 特殊業務入參入參報文 出參出參報文中間的邏輯多對多關系 其他應該是整體成功還是可以部分成功這種多對多關多關系有沒有優雅的判斷方式 報銷單是個通用場景&#xff0c;有通用邏輯&#xff0c;在此基礎上進行適度定制&#x…

25軟考【軟件評測師】:10天極限沖刺攻略(附知識點解析+沖刺攻略)

距離2025上半年“軟件評測師”考試已經只剩最后一周多了&#xff0c;還沒有準備好的小伙伴趕緊行動起來。為了幫助大家更好的沖刺學習&#xff0c;特此提供一份考前沖刺攻略。本指南包括考情分析、沖刺攻略兩個部分&#xff0c;可以參考此指南進行最后的復習要領&#xff0c;相…

python 的 ?uv、pip? 和 ?conda? 對比和技術選型

你好&#xff0c;我是 shengjk1&#xff0c;多年大廠經驗&#xff0c;努力構建 通俗易懂的、好玩的編程語言教程。 歡迎關注&#xff01;你會有如下收益&#xff1a; 了解大廠經驗擁有和大廠相匹配的技術等 希望看什么&#xff0c;評論或者私信告訴我&#xff01; 文章目錄 一…

Python logging模塊使用指南

Python 的 logging 模塊是一個靈活且強大的日志記錄工具&#xff0c;廣泛應用于應用程序的調試、運行監控和問題排查。它提供了豐富的功能&#xff0c;包括多級日志記錄、多種輸出方式、靈活的格式配置等。以下是詳細介紹&#xff1a; 一、為什么使用 logging 模塊&#xff1f;…

開發技術.前端開發相關問題

第一部分 響應式布局 1. 幾個布局單位概念 PX: px像素&#xff08;Pixel&#xff09; 相對長度單位。像素px是相對于顯示器屏幕分辨率而言的。 PX特點 1. IE無法調整那些使用px作為單位的字體大小&#xff1b; 2. 國外的大部分網站能夠調整的原因在于其使用了em或rem作為字體…

1. Go 語言環境安裝

&#x1f451; 博主簡介&#xff1a;高級開發工程師 &#x1f463; 出沒地點&#xff1a;北京 &#x1f48a; 人生目標&#xff1a;自由 ——————————————————————————————————————————— 版權聲明&#xff1a;本文為原創文章&#xf…

WPF自定義控件開發全指南:多內容切換與動畫集成

WPF自定義控件開發全指南&#xff1a;多內容切換與動畫集成 一、控件基礎架構設計1.1 選擇控件基類1.2 定義關鍵屬性 二、動畫系統集成2.1 淡入淡出動畫實現2.2 滑動動畫實現 三、視覺狀態管理四、完整使用示例4.1 XAML聲明4.2 動畫觸發邏輯 五、擴展與優化5.1 性能優化建議5.2…

數據結構 -- 順序查找和折半查找

查找的基本概念 基本概念 查找&#xff1a;在數據集合中尋找滿足某種條件的數據元素的過程 查找表&#xff08;查找結構&#xff09;&#xff1a;用于查找的數據集合稱為查找表&#xff0c;它由同一類型的數據結構元素&#xff08;或記錄&#xff09;組成 關鍵字&#xff1…

汽車功能安全--TC3xx MBIST設計要點

英飛凌針對硬件故障的自測&#xff0c;提供了四種機制&#xff1a;PBIST、LBIST、MONBIST和MBIST。 LBIST和MONBIST我們已經聊過了&#xff0c;今天就快速介紹下MBIST。 MBIST&#xff0c;全程Memory Built-in Self Test&#xff0c;用于檢測SRAM數據單元的完整性。 在26262…

openpi 入門教程

系列文章目錄 目錄 系列文章目錄 前言 一、運行要求 二、安裝 三、模型檢查點 3.1 基礎模型 3.2 微調模型 四、運行預訓練模型的推理 五、在自己的數據上微調基礎模型 5.1. 將數據轉換為 LeRobot 數據集 5.3. 啟動策略服務器并運行推理 5.4 更多示例 六、故障排除…

java加強 -Collection集合

集合是一種容器&#xff0c;類似于數組&#xff0c;但集合的大小可變&#xff0c;開發中也非常常用。Collection代表單列集合&#xff0c;每個元素&#xff08;數據&#xff09;只包含1個值。Collection集合分為兩類&#xff0c;List集合與set集合。 特點 List系列集合&#…

深入理解ThingsBoard的Actor模型

1、ThingsBoard系統中定義了哪些Actor ? ThingsBoard Actor 創建機制與作用對照表: Actor 類型 何時創建 由誰創建 是否緩存 作用描述 SystemActor 系統啟動時 DefaultActorService / ActorSystem ? 是 ★ ThingsBoard 平臺服務級別管理器:負責創建所有的Actor AppActor