| |
|
开发:
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从主节点同步到从节点,而不会反过来同步。由此也就引申出了读写分离的问题。 因为要保证主从之间的数据一致,写数据的操作只能在主节点完成,而读数据的操作,可以在主节点或者从节点上完成。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |