计算机专业保研面试复习笔记——数据库

计算机专业保研面试复习笔记:
计算机专业保研面试复习笔记——数据结构中的重要算法
计算机专业保研面试复习笔记——数据库
计算机专业保研面试复习笔记——操作系统
计算机专业保研面试复习笔记——计算机网络



事务

事务是并发控制的基本单位,它是一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的工作单位。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。

ACID特性

A,atomicity:原子性

事务必须是原子工作单元,对于数据的执行要不是全部执行,要不都不执行。如果只执行一个子集,可能会破坏事务的总体目标。

C,consistency:一致性

**事务将数据库从一种一致状态变为下一种一致状态。**如A账户转账给B账户,A账户减钱与B账户加钱必须是全做或全不做,即数据库必须处在一致状态。

I,isolation:隔离性

一个事务的执行不能被其它事物干扰。即一个事物的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事物之间不能相互干扰。

D,durability:持久性

事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持。


索引

索引是对数据库表中一或多个列的值进行排序的结构,是帮助高效获取数据的数据结构。

数据库创建索引的好处

  1. 通过创建唯一性的索引,可以保证数据库表中每一行数据的唯一性
  2. 可以大大加快数据的检索速度,这也使创建索引的最主要的原因。
  3. 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面。
  4. 在使用分组和排序子句进行数据检索时,同样可以显著的减少查询中分组和排序的时间
  5. 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能

增加索引的不利的方面

  1. 创建索引和维护索引需要消耗时间,这种时间随着数量的增加而增加

  2. 索引需要占物理空间,除了数据表占据数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要额空间就会更大。

  3. 当对表中的数据进行增加,删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

添加索引不一定可以增快查询速度。

哪些列应该建立索引

  1. 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构。

  2. 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度。

  3. 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。

  4. 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。

  5. 在经常使用在where子句中的列上面创建索引,加快条件的判断速度。

哪些列不应该创建索引

  1. 查询中很少使用或者作为参考的列不应该创建索引。

  2. 对于那些只有很少数据值的列也不应该增加索引(比如性别,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度)。

  3. 对于那些定义为text,image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。

  4. 修改性能远远大于检索性能时,不应该创建索引,因为修改性能和检索性能是矛盾的。

创建索引的方法

直接创建和间接创建(在表中定义主键约束或者唯一性约束时,同时也创建了索引)。

基本的索引类型

唯一性索引

唯一性索引保证在索引列中的全部数据是唯一的,不会包含冗余数据。

复合索引

复合索引就是一个索引创建在两个列或者多个列上,可以减少一在一个表中所创建的索引数量。


异常情况(并发一致性问题)

丢失数据

  1. 两个事务都对一个数据进行修改,一个先修改,另一个随后修改,第二个修改覆盖了第一个的修改

  2. 两个事务更新相同的数据源,如果第一个事务被提交,第二个却被撤销,那么连同第一个事务做的更新也被撤销

读脏数据

T1对一个数据做了修改,T2读取这一个数据。若T1执行 ROLLBACK 操作,则 T2读取的结果和第一次的结果不一样。当一个事务读取另一个事务尚未提交的修改时,产生脏读。

不可重复读(非重复读)

T1读取一个数据,T2对该数据做了修改。如果 T1再次读取这个数据,此时读取的结果和第一次读取的结果不同。**一个事务对同一行数据重复读取两次,但是却得到了不同的结果。**同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集。

幻影读

T1读取某个范围的数据,T2在这个范围内插入新的数据,T1再次读取这个范围的数据,此时读取的结果和和第一次读取的结果不同。事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查询中未出现的数据(这里并不要求两次查询的SQL语句相同)。这是因为在两次查询过程中有另外一个事务插入数据造成的。

解决方案

在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性问题。产生并发不一致性问题的主要原因是破坏了事务的隔离性。解决方法是通过并发控制来保证隔离性,并发控制可以通过封锁来实现。


共享锁(S锁)

用于只读操作(SELECT),锁定共享的资源。共享锁不会阻止其他用户读,但是阻止其他的用户写和修改。

更新锁(U锁)

用于可更新的资源中。防止当多个会话在读取、锁定以及随后可能进行的资源更新时发生常见形式的死锁。

独占锁(X锁,也叫排他锁)

