练习题

Posted You295

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了练习题相关的知识,希望对你有一定的参考价值。

练习题(二)

1.比较Innodb和Myisam引擎的区别

答:1)innodb采取的是聚簇索引,数据和索引是放在一起的;Myisam采取的是非聚簇索引。数据和索引是分开的。

2)innodb支持事务;myisam默认表类型不是事务安全的。

3)Innodb支持行锁(共享锁,排它锁,意向锁),但是在执行不能确定范围的sql语句时,innodb同样会锁全表; myisam支持表级锁(不支持高并发,以读为主)。

4)执行大量的update和insert最好选择innodb;执行大量的select(查询)最好选择myisam。

5)Innodb磁盘上存储的是表空间数据文件和日志文件,表的大小只限制与操作系统的大小;myisam磁盘储存有三个文件,frm(存储表定义),myd(存储表数据),myi(存储表索引)。

6)Innodb不保存表的具体行数;myisam会保存

7)innodb支持外键;myisam不支持外键。

2.描述MVCC

答:mvcc是通过进行版本号的对比,防止过量加锁。它会先保存数据的历史版本,通过比较版本号确定数据是否可以显示出来,这样以来读取数据的时候不用加锁就可以保证事务的隔离效果。

流程:首先获取自己的事务id–获取Read view–查询得到的数据,然后通过获取到的版本号进行比较–看是否符合,如果不符合就需要undo log中的历史快照–最后返回符合规则的数据。

3.事务的四大特性是什么?请分别描述

答:1)原子性:保证数据库是一致的,事务中包含的所有的操作,要么都做,要么都不做。

2)一致性:数据库的事务在操作前和操作后都必须满足规则约束。

3)隔离性:多个用户访问数据库时,数据库为每个用户开启的事务不能相互干扰。

4)持久性:事务一旦被提交,那么它对数据库中的数据改变就是永久的,以后无论什么操作就算是发生故障也不能对其产生影响。

4.mysql的索引的底层树结构,为什么使用此种结构?

mysql的索引的底层树结构是B+树。
比较:
1)二叉查找树:不平衡。解决了排序的基本问题,但是由于无法保证平衡,可能退化为链表。

2)平衡二叉树(AVL):旋转耗时。通过旋转解决了平衡的问题,但是旋转的操作效率太低。

3)红黑树:树太高。通过舍弃严格的平衡和引入红黑树节点,解决了AVL旋转效率过低的问题,但是在磁盘等场景下,树仍然太高,IO次数太多。

4)B树:通过将二叉树改为多路平衡查找树,解决了树过高的问题。

5)B+树:在B树的基础上,将非叶节点改造为不储存数据的纯索引节点,进一步降低了树的高度;此外将叶节点使用指针连接成链表,范围查询更加的高效。

6)B+树和B树相比较:

1> 更少的IO次数:B+树的非叶节点只包含键,而不包含真实数据,因此每个节点储存的记录个数比B树多很多,因此B+树更低,访问时所需要的IO次数更少;此外,由于每个节点储存的记录数更多,所以对访问局部性原理的利用更好,缓存的命中率更高。
2>更适用于范围查询:在B树中进行范围查询时,首先要找到查找的下限,然后对B数进行中序遍历,直到找到查找的上限;而B+树的范围查询,只需要对链表进行遍历即可。
3>更稳定的查询效率:B树的查询时间复杂度在1到树的高度之间(分别对应记录在根节点和叶节点),而B+树的查询复杂度则稳定为树高,因为所有的数据都在叶节点。

5.Innodb和MyIsam的B+树实现有什么不同?

答:1)主索引的区别:innodb的数据文件本身就是索引文件。而myisam的索引和数据是分开的。
  2)辅助索引的区别:innodb的辅助索引data域存储的是相应的主键值而不是地址,myisam叶节点的data域存放的是数据记录的地址。

6.简述聚簇索引和非聚簇索引的区别,Innodb使用哪种索引?

1)聚簇索引的访问速度比非聚簇索引访问速度快。非聚簇索引需要先查询一遍索引文件,得到索引,再通过索引获取到数据而聚…的索引树的叶子结点直接指向要查找的数据;
2)聚簇索引:树的叶节点data域保存了完整的数据记录。
3)非聚簇索引:将数据和索引分开储存,索引结构的叶子结点data指向数据对应的位置,然后以data域的值为地址,读取相应的数据记录。
Innodb使用的是 聚簇索引。

7.描述更新一行数据的过程

答:先用排它锁将他锁定,然后记录redo,再将修改前的值复制到undo.log中去,修改当前行的值,填写事务编号,最后使用回滚指针指向undo.log中修改前的行。

8.描述jdbc开发的基本流程。

答:加载驱动—连接数据库—创建statment对象—执行sql语句—关闭数据库

9.简述数据表设计的三大范式

答:第一:要求数据具有原子性,使得数据不可再分。
第二:主键策略:选取一个能区分每个实体的属性或者属性组。
第三:非主依赖:在第二大范式的基础上任何非主属性不依赖于其他的非主属性,使得每个字段都独立的依赖于主键字段。

10.将两个有序链表合并为一个有序链表

public ListNode heBing(ListNode l1,ListNode l2) 
	   if(l1==null)   //如若l1为空时,直接返回l2
		   return l2;
	   
	   if(l2==null)   //如若l2为空时,直接返回l1
		   return l1;
	   
	   ListNode head = new ListNode(0); //创建新的链表
	   ListNode tmp = head;  //指针,指向头结点
	   while(l1!=null && l2!=null)  //终止条件,两个链表都为空时终止
		   if(l1.val<=l2.val)  //当l1的值小于等于l2的值时将l1中的数据连接在新链表后面
			   tmp.next = l1;
			   l1 = l1.next;
		   else 
			   tmp.next = l2; //否则将l2中的元素连接到新链表后面
			   l2 = l2.next;
		   
		   tmp = tmp.next; //更新指针
		   
		   if(l1==null && l2!=null)  //若l1中为空l2中还不为空时,直接将l2中的数据全部连接到新链表后
			   tmp.next = l2;
			   l2 = l2.next;
		   
		   if(l1!=null && l2==null)  //若L2中为空L1中还不为空时,直接将l1中的数据全部连接到新链表后
			   tmp.next = l1;
			   l1 = l1.next;
		   
	   
	   return head.next; //返回新链表
       

以上是关于练习题的主要内容,如果未能解决你的问题,请参考以下文章

习题5-15

第六章编程练习5

matlab练习程序(局部加权线性回归)

python 函数传参练习 全局变量与局部变量 的理解

2018-2019-1 20165301 《信息安全系统设计基础》第五周学习总结

java this 关键字练习