前言:面試
不少人都在緊張的準備着2020的跳槽面試,今天筆者也給你們分享一些高頻面試題,但願能夠幫助到有須要的人,不會作不要着急哦,文末本文有答案領取,按照我平時複習的模塊進行題目劃分,因爲題目較多,文未貼出答案。正則表達式
1、Java基礎redis
解釋下什麼是面向對象?面向對象和麪向過程的區別?算法
面向對象的三大特性?分別解釋下?數據庫
JDK、JRE、JVM 三者之間的關係?編程
重載和重寫的區別?設計模式
Java 中是否能夠重寫一個 private 或者 static 方法?數組
構造器是否能夠被重寫?瀏覽器
構造方法有哪些特性?緩存
在 Java 中定義一個不作事且沒有參數的構造方法有什麼做用?
Java 中建立對象的幾種方式?
抽象類和接口有什麼區別?
靜態變量和實例變量的區別?
成員變量和局部變量的區別?
short s1 = 1;s1 = s1 + 1;有什麼錯?那麼 short s1 = 1; s1 += 1;呢?有沒有錯誤?
Integer 和 int 的區別?
裝箱和拆箱
switch 語句可否做用在 byte 上,可否做用在 long 上,可否做用在 String 上?
字節和字符的區別?
String 爲何要設計爲不可變類?
String、StringBuilder、StringBuffer 的區別?
String str = "i" 與 String str = new String("i") 同樣嗎?
String 類的經常使用方法都有那些?
final 修飾 StringBuffer 後還能夠 append 嗎?
Object 的經常使用方法有哪些?
爲何 wait/notify 方法放在 Object 類中而不是 Thread 類中?
final、finally、finalize 的區別?
finally 塊中的代碼何時被執行?finally 是否是必定會被執行到?
try-catch-finally 中哪一個部分能夠省略?
try-catch-finally 中,若是 catch 中 return 了,finally 還會執行嗎?
static 關鍵字的做用?
super 關鍵字的做用?
transient關鍵字的做用?
== 和 equals 的區別?
兩個對象的 hashCode() 相同,則 equals() 也必定爲 true 嗎?
爲何重寫 equals() 就必定要重寫 hashCode() 方法?
& 和 && 的區別?
Java 中的參數傳遞時傳值呢?仍是傳引用?
Java 中的 Math.round(-1.5) 等於多少?
兩個數的異或結果是什麼?
error 和 exception 的區別?
throw 和 throws 的區別?
常見的異常類有哪些?
運行時異常與受檢異常有何異同?
主線程能夠捕獲到子線程的異常嗎?
Java 的泛型是如何工做的 ? 什麼是類型擦除 ?
什麼是泛型中的限定通配符和非限定通配符 ?
List<? extends T> 和 List <? super T> 之間有什麼區別 ?
如何實現對象的克隆?
深克隆和淺克隆的區別?
什麼是 Java 的序列化,如何實現 Java 的序列化?
Java 中的反射是什麼意思?有哪些應用場景?
反射的優缺點?
Java 中的動態代理是什麼?有哪些應用?
怎麼實現動態代理?
Java 中的 IO 流的分類?說出幾個你熟悉的實現類?
字節流和字符流有什麼區別?
BIO、NIO、AIO 有什麼區別?
2、Java集合類
Java 中經常使用的容器有哪些?
ArrayList 和 LinkedList 的區別?
ArrayList 的擴容機制?
Array 和 ArrayList 有何區別?何時更適合用 Array?
HashMap 的實現原理/底層數據結構?JDK1.7 和 JDK1.8
HashMap 的 get、put、resize 方法的過程?
HashMap 的 size 爲何必須是 2 的整數次方?
HashMap 多線程死循環問題?
HashMap 的 get 方法可否判斷某個元素是否在 Map 中?
HashMap 與 HashTable/ConcurrentHashMap 的區別是什麼?
HashTable 和 ConcurrentHashMap 的區別是什麼?
ConcurrentHashMap 的實現原理是什麼?
HashSet 的實現原理?怎麼保證元素不重複的?
LinkedHashMap 的實現原理?
Iterator 怎麼使用?有什麼特色?
Iterator 和 Enumeration 接口的區別?
fail-fast 與 fail-safe 有什麼區別?
Collection 和 Collections 有什麼區別?
3、Java併發
並行和併發有什麼區別?
線程和進程的區別?
守護線程是什麼?
建立線程的幾種方式?
runnable 和 callable 有什麼區別?
線程狀態及轉換?
sleep() 和 wait() 的區別?
線程的 run() 和 start() 有什麼區別?
在 Java 程序中怎麼保證多線程的運行安全?
Java 線程同步的幾種方法?
Thread.interrupt() 方法的工做原理是什麼?
談談對 ThreadLocal 的理解?
多線程並行運行,主線程怎麼收集子線程的信息?
說一說本身對於 synchronized 關鍵字的瞭解?項目中怎麼使用的?
說說 JDK1.6 以後的 synchronized 關鍵字底層作了哪些優化,能夠詳細介紹一下這些優化嗎?
談談 synchronized 和 ReenTrantLock 的區別?
synchronized 和 volatile 的區別是什麼?
簡單介紹下 volatile?volatile 的底層原理是什麼?內存屏障是如何實現的?
說下對 ReentrantReadWriteLock 的理解?
說下對悲觀鎖和樂觀鎖的理解?
樂觀鎖常見的兩種實現方式是什麼?分別有什麼問題?
CAS 和 synchronized 的使用場景?
什麼是 CAS,內部怎麼實現的?
簡單說下對 Java 中的原子類的理解?atomic 的原理是什麼?
說下對同步器 AQS 的理解?
說下對信號量 Semaphore 的理解?
CountDownLatch 和 CyclicBarrier 有什麼區別?
說下對線程池的理解?爲何要使用線程池?
實現 Runnable 接口和 Callable 接口的區別?
執行 execute() 方法和 submit() 方法的區別是什麼呢?
如何建立線程池?
建立線程池的參數有哪些?
線程池中的的線程數通常怎麼設置?須要考慮哪些問題?
說下對 Fork/Join 並行計算框架的理解?
JDK 中提供了哪些併發容器?
談談對 CopyOnWriteArrayList 的理解?
談談對 ConcurrentLinkedQueue 的理解?
談談對 ConcurrentSkipListMap 的理解?
談談對 BlockingQueue 的理解?分別有哪些實現類?
4、Java虛擬機
說一下 Jvm 的主要組成部分?及其做用?
談談對運行時數據區的理解?
談談對堆和棧的理解?堆中存什麼?棧中存什麼?
爲何要把堆和棧區分出來呢?棧中不是也能夠存儲數據嗎?
Java 中的參數傳遞時傳值呢?仍是傳引用?
Java 對象的大小是怎麼計算的?
對象的訪問定位的兩種方式?
判斷垃圾能夠回收的方法有哪些?有什麼優缺點?
被標記爲垃圾的對象必定會被回收嗎?
談談對 Java 中引用的瞭解?
談談對內存泄漏的理解?舉幾個內存泄漏的案例?
經常使用的垃圾收集算法有哪些?各自的優缺點是什麼?
爲何要採用分代收集算法?
什麼是浮動垃圾?
經常使用的垃圾收集器有哪些?
談談 CMS 和 G1 的區別?
談談對 G1 收集器的理解?
詳細說下垃圾回收策略?
談談你對內存分配的理解?大對象怎麼分配?空間分配擔保?
說下你用過的 JVM 監控工具?
談談你對 JVM 調優的理解?有過工程調優經驗嗎?
JVM 設置最大堆的參數是什麼?
談談你對類文件結構的理解?有哪些部分組成?
談談你對類加載機制的瞭解?
類加載各階段的做用分別是什麼?
有哪些類加載器?分別有什麼做用?
怎麼實現一個自定義的類加載器?須要注意什麼?
談談你對雙親委派模型的理解?工做過程?爲何要使用?
怎麼打破雙親委派模型?有哪些實際場景是須要打破雙親委派模型的?
談談你對編譯期優化和運行期優化的理解?
談談你對詞法分析和語法分析的理解?
爲什麼 HotSpot 虛擬機要使用解釋器與編譯器並存的架構?
編譯優化技術有哪些?
說下你對 Java 內存模型的理解?
內存間的交互操做有哪些?須要知足什麼規則?
5、計算機網絡
談談你對五層網絡協議的理解?每一層的做用是什麼?每一層的數據單元是什麼?
簡單說下每一層對應的網絡協議有哪些?
ARP 協議的工做原理?
談下你對 IP 地址分類的理解?
TCP 和 UDP 的區別?
TCP 和 UDP 分別對應的常見應用層協議有哪些?
詳細說下 TCP 三次握手的過程?
爲何兩次握手不能夠?爲何不須要四次握手?
爲何要回傳 SYN? 爲何要傳 ACK?
詳細說下 TCP 四次揮手的過程?
爲何 TIME-WAIT 狀態必須等待 2MSL 的時間呢?
爲何第二次跟第三次不能合併, 第二次和第三次之間的等待是什麼?
保活計時器的做用?
TCP 協議是如何保證可靠傳輸的?
談談你對中止等待協議的理解?
談談你對 ARQ 協議的理解?
滑動窗口有什麼做用?
談下你對 TCP 擁塞控制的理解?四種算法?
TCP 黏包是怎麼產生的?怎麼解決?
說幾個你知道的 HTTP 狀態碼?
HTTP 狀態碼 301 和 302 表明的是什麼?有什麼區別?
forward 和 redirect 的區別?
HTTP 方法有哪些?
說下 GET 和 POST 的區別?
HTTP 的首部字段有哪些?
在瀏覽器中輸入 URL 地址到顯示主頁的過程?
說下 DNS 解析的過程?
談下你對 HTTP 長鏈接和短鏈接的理解?分別應用於哪些場景?
談下 HTTP1.0 和 1.一、1.2 的主要變化?
HTTPS 的工做過程?
HTTP 和 HTTPS 的區別?
HTTPS 的優缺點?
什麼是數字簽名?什麼是證書?
什麼是對稱加密和非對稱加密?
經常使用的加密算法有哪些?
Session 和 Cookie 的區別?
什麼是 CAS 單點登陸?
如何設計一個 CAS 單點登陸系統?
Socket 兩個典型的接收方式方式?
Socket 在 OSI七 層模型中的哪一層?
Java 如何實現無阻塞方式的 Socket 編程?
說下你知道你知道的***手段有哪些?
跨站腳本***的原理、危害和防範手段?
跨站請求僞造的原理、危害和防範手段?
SQL 注入***的原理、危害和防範手段?
拒絕服務*** DOS 的原理、危害和防範手段?
6、計算機操做系統
進程與線程的區別?
進程的狀態及其轉換?
進程間的通訊方式有哪些?
進程(或做業)的調度算法有哪些?
同步和互斥的區別?
同步、異步、阻塞、非阻塞的區別?
線程/進程同步的方式有哪些?
什麼是緩衝區溢出,有什麼危害,緣由是什麼?
什麼是死鎖?
死鎖產生的必要條件?
死鎖的檢測和消除?
怎麼處理死鎖?
怎麼預防死鎖?
怎麼避免死鎖?
固定分區、動態分區、分段式存儲管理和分頁式存儲管理的區別?
頁面置換算法有哪些?
什麼是虛擬內存技術?
動態連接庫和靜態連接庫的區別?
說下你對磁盤結構的認識?
磁盤調度算法?
中斷的類型有哪些?
7、設計模式
簡單說下經常使用的設計模式有哪些?
工廠方法模式和抽象工廠模式有什麼區別?
實際開發中用過設計模式嗎?怎麼用的?
解釋器、迭代器、觀察者、適配器、組合、外觀、代理等模式的原理是什麼?
文件目錄採用的是哪一種設計模式?
JDK 中用到了哪些設計模式?
Spring 中用到了哪些設計模式?
8、MySQL
手寫/口述場景題的 SQL 語句
一條 SQL 語句在數據庫框架中的執行流程?
數據庫的三範式是什麼?
MySQL 中的數據類型有哪些?
char 和 varchar 的區別?
談談你對索引的理解?底層數據結構?
爲何要使用索引?必定要使用索引嗎?
爲何索引的底層數據結構採用 B+ 樹而不是紅黑樹?
索引的類型?
什麼叫聚簇索引?什麼叫聯合索引?
談下什麼是前綴索引?
談下什麼是覆蓋索引?
什麼狀況下索引會失效?即查詢不走索引?
查詢性能的優化方法?
InnoDB 和 MyISAM 的比較?
爲何要分庫分表?分庫分表後,主鍵 ID 怎麼設置?
水平切分和垂直切分該如何選擇?存在什麼問題?
主從複製中涉及到哪三個線程?
如何實現 MySQL 的讀寫分離?
MySQL 的主從複製原理是什麼?如何解決 MySQL 主從同步延遲問題?
談下你對讀寫分離的理解?
談下你對數據庫事務的理解?不一樣隔離級別下會產生什麼問題?怎麼解決?
MySQL 默認的隔離級別是什麼?
MVCC 的實現原理是什麼?
數據庫中經常使用的鎖有哪些?
表鎖和行鎖有什麼區別?
InnoDB 何時使用行級鎖?何時使用表級鎖?
InnoDB 存儲引擎的鎖的 3 種算法?
MySQL 數據庫 CPU 飆升到 500% 的話他怎麼處理?
9、Spring
AOP 的代理有哪幾種方式?
怎麼實現 JDK 動態代理?
AOP 的基本概念:切面、鏈接點、切入點等?
談談你對 IOC 的理解?
Bean 的生命週期?
Bean 的做用域?
Spring 中的單例 Bean 的線程安全問題了解嗎?
談談你對 Spring 中的事物的理解?
Spring 中的事務隔離級別?
Spring 中的事物傳播行爲?
Spring 經常使用的注入方式有哪些?
Spring 框架中用到了哪些設計模式?
10、SpringMVC
談談你對 MVC 模式的理解?
SpringMVC 的工做原理/執行流程?
SpringMVC 的重要組件有哪些?
談談你對 DispatcherServlet 的源碼理解?
SpringMVC 經常使用的註解有哪些?
SpringMVC 怎麼樣設定重定向和轉發的?
如何解決 POST 請求中文亂碼問題,GET 的又如何處理呢?
SpringMVC 的控制器是否是單例模式,若是是,有什麼問題,怎麼解決?
SpringMVC 裏面攔截器是怎麼寫的?
SpringMVC 用什麼對象從後臺向前臺傳遞數據的?
11、MyBatis
Mybatis 中 #{}和 ${}的區別是什麼?
Mybatis 有幾種分頁方式?
Mybatis 邏輯分頁和物理分頁的區別是什麼?
Mybatis 是否支持延遲加載?延遲加載的原理是什麼?
說一下 Mybatis 的一級緩存和二級緩存?
Mybatis 和 Hibernate 的區別有哪些?
Mybatis 有哪些執行器(Executor)?
Mybatis 分頁插件的實現原理是什麼?
12、Redis
Redis 是什麼?Redis 有哪些功能?都有哪些使用場景?
Redis 爲何是單線程的?
Redis 支持的數據類型有哪些?
什麼是緩存雪崩?該如何解決?
什麼是緩存穿透?怎麼解決?
怎麼保證緩存和數據庫數據的一致性?
Redis 持久化有幾種方式?
Redis 怎麼實現分佈式鎖?Redis 分佈式鎖有什麼缺陷?
Redis 淘汰策略有哪些?
redis 常見的性能問題有哪些?該如何解決?
十3、消息隊列
消息隊列的主要做用?
消息隊列的優缺點?
如何保證消息隊列的高可用?
如何保證消息不被重複消費?或者說,如何保證消息消費的冪等性?
如何保證消息的可靠性傳輸?或者說,如何處理消息丟失的問題?
如何保證消息的順序性?
如何解決消息隊列的延時以及過時失效問題?消息隊列滿了之後該怎麼處理?有幾百萬消息持續積壓幾小時,說說怎麼解決?
若是讓你寫一個消息隊列,該如何進行架構設計?說一下你的思路
RabbitMQ 有哪些重要的角色?有哪些重要的組件?
RabbitMQ 怎麼避免消息丟失?
要保證消息持久化成功的條件有哪些?
RabbitMQ 有幾種廣播類型?
RabbitMQ 怎麼實現延遲消息隊列?
Kafka 能夠脫離 zookeeper 單獨使用嗎?爲何?
Kafka 有幾種數據保留的策略?
十4、Zookeeper
zookeeper 都有哪些功能?
zookeeper 有幾種部署模式?
集羣中有 3 臺服務器,其中一個節點宕機,這個時候 zookeeper 還可使用嗎?
zookeeper 怎麼保證主從節點的狀態同步?
集羣中爲何要有主節點?
說一下 zookeeper 的通知機制?
說一下兩階段提交和三階段提交的過程?分別有什麼問題?
你認爲幾階段提交能夠實現可靠事務?
如何使用 zookeeper 實現分佈式鎖?
十5、Dubbo
Dubbo 的組件有哪些?做用是什麼?
Dubbo 的集羣容錯模式有哪些?
Dubbo 中 zookeeper 作註冊中心,若是註冊中心集羣都掛掉,發佈者和訂閱者之間還能通訊麼?
Dubbo 鏈接註冊中心和直連的區別?
Dubbo 協議爲何要消費者比提供者個數多?
Dubbo 協議爲何不能傳大包?
Dubbo 協議爲何採用異步單一長鏈接?
Dubbo 支持哪些序列化協議?說一下 Hession 的數據結構?
分佈式服務接口的冪等性如何設計?
分佈式服務接口請求的順序性如何保證?
十6、分佈式理論
談一下你對 CAP 的認識?
什麼是 Base 理論?
兩階段提交和三階段提交的過程?兩階段提交有什麼問題?三階段提交有什麼問題?
分佈式事務經常使用的解決方案有哪些?
說一下你對 TCC 模式的理解?
Paxos 算法
說一下你對 ZAB 協議的理解?
什麼是分佈式鎖?
分佈式鎖應該具有哪些功能?
分佈式鎖的實現方式有哪些?
十7、數據結構與算法
一、數組
找出數組中出現次數大於數組長度一半和 N / K 的數
數組的奇偶位置問題:給定一個整型數組,請在原地調整這個數組,保證要麼偶數位置上都是偶數,或者奇數位置上都是奇數。
調整數組順序使奇數位於偶數前面
數組的度
求一個數組中的第 K 小 / 大的數
將一個整數數組劃分爲 K 個相等的子集問題
旋轉數組中的最小數字
在二維數組中查找一個數
找出數組中重複的數字
找出數組中只出現一次的那個數,其餘都出現兩次
子數組最大累乘積:給定一個 double 類型的數組 arr,其中的元素可正、可負、可 0,返回子數組累乘的最大乘積。
須要排序的最短子數組長度
最長的可整合子數組的長度
最短無序連續子數組
連續子數組的最大和
二、字符串
字符串的排列與組合
最長迴文子串
正則表達式匹配:實現一個函數用來匹配包括'.'和'*'的正則表達式
替換空格
字符串的翻轉和旋轉及其應用
字符串解碼
無重複字符的最長子串
字符串的最長公共子串和最長公共子序列
請實現一個函數用來判斷字符串是否表示數值
判斷一個字符串是不是一個合法的
三、哈希表
手寫一個簡單的 HashMap
和爲 K 的子數組:給定一個整數數組和一個整數 k,你須要找到該數組中和爲 k 的連續的子數組的個數
一種接收消息並按順序打印的結構設計
哈希表增長 setAll 功能
四、棧
用固定大小的數組實現棧
如何僅用隊列實現棧
最小值棧:可以返回棧中最小元素的棧
棧的壓入、彈出序列:輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否可能爲該棧的彈出順序
單調棧結構的實現
直方圖中的最大矩形面積
求最大子矩陣的大小
可見山峯問題
五、隊列
用固定大小的數組實現隊列
如何僅用棧結構實現隊列
六、鏈表
反轉單向鏈表
反轉雙向鏈表
K 個一組翻轉鏈表
合併兩個排序的鏈表
鏈表中倒數第 K 個節點
O(1) 時間內刪除一個節點
刪除鏈表中重複的節點
從尾到頭打印鏈表
判斷一個鏈表是否爲迴文結構
給出兩個有序鏈表的頭結點,打印出兩個鏈表中相同的元素
將單向鏈表按某值劃分紅左邊小、中間相等、右邊大的形式
複製含有隨機指針節點的鏈表
兩個單鏈表相交的一系列問題
鏈表中環的入口節點
複雜鏈表的複製
七、樹
二叉樹的前序、中序、後序遍歷的遞歸實現
二叉樹的前序、中序、後序遍歷的非遞歸實現
二叉樹的層序遍歷
Morris 遍歷二叉樹:前序、中序、後序
輸入一個數組,判斷是否是二叉搜索樹的後序遍歷序列
二叉樹的序列化:前序、層序
反序列化:怎麼序列化的就怎麼反序列化
在二叉樹中找一個節點的後繼節點
判斷一棵樹是不是徹底二叉樹
判斷一棵樹是不是搜索二叉樹
判斷一棵樹是不是平衡二叉樹
判斷一棵樹是不是對稱的二叉樹
二叉樹的鏡像
樹的子結構:輸入兩棵二叉樹 A 和 B,判斷 B 是否是 A 的子結構
合併二叉樹
二叉樹中和爲某一值的路徑
重建二叉樹:輸入某二叉樹的前序遍歷和中序遍歷的結果,請從新構造出該二叉樹
求一棵徹底二叉樹的節點個數,時間複雜度低於O(N)
找二叉樹左下角的值
把二叉搜索樹轉換爲累加樹
舞會的最大活躍度
求一棵二叉樹中最大二叉搜索子樹的節點個數
求一個二叉樹的最遠距離
二叉樹的最大路徑和
不會作不要緊哦,整理了一份帶詳細答案的面試文檔資料,pdf可分享給你們,但願各位須要面試跳槽的朋友均可以順利面上本身想去的公司
領取方式:關注個人供種號【Java周某人】便可領取