北京 JAVA 開發 3 年,拿到美團 35K 的 offer 面試心得

獨角函獸發表於2021-12-27

前言

長文乾貨提示,文章為大家完整記錄了一位在北京做了 3 年的 JAVA 開發的朋友,如何通過美團的面試及拿到 35K 的 offer,請記得點贊收藏支援哦!文章末尾有為大家準備好的 JAVA 面試資料。

面試總結

 

JAVA 基礎

1. JAVA 中的幾種基本資料型別是什麼,各自佔用多少位元組,Integer 佔幾個位元組.

2. String 類能被繼承嗎,為什麼.

3. String,Stringbuffer,StringBuilder 的區別.

4. ArrayList 和 LinkedList 有什麼區別.

5. 講講類的例項化順序,比如父類靜態資料,建構函式,欄位,子類靜態資料,建構函式,欄位,當 new 的時候,他們的執行順序.

6. 用過哪些 Map 類,都有什麼區別,HashMap 是執行緒安全的嗎,併發下使用的 Map 是什麼,他們內部原理分別是什麼,比如儲存方式,hashcode,擴容,預設容量等.

7. JAVA8 的 ConcurrentHashMap 為什麼放棄了分段鎖,有什麼問題嗎,如果你來設計,你如何設計.

8. 有沒有有順序的 Map 實現類,如果有,他們是怎麼保證有序的.

9. 抽象類和介面的區別,類可以繼承多個類麼,介面可以繼承多個介面麼,類可以實現多個介面麼.

10. 繼承和組合的區別在哪.

11. IO 模型有哪些,講講你理解的 nio ,他和 bio,aio 的區別是啥,談談 reactor 模型.

12. 反射的原理,反射建立類例項的三種方式是什麼.

13. 反射中 Class.forName 和 ClassLoader 區別

14. 描述動態代理的幾種實現方式,分別說出相應的優缺點.

15. 動態代理與 cglib 實現的區別.

16. 為什麼 CGlib 方式可以對介面實現代理.

17. final 的用途.

18. 寫出三種單例模式實現.

19. 如何在父類中為子類自動完成所有的 hashcode 和 equals 實現?這麼做有何優劣.

20. 請結合 OO 設計理念,談談訪問修飾符 public,private,protected,default 在應用設計中的作用.

21. 深拷貝和淺拷貝區別.

22. 陣列和連結串列資料結構描述,各自的時間複雜度.

23. error 和 exception 的區別,CheckedException,RuntimeException 的區別.

24. 請列出 5 個執行時異常.

25. 在自己的程式碼中,如果建立一個 java.lang.String 類,這個類是否可以被類載入器載入?為什麼.

26. 說一說你對 java.lang.Object 物件中 hashCode 和 equals 方法的理解.在什麼場景下需要重新實現這兩個方法.

27. 在 jdk1.5 中,引入了泛型,泛型的存在是用來解決什麼問題.

28. 這樣的 a.hashcode()有什麼用,與 a.equals(b)有什麼關係.

29. 有沒有可能 2 個不相等的物件有相同的 hashcode.

30. Java 中的 HashSet 內部是如何工作的.

31. 什麼是序列化,怎麼序列化,為什麼序列化,反序列化會遇到什麼問題,如何解決.

32. java8 的新特性.

33. 講講 SPI 機制

JVM 知識

1. 什麼情況下會發生棧記憶體溢位.

2. JVM 的記憶體結構,Eden 和 Survivor 比例.

3. JVM 記憶體為什麼要分成新生代,老年代,持久代.新生代中為什麼要分為 Eden 和 Survivor.

4. JVM 中一次完整的 GC 流程是怎樣的,物件如何晉升到老年代,說說你知道的幾種主要的 JVM 引數.

5. 你知道哪幾種垃圾收集器,各自的優缺點,重點講下 cms 和 G1,包括原理,流程,優缺點.

6. 垃圾回收演算法的實現原理.

7. 當出現了記憶體溢位,你怎麼排錯.

8. JVM 記憶體模型的相關知識瞭解多少,比如重排序,記憶體屏障,happen-before,主記憶體,工作記憶體等.

9. 簡單說說你瞭解的類載入器,可以打破雙親委派麼,怎麼打破.

10. 講講 JAVA 的反射機制.

11. 你們線上應用的 JVM 引數有哪些.

12. g1 和 cms 區別,吞吐量優先和響應優先的垃圾收集器選擇(最新有個 ZGC,可以瞭解下).