一次只能有一个独占锁用在一个资源上,并且阻止其他所有的锁包括共享锁。写是独占锁,可以有效的防止“脏读”。


范式

符合某一种级别的关系模式的集合。

函数依赖

A与B两个元组,若A与B在X上的属性值相等,则在Y上的属性值一定相等,则称X函数确定Y或Y函数依赖于X,记作X->Y。如学号->年龄。

完全/部分函数依赖

如果Y依赖于X且Y不依赖于X的任何一个真子集,则称Y对X完全函数依赖。

如果Y可以依赖于X的真子集,则称Y对X部分函数依赖。

比如成绩完全函数依赖于(学号,课程),因为学号和课程都不能单独确定成绩。

姓名部分函数依赖于(学号,课程),因为学号可以单独确定成绩。

传递函数依赖

X->Y,Y->Z,则Z对X传递函数依赖。

候选码(候选键)

K为R<U,F>中的属性或属性集合,属性集U完全依赖于K,则K是R的候选码。

比如属性集(学号、课程、成绩)中,(学号,课程)是候选码,其他属性或属性集则不是。

主码(主键)

若候选码多于一个,则选定一个为主码。

主属性

包含在任何一个候选码的属性为主属性。

非主属性

不包含在任何候选码中的属性为非主属性。

全码

整个属性组都是码。

第一范式(1NF)

每个属性都不可再分。

不是1NF:

image-20200907233333571

是1NF:

image-20200907233353331

第二范式(2NF)

  1. 需要是1NF

  2. 每一个非主属性完全函数依赖于任何一个候选码(注意这里是非主属性,主属性是可以部分依赖于其他候选码的)

关系模式(学号,课程,成绩,姓名),码是(学号,课程),此时学号->姓名,(学号,课程)->姓名。姓名部分依赖于(学号,课程),此关系模式不符合2NF定义。

分解为两个关系模式,(学号,姓名),(学号,课程,成绩),两个关系模式都满足2NF。

第三范式(3NF)

  1. 需要是2NF
  2. 不存在传递性依赖

BC范式(BCNF)

  1. 需要是3NF
  2. 没有任何属性完全函数依赖于非码的任何一组属性。(即所有决定因素都要包含码,必须是包含码的属性或属性集才可以决定其他属性或属性集)

三种数据模型

概念数据模型

**按用户的观点来对数据和信息建模,它是现实世界到信息世界的抽象,**是用户与数据库设计人员之间进行交流的语言。如E-R图。

image-20200908153510984

逻辑数据模型

**从计算机实现的观点来对数据建模。是信息世界中的概念和联系在计算机世界中的表示方法。**如层次模型、网状模型、关系模型、面向对象模型。

image-20200908153826761

物理数据模型

**从计算机的物理存储角度对数据建模。**是数据在物理设备上的存放方法和表现形式的描述,以实现数据的高效存取。如索引,HASH文件等等。

image-20200908153933378

三级模式结构

模式

也称逻辑模式,数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共视图。一个数据库只有一个模式。

外模式

也称子模式或用户模式,是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图。一个数据库可以有多个外模式,不同用户对看待数据的方式、对数据的保密要求方面存在差异,所以不同外模式的描述是不同的。

内模式

也称存储模式,一个数据库只有一个内模式。内模式是数据结构和存储方式的描述,是数据在数据库内部的组织方式。如,索引按照什么方式组织,是B+树索引还是hash索引。


两级映像

外模式/模式映像

外模式/模式映像表示了该外模式与模式之间的对应关系。当模式改变时,由数据库管理员对该映像做相应改变,进而无需改变外模式。应用程序是根据外模式写的,因此也不用变,这称为数据的逻辑独立性

模式/内模式映像

模式/内模式映像定义了数据全局逻辑结构与存储结构之间的对应关系。当数据库的存储结构改变时,由数据库管理员对该映像做相应改变,而无需改变模式,进而也无需改变应用程序,这称为数据的物理独立性


ER模型

实体关系图 (Entity-Relationship,E-R),有三个组成部分:实体、属性、联系。用来进行关系型数据库系统的概念设计。

img

ER模型转换为关系模式

1:1

遇到1:1 关系的话在两个实体任选一个添加另一个实体的主键即可。

1:N

