Java面试题

如何定位慢查询

使用一些运维监控的工具 promtheus / skywalking

开启慢日志查询
slow_query_log=1
表示超过这个时间的sql就会被记录到慢查询的日志中
long_query_time=2

查询数据文件存储目录
show variables like ‘%datadir%’;

sql语句执行的很慢, 如何分析

explain关键字

了解过索引吗?

mysql高效获取数据的(有序的), 底层数据结构是B+树

索引的底层的树结构有了解过吗?

B+树 相对于 B树的优点
非叶子节点不存储数据, 只存储指针, 只有在叶子存储数据

  1. 磁盘读写代价B+树更低
  2. 查询效率B+树更加稳定
  3. B+树便于扫库和区间查询

什么是聚簇索引? 什么是非聚簇索引?

什么是聚簇索引? 什么是非聚簇索引?
什么是聚集索引, 什么是二级索引(非聚集索引)
什么是回表?

聚集索引就是聚簇索引, 非聚集索引就是非聚簇索引

分类 含义 特点
聚簇索引 将数据存储与索引放到了一块, 索引结构的叶子节点保存了行数据 必须有, 而且只有一个
二级索引 将数据与索引分开存储, 索引结构的叶子节点关联的对应的是主键 可以存在多个

知道什么叫做覆盖索引吗?

覆盖索引就是在查询过程中使用了索引, 并且返回了需要的列, 在该索引中全部能够找到

简单来说就是不需要进行回表操作的索引

覆盖索引减少了回表操作, 从而提升了查询的性能

sql优化的策略:
减少回表操作, 使用覆盖索引 ( 少使用select * )

MySQL超大分页怎么处理?

可以使用覆盖索引解决

索引创建原则有哪些?

什么情况下索引会失效?

补充:
联表查询, 两表的字符集不一致的时候, 索引也会失效

使用了or操作

使用了不等于

参考: https://www.51cto.com/article/702691.html

谈一谈你对sql的优化的经验

表的设计优化(参考阿里巴巴开发手册)
设置合适的数值 tinyint int bigint
设置合适的字符串类型, char定长效率高, varchar可变长度, 效率稍低

索引的优化 创建索引和防止索引失效
SQL语句优化, 减少使用select *

事务的特性是什么? 可以详细说说吗?

ACID

并发事务带来哪些问题? 怎么解决这些问题呢? MySQL的默认隔离级别?

并发事务问题: 脏读, 不可重复读, 幻读
隔离级别: 读未提交, 读已提交, 可重复读, 串行化

undo log 和 redo log 区别

redo 相当于单机游戏中的 R 重做 重来 重新开始
undo 提供回滚 , MVCC

解释一下MVCC

主从同步原理

你们项目用过分库分表吗?

Spring框架中单例bean是线程安全的吗?

SpringMVC的执行流程

jsp视图

前后端分离

Spring框架中的单例bean是线程安全的吗?

Spring框架中的bean是单例的吗?

默认是单例的
@Scope(“singleton”)
singleton: bean在每个SpringIOC容器中只有一个实例
prototype: 一个bean的定义可以有多个实例

并不是线程安全的

1
2
3
4
5
https://cloud.tencent.com/developer/article/1743283
@Controller/@Service等容器中,默认情况下,scope值是单例-singleton的,也是线程不安全的。
尽量不要在@Controller/@Service等容器中定义静态变量,不论是单例(singleton)还是多实例(prototype)他都是线程不安全的。
默认注入的Bean对象,在不设置scope的时候他也是线程不安全的。
一定要定义变量的话,用ThreadLocal来封装,这个是线程安全的

什么是AOP, 你们项目中有没有使用到AOP? 对AOP的理解? 有没有真的用过AOP

常见AOP使用场景
记录操作日志
缓存处理
Spring中内置的事务处理


Java面试题
https://xiamu.icu/Java/Java面试题/
作者
肉豆蔻吖
发布于
2023年12月7日
许可协议