IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java常见面试问题(四) -> 正文阅读

[Java知识库]java常见面试问题(四)

一、SpringMVC执行流程

1、用户发送一个请求过来,DispatcherServlet接收到请求后,将请求信息交给处理器映射器(HandlerMapping)?

2、HandlerMapping根据用户的Url请求,查找匹配url的Handler,并返回一个执行链

3、DispatcherServlet再请求处理适配器(HandlderAdpter)调用相应的Handler进行处理并返回ModelAndView给DisPatcherServlet

4、DispatcherServlet将ModelAndView请求ViewReslover(视图解析器)解析,返回具体View

5、DispatcherServlet对view进行渲染视图(即将模型数据填充到视图中),然后将页面响应回去

二、Mysql有哪几种数据存储引擎?有什么区别?

mysql中通过Show?engines指令可以看到所有支持的数据库存储引擎。最为常用的就是MyISAM和InnoDB两种。

MyISAM和InnoDB的区别:

1、myIsam是默认不支持事务的,InnoDB支持事务

2、myIsam不支持外键;InnoDB支持外键

3、myIsam支持表级锁(不支持高并发,以读为主);InnoDB支持行锁,但在执行不能确定范围的Sql语句时,InnoDB同样会锁全表

4、myIsam在磁盘存储上有三个文件.frm(存储表定义) .myd(存储表数据) .myi(存储表索引);innoDB磁盘存储的是表空间数据文件和日志文件,innoDB表大小只受限于操作系统大小 。

5、myisam使用非聚集索引,索引和数据分开,只缓存索引;innoDB使用聚集索引,索引和数据存在一个文件。

6、myisam保存表具体行数,innodb不保存

三、什么是脏读、幻读、不可重复读?要怎么处理?

这些问题都是mysql进行事务并发控制时经常遇到的问题

脏读:在事务进行过程中,读到了其他事务未提交的数据

不可重复读:在一个事务过程中,多次查询的结果不致

幻读:在一个事务过程中,用同样的操作查询数据,得到的记录数不相同

处理的方式有:加锁、事务隔离

加锁:

1、脏读:在修改时加排他锁,直到事务提交才释放。读取时加共享锁,读完释放锁

2、不可重复读:读数据时加共享锁,写数据加排他锁

3、幻读:加范围锁

事务隔离:

未提交读(read uncommitted):允许脏读

读已提交(read Committed):只能读取到已经提交的数据

可重复读(Repeated?Read):可重复读。在同一个事务的查询都是事务开始时刻一致的

序列化(Serializable):每次读都需要获得表级共享锁,读写相互阻塞

四、事务的基本特征和隔离级别有哪些?

事务:表示多个数据操作组成一个完整的事务单元,这个事务内的所有数据操作要么同时成功,要么同时失败。

事务的特征:ACID

1、原子性:事务是不可分割的,要么完全成功,要么完全失败。

2、一致性:事务无论是完成还是失败,都必须保持事务内操作的一致性。当失败时,都要对前面的操作进行回滚,不管中途是否成功

3、隔离性:当多个事务操作一个数据的时候,为防止数据损坏,需要将每个事务进行隔离,互相不干扰。

4、持久性:事务开始就不会终止,他的结果不受其他外在因素的影响。

事务的隔离级别:show variables like 'transaction%'

设置隔离级别:set transaction level xxx?设置下次事务的隔离级别。

set session transaction level xxx?设置当前会话的事务隔离级别

set global transaction level xxx?设置全局事务隔离级别

Mysql当中有五种隔离级别:

NONE:不使用事务

未提交读(read uncommitted):允许脏读

读已提交(read Committed):只能读取到已经提交的数据

可重复读(Repeated?Read):可重复读。在同一个事务的查询都是事务开始时刻一致的

串行化(Serializable):每次读都需要获得表级共享锁,读写相互阻塞

五、Mysql的锁有哪些?什么是间隙锁?

从锁的粒度来区分

1、行锁:加锁粒度小,但是加锁资源开销比较大。InnoDB支持

共享锁:读锁。多个事务可以对同一个数据共享同一把锁。持有锁的事务都可以访问数据,但是只读不能修改。select XXX LOCK IN SHARE MODE.

排他锁:写锁。只有一个事务能够获得排他锁,其他事务都不能获取该行的锁。InnoDB会对update/delete/insert语句自动添加排他锁。selete xxx for update

自增锁:通常是针对Mysql当中的自增字段。如果有事务回滚这种情况,数据会回滚,但是自增序列不会回滚

2、表锁:加锁粒度大,加锁资源开销比较小。MyIsam和InnoDB都支持

表共享读锁

表排他写锁

意向锁:是InnoDB自动添加的一种锁,不需要用户干预

3、全局锁:Flush?tables with read lock。加锁之后整个数据库实例都处于只读状态。所有的数据变更操作都会被挂起,一般用于全库备份的时候

常用的锁算法:user :userId(1,4,9)??

1、记录锁:锁一条具体数的据

2、间隙锁:例:update user set xxx='xxx' where userId=5;在可重复读的隔离级别下,间隙锁锁锁住userId从5到9。锁一定的范围,而不锁具体的记录,是为了防止产生幻读

3、Next-key:间隙锁+右记录锁

六、Mysql的索引结构是什么样的?聚簇索引和非聚簇索引又是什么?

二叉树-》AVL树-》经黑树-》B-树-》B+树

二叉树:每个节点最多只有两个子节点,左边的子节点都当前节点小,右边的子节点都比当前大。

AVL树:树中任意节点的两个子树的高度差最大为1

红黑树:1、每个节点都是红色或者黑色。2、根节点是黑色。3、每个叶子节点都黑色的空节点。4、红色节点的父子节点都必须是黑色的。5、从任一节点到其每个叶子节点的所有路径都包含相同的黑色节点。

B-树:1、B-树的每个非叶子节点的子节点的个数都不会超过D(这个D就是B-树的阶) 2、所有的叶子节点都在同一层。3、所有节点关键字都按照递增顺序排序

B+树:1、非叶子节点不存储数据,只进行数据索引。2、所有数据都存储在叶子节点当中。3、每个叶子节点都存有相邻叶子节点的指针。4、叶子节点按照本身关键字从小到大排序

聚簇索引就是数据和索引是在一起的。

MyIsam使用的是非聚簇索引,树的子节点上的data不是数据本身,而是数据存放的地址。InnoDB采用的是聚簇索引,树的叶子节点上data就是数据本身

聚簇索引的数据物理存放顺序和索引顺序是一致的,所以一个表当中只能有一个聚簇索引,而非聚簇索引可以有多个

InnoDB中,如果表定义了主键,那主键就是聚簇索引。如果没有主键,就会找第一个非空unique列作为聚簇索引。否则,InnoDB会创建一个隐藏的row-id作为聚簇索引。

七、Mysql的集群是如何搭建的?读写分离是怎么做的?

Mysql通过将主节点的Binlog同步给从节点完成主从之间的数据同步。

MySql的主从集群只会将binlog从主节点同步到从节点,而不会反过来同步。由此也就引申出了读写分离的问题。

因为要保证主从之间的数据一致,写数据的操作只能在主节点完成,而读数据的操作,可以在主节点或者从节点上完成。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 12:03:18  更:2021-10-21 12:04:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 21:53:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码