1. 程式人生 > 實用技巧 >血虐全網的“Java面試題手冊”不服?你來看看!

血虐全網的“Java面試題手冊”不服?你來看看!

前言:

本文收集整理了各大廠常見面試題N道,你想要的這裡都有內容涵蓋:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技術棧,希望大家都能找到適合自己的公司,開開心心的擼程式碼。

一、Java高階

  1. 為什麼使用訊息佇列?訊息佇列有什麼優點和缺點?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什麼優點和缺點?
  2. 如何保證訊息不被重複消費?或者說,如何保證訊息消費的冪等性?
  3. 如何解決訊息佇列的延時以及過期失效問題?訊息佇列滿了以後該怎麼處理?有幾百萬訊息持續積壓幾小時,說說怎麼解決?
  4. redis 叢集模式的工作原理能說一下麼?在叢集模式下,redis 的 key 是如何定址的?分散式定址都有哪些演算法?瞭解一致性 hash 演算法嗎?
  5. 瞭解什麼是 redis 的雪崩、穿透和擊穿?redis 崩潰之後會怎麼樣?系統該如何應對這種情況?如何處理 redis 的穿透?
  6. 為什麼要分庫分表(設計高併發系統的時候,資料庫層面該如何設計)?用過哪些分庫分表中介軟體?不同的分庫分表中介軟體都有什麼優點和缺點?你們具體是如何對資料庫如何進行垂直拆分或水平拆分的?
  7. 有沒有做 MySQL 讀寫分離?如何實現 MySQL 的讀寫分離?MySQL 主從複製原理的是啥?如何解決MySQL 主從同步的延時問題?
  8. 說一下的 dubbo 的工作原理?註冊中心掛了可以繼續通訊嗎?說說一次 rpc 請求的流程?
  9. 如何基於 dubbo 進行服務治理、服務降級、失敗重試以及超時重試?
  10. 叢集部署時的分散式 session 如何實現?
  11. 服務註冊和發現是什麼意思?Spring Cloud 如何實現?
  12. 一般實現分散式鎖都有哪些方式?使用 redis 如何設計分
  13. 布式鎖?使用 zk 來設計分散式鎖可以嗎?這兩種分散式鎖的實現方式哪種效率比較高?
  14. dubbo 的 spi 思想是什麼?
  15. 如何設計可以動態擴容縮容的分庫分表方案?

二、分散式

  1. ActiveMQ 中的訊息重發時間間隔和重發次數嗎?
  2. Kafka 建立 Topic 時如何將分割槽放置到不同的 Broker 中
  3. Kafka 判斷一個節點是否還活著有哪兩個條件?
  4. Kafka 訊息是採用 Pull 模式,還是 Push 模式?
  5. memcached 和伺服器的 local cache(比如 PHP 的 APC、mmap 檔案等)相比,有什麼優缺點?
  6. 我需要把 memcached 中的 item 批量匯出匯入,怎麼辦?
  7. memcached 的多執行緒是什麼?如何使用它們?
  8. MongoDB 在 A:{B,C}上建立索引,查詢 A:{B,C}和 A:{C,B}都會使用索引嗎?
  9. MongoDB 支援儲存過程嗎?如果支援的話,怎麼用?
  10. 如何理解 MongoDB 中的 GridFS 機制,MongoDB 為何使用 GridFS 來儲存檔案?
  11. 在 Nginx 中,如何使用未定義的伺服器名稱來阻止處理請求?
  12. RabbitMQ 上的一個 queue 中存放的 message 是否有數量限制?
  13. 若 cluster 中擁有某個 queue 的 owner node 失效了,且該 queue 被宣告具有durable 屬性,是否能夠成功從其他 node 上重新宣告該 queue ?
  14. 為什麼說保證 message 被可靠持久化的條件是 queue 和 exchange 具有durable 屬性,同時 message 具有 persistent 屬性才行?
  15. 為什麼用快取,用過哪些快取,redis和memcache的區別?

