前言:
本文收集整理了各大廠常見面試題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小助理”即可免費獲取到!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/183489.html
標籤:python
上一篇:PD3.0詳解 第九章 策略層 電源協商(source端)
下一篇:2020-10-19

