持续更新Java 面试题大全及解答
Posted 木兮同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了持续更新Java 面试题大全及解答相关的知识,希望对你有一定的参考价值。
本篇是相对比较全的 Java 面试题汇总,包括 Java基础、Java并发、JVM、mysql、Redis、Spring、Dubbo、微服务、计算机网络、分布式等等,后期还会补充;绝大部分题目来自网络(文末放出链接,侵删),很多答案博主有幸阅读过部分书籍从而进行过完善,也列出了相关书籍;目前背完这份面试题效果大部分厂的基础技术关都能过(对,只是基础技术关),但是很多大厂会深入或者稍微往偏一点问如果单纯背的话也不好过,这个个人觉得要时间沉淀吧,可以的话还是多读书,多理解,多思考;最后,祝愿大家都能进入理想大厂~
Java 基础
- 面向对象的特征
- final、finally、finalize 的区别
- 包装类型是什么?
- 基本类型和包装类型有什么区别?
- 解释一下自动装箱和自动拆箱?
- int 和 Integer 有什么区别?
- 两个非 new 生成的 Integer 对象的对比
- 什么是反射?
- 反射机制的优缺点有哪些?
- 如何获取反射中的 Class 对象?
- Java 反射 API 有几类?
- 反射使用的步骤?
- 反射的使用场景
- Java 中的泛型是什么 ?
- 为什么要使用泛型
- 使用泛型的好处是什么?
- Java 泛型的原理是什么?什么是类型擦除?
- 什么是泛型中的限定通配符和非限定通配符?
- Java 序列化与反序列化是什么?
- 为什么需要序列化与反序列化?
- 序列化实现的方式有哪些?
- 什么是 serialVersionUID?
- 为什么还要显示指定 serialVersionUID 的值?
- Java 序列化中如果有些字段不想进行序列化,怎么办?
- 静态变量会被序列化吗?
- Error 和 Exception 区别是什么?
- 非受检查异常(运行时异常)和受检查异常(一般异常)区别是什么?
- throw 和 throws 的区别是什么?
- NoClassDefFoundError 和 ClassNotFoundException 区别?
- Java 常见异常有哪些?
- try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
- JVM 是如何处理异常的?
- Java 的 IO 流分为几种?
- 字节流如何转为字符流?
- 字符流与字节流的区别?
- BIO、NIO、AIO 的区别?
- Java IO 都有哪些设计模式?
Java 集合
- 常见的集合有哪些?
- 线程安全的集合有哪些?线程不安全的呢?
- ArrayList 与 LinkedList 异同点?
- ArrayList 与 Vector 区别?
- 说一说 ArrayList 的扩容机制?
- Array 和 ArrayList 有什么区别?什么时候应该 Array 而不是 ArrayList 呢?
- HashMap 的底层数据结构是什么?
- 解决哈希冲突的办法有哪些?HashMap 用的哪种?
- 为什么 HashMap 在解决哈希冲突的时候不直接用红黑树?而选择先用链表,再转红黑树?
- HashMap 默认加载因子是多少?为什么是 0.75,不是 0.6 或者 0.8 ?
- HashMap 中 key 的存储索引是怎么计算的?
- HashMap 的 put 方法流程?
- HashMap 的扩容方式?
- 一般用什么作为 HashMap 的 key?
- HashMap 为什么线程不安全?
- ConcurrentHashMap 的实现原理是什么?
- ConcurrentHashMap 的 put 方法执行逻辑是什么?
- ConcurrentHashMap 的 get 方法是否要加锁,为什么?
- get 方法不需要加锁与 volatile 修饰的哈希桶有关吗?
- ConcurrentHashMap 不支持 key 或者 value 为 null 的原因?
- ConcurrentHashMap 的并发度是多少?
- ConcurrentHashMap 迭代器是强一致性还是弱一致性?
- JDK1.7 与 JDK1.8 中 ConcurrentHashMap 的区别?
- ConcurrentHashMap 和 HashTable 的效率哪个更高?为什么?
- 说一下 HashTable 的锁机制?
- 多线程下安全的操作 map 还有其他方法吗?
- HashSet 和 HashMap 区别?
- 说说 TreeMap?
- Collection 框架中实现比较要怎么做?
- Iterator 和 ListIterator 有什么区别?
- 讲一讲快速失败(fail-fast)和安全失败(fail-safe)
深入理解 Java 虚拟机
- 说说 JVM 的主要组成成分及其作用?
- 什么是 JVM 内存结构?
- 说一下堆栈的区别?
- 谈谈 JVM 中的常量池?
- 怎么判断对象是否可以被回收?
- Java 中都有哪些引用类型?
- 被引用的对象就一定能存活吗?
- 说一下 JVM 有哪些垃圾回收算法
- 说一下 JVM 有哪些垃圾收集器
- 详细介绍一下 CMS 垃圾收集器
- 详细说一下 G1 的回收过程?
- JVM 中一次完整的 GC 是什么样子的?
- 说说空间分配担保机制
- 说一下 JVM 调优工具?
- 常用的 JVM 调优的参数有哪些?
- 什么时候需要对类进行初始化?
- 说一下类加载的过程
- 说一下对象创建的过程
- 什么是类加载器,常见的类加载器有哪些?
- 什么是双亲委派模型?它的工作过程是怎样的?
- 列举一些你知道的打破双亲委派机制的例子,为什么要打破?
- Java 是解释执行还是编译执行?
- 什么是 JVM 内存模型?
多线程
- 线程和进程有什么区别?
- 创建线程的方式及实现
- 为什么要使用多线程呢?
- 线程的状态流转(生命周期)
- wait()、sleep() 、join()、yield() 有什么区别?
- 如何正确停止一个线程?
- 什么是线程死锁?如何避免死锁?
- 为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法
- ThreadLocal 是什么?有什么用?
- ThreadLocal 原理分析
- synchronized 和 ReentrantLock 的区别
- 说说 synchronized 锁升级和锁降级的过程
- 谈谈 volatile 的使用及其原理
- Java 中的 fork join 框架是什么?
- 说说 CountDownLatch 原理
- 说说 CyclicBarrier 原理
- 说说 Semaphore 原理
- 说说 Exchanger 原理
- 如何让子线程优先执行完再执行主线程
- 线程池的几种方式
- CAS 乐观锁
- ABA 问题
- 乐观锁的业务场景及实现方式
- Java 中的线程池 ThreadPoolExecutor
- ThreadPoolExecutor 的属性
- 常见的几种线程池
AQS 核心
- AQS 简介
- AQS 原理
- AQS 的数据结构
- 同步状态 state
- 线程加入等待队列
- 等待队列中线程出队列时机
- 代码设计
- 独占式同步状态获取
- 独占式同步状态释放
- 共享式同步状态获取
- 共享式同步状态释放
- ReentrantLock
MySQL
- MySQL 中 MyISAM 与 InnoDB 的区别?
- 事务的特性
- 事务的隔离级别
- 并发操作问题
- 索引是什么?索引能干什么?有什么好处?
- MySQL 索引使用的注意事项
- 说说 SQL 优化之道
- 索引的种类有哪些?
- 为什么 MySQL 的索引要使用 B+ 树而不是其它树形结构?比如 B 树?
- MyISAM 和 InnoDB 实现 B+Tree 索引方式的区别
- 什么是最左匹配原则?
- 哪些列上适合创建索引?创建索引有哪些开销?
- 索引这么多优点,为什么不对表中的每一个列创建一个索引呢?
- MySQL 建表的约束条件有哪些?
- MySQL 在 Innodb 索引下 B+ 树的高度问题
- MySQL 执行查询的过程?
- MySQL 执行更新的过程?
- 什么是 MVCC?
- 什么是 binlog?什么是 redo log?什么是 undo log?
- MySQL 的 binlog 有有几种录入格式?分别有什么区别?
- 说说分库与分表设计
- 分库与分表带来的分布式困境与应对之策
- MySQL 遇到的死锁问题
Redis
- Redis 是什么?简述它的优缺点?
- Redis 为什么这么快?
- Redis 相比 memcached 有哪些优势?
- 说说 Redis 的数据类型和使用场景
- 如何通过 Redis 实现分布式锁
- 如何使用 Redis 做异步队列
- 使用 Pipeline 的好处
- Redis 过期键的删除策略?
- Redis 内存淘汰机制?
- Redis 持久化机制
- 说说缓存设计中会出现的问题和解决方案
- 高并发场景下,如何解决数据库与缓存双写的时候数据不一致的情况?
- Redis 中跳跃表 skiplist 实现原理
- Redis 为什么用 skiplist 而不用红黑树?
- 假如 Redis 里面有 1 亿个key,其中有 10w 个 key 是以某个固定的已知前缀开头的,如何将它们全部找出来?
- Redis6.0 为什么要引入多线程?
- Redis 集群方案应该怎么做?都有哪些方案?
- 讲一讲位图 Bitmap
- 讲一讲 HyperLogLog
- Redis 单线程如何处理那么多的并发客户端连接?
- 布隆过滤器的原理
- 慢查询场景有哪些?
- 如何保证 redis/mysql 的一致性?
Spring
设计模式
微服务
- 前后端分离是如何做的?
- 你怎么看待微服务?
- 微服务与 SOA 的区别
- 微服务有哪些框架
- 你怎么理解 RPC 框架?
- 说说 RPC 的实现原理
- 说说 Dubbo 的实现原理
- 你怎么理解 RESTful?
- 说说如何设计一个良好的 API?
- 如何理解 RESTful API 的幂等性?
- 如何保证接口的幂等性?
- 说说 CAP 定理、 BASE 理论
- 怎么考虑数据一致性问题?
- 说说最终一致性的实现方案
- 如何拆分服务?
- 微服务如何进行数据库管理?
- 如何应对微服务的链式调用异常?
- 如何快速追踪与定位问题?
- 微服务的安全
Dubbo
- Dubbo 是什么?
- Dubbo 和 Spring Cloud 有什么区别?
- Dubbo 核心组件有哪些?
- Dubbo 都支持什么协议,推荐用哪种?
- Dubbo 服务器注册与发现的流程?
- Dubbo 内置了哪几种服务容器?
- Dubbo 负载均衡的作用?
- Dubbo 有哪几种负载均衡策略,默认是哪种?
- Dubbo 服务之间的调用是阻塞的吗?
- DubboMonitor 实现原理?
- Dubbo 有哪些注册中心?
- Dubbo 的集群容错方案有哪些?
- Dubbo 超时设置有哪些方式?
- Dubbo 用到哪些设计模式?
- Dubbo 服务挂了,消费端还能用吗?zookeeper 挂了呢
计算机网络
- 计算机网络的各层协议及作用?
- UDP 和 TCP 的区别?
- UDP 和 TCP 对应的应用场景是什么?
- 详细介绍一下 TCP 的三次握手机制?
- 为什么需要三次握手,而不是两次?
- 为什么要三次握手,而不是四次?
- 什么是 SYN 洪泛攻击?如何防范?
- 三次握手连接阶段,最后一次 ACK 包丢失,会发生什么?
- 详细介绍一下 TCP 的四次挥手过程?
- 为什么连接的时候是三次握手,关闭的时候却是四次握手?
- 为什么客户端的 TIME-WAIT 状态必须等待 2MSL?
- 如果已经建立了连接,但是客户端出现故障了怎么办?
- TIME-WAIT 状态过多会产生什么后果?怎样处理?
- TIME_WAIT 是服务器端的状态?还是客户端的状态?
- TCP 协议如何保证可靠性?
- 详细讲一下 TCP 的滑动窗口?
- 详细讲一下拥塞控制?
- HTTP 常见的状态码有哪些?
- 状态码 301 和 302 的区别是什么?
- HTTP 常用的请求方式?
- GET 请求和 POST 请求的区别?
- 解释一下 HTTP 长连接和短连接?
- HTTP 请求报文和响应报文的格式?
- HTTP1.0 和 HTTP1.1 的区别?
- HTTP1.1 和 HTTP2.0 的区别?
- HTTP 与 HTTPS 的区别?
- HTTPS 的优缺点?
- 讲一讲 HTTPS 的原理?
- 在浏览器中输入 www.baidu.com 后执行的全部过程?
- 什么是 Cookie 和 Session?
- Cookie 和 Session 是如何配合的呢?
- Cookie 和 Session 的区别?
- 如何考虑分布式 Session 问题?
- 什么是 DDos 攻击?
- 什么是 XSS 攻击?
- 负载均衡算法有哪些?
巨人肩膀:
- 《Java-Interview》
- 《深入理解 Java 虚拟机》
- 《Redis 开发与运维》
- 《Head First 设计模式》
- 《计算机网络》
- 《Java 编程思想》
以上是关于持续更新Java 面试题大全及解答的主要内容,如果未能解决你的问题,请参考以下文章