三、Spring架構

  1. Spring Boot、Spring MVC 和 Spring 有什麼區別?
  2. BeanFactory 和 ApplicationContext 有什麼區別?
  3. 什麼是基於Java的Spring註解配置? 給一些註解的例子.
  4. 請解釋 Spring Bean 的生命週期?
  5. Spring 框架中的單例 Beans 是執行緒安全的麼?
  6. SpringMvc 的控制器是不是單例模式,如果是,有什麼問題,怎麼解決?
  7. SpringMVC 怎麼樣設定重定向和轉發的?
  8. 當一個方法向 AJAX 返回特殊物件,比如 Object,List 等,需要做什麼處理?
  9. SpringMvc 用什麼物件從後臺向前臺傳遞資料的?
  10. 服務註冊和發現是什麼意思?Spring Cloud 如何實現?
  11. 使用 Spring Cloud 有什麼優勢?
  12. 什麼是 Hystrix 斷路器?我們需要它嗎?
  13. 什麼是 Spring Cloud Bus?我們需要它嗎?
  14. 如何實現 Spring Boot 應用程式的安全性?
  15. Spring Boot 配置的預設 H2 資料庫的名字是上面?為什麼預設的資料庫名字是 testdb?

四、執行緒問題

  1. stop() 和 suspend() 方法為何不推薦使用?
  2. 同步和非同步有何異同,在什麼情況下分別使用它們?
  3. 執行緒間通訊,wait和notify
  4. 什麼是執行緒餓死,什麼是活鎖?
  5. atomicinteger和volatile等執行緒安全操作的關鍵字的理解和使用
  6. volatile 變數是什麼?volatile 變數和 atomic 變數有什麼不同?
  7. 當一個執行緒進入一個物件的一個 synchronized 方法後,其它執行緒是否可進入此物件的其它方法?
  8. 簡述 synchronized 和 java.util.concurrent.locks.Lock 的異同?
  9. 多執行緒之間通訊的同步問題,synchronized鎖的是物件,衍伸出和synchronized相關很多的具體問題,例如同一個類不同方法都有synchronized鎖,一個物件是否可以同時訪問。或者一個類的static構造方法加上synchronized之後的鎖的影響。
  10. volatile 型別變數提供什麼保證?能使得一個非原子操作變成原子操作嗎?
  11. 瞭解可重入鎖的含義,以及ReentrantLock 和synchronized的區別
  12. Java建立執行緒之後,直接呼叫start()方法和run()的區別
  13. 同步的資料結構,例如concurrentHashMap的原始碼理解以及內部實現原理,為什麼它是同步的且效率高
  14. 常用的執行緒池模式以及不同執行緒池的使用場景
  15. newFixedThreadPool此種執行緒池如果執行緒數達到最大值後會怎麼辦,底層原理。

五、網路方面

  1. 為什麼要三次握手
  2. 二次握手有什麼問題
  3. 三次握手有哪些缺陷
  4. TCP是如何控制流量的
  5. 傳送方傳送頻率過高造成丟包,TCP是如何解決的
  6. HTTPs為什麼要用對稱加密+非對稱加密,相對於只使用非對稱加密有什麼好處
  7. 講一下OSI網路架構
  8. HTTP在哪一層
  9. HTTP報文結構
  10. HTTP首部欄位
  11. HTTPs加密在哪一層實現
  12. http是無狀態通訊,http的請求方式有哪些,可以自己定義新的請求方式麼。
  13. socket通訊,以及長連線,分包,連線異常斷開的處理。
  14. socket通訊模型的使用,AIO和NIO。
  15. socket框架netty的使用,以及NIO的實現原理,為什麼是非同步非阻塞

六、MySQL資料庫

  1. 務四大特性(ACID)原子性、一致性、隔離性、永續性?
  2. 查詢語句不同元素(where、jion、limit、group by、having等等)執行先後順序?
  3. MySQL常見的三種儲存引擎(InnoDB、MyISAM、MEMORY)的區別?
  4. MySQL的MyISAM與InnoDB兩種儲存引擎在,事務、鎖級別,各自的適用場景?
  5. mysql 高併發環境解決方案?
  6. 事務的併發?事務隔離級別,每個級別會引發什麼問題,MySQL預設是哪個級別?
  7. MySQL B+Tree索引和Hash索引的區別?
  8. 有哪些鎖(樂觀鎖悲觀鎖),select 時怎麼加排它鎖?
  9. sql查詢語句確定建立哪種型別的索引?如何優化查詢?
  10. 聚集索引和非聚集索引區別?
  11. mysql都有什麼鎖,死鎖判定原理和具體場景,死鎖怎麼解決?
  12. 非關係型資料庫和關係型資料庫區別,優勢比較?
  13. MySQL慢查詢怎麼解決?
  14. 資料庫的讀寫分離、主從複製,主從複製分析的 7 個問題?
  15. 資料庫崩潰時事務的恢復機制(REDO日誌和UNDO日誌)?