13. 怎麼打出執行緒棧資訊.

14. 請解釋如下 jvm 引數的含義:

15. 用過那些 jdk 工具排查問題

開源框架知識

1. spring 的迴圈依賴

2. spring beanFactory 和 factoryBean 區別

3. spring ioc 和 aop 的原理.

4. 講講 spring 事務的傳播屬性,transaction 註解原理.

5. spring 的 beanpostprocesser 和 refresh 方法

6. spring 和 springboot 區別,瞭解 springboot 的 pom 嗎

7. springboot 是怎麼整合 tomcat 的?

8. zookeeper 的原理

9. 用過的 rpc 框架,dubbo 的原理

10. 瞭解 k8s_docker 嗎,宿主機怎麼檢視 docker 程式,k8s 自動擴容的原理

作業系統

1. Linux 系統下你關注過哪些核心引數,說說你知道的.

2. Linux 下 IO 模型有幾種,各自的區別是什麼.

3. 終止程式 ctrl+c 發生了什麼

4. 平時用到哪些 Linux 命令.

5. 用一行命令檢視檔案的最後五行.

6. 用一行命令輸出正在執行的 java 程式.

7. 介紹下你理解的作業系統中執行緒切換過程.

8. 程式和執行緒的區別.

9. top 命令之後有哪些內容,有什麼作用.

10. 線上 CPU 爆高,請問你如何找到問題所在.

11. 一個日誌檔案裡面都是 ip 資訊,列印出現頻率最高的 5 個 ip 倒序輸出

多執行緒

1. 多執行緒的幾種實現方式,什麼是執行緒安全.

2. volatile 的原理,作用,能代替鎖麼.

保證可見性和有序性,不保證原子性

3. 畫一個執行緒的生命週期狀態圖.

4. sleep 和 wait 的區別.

5. sleep 和 sleep(0)的區別.

6. Lock 與 Synchronized 的區別.

