最新Java崗面試清單:分布式+Dubbo+線程+Redis+數據庫+JVM+并發

最近可能有點閑的慌,沒事就去找面試面經,整理了一波面試題。我大概是分成了Java基礎、中級、高級,分布式,Spring架構,多線程,網絡,MySQL,Redis緩存,JVM相關,調優,設計模式,算法與數據結構,并發,Linux等15個小模塊。

每個小模塊文章里估計就只能只給出部分的面試題目,不然要是全部寫出來,篇幅不夠呀。而且還有相應的答案,太難了,所以直接給大家提供最完整的答案解析文檔,私信我 “面試” 立馬回復免費下載的方式

一、Java基礎

什么是 Java 程序的主類?應用程序和小程序的主類有何不同?

構造器 Constructor 是否可被 override?

String StringBuffer 和 StringBuilder 的區別是什么?String 為什么是不可變的?

對象的相等與指向他們的引用相等,兩者有什么不同?

重載和重寫的區別?

在一個靜態方法內調用一個非靜態成員為什么是非法的?

簡述線程,程序、進程的基本概念。以及他們之間關系是什么

什么是方法的返回值?返回值在類的方法里的作用是什么?

一個類的構造方法的作用是什么 若一個類沒有聲明構造方法,該程序能正確執行嗎 ?為什么?

Java 面向對象編程三大特性: 封裝 繼承 多態

Java 序列化中如果有些字段不想進行序列化 怎么辦?

在調用子類構造方法之前會先調用父類沒有參數的構造方法,其目的是?

線程有哪些基本狀態?

創建一個對象用什么運算符?對象實體與對象引用有何不同?

成員變量與局部變量的區別有哪些?

二、Java中級

Spring的AOP和IOC是什么?使用場景有哪些?Spring事務,事務的屬性,數據庫隔離級別

Spring和SpringMVC,MyBatis以及SpringBoot的注解分別有哪些?

SpringCould組件有哪些,它們的作用是什么?微服務的CAP是什么?BASE是什么?

HashMap底層實現原理,紅黑樹,B+樹,B樹的結構原理,CAS(比較與交換)實現原理

Redis支持的數據類型以及使用場景,持久化,哨兵機制,緩存擊穿,緩存穿透

線程是什么,有幾種實現方式,它們之間的區別是什么,線程池實現原理,JUC并發包

安全性問題(數據篡改(拿到別人的URL,篡改數據(金額)發送給系統))

索引使用的限制條件,sql優化有哪些,數據同步問題(緩存,數據庫數據同步)

分布式事務

堆溢出,棧溢出的出現場景以及解決方案

悲觀鎖,樂觀鎖,讀寫鎖,行鎖,表鎖,自旋鎖,死鎖,分布式鎖,線程同步鎖,公平鎖,非公平鎖分別是什么?

初始化Bean對象有幾個步驟,它的生命周期

JVM內存模型,算法,垃圾回收器,調優,類加載機制(雙親委派),創建一個對象,這個對象在內存中是怎么分配的?

Dubbo的運行原理,與SpringCould相比它為什么效率要高一些,Zookeeper底層原理

說出幾種MQ之間的區別,以及為什么使用這種MQ,消息重復發送(冪等性),消息發送失敗,消息掉包,長時間收不到消息,發送的消息太大造成接收不成功

三、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很簡單,

轉發+私信我 “面試”即可回復免費下載的方式!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。