七、Redis快取

  1. redis事務相關命令有哪些?
  2. 為什麼要用 redis /為什麼要用快取(高效能、高併發)
  3. 為什麼要用 redis 而不用 map/guava 做快取?
  4. redis 和 memcached 的區別
  5. 請介紹一下Redis的資料型別SortedSet(zset)以及底層實現機制?
  6. redis 常見資料結構以及使用場景分析(String、Hash、List、Set、Sorted Set)
  7. redis 設定過期時間
  8. redis 記憶體淘汰機制(MySQL裡有2000w資料,Redis中只存20w的資料,如何保證Redis中的資料都是熱點資料?)
  9. redis 持久化機制(怎麼保證 redis 掛掉之後再重啟資料可以進行恢復)
  10. redis 事務
  11. Redis 常見異常及解決方案(快取穿透、快取雪崩、快取預熱、快取降級)
  12. 分散式環境下常見的應用場景(分散式鎖、分散式自增 ID)
  13. Redis 叢集模式(主從模式、哨兵模式、Cluster 叢集模式)
  14. 如何解決 Redis 的併發競爭 Key 問題
  15. 如何保證快取與資料庫雙寫時的資料一致性?

八、JVM相關

  1. 如何判斷一個物件是否存活?(或者 GC 物件的判定方法)
  2. java 中垃圾收集的方法有哪些?
  3. 簡述 java 垃圾回收機制?
  4. GC 的兩種判定方法?
  5. Minor GC 與 Full GC 分別在什麼時候發生?
  6. JVM 記憶體分哪幾個區,每個區的作用是什麼?
  7. GC 收集器有哪些?CMS 收集器與 G1 收集器的特點
  8. GC 的三種收集方法:標記清除、標記整理、複製演算法的原理與特點,分別用在什麼地方,如果讓你優化收集方法,有什麼思路?
  9. 類載入器雙親委派模型機制?
  10. java 類載入過程?
  11. 簡述 java 類載入機制?
  12. 什麼是類載入器,類載入器有哪些?
  13. 簡述 java 記憶體分配與回收策略以及 Minor GC 和Major GC
  14. HotSpot 虛擬機器物件探祕
  15. HotSpot 垃圾收集器

九、調優方面

  1. 垃圾回收器的基本原理是什麼?垃圾回收器可以馬上回收記憶體嗎?有什麼辦法主動通知虛擬機器進行垃圾回收?
  2. Java 中會存在記憶體洩漏嗎,請簡單描述。
  3. 如果物件的引用被置為 null,垃圾收集器是否會立即釋放物件佔用的記憶體?
  4. finalize() 方法什麼時候被呼叫?解構函式 (finalization) 的目的是什麼?
  5. 序列(serial)收集器和吞吐量(throughput)收集器的區別是什麼?
  6. 什麼是分散式垃圾回收(DGC)?它是如何工作的?
  7. 你怎樣給 tomcat 去調優?
  8. Tomcat 的優化經驗
  9. 在 Java 中,物件什麼時候可以被垃圾回收?
  10. System.gc() 和 Runtime.gc() 會做什麼事情?
  11. Java 中會存在記憶體洩漏嗎,請簡單描述
  12. GC 是什麼? 為什麼要有 GC?
  13. JVM 的永久代中會發生垃圾回收麼?
  14. tomcat 有哪幾種 Connector 執行模式(優化)?
  15. 記憶體調優

十、設計模式

  1. 21種設計模式知識要點
  2. 請列舉出在 JDK 中幾個常用的設計模式?
  3. 什麼是設計模式?你是否在你的程式碼裡面使用過任何設計模式?
  4. 在 Java 中,什麼叫觀察者設計模式(observer design pattern)?
  5. 使用工廠模式最主要的好處是什麼?在哪裡使用?
  6. 在 Java 中,什麼時候用過載,什麼時候用重寫?
  7. 在 Java 中,為什麼不允許從靜態方法中訪問非靜態變數?
  8. 設計一個 ATM 機,請說出你的設計思路?
  9. 舉一個用 Java 實現的裝飾模式(decorator design pattern)?它是作用於物件層次還是類層次
  10. 舉例說明什麼情況下會更傾向於使用抽象類而不是介面?

