血虐全網的“Java面試題手冊”不服?你來看看!
阿新 • • 發佈:2020-10-20
前言:
本文收集整理了各大廠常見面試題N道,你想要的這裡都有內容涵蓋:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技術棧,希望大家都能找到適合自己的公司,開開心心的擼程式碼。
一、Java高階
- 為什麼使用訊息佇列?訊息佇列有什麼優點和缺點?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什麼優點和缺點?
- 如何保證訊息不被重複消費?或者說,如何保證訊息消費的冪等性?
- 如何解決訊息佇列的延時以及過期失效問題?訊息佇列滿了以後該怎麼處理?有幾百萬訊息持續積壓幾小時,說說怎麼解決?
- redis 叢集模式的工作原理能說一下麼?在叢集模式下,redis 的 key 是如何定址的?分散式定址都有哪些演算法?瞭解一致性 hash 演算法嗎?
- 瞭解什麼是 redis 的雪崩、穿透和擊穿?redis 崩潰之後會怎麼樣?系統該如何應對這種情況?如何處理 redis 的穿透?
- 為什麼要分庫分表(設計高併發系統的時候,資料庫層面該如何設計)?用過哪些分庫分表中介軟體?不同的分庫分表中介軟體都有什麼優點和缺點?你們具體是如何對資料庫如何進行垂直拆分或水平拆分的?
- 有沒有做 MySQL 讀寫分離?如何實現 MySQL 的讀寫分離?MySQL 主從複製原理的是啥?如何解決MySQL 主從同步的延時問題?
- 說一下的 dubbo 的工作原理?註冊中心掛了可以繼續通訊嗎?說說一次 rpc 請求的流程?
- 如何基於 dubbo 進行服務治理、服務降級、失敗重試以及超時重試?
- 叢集部署時的分散式 session 如何實現?
- 服務註冊和發現是什麼意思?Spring Cloud 如何實現?
- 一般實現分散式鎖都有哪些方式?使用 redis 如何設計分
- 布式鎖?使用 zk 來設計分散式鎖可以嗎?這兩種分散式鎖的實現方式哪種效率比較高?
- dubbo 的 spi 思想是什麼?
- 如何設計可以動態擴容縮容的分庫分表方案?
二、分散式
- ActiveMQ 中的訊息重發時間間隔和重發次數嗎?
- Kafka 建立 Topic 時如何將分割槽放置到不同的 Broker 中
- Kafka 判斷一個節點是否還活著有哪兩個條件?
- Kafka 訊息是採用 Pull 模式,還是 Push 模式?
- memcached 和伺服器的 local cache(比如 PHP 的 APC、mmap 檔案等)相比,有什麼優缺點?
- 我需要把 memcached 中的 item 批量匯出匯入,怎麼辦?
- memcached 的多執行緒是什麼?如何使用它們?
- MongoDB 在 A:{B,C}上建立索引,查詢 A:{B,C}和 A:{C,B}都會使用索引嗎?
- MongoDB 支援儲存過程嗎?如果支援的話,怎麼用?
- 如何理解 MongoDB 中的 GridFS 機制,MongoDB 為何使用 GridFS 來儲存檔案?
- 在 Nginx 中,如何使用未定義的伺服器名稱來阻止處理請求?
- RabbitMQ 上的一個 queue 中存放的 message 是否有數量限制?
- 若 cluster 中擁有某個 queue 的 owner node 失效了,且該 queue 被宣告具有durable 屬性,是否能夠成功從其他 node 上重新宣告該 queue ?
- 為什麼說保證 message 被可靠持久化的條件是 queue 和 exchange 具有durable 屬性,同時 message 具有 persistent 屬性才行?
- 為什麼用快取,用過哪些快取,redis和memcache的區別?
三、Spring架構
- Spring Boot、Spring MVC 和 Spring 有什麼區別?
- BeanFactory 和 ApplicationContext 有什麼區別?
- 什麼是基於Java的Spring註解配置? 給一些註解的例子.
- 請解釋 Spring Bean 的生命週期?
- Spring 框架中的單例 Beans 是執行緒安全的麼?
- SpringMvc 的控制器是不是單例模式,如果是,有什麼問題,怎麼解決?
- SpringMVC 怎麼樣設定重定向和轉發的?
- 當一個方法向 AJAX 返回特殊物件,比如 Object,List 等,需要做什麼處理?
- SpringMvc 用什麼物件從後臺向前臺傳遞資料的?
- 服務註冊和發現是什麼意思?Spring Cloud 如何實現?
- 使用 Spring Cloud 有什麼優勢?
- 什麼是 Hystrix 斷路器?我們需要它嗎?
- 什麼是 Spring Cloud Bus?我們需要它嗎?
- 如何實現 Spring Boot 應用程式的安全性?
- Spring Boot 配置的預設 H2 資料庫的名字是上面?為什麼預設的資料庫名字是 testdb?
四、執行緒問題
- stop() 和 suspend() 方法為何不推薦使用?
- 同步和非同步有何異同,在什麼情況下分別使用它們?
- 執行緒間通訊,wait和notify
- 什麼是執行緒餓死,什麼是活鎖?
- atomicinteger和volatile等執行緒安全操作的關鍵字的理解和使用
- volatile 變數是什麼?volatile 變數和 atomic 變數有什麼不同?
- 當一個執行緒進入一個物件的一個 synchronized 方法後,其它執行緒是否可進入此物件的其它方法?
- 簡述 synchronized 和 java.util.concurrent.locks.Lock 的異同?
- 多執行緒之間通訊的同步問題,synchronized鎖的是物件,衍伸出和synchronized相關很多的具體問題,例如同一個類不同方法都有synchronized鎖,一個物件是否可以同時訪問。或者一個類的static構造方法加上synchronized之後的鎖的影響。
- volatile 型別變數提供什麼保證?能使得一個非原子操作變成原子操作嗎?
- 瞭解可重入鎖的含義,以及ReentrantLock 和synchronized的區別
- Java建立執行緒之後,直接呼叫start()方法和run()的區別
- 同步的資料結構,例如concurrentHashMap的原始碼理解以及內部實現原理,為什麼它是同步的且效率高
- 常用的執行緒池模式以及不同執行緒池的使用場景
- newFixedThreadPool此種執行緒池如果執行緒數達到最大值後會怎麼辦,底層原理。
五、網路方面
- 為什麼要三次握手
- 二次握手有什麼問題
- 三次握手有哪些缺陷
- TCP是如何控制流量的
- 傳送方傳送頻率過高造成丟包,TCP是如何解決的
- HTTPs為什麼要用對稱加密+非對稱加密,相對於只使用非對稱加密有什麼好處
- 講一下OSI網路架構
- HTTP在哪一層
- HTTP報文結構
- HTTP首部欄位
- HTTPs加密在哪一層實現
- http是無狀態通訊,http的請求方式有哪些,可以自己定義新的請求方式麼。
- socket通訊,以及長連線,分包,連線異常斷開的處理。
- socket通訊模型的使用,AIO和NIO。
- socket框架netty的使用,以及NIO的實現原理,為什麼是非同步非阻塞
六、MySQL資料庫
- 務四大特性(ACID)原子性、一致性、隔離性、永續性?
- 查詢語句不同元素(where、jion、limit、group by、having等等)執行先後順序?
- MySQL常見的三種儲存引擎(InnoDB、MyISAM、MEMORY)的區別?
- MySQL的MyISAM與InnoDB兩種儲存引擎在,事務、鎖級別,各自的適用場景?
- mysql 高併發環境解決方案?
- 事務的併發?事務隔離級別,每個級別會引發什麼問題,MySQL預設是哪個級別?
- MySQL B+Tree索引和Hash索引的區別?
- 有哪些鎖(樂觀鎖悲觀鎖),select 時怎麼加排它鎖?
- sql查詢語句確定建立哪種型別的索引?如何優化查詢?
- 聚集索引和非聚集索引區別?
- mysql都有什麼鎖,死鎖判定原理和具體場景,死鎖怎麼解決?
- 非關係型資料庫和關係型資料庫區別,優勢比較?
- MySQL慢查詢怎麼解決?
- 資料庫的讀寫分離、主從複製,主從複製分析的 7 個問題?
- 資料庫崩潰時事務的恢復機制(REDO日誌和UNDO日誌)?
七、Redis快取
- redis事務相關命令有哪些?
- 為什麼要用 redis /為什麼要用快取(高效能、高併發)
- 為什麼要用 redis 而不用 map/guava 做快取?
- redis 和 memcached 的區別
- 請介紹一下Redis的資料型別SortedSet(zset)以及底層實現機制?
- redis 常見資料結構以及使用場景分析(String、Hash、List、Set、Sorted Set)
- redis 設定過期時間
- redis 記憶體淘汰機制(MySQL裡有2000w資料,Redis中只存20w的資料,如何保證Redis中的資料都是熱點資料?)
- redis 持久化機制(怎麼保證 redis 掛掉之後再重啟資料可以進行恢復)
- redis 事務
- Redis 常見異常及解決方案(快取穿透、快取雪崩、快取預熱、快取降級)
- 分散式環境下常見的應用場景(分散式鎖、分散式自增 ID)
- Redis 叢集模式(主從模式、哨兵模式、Cluster 叢集模式)
- 如何解決 Redis 的併發競爭 Key 問題
- 如何保證快取與資料庫雙寫時的資料一致性?
八、JVM相關
- 如何判斷一個物件是否存活?(或者 GC 物件的判定方法)
- java 中垃圾收集的方法有哪些?
- 簡述 java 垃圾回收機制?
- GC 的兩種判定方法?
- Minor GC 與 Full GC 分別在什麼時候發生?
- JVM 記憶體分哪幾個區,每個區的作用是什麼?
- GC 收集器有哪些?CMS 收集器與 G1 收集器的特點
- GC 的三種收集方法:標記清除、標記整理、複製演算法的原理與特點,分別用在什麼地方,如果讓你優化收集方法,有什麼思路?
- 類載入器雙親委派模型機制?
- java 類載入過程?
- 簡述 java 類載入機制?
- 什麼是類載入器,類載入器有哪些?
- 簡述 java 記憶體分配與回收策略以及 Minor GC 和Major GC
- HotSpot 虛擬機器物件探祕
- HotSpot 垃圾收集器
九、調優方面
- 垃圾回收器的基本原理是什麼?垃圾回收器可以馬上回收記憶體嗎?有什麼辦法主動通知虛擬機器進行垃圾回收?
- Java 中會存在記憶體洩漏嗎,請簡單描述。
- 如果物件的引用被置為 null,垃圾收集器是否會立即釋放物件佔用的記憶體?
- finalize() 方法什麼時候被呼叫?解構函式 (finalization) 的目的是什麼?
- 序列(serial)收集器和吞吐量(throughput)收集器的區別是什麼?
- 什麼是分散式垃圾回收(DGC)?它是如何工作的?
- 你怎樣給 tomcat 去調優?
- Tomcat 的優化經驗
- 在 Java 中,物件什麼時候可以被垃圾回收?
- System.gc() 和 Runtime.gc() 會做什麼事情?
- Java 中會存在記憶體洩漏嗎,請簡單描述
- GC 是什麼? 為什麼要有 GC?
- JVM 的永久代中會發生垃圾回收麼?
- tomcat 有哪幾種 Connector 執行模式(優化)?
- 記憶體調優
十、設計模式
- 21種設計模式知識要點
- 請列舉出在 JDK 中幾個常用的設計模式?
- 什麼是設計模式?你是否在你的程式碼裡面使用過任何設計模式?
- 在 Java 中,什麼叫觀察者設計模式(observer design pattern)?
- 使用工廠模式最主要的好處是什麼?在哪裡使用?
- 在 Java 中,什麼時候用過載,什麼時候用重寫?
- 在 Java 中,為什麼不允許從靜態方法中訪問非靜態變數?
- 設計一個 ATM 機,請說出你的設計思路?
- 舉一個用 Java 實現的裝飾模式(decorator design pattern)?它是作用於物件層次還是類層次
- 舉例說明什麼情況下會更傾向於使用抽象類而不是介面?
十一、演算法&資料結構
- 如何僅用遞迴函式和棧操作逆序一個棧?
- 將單向連結串列按某值劃分成左邊小、中間相等、右邊大的形式
- 分別用遞迴和非遞迴方式實現二叉樹先序、中序和後序遍歷
- 斐波拉契系列問題的遞迴和動態規劃
- 判斷字元陣列中是否有的字元都只出現過一次
- 在有序但含有空的陣列中查詢字串
- 只用2GB記憶體在20億個整數中找到出現次數最多的數
- 未排序陣列中累加和小於或等於給定值的最長子陣列長度
- 從5隨機到7隨機及其擴充套件
- 最大值減去最小值小於或等於num的子陣列數量
- 環形單鏈表的約瑟夫問題
- 將單鏈表的每K個節點之間逆序
- 在二叉樹中找到累加和為指定值的最長路徑長度
- 判斷一棵二叉樹是否為搜尋二叉樹和完全二叉樹
- 最長公共子序列問題
十二、併發
- 什麼是可重入性 , 為什麼說Synchronized是可重入鎖?
- 為什麼說Synchronized是一個悲觀鎖?樂觀鎖的實現原理又是什麼?什麼是CAS,它有 什麼特性?
- 樂觀鎖一定就是好的嗎?
- JVM對Java的原生鎖做了哪些優化?
- ReentrantLock 是如何實現可重入性的?
- 跟 Synchronized 相 比 ,可重入鎖ReentrantLock其實現原理有什麼不同?
- 如何讓Java的執行緒彼此同步?你瞭解過哪些同步器?請分別介紹下 。
- CyclicBarrier 和 CountDownLatch 看起來很相似,請對比下呢?
- 執行緒池中的執行緒是怎麼建立的?是一開始就隨著執行緒池的啟動建立好的嗎?
- 既然提到可以通過配置不同引數創建出不同的執行緒池,那麼Java中預設實現好的執行緒池又 有哪些呢?請比較它們的異同
- 請談談volatile有什麼特點,為什麼它能保證變數對所有執行緒的可見性?
- 什麼是Java的記憶體模型,Java中各個執行緒是怎麼彼此看到對方的變數的?
- 既然volatile能夠保證執行緒間的變數可見性,是不是就意味著基於volatile變數的運算就是並 發安全的 ?
- 很多人都說要慎用ThreadLocal,談談你的理解,使用ThreadLocal需要注意些什麼?
- 請談談AQS框架是怎麼回事兒?
十三、作業系統/Linux
- 死鎖產生的原因
- 程序、執行緒區別,什麼時候用執行緒
- 如何實現一個執行緒池,Java中執行緒池如何進行配置
- linux中有哪些常見的指令,進行介紹
- select、poll、epoll有沒有了解過,講解一下
- 執行緒切換,引申到Java阻塞➡️執行
- 如何分層複製/home目錄到另一個目錄?
- 什麼是安裝Linux所需的最小分割槽數量,以及如何檢視系統啟動資訊?
- 如何暫停一個正在執行的程序,把其放在後臺(不執行)?
- 什麼是頁面錯誤,它是怎麼發生的?
全部答案解析如下:(不一一截圖了,全在下面這一塊,已經全部整理成這些PDF了,私信我“面試”免費分享)
答案解析
更多Java相關的筆記
更多Java相關的筆記
答案已經整理,還有更多的Java學習筆記都在這兒了,下載全部的這些PDF很簡單,一鍵三連後,“加我VX小助理”即可免費獲取到!