前言:
CSDN首发!在各大IT交流平台上都搜索不到的最新最完整详细的Java面试题文档,文章概括:
“Spring+JVM+Spring Boot+Dubbo+MySQL+Redis+Linux+并发面试”,足够详细!足够完整!足够精选!没有那么多糟粕,留下的都是精华!行与不行,看完说话!
Spring 面试专题
Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。
- 什么是 Spring 框架?Spring 框架有哪些主要模块?
- 使用 Spring 框架能带来哪些好处?
- 什么是控制反转(IOC)?什么是依赖注入?
- 请解释下 Spring 框架中的 IoC?
- BeanFactory 和 ApplicationContext 有什么区别?
- Spring 有几种配置方式?
- 如何用基于 XML 配置的方式配置 Spring?
- 如何用基于 Java 配置的方式配置 Spring?
- 怎样用注解的方式配置 Spring?
- 请解释 Spring Bean 的生命周期?
- Spring Bean 的作用域之间有什么区别?
- 什么是 Spring inner beans?
- Spring 框架中的单例 Beans 是线程安全的么?
- 请举例说明如何在 Spring 中注入一个 Java Collection?
- 如何向 Spring Bean 中注入一个 Java.util.Properties?
- 请解释 Spring Bean 的自动装配?
- 请解释自动装配模式的区别?
- 如何开启基于注解的自动装配?
- 请举例解释@Required 注解?
- 请举例解释@Autowired 注解?
- 请举例说明@Qualifier 注解?
- 构造方法注入和设值注入有什么区别?
- Spring 框架中有哪些不同类型的事件?
- FileSystemResource 和 ClassPathResource 有何区别?
- Spring 框架中都用到了哪些设计模式?
Spring Boot 面试专题
Spring Boot 已经建立在现有 spring 框架之上。使用spring 启动,我们避免了之前我们必须做的所有样板代码和配置。因此,Spring Boot 可以帮助我们以最少的工作量,更加健壮地使用现有的 Spring 功能。- 什么是 Spring Boot?
- Spring Boot 有哪些优点?
- 什么是 JavaConfig?
- 如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?
- Spring Boot 中的监视器是什么?
- 如何在 Spring Boot 中禁用 Actuator 端点安全性?
- 如何在自定义端口上运行 Spring Boot 应用程序?
- 什么是 YAML?
- 如何实现 Spring Boot 应用程序的安全性?
- 如何集成 Spring Boot 和 ActiveMQ?
- 如何使用 Spring Boot 实现分页和排序?
- 什么是 Swagger?你用 Spring Boot 实现了它吗?
- 什么是 Spring Profiles?
- 什么是 Spring Batch?
- 什么是 FreeMarker 模板?
- 如何使用 Spring Boot 实现异常处理?
- 您使用了哪些 starter maven 依赖项?
- 什么是 CSRF 攻击?
- 什么是 WebSockets?
- 什么是 AOP?
- 什么是 Apache Kafka?
- 我们如何监视所有 Spring Boot 微服务?
JVM 面试专题
JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
- 内存模型以及分区,需要详细到每个区放什么。
- 堆里面的分区:Eden,survival (from+ to),老年代,各自的特点。
- 对象创建方法,对象的内存分配,对象的访问定位。
- GC 的两种判定方法:
- SafePoint 是什么
- GC 的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?
- GC 收集器有哪些?CMS 收集器与 G1 收集器的特点。
- Minor GC 与 Full GC 分别在什么时候发生?
- 几种常用的内存调试工具:jmap、jstack、jconsole、jhat
- 类加载的几个过程:
- JVM 内存分哪几个区,每个区的作用是什么?
- 如和判断一个对象是否存活?(或者 GC 对象的判定方法)
- 简述 java 垃圾回收机制?
- java 中垃圾收集的方法有哪些?
- java 内存模型
- java 类加载过程?
- 简述 java 类加载机制?
- 类加载器双亲委派模型机制?
- 什么是类加载器,类加载器有哪些?
- 简述 java 内存分配与回收策率以及 Minor GC 和 Major GC
Dubbo 面试专题
Dubbo是国内最出名的分布式服务框架,也是 Java 程序员必备的必会的框架之。
- dubbo 服务集群配置(集群容错模式)
- dubbo 通信协议 dubbo 协议为什么要消费者比提供者个数多:
- dubbo 通信协议 dubbo 协议为什么不能传大包:
- dubbo 通信协议 dubbo 协议为什么采用异步单一长连接:
- dubbo 通信协议 dubbo 协议适用范围和适用场景
- RMI 协议
- Hessian 协议
- http
- Webservice
- Thrif
- Dubbo 中 zookeeper 做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么?
- dubbo 服务负载均衡策略?
- Dubbo 在安全机制方面是如何解决的
- dubbo 连接注册中心和直连的区别
MySQL 面试专题
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
- 数据库三范式是什么?
- 有哪些数据库优化方面的经验?
- 请简述常用的索引有哪些种类?
- 以及在 mysql 数据库中索引的工作机制是什么?
- MySQL 的基础操作命令:
- mysql 的复制原理以及流程。
- mysql 支持的复制类型?
- mysql 中 myisam 与 innodb 的区别?
- mysql 中 varchar 与 char 的区别以及 varchar(50)中的 50 代表的涵义?
- MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
- 表中有大字段 X(例如:text 类型),且字段 X 不会经常更新,以读为为主,将该字段拆成子表好处是什么?
- MySQL 中 InnoDB 引擎的行锁是通过加在什么上完成(或称实现)的?
- MySQL 中控制内存分配的全局参数,有哪些?
- 若一张表中只有一个字段 VARCHAr(N)类型,utf8 编码,则 N 最大值为多少(精确到数量级即可)
- [SELECT *] 和[SELECT 全部字段]的 2 种写法有何优缺点?
- HAVNG 子句 和 WHERe 的异同点?
- MySQL 当记录不存在时 insert,当记录存在时 update,语句怎么写?
- MySQL 的 insert 和 update 的 select 语句语法
Redis 面试专题
Redis即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
- 什么是 Redis?简述它的优缺点?
- Redis 与 memcached 相比有哪些优势?
- Redis 支持哪几种数据类型?
- Redis 主要消耗什么物理资源?
- Redis 有哪几种数据淘汰策略?
- Redis 官方为什么不提供 Windows 版本?
- 为什么 Redis 需要把所有数据放到内存中?
- Redis 集群方案应该怎么做?都有哪些方案?
- Redis 集群方案什么情况下会导致整个集群不可用?
- MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据?
- redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。
- Redis 有哪些适合的场景?
- Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?
- Redis 和 Redisson 有什么关系?
- Jedis 与 Redisson 对比有什么优缺点?
- 说说 Redis 哈希槽的概念?
- Redis 集群的主从复制模型是怎样的?
- Redis 集群会有写操作丢失吗?为什么?
- Redis 集群之间是如何复制的?
- Redis 集群最大节点个数是多少?
- Redis 集群如何选择数据库?
- Redis 中的管道有什么用?
- 怎么理解 Redis 事务?
- Redis 事务相关的命令有哪几个?
- Redis key 的过期时间和永久有效分别怎么设置?
- Redis 如何做内存优化?
- Redis 回收进程如何工作的?
- 加锁机制
- 锁互斥机制
- watch dog 自动延期机制
- 可重入加锁机制
- 释放锁机制
- 上述 Redis 分布式锁的缺点
- 使用过 Redis 分布式锁么,它是怎么实现的?
- 使用过 Redis 做异步队列么,你是怎么用的?有什么缺点?
- 什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?
Linux 面试专题
Linux,全称GNU/Linux,是一套免费使用和自由传播的类UNIX操作系统
- Linux 中主要有哪几种内核锁?
- Linux 中的用户模式和内核模式是什么含意?
- 怎样申请大块内核内存?
- 用户进程间通信主要哪几种方式?
- 通过伙伴系统申请内核内存的函数有哪些?
- Linux 虚拟文件系统的关键数据结构有哪些?(至少写出四个)
- 对文件或设备的操作函数保存在那个数据结构中?
- Linux 中的文件包括哪些?
- 创建进程的系统调用有那些?
- 调用 schedule()进行进程切换的方式有几种?
- Linux 调度程序是根据进程的动态优先级还是静态优先级来调度进程的?
- 进程调度的核心数据结构是哪个?
- 如何加载、卸载一个模块?
- 模块和应用程序分别运行在什么空间?
- Linux 中的浮点运算由应用程序实现还是内核实现?
- 模块程序能否使用可链接的库函数?
- TLB 中缓存的是什么内容?
- Linux 中有哪几种设备?
- 字符设备驱动程序的关键数据结构是哪个?
- 设备驱动程序包括哪些功能函数?
- 如何唯一标识一个设备?
- Linux 通过什么方式实现系统调用?
- Linux 软中断和工作队列的作用是什么?
并发面试专题
所谓并发编程是指在一台处理器上“同时”处理多个任务。并发是在同一实体上的多个事件。多个事件在同一时间间隔发生。
Synchronized 相 关 问 题
问 题 一 : Synchronized 用过吗,其原理是什么?
问 题 二 : 你刚才提到获取对象的锁,这个 “ 锁 ” 到底是什么?如何确定对象的锁?
问 题 三 : 什么是可重入性,为什么说Synchronized是可重入锁?
问 题 四 : JVM对Java的原生锁做了哪些优化?
问 题 五 : 为什么说Synchronized是非公平锁?
问 题 六 : 什么是锁消除和锁粗化?
问 题 七 : 为什么说Synchronized是一个悲观锁?乐观锁的实现原理又是什么?什么是CAS,它有什么特性?
问 题 八 : 乐观锁一定就是好的吗?
可重入锁ReentrantLock及其他显式锁相关问题
问 题 一 :跟 Synchronized 相比, 可重入锁 ReentrantLock 其实现原理有什么不同?
问 题 二 : 那么请谈谈 AQS 框架是怎么回事儿?
问 题 三 : 请尽可能详尽地对比下 Synchronized 和 ReentrantLock 的异同。
问 题 四 : ReentrantLock 是如何实现可重入性的?
问 题 五 : 除了 ReetrantLock,你还接触过 JUC 中的哪些并发工具?
问 题 六 : 请谈谈 ReadWriteLock 和 StampedLock。
问 题 七 : 如何让 Java 的线程彼此同步?你了解过哪些同步器? 请分别介绍下。
问 题 八 : CyclicBarrier 和 CountDownLatch 看起来很相似,请对比下呢?
Java 线 程 池 相 关 问 题
问 题 一 : Java 中的线程池是如何实现的?
问 题 二 : 创建线程池的几个核心构造参数?
问 题 三 : 线程池中的线程是怎么创建的?是一开始就随着线程池的启动创建好的吗?
问 题 四 : 既然提到可以通过配置不同参数创建出不同的线程池,那么 Java 中默认实现好的线程池又有哪些呢?请比较它们的异同。
问 题 五 : 如何在 Java 线程池中提交线程?
Java 内存模型相关问题
问 题 一 : 什么是 Java 的内存模型, Java 中各个线程是怎么彼此看到对方的变量的?
问 题 二 : 请谈谈 volatile 有什么特点,为什么它能保证变量对所有线程的可见性?
问 题 三 : 既然 volatile 能够保证线程间的变量可见性,是不是就意味着基于 volatile 变量的运算就是并发安全的?
问 题 四 : 请对比下 volatile 对比 Synchronized 的异同。
问 题 五 : 请谈谈 ThreadLocal 是怎么解决并发安全的?
问 题 六 : 很多人都说要慎用 ThreadLocal,谈谈你的理解,使用 ThreadLocal 需要注意些什么?
由于文章篇幅原因,这里只展示了部分文档和答案,需要完整面试资料的,三连后“加我助理VX”即可免费获取到