十一、演算法&資料結構

  1. 如何僅用遞迴函式和棧操作逆序一個棧?
  2. 將單向連結串列按某值劃分成左邊小、中間相等、右邊大的形式
  3. 分別用遞迴和非遞迴方式實現二叉樹先序、中序和後序遍歷
  4. 斐波拉契系列問題的遞迴和動態規劃
  5. 判斷字元陣列中是否有的字元都只出現過一次
  6. 在有序但含有空的陣列中查詢字串
  7. 只用2GB記憶體在20億個整數中找到出現次數最多的數
  8. 未排序陣列中累加和小於或等於給定值的最長子陣列長度
  9. 從5隨機到7隨機及其擴充套件
  10. 最大值減去最小值小於或等於num的子陣列數量
  11. 環形單鏈表的約瑟夫問題
  12. 將單鏈表的每K個節點之間逆序
  13. 在二叉樹中找到累加和為指定值的最長路徑長度
  14. 判斷一棵二叉樹是否為搜尋二叉樹和完全二叉樹
  15. 最長公共子序列問題

十二、併發

  1. 什麼是可重入性 , 為什麼說Synchronized是可重入鎖?
  2. 為什麼說Synchronized是一個悲觀鎖?樂觀鎖的實現原理又是什麼?什麼是CAS,它有 什麼特性?
  3. 樂觀鎖一定就是好的嗎?
  4. JVM對Java的原生鎖做了哪些優化?
  5. ReentrantLock 是如何實現可重入性的?
  6. 跟 Synchronized 相 比 ,可重入鎖ReentrantLock其實現原理有什麼不同?
  7. 如何讓Java的執行緒彼此同步?你瞭解過哪些同步器?請分別介紹下 。
  8. CyclicBarrier 和 CountDownLatch 看起來很相似,請對比下呢?
  9. 執行緒池中的執行緒是怎麼建立的?是一開始就隨著執行緒池的啟動建立好的嗎?
  10. 既然提到可以通過配置不同引數創建出不同的執行緒池,那麼Java中預設實現好的執行緒池又 有哪些呢?請比較它們的異同
  11. 請談談volatile有什麼特點,為什麼它能保證變數對所有執行緒的可見性?
  12. 什麼是Java的記憶體模型,Java中各個執行緒是怎麼彼此看到對方的變數的?
  13. 既然volatile能夠保證執行緒間的變數可見性,是不是就意味著基於volatile變數的運算就是並 發安全的 ?
  14. 很多人都說要慎用ThreadLocal,談談你的理解,使用ThreadLocal需要注意些什麼?
  15. 請談談AQS框架是怎麼回事兒?

十三、作業系統/Linux

  1. 死鎖產生的原因
  2. 程序、執行緒區別,什麼時候用執行緒
  3. 如何實現一個執行緒池,Java中執行緒池如何進行配置
  4. linux中有哪些常見的指令,進行介紹
  5. select、poll、epoll有沒有了解過,講解一下
  6. 執行緒切換,引申到Java阻塞➡️執行
  7. 如何分層複製/home目錄到另一個目錄?
  8. 什麼是安裝Linux所需的最小分割槽數量,以及如何檢視系統啟動資訊?
  9. 如何暫停一個正在執行的程序,把其放在後臺(不執行)?
  10. 什麼是頁面錯誤,它是怎麼發生的?

全部答案解析如下:(不一一截圖了,全在下面這一塊,已經全部整理成這些PDF了,私信我“面試”免費分享)

最新Java崗面試清單:分散式+Dubbo+執行緒+Redis+資料庫+JVM+併發

答案解析

更多Java相關的筆記

最新Java崗面試清單:分散式+Dubbo+執行緒+Redis+資料庫+JVM+併發

更多Java相關的筆記

答案已經整理,還有更多的Java學習筆記都在這兒了,下載全部的這些PDF很簡單,一鍵三連後,“加我VX小助理”即可免費獲取到!