先看問題...
第一彈:Redis
- 爲什麼要用 redis /爲什麼要用緩存(高性能、高併發)
- 爲什麼要用 redis 而不用 map/guava 做緩存?
- redis 常見數據結構以及使用場景分析(String、Hash、List、Set、Sorted Set)
- redis 內存淘汰機制(MySQL裏有2000w數據,Redis中只存20w的數據,如何保證Redis中的數據都是熱點數據?)
- redis 持久化機制(怎麼保證 redis 掛掉之後再重啓數據可以進行恢復)
- Redis 常見異常及解決方案(緩存穿透、緩存雪崩、緩存預熱、緩存降級)
- 分佈式環境下常見的應用場景(分佈式鎖、分佈式自增 ID)
- Redis 集羣模式(主從模式、哨兵模式、Cluster 集羣模式)
- 如何解決 Redis 的併發競爭 Key 問題
- 如何保證緩存與數據庫雙寫時的數據一致性?
第二彈:多線程/高併發
- stop() 和 suspend() 方法爲何不推薦使用?
- sleep() 和 wait() 有什麼區別?
- 同步和異步有何異同,在什麼情況下分別使用他們?
- 當一個線程進入一個對象的一個 synchronized 方法後,其它線程是否可進入此對象的其它方法?
- 簡述 synchronized 和 java.util.concurrent.locks.Lock 的異同?
- 概括的解釋下線程的幾種可用狀態。
- 什麼是 ThreadLocal?
- run() 和 start() 區別。
- 什麼是線程餓死,什麼是活鎖?
- 請說出你所知道的線程同步的方法。
- 線程調度和線程控制。
- 多線程中的忙循環是什麼?
- volatile 變量是什麼?volatile 變量和 atomic 變量有什麼不同?
- volatile 類型變量提供什麼保證?能使得一個非原子操作變成原子操作嗎?
第三彈:集合框架
- ArrayList 和 Vector 的區別
- 說說 ArrayList,Vector, LinkedList 的存儲性能和特性。
- 快速失敗 (fail-fast) 和安全失敗 (fail-safe) 的區別是什麼?
- hashmap 的數據結構。
- HashMap 的工作原理是什麼?
- Hashmap 什麼時候進行擴容呢?
- List、Map、Set 三個接口,存取元素時,各有什麼特點?
- Set 裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用 == 還是equals()? 它們有何區別?
- 兩個對象值相同 (x.equals(y) == true),但卻可有不同的 hash code,這句話對不對?
- heap 和 stack 有什麼區別
- Java 集合類框架的基本接口有哪些?
- HashSet 和 TreeSet 有什麼區別?
- HashSet 的底層實現是什麼?
- LinkedHashMap 的實現原理?
- 爲什麼集合類沒有實現 Cloneable 和 Serializable 接口?
- 什麼是迭代器 (Iterator)?
- Iterator 和 ListIterator 的區別是什麼?
- 數組 (Array) 和列表 (ArrayList) 有什麼區別?什麼時候應該使用 Array 而不是ArrayList?
- Java 集合類框架的最佳實踐有哪些?
- Set 裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢?是用 == 還是equals()?它們有何區別?
- Comparable 和 Comparator 接口是幹什麼的?列出它們的區別。
- Collection 和 Collections 的區別。
第四彈:數據庫
- 請簡潔描述 MySQL 中 InnoDB 支持的四種事務隔離級別名稱,以及逐級之間的區別?
- 在 MySQL 中 ENUM 的用法是什麼?
- CHAR 和 VARCHAR 的區別?
- 列的字符串類型可以是什麼?
- MySQL 中使用什麼存儲引擎?
- TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 數據類型上做什麼?
- 主鍵和候選鍵有什麼區別?
- MySQL 數據庫服務器性能分析的方法命令有哪些?
- LIKE 和 REGEXP 操作有什麼區別?
- BLOB 和 TEXT 有什麼區別?
- 數據庫的三範式?
- 什麼是通用 SQL 函數?
- MySQL 表中允許有多少個 TRIGGERS?
第五彈:JVM
- Java 類加載過程?
- 描述一下 JVM 加載 Class 文件的原理機制?
- Java 內存分配。
- GC 是什麼? 爲什麼要有 GC?
- 簡述 Java 垃圾回收機制。
- 如何判斷一個對象是否存活?(或者 GC 對象的判定方法)
- 垃圾回收的優點和原理。並考慮 2 種回收機制。
- 垃圾回收器的基本原理是什麼?垃圾回收器可以馬上回收內存嗎?
- 有什麼辦法主動通知虛擬機進行垃圾回收?
- Java 中會存在內存泄漏嗎,請簡單描述。
- 深拷貝和淺拷貝。
- System.gc() 和 Runtime.gc() 會做什麼事情?
- finalize() 方法什麼時候被調用?析構函數 (finalization) 的目的是什麼?
- 如果對象的引用被置爲 null,垃圾收集器是否會立即釋放對象佔用的內存?
- 什麼是分佈式垃圾回收(DGC)?它是如何工作的?
- 串行(serial)收集器和吞吐量(throughput)收集器的區別是什麼?
- 在 Java 中,對象什麼時候可以被垃圾回收?
- 簡述 Java 內存分配與回收策率以及 Minor GC 和 Major GC。
- JVM 的永久代中會發生垃圾回收麼?
- Java 中垃圾收集的方法有哪些?
- 什麼是類加載器,類加載器有哪些?
- 類加載器雙親委派模型機制?
倘若不看答案,上面的81問你能答對多少呢?
由於答案都是以截圖展示的,如果覺得圖片不方便或者清晰度不高的話,可以【點擊看答案】下載完整的原文檔!
看答案看答案...
第五彈:JVM答案
第四彈:數據庫答案
第三彈:集合框架答案
第二彈:多線程、高併發答案
第一彈:Redis答案
更多關於Java集合、JVM、多線程併發、spring原理、微服務、Netty 與RPC 、Kafka、日記、設計模式、Java算法、數據庫、Zookeeper、分佈式緩存、數據結構面試解析等等可以去這個Github鏈接地址:https://github.com/ThinkingHan/Java-note閱讀,Star一下吧,感謝支持~