java 面试题
一. 容器部分
二. 多线程部分
三. SpringMvc部分
四. Mybatis部分
五. MySQL部分
六. Redis部分
七. RabbitMQ部分
八. JVM虚拟机部分
九. 算法知识部分
十. 其他面试部分
2|1更新
时间:2022/4/9
内容: JVM虚拟机部分
预更: 算法部分
2|2容器部分面试题
Java 容器都有哪些
Collecion 和 Collections 有什么区别
List、Set、Map 之间的区别
- Map 适合存储键值对的数据
HashMap 和 HashTable 的区别
- 线程安全不同
- 是否提供 contains() 方法
- key 和 value 是否可以为 null 值
- 遍历方式不同
- hash 值不同
- 内部实现使用的数组初始化和扩容方式不同
如何决定使用 HashMap 还是 TreeMap
HashMap 的实现原理
HashSet 的实现原理
ArrayList 与 LinkList 的区别是什么
如何实现数组与 List 之间的转换
ArrayList 与 Vector 的区别是什么
Array 与 ArrayList 有什么区别
在 Queue 中 poll() 与 remove() 有什么区别
哪些集合类是线程安全的
迭代器 Iterator 是什么
Iterator 怎么使用 ? 有什么特点
Iterator 与 LinkIterator 有什么区别
怎么确保一个集合不能被修改
2|3多线程部分面试题
并发和并行有什么区别
线程和进程的区别
守护线程是什么
创建线程有哪几种方式
- 实现Runnable接口创建线程类
- 通过 Callable 和 Future 创建线程
runnable 和 callable 有什么区别
- 不同点
线程有哪些状态
sleep() 和 wait() 的区别
线程的 run() 和 start() 的区别
notify() 和 notifyAll() 有什么区别
创建线程池有哪几种方式
线程池都有哪些状态
- 终止 TERMINATED:线程池彻底终止。线程池在 TIDYING 状态执行完 terminated() 方法就会由 TIDYING 转变为
TERMINATED
状态
线程池中的 submit() 和 execute() 有什么区别
在Java程序中怎么确保多线程运行安全
synchronized 和 volatile 的作用什么?有什么区别
- 区别
synchronized 和 Lock 有什么区别
2|4Spring Mvc面试题部分
为什么要是使用 Spring
解释一下什么是 aop
解释一下什么是 ioc
Spring 主要有哪些模块
- Spring Context
- Spring Dao
- Spring ORM
- Spring Aop
- Spring Web
- Spring Web Mvc
Spring 常用的注入方式有哪些
- 基于注解得注入
Spring 中的 bean 是线程安全的吗
Spring 支持几种 bean 的作用域
Spring 自动装配 bean 有哪些方式
Spring 事务实现方式有哪些
Spring 的事务隔离是什么
Spring Mvc 的运行流程
Spring Mvc 有哪些组件
@RequestMapping 的作用是什么
@Autowired 与 @Resource 的区别
2|5Mybatis部分面试题
Mybatis 中 #{} 和 ${} 的区别
- ${} 表示拼接SQL串
Mybatis 有几种分页方式
- LIMIT关键字
- RowBounds实现分页
- Mybatis的Interceptor实现
RowBounds 是一次性查询全部结果吗?为什么
Mybatis 逻辑分页和物理分页的区别是什么
Myabtis 是否支持延迟加载,延迟加载的原理是什么
Mybatis 一级缓存和二级缓存
- 二级缓存
- 扩展
Mybatis 和 Hibernate 有哪些区别
Mybatis 有哪些执行器
Mybatis 分页插件的实现原理是什么
Mybatis 如何编写一个自定义插件
public interface Interceptor { Object intercept(Invocation invocation) throws Throwable; Object plugin(Object target); void setProperties(Properties properties); }
官方插件实现:
@Intercepts({@Signature(type = Executor. class, method = "query", args = {MappedStatement. class, Object. class, RowBounds. class, ResultHandler. class})}) public class TestInterceptor implements Interceptor { public Object intercept(Invocation invocation) throws Throwable { Object target = invocation. getTarget(); //被代理对象 Method method = invocation. getMethod(); //代理方法 Object[] args = invocation. getArgs(); //方法参数 // do something . . . . . . 方法拦截前执行代码块 Object result = invocation. proceed(); // do something . . . . . . . 方法拦截后执行代码块 return result; } public Object plugin(Object target) { return Plugin. wrap(target, this); } }
2|6MySQL部分面试题
数据库的三范式是什么
如何获取当前数据库的版本
说一下 ACID 是什么
char 和 varchar 的区别
- 效率不同
- 存储不同
float 和 double 的区别
MySQL 内连接、左连接、右连接有什么区别
MySQL 的索引是怎么实现的
MySQL 索引设计原则
怎么验证 MySQL 的索引是否满足需求
事务的隔离级别
MySQL 常用的引擎
MySQL 的行锁、表锁、页锁
- 行级锁的特点
- 表级锁
- 表级锁的特点
- 页级锁
- 页级锁的特点
- 扩展
乐观锁和悲观锁
MySQL 问题排查都有哪些手段
如何做 MySQL 的性能优化
2|7Redis部分面试题
Redis 是什么?有什么优点?都有哪些使用场景
- 应用场景
Redis 为什么是单线程的
Redis 的缓存预热
redis 缓存雪崩是什么,怎么解决 ?
缓存穿透是什么?如何解决
Redis 支持的数据类型有哪些
Redis 支持的 Java 客户端有哪些
Jedis 与 Redisson 有哪些区别
怎么保证缓存与数据库数据的一致性
Redis 持久化有几种方式
Redis 怎么实现分布式锁
Redis 分布式锁有什么缺陷
- 错位解锁
- 业务并发执行问题
Redis 如何做内存优化
Redis 淘汰策略有哪些
Redis 常见的问题有哪些? 该如何解决
- 缓存穿透问题
- 缓存雪崩问题
- 缓存的并发竞争问题
- 如果对这个 Key 操作,要求顺序
- 那么,假设这会系统 B 先抢到锁,将 key1 设置为{valueB 3:05}。接下来系统 A 抢到锁,发现自己的 valueA 的时间戳早于缓存中的时间戳,那就不做 set 操作了,以此类推。
- 其他方法,比如利用队列,将 set 方法变成串行访问也可以。总之,灵活变通。
2|8RabbitMQ部分面试题
RabbitMq 的使用场景有哪些
RabbitMq 有哪些重要的角色
RabbitMq 有哪些重要的组件
RabbitMQ的消息存储方式
RabbitMq 中 vhost 的作用是什么
RabbitMq 的消息是怎么发送的
RabbitMq 怎么保证消息的稳定性
RabbitMq 怎么避免丢失消息
要保证消息持久化成功的条件有哪些
RabbitMq 持久化有什么缺点
RabbitMq 有几种广播方式
RabbitMq 怎么实现延迟消息队列
RabbitMq 集群有什么用
RabbitMq 节点的类型有哪些
RabbitMq 集群搭建需要注意哪些问题
RabbitMq 每个节点是其他节点的完整拷贝吗
RabbitMq 集群中唯一一个磁盘节点崩溃了会发生什么
RabbitMq 对集群停止顺序有要求吗
2|9JVM部分面试题
JVM 主要的组成部分?及其作用
JVM 运行时数据区是什么
堆和栈的区别
队列和栈是什么?有什么区别
- 可操作的方式不同
类加载器有哪些?什么是双亲委派模型
类加载的执行过程
- 链接
- 准备
- 解析
- 初始化
怎么判断对象是否可以收回
- 优缺点
- 可达性分析算法
Java 中有哪些引用类型
- 软引用(softreference)
- 弱引用(weakreference)
- 虚引用(phantomreference)
JVM 中垃圾回收算法
JVM 有哪些垃圾回收器
介绍一下 CMS 垃圾回收器
- CMS收集器的内存回收过程是与用户线程一起并发执行的
- CMS收集器的缺点:
CMS收集器的工作过程图:
新生代垃圾回收器和老生代垃圾回收器有哪些?有什么区别
简述分代垃圾回收器是怎么工作的
JVM 调优的工具有哪些
JVM 调优的参数有哪些
2|10算法题
2|11其他部分面试题
Api 接口如何实现 ?
MySQL 链接数据库常用的几种方式 ?
SpringBoot 如何集成 Redis ?
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
spring.redis.host=127.0.0.1 #Redis服务器连接端口 spring.redis.port=6379 #Redis服务器连接密码(默认为空) #spring.redis.password=
SpringCloud 的优点 ?
SpringCloud 用了哪些组件 ?
List 和 Set 的区别
Java 中 static 的作用
什么单例模式 ?
- 如何保证是单利模式 ?
- 单例模式有哪几个 ?
- 懒汉模式
SpringBoot 常用的几个注解 ?
Java 八大数据类型
MySQL分页和升序降序如何实现 ?
- 升序 order by xx asc
- 降序 order by xx desc
maven 是干什么的,它有什么好处 ?
MySQL 如何添加索引 ?
MySQL 索引的实现方式?
Vue的数据双向绑定原理
ActiveMQ的消息存储方式
KahaDB消息存储