7. synchronized 的原理是什麼,一般用在什麼地方(比如加在靜態方法和非靜態方法的區別,

8. 用過哪些原子類,他們的原理是什麼.

9. 實現一個生產者消費者模式,不用阻塞佇列

10. JUC 下研究過哪些併發工具,講講原理.

11. 用過執行緒池嗎,如果用過,請說明原理,並說說 newCache 和 newFixed 有什麼區別,建構函式的各個引數的含義是什麼,比如 coreSize,maxsize 等.

12. 執行緒池的關閉方式有幾種,各自的區別是什麼.

13. 假如有一個第三方介面,有很多個執行緒去呼叫獲取資料,現在規定每秒鐘最多有 10 個執行緒同時呼叫它,如何做到.

14. spring 的 controller 是單例還是多例,怎麼保證併發的安全.

15. 用三個執行緒按順序迴圈列印 abc 三個字母,比如 abcabcabc.

16. ThreadLocal 用過麼,用途是什麼,原理是什麼,用的時候要注意什麼.ThreadLocalMap 防止記憶體洩漏

17. 如果讓你實現一個併發安全的連結串列,你會怎麼做.

18. 有哪些無鎖資料結構,他們實現的原理是什麼.

19. 講講 java 同步機制的 wait 和 notify.

20. CAS 機制是什麼,如何解決 ABA 問題.

21. 多執行緒如果執行緒掛住了怎麼辦.

22. countdowlatch 和 cyclicbarrier 的內部原理和用法,以及相互之間的差別(比如 countdownlatch 的 await 方法和是怎麼實現的).

23. 對 AbstractQueuedSynchronizer 瞭解多少,講講加鎖和解鎖的流程,獨佔鎖和公平所加鎖有什麼不同.

24. 使用 synchronized 修飾靜態方法和非靜態方法有什麼區別.

25. 簡述 ConcurrentLinkedQueue 和 LinkedBlockingQueue 的用處和不同之處.

26. 導致執行緒死鎖的原因?怎麼解除執行緒死鎖.

27. 非常多個執行緒(可能是不同機器),相互之間需要等待協調,才能完成某種工作,問怎麼設計這種協調方案.

28. 用過讀寫鎖嗎,原理是什麼,一般在什麼場景下用.

29. 開啟多個執行緒,如果保證順序執行,有哪幾種實現方式,或者如何保證多個執行緒都執行完再拿到結果.

30. 延遲佇列的實現方式,delayQueue 和時間輪演算法的異同.

TCP 與 HTTP

1. http1.0, http1.1, http2.0 有什麼區別.

2. TCP 三次握手和四次揮手的流程,為什麼斷開連線要 4 次,如果握手只有兩次,會出現什麼.

3. TIME_WAIT 和 CLOSE_WAIT 的區別.

4. 說說你知道的幾種 HTTP 響應碼,比如 200, 302, 404.

5. 當你用瀏覽器開啟一個連結(如:http://www.javastack.cn)的時候,計算機做了哪些工作步驟.

6. TCP 如何保證可靠性,說說 TCP 頭的結構.

7. 如何避免瀏覽器快取.

8. 如何理解 HTTP 協議的無狀態性.

9. 簡述 Http 請求 get 和 post 的區別以及資料包格式.

10. HTTP 有哪些 method

11. 簡述 HTTP 請求的報文格式.

12. HTTP 的長連線是什麼意思.

13. HTTPS 的加密方式是什麼,講講整個加密解密流程.

14. Http 和 https 的三次握手有什麼區別.

15. 什麼是分塊傳送.

16. Session 和 cookie 的區別.

架構設計與分散式

1. 用 java 自己實現一個 LRU.

}2. 分散式叢集下如何做到唯一序列號.

3. 設計一個秒殺系統,30 分鐘沒付款就自動關閉交易.

4. 如何使用 redis 和 zookeeper 實現分散式鎖?有什麼區別優缺點,會有什麼問題,分別適用什麼場景.(延伸:如果知道 redlock,講講他的演算法實現,爭議在哪裡)

5. 如果有人惡意建立非法連線,怎麼解決.

6. 分散式事務的原理,優缺點,如何使用分散式事務,2pc 3pc 的區別,解決了哪些問題,還有哪些問題沒解決,如何解決,你自己專案裡涉及到分散式事務是怎麼處理的.

7. 什麼是一致性 hash.

8. 什麼是 restful,講講你理解的 restful.9. 如何設計一個良好的 API.

10. 如何設計建立和保持 100w 的長連線.

11. 解釋什麼是 MESI 協議(快取一致性).

12. 說說你知道的幾種 HASH 演算法,簡單的也可以.

13. 什麼是 paxos 演算法, 什麼是 zab 協議和 raft 協議.

14. 一個線上文件系統,文件可以被編輯,如何防止多人同時對同一份文件進行編輯更新.

15. 線上系統突然變得異常緩慢,你如何查詢問題.

16. 說說你平時用到的設計模式.

17. Dubbo 的原理,有看過原始碼麼,資料怎麼流轉的,怎麼實現叢集,負載均衡,服務註冊和發現,重試轉發,快速失敗的策略是怎樣的 .

18. 一次 RPC 請求的流程是什麼.

19. 自己實現過 rpc 麼,原理可以簡單講講.Rpc 要解決什麼問題.

20. 非同步模式的用途和意義.

21. 程式設計中自己都怎麼考慮一些設計原則的,比如開閉原則,以及在工作中的應用.

22. 設計一個社交網站中的“私信”功能,要求高併發,可擴充套件等等. 畫一下架構圖.

23. MVC 模式,即常見的 MVC 框架.

24. 聊下曾經參與設計的伺服器架構並畫圖,談談遇到的問題,怎麼解決的.

25. 應用伺服器怎麼監控效能,各種方式的區別.

26. 如何設計一套高併發支付方案,架構如何設計.

27. 如何實現負載均衡,有哪些演算法可以實現.

28. Zookeeper 的用途,選舉的原理是什麼.

29. Zookeeper watch 機制原理.

30. mybatis 的底層實現原理.

31. 請思考一個方案,實現分散式環境下的 countDownLatch.

32. 後臺系統怎麼防止請求重複提交.

33. 描述一個服務從釋出到被消費的詳細過程.

34. 講講你理解的服務治理.

35. 如何做到介面的冪等性.

36. 如何做限流策略,令牌桶和漏斗演算法的使用場景.

37. 什麼叫資料一致性,你怎麼理解資料一致性.

38. 分散式服務呼叫方,不依賴服務提供方的話,怎麼處理服務方掛掉後,大量無效資源請求的浪費,如果只是服務提供方吞吐不高的時候該怎麼做,如果服務掛了,那麼一會重啟,該怎麼做到最小的資源浪費,流量半開的實現機制是什麼.

39. dubbo 的泛化呼叫怎麼實現的,如果是你,你會怎麼做.

40. 遠端呼叫會有超時現象,如果做到優雅的控制,JDK 自帶的超時機制有哪些,怎麼實現的.

資料庫知識

1. mysql 索引失效的原則

2. mysql 的鎖,行鎖,表鎖,樂觀鎖,悲觀鎖,共享鎖,排他鎖

3. mysql myisam 和 innodb 儲存引擎區別

4. mysql 的事務隔離級別,rr 和 rc

5. mysql 的 acid,以及分別實現 acid 的底層原理

6. mysql 的 log, binlog redolog undolog

7. mysql 怎麼解決幻讀的

8. mysql 的 mvvc 原理,在 rr 和 rc 的實現區別

9. 聚集索引和非聚集索引的區別

10. b 樹和 b+樹的區別,為什麼用 b+樹不用平衡二叉樹,簡單計算 b+樹為什麼只有三四層

11. 最左字首原則, 索引怎麼設計

12. 多主怎麼同步資料, 主從模式資料同步

訊息佇列

1. kafka 的架構介紹

2. kafka 為什麼吞吐量高,幾個優化

3. kafka 怎麼實現 exactly one

4. kafka 怎麼保證訊息有序

5. kafka 的冪等和 offset 什麼時候提交

6. zk 在 kafka 的作用, kafka 有那些 log

快取

1. 常見的快取策略有哪些,如何做到快取與 DB 的資料一致性

2. 如何防止快取擊穿和雪崩

3. Redis 的五種資料結構,跳錶實現,hash 表的擴容

4. redis 叢集方案, 哨兵模式的優缺點

5. redis 的分散式鎖, 介紹 redisson

6. redis 的大 key 熱 key 問題 pipeline 原理

7. redis 的事件模型,key 的刪除策略

搜尋

1. elasticsearch 瞭解多少,說說你們公司 es 的叢集架構,索引資料大小,分片有多少,以及一些調優手段.elasticsearch 的倒排索引是什麼.

2. elasticsearch 索引資料多了怎麼辦,如何調優,部署.

3. elasticsearch 是如何實現 master 選舉的.

4. 詳細描述一下 Elasticsearch 索引文件的過程.

5. 詳細描述一下 Elasticsearch 搜尋的過程.

6. Elasticsearch 在部署時,對 Linux 的設定有哪些優化方法?

7. lucence 內部結構是什麼.

演算法題 (Leetcode top200)

1. 環形連結串列的第一個環節點

2. 只有 0 和 1 的陣列排序

3. 兩個連結串列的第一個相交節點

4. 合併兩個有序連結串列,合併多個有序連結串列

5. 生成全排列

6. 山脈陣列最大值(先增後減有重複)

7. 合併有序陣列 a 和 b,a 有足夠空間,不新申請空間合併

8. 有序陣列不同平方的數字

9. 列印樹指定和的路徑

10. 字串刪除 k 個數的最大數

11. 樹的層次遍歷

12. 1-n 號個人 1-n 號個燈 開始燈關的如果燈的編號能被人的編碼整除按一下開關,對於 1-n 的燈都有 1-n 的人經過最後那些燈亮

13. ip 地址轉數字

14. 編輯距離,兩個矩形交叉面積,連結串列倒序 k 組翻轉,種子填充,三個有序連結串列公共數

場景題

1. 設計一個限流器

2. 伺服器有很多 ip 只能加四個白名單,怎麼解決?

3. 如果高併發服務快取掛了,db 被打掛,怎麼重啟服務,因為快取掛了 db 重啟還會掛掉

4. 分庫分表的跨表查詢方案優化

5. 多伺服器共用一個第三方業務的 token,第三方定期更新

6. 線上業務執行緒池的引數設定

7. 四核機器怎麼保證 cpu 佔用率 50%

8. 設計檔案系統,支援增加刪除,修改檔案(夾),按時間到序列查詢資料夾下面所有檔案(夾),給表設計

專案梳理

講專案的技術難點,除了業務我總結出了我專案的兩個難點

1. 樂觀鎖解決冪等併發更新(updateTime,行業方案是 version)

2. 維護兩套 redis 快取做高可用

3. 談專案架構,多級快取設計,分庫分表,一些功能的表設計,對具體業務的細節理解

資料 &筆記

總結

Java 架構師成長之路可以說每一步都充滿了荊棘,大佬的學習資料與筆記能夠幫助你指點方向,最重要的還是要靠大家堅持不懈的努力,最後也祝大家都實現 Java 架構師的夢想!

相關文章