先看问题...

第一弹:Redis

  1. 为什么要用 redis /为什么要用缓存(高性能、高并发)
  2. 为什么要用 redis 而不用 map/guava 做缓存?
  3. redis 常见数据结构以及使用场景分析(String、Hash、List、Set、Sorted Set)
  4. redis 内存淘汰机制(MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?)
  5. redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复)
  6. Redis 常见异常及解决方案(缓存穿透、缓存雪崩、缓存预热、缓存降级)
  7. 分布式环境下常见的应用场景(分布式锁、分布式自增 ID)
  8. Redis 集群模式(主从模式、哨兵模式、Cluster 集群模式)
  9. 如何解决 Redis 的并发竞争 Key 问题
  10. 如何保证缓存与数据库双写时的数据一致性?

第二弹:多线程/高并发

  1. stop() 和 suspend() 方法为何不推荐使用?
  2. sleep() 和 wait() 有什么区别?
  3. 同步和异步有何异同,在什么情况下分别使用他们?
  4. 当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此对象的其它方法?
  5. 简述 synchronized 和 java.util.concurrent.locks.Lock 的异同?
  6. 概括的解释下线程的几种可用状态。
  7. 什么是 ThreadLocal?
  8. run() 和 start() 区别。
  9. 什么是线程饿死,什么是活锁?
  10. 请说出你所知道的线程同步的方法。
  11. 线程调度和线程控制。
  12. 多线程中的忙循环是什么?
  13. volatile 变量是什么?volatile 变量和 atomic 变量有什么不同?
  14. volatile 类型变量提供什么保证?能使得一个非原子操作变成原子操作吗?

第三弹:集合框架

  1. ArrayList 和 Vector 的区别
  2. 说说 ArrayList,Vector, LinkedList 的存储性能和特性。
  3. 快速失败 (fail-fast) 和安全失败 (fail-safe) 的区别是什么?
  4. hashmap 的数据结构。
  5. HashMap 的工作原理是什么?
  6. Hashmap 什么时候进行扩容呢?
  7. List、Map、Set 三个接口,存取元素时,各有什么特点?
  8. Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用 == 还是equals()? 它们有何区别?
  9. 两个对象值相同 (x.equals(y) == true),但却可有不同的 hash code,这句话对不对?
  10. heap 和 stack 有什么区别
  11. Java 集合类框架的基本接口有哪些?
  12. HashSet 和 TreeSet 有什么区别?
  13. HashSet 的底层实现是什么?
  14. LinkedHashMap 的实现原理?
  15. 为什么集合类没有实现 Cloneable 和 Serializable 接口?
  16. 什么是迭代器 (Iterator)?
  17. Iterator 和 ListIterator 的区别是什么?
  18. 数组 (Array) 和列表 (ArrayList) 有什么区别?什么时候应该使用 Array 而不是ArrayList?
  19. Java 集合类框架的最佳实践有哪些?
  20. Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用 == 还是equals()?它们有何区别?
  21. Comparable 和 Comparator 接口是干什么的?列出它们的区别。
  22. Collection 和 Collections 的区别。

第四弹:数据库

  1. 请简洁描述 MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
  2. 在 MySQL 中 ENUM 的用法是什么?
  3. CHAR 和 VARCHAR 的区别?
  4. 列的字符串类型可以是什么?
  5. MySQL 中使用什么存储引擎?
  6. TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 数据类型上做什么?
  7. 主键和候选键有什么区别?
  8. MySQL 数据库服务器性能分析的方法命令有哪些?
  9. LIKE 和 REGEXP 操作有什么区别?
  10. BLOB 和 TEXT 有什么区别?
  11. 数据库的三范式?
  12. 什么是通用 SQL 函数?
  13. MySQL 表中允许有多少个 TRIGGERS?

第五弹:JVM

  1. Java 类加载过程?
  2. 描述一下 JVM 加载 Class 文件的原理机制?
  3. Java 内存分配。
  4. GC 是什么? 为什么要有 GC?
  5. 简述 Java 垃圾回收机制。
  6. 如何判断一个对象是否存活?(或者 GC 对象的判定方法)
  7. 垃圾回收的优点和原理。并考虑 2 种回收机制。
  8. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?
  9. 有什么办法主动通知虚拟机进行垃圾回收?
  10. Java 中会存在内存泄漏吗,请简单描述。
  11. 深拷贝和浅拷贝。
  12. System.gc() 和 Runtime.gc() 会做什么事情?
  13. finalize() 方法什么时候被调用?析构函数 (finalization) 的目的是什么?
  14. 如果对象的引用被置为 null,垃圾收集器是否会立即释放对象占用的内存?
  15. 什么是分布式垃圾回收(DGC)?它是如何工作的?
  16. 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
  17. 在 Java 中,对象什么时候可以被垃圾回收?
  18. 简述 Java 内存分配与回收策率以及 Minor GC 和 Major GC。
  19. JVM 的永久代中会发生垃圾回收么?
  20. Java 中垃圾收集的方法有哪些?
  21. 什么是类加载器,类加载器有哪些?
  22. 类加载器双亲委派模型机制?

倘若不看答案,上面的81问你能答对多少呢?

由于答案都是以截图展示的,如果觉得图片不方便或者清晰度不高的话,可以【点击看答案】下载完整的原文档!

看答案看答案...

第五弹:JVM答案

第四弹:数据库答案

第三弹:集合框架答案

第二弹:多线程、高并发答案

第一弹:Redis答案

更多关于Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构面试解析等等,下载地址在此