1:N 遇到 1:N 关系的话在N端添加另一端的主键

假如有学生和班级两个实体,一个班级可以容纳多个学生,但是一个学生只能选择一个班级, 因此班级和学生是1:N的关系,现在要转换为关系模型, 我们只需在学生的这端加上班级的唯一标识即可,这样做的原因是,因为一个学生只能有一个班级,班级是相对学生唯一的。

N:M

遇到N:M我们需要将联系转换为实体,然后在该实体上加上另外两个实体的主键,作为联系实体的主键,然后再加上该联系自身带的属性即可。

例如有学生和老师两个实体, 一个学生可以由多名老师来授课,一名老师也可以授课多名学生,它们是M:N关系的,假如联系为授课,该联系上有成绩属性,因此当我们把它转换为关系模型时,我们把联系转换为联系实体,并添加学生实体的主键(学号)和教师实体的主键(教师编号)作为自己的主键,值得注意的是,授课实体的外键分别是学号和教师编号,但是它的主键是(学号,教师编号),另外它还拥有自己的一个属性成绩。


SQL

增(插入数据)

Insert Into <表名>[(<属性列>[{,<属性列>}])]
	Values(<>[{,<>}])

例:插入学生信息

Insert Into Student
	Values (95020, ‘陈冬’,IS, 18);

删(删除数据)

Delete From <表名>
	[Where <条件>]

例:删除学号为95019的学生的记录

Delete From Student
	Where Sno=95019

改(修改数据)

Update <表名>
	Set <列名>=<表达式>[{, <列名>=<表达式>}]
	[Where <条件>]

例:将学生95001的年龄改为22岁

Update Student
	Set Sage = 22
	Where Sno=95001

查(查询数据)

Select [ALL|DISTINCT]<目标表达式>[{,<目标表达式>}]
From <表名或视图名>[{,<表名或视图名>}]
[Where <条件表达式>]
[Group By <分组列> [{,<分组列>}][HAVING <条件表达式>]]
[Order By <排序列> <排序方式>[{,<排序列> <排序方式>}]

例:查询计算机系全体学生的姓名

Select Sname From Student          
	where Sdept=‘CS’;
  • 15
    点赞
  • 168
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机网络在保研面试中可能会涉及到以下内容: 1. OSI七层模型与TCP/IP四层模型:计算机网络通常使用这两种模型来描述协议的层次结构和功能。 2. 三次握手:TCP在建立连接时使用的一种握手过程,用于确认双方的通信能力和同步序列号。 3. 四次挥手:TCP在关闭连接时使用的一种挥手过程,用于在双方确认无需继续通信后关闭连接。 4. HTTP与HTTPS的区别:HTTP是超文本传输协议,是一种用于传输超文本数据的应用层协议;而HTTPS是在HTTP上加入了安全层,通过使用SSL/TLS协议进行加密通信,对数据进行加密保护。 5. 对称加密与非对称加密:对称加密是指使用相同的密钥进行加密和解密,速度较快,但密钥传输存在安全隐患;非对称加密是指使用一对密钥,公钥用于加密,私钥用于解密,安全性较高。 6. TCP vs. UDP:TCP是面向连接的协议,提供可靠的数据传输,但速度较慢;UDP是面向无连接的协议,提供不可靠但速度较快的数据传输。 7. 输入网址到获取网页的全过程:这个过程包括DNS寻址、建立TCP连接、发送HTTP请求、服务器响应、下载网页等步骤。 8. 常见状态码及原因:HTTP通信中常见的状态码如200表示请求成功,404表示资源未找到,500表示服务器内部错误等。 9. GET vs. POST:GET和POST是HTTP请求方法,GET用于获取数据,POST用于提交数据。 10. DNS寻址过程:DNS解析过程包括递归查询和迭代查询,用于将域名转换为IP地址。 11. 拥塞控制和流量控制:拥塞控制用于控制网络中的流量,以避免网络拥堵;流量控制用于控制通信双方之间的数据传输速率。 以上是计算机网络保研面试常见的一些问题和内容。希望对你有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [计算机网络常见面试题整理-保研/工作](https://blog.csdn.net/weixin_43903564/article/details/106555407)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [计算机网络保研面试题整理(自用)](https://blog.csdn.net/m0_52571748/article/details/119513761)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值