面试之事务与计算机网络(二)

本文介绍了数据库事务的基本概念,包括原子性、隔离性、一致性和永久性,以及四种事务隔离级别。接着讨论了索引的作用、优缺点和创建方法。此外,还对比了TCP与UDP的区别,并详细解释了TCP如何保证可靠传输,以及TCP的三次握手和四次挥手过程。
摘要由CSDN通过智能技术生成

1.事务

1.1什么是事务

事务就是一个包含多个步骤的业务操作,他们被看作是一个不可分割的单位,所有的步骤要么全部成功,要么全部失败。

数据库向用户提供保存当前程序状态的方法,叫事务提交(commit);当事务执行过程中,使数据库忽略当前的状态并回到前面保存的状态的方法叫事务回滚(rollback)

1.2事务的四大特性(ACID)

原子性:事务是一个原子操作,有一系列动作组成,原子性保证一系列的动作要么全部完成,要么全部不完成。

隔离性:同一时间,只允许同一事务请求同一数据,不同事务之间没有任何干扰

一致性:一旦所有事务动作完成,事务就被提交.,数据和资源就处于一种满足业务规则的一致性状态中。

永久性:一旦事务完成,不管系统发生什么,所写入的结果都不会发生变化。事务完成之后,结果会被永久化的写入存储器中。

1.3事务的隔离级别

事务并发产生的问题:

脏读:读到了脏数据,即无效数据

不可重复读:在数据库访问中,一个事务内的多次相同查询却返回了不同的结果

幻读:指同一个事务内多次查询返回的结果集不一样,比如增加了行记录。

解决脏读,不可重复读,幻读的问题,就需要更高的隔离级别。

1.3.1读未提交

提供了事务间最小限度的隔离。顾名思义,一个事务可以读取另一个事务未提交的数据

1.3.2读已提交

处于读已提交级别的事务可以看到其他事务对数据的修改,也就是说,在事务处理期间,如果其他事务修改了相应的表,那么同一个事务在相同查询操作返回的结果是不同的。一个事务要等到另一个事务提交之后才能读取数据。

1.3.3重复读

在开始读取数据(事务开启)时,不再允许修改操作

1.3.4序列化

数据库事务的最高隔离级别。在此级别下,事务串行执行。可以避免脏读、不可重复读、幻读等读现象。但是效率低下,耗费数据库性能。

2.索引

2.1索引的概念

索引是一种特殊的文件,包含着对数据库表里所有记录的引用指针。可以对表中的一列或者多列创建索引。

2.2索引的作用

加快数据检索的速度,提高查询的效率

一个表中的索引,类似于一本书的目录,通过书本的目录,可以很快的查询到我们所需要的内容,如果没有目录,只能一页一页的翻,效率比较低。

2.3索引的缺陷

虽然索引的存在大大提高了查询效率,但是也有两个缺陷:

  1. 索引会消耗更多的空间
  2. 当对表中数据进行增删改时,对应的索引也需要维护,因此降低了维护的速度。

但是在实际操作当中,查询操作往往比其他操作多的多,因此使用索引也是一个不错的选择。

2.4索引的使用

在对列进行唯一约束(UNIQUE)或主键约束(PRIMARY KEY)或外键约束(FOREIGN KEY)时,会自动创建对应列的索引。

查看索引

show index fron 表名;

创建索引

create index 索引名 on 表名(列名);

删除索引 

drop index 索引名 on 表名;

3.计算机网络模型 

OSI七层网络模型主要功能:

  • 应用层:为应用程序提供交互服务。在计算机网络中应用层有多种协议,如域名系统DNS,支持万维网的应用HTTP协议,支持电子邮件的SMTP协议
  • 表示层:主要负责数据格式转换, 如加密解密,转换翻译,压缩解压等
  • 会话层:负责在网络中两节点之间建立连接,维持和终止通信,如服务器器验证用户登录就是在会话层完成的。
  • 运输层:有时也称为传输层,向主机进程提供通用的数据传输服务。该层有两种协议:TCP与UDP
  • 网络层:选择合适的路由和交换节点,确保数据及时传输,主要包括IP协议。
  • 数据链路层:将网络层传下来的IP数据封装成帧,并在相邻节点的链路上传输帧
  • 物理层:实现相邻节点比特流的透明传输,尽可能屏蔽传输介质和通信手段的差异

4.TUP与UDP的区别

  • 是否有连接:UDP无连接;TCP面向连接
  • 是否可靠:UDP是不可靠传输,尽最大努力交付,即不保证可靠交付;TCP可靠传输,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达
  • 是否有序:UDP是无序的;TCP是有序的,在传输过程中可能乱序,但是TCP会重新排序
  • 传输速度:UDP快,TCP慢
  • 连接对象个数:UDP支持一对一,一对多,多对一,多对多;TCP只支持一对一
  • 传输方式:UDP面向报文;TCP面向字节流
  • 首部开销:UDP首部开销小,TCP首部最小20字节,最大60字节

5.TCP如何保证可靠传输

TCP主要提供了检验和,序列号/确认应答,超时重传,滑动窗口,拥塞控制,流量控制等方法实现可靠传输。

  • 检验和:(在TCP协议报头有16位检验)通过检验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错则会直接丢弃TCP端,重新发送。
  • 序列号/确认应答:序列号的作用不仅仅是应答的作用,有了序列号可以将接收到的数据按照序列号排序,并且可以去掉重复序列号的数据。
    • TCP传输过程中,每次接收方收到数据之后,都会对传输方进行确认应答。也就是发送ACK报文,这个ACK报文中带有确认序列号,告诉发送方,接收到了哪些数据,写一次数据从哪里发送。
  • 超时重传:超时重传是指发送出去数据包到接收到数据包之间的时间,如果超过这个时间就认为是丢包了,要重新发送数据。最大超时时间是动态计算的
  • 滑动窗口:滑动窗口既提高了发送报文的效率,也避免了因为发送发发送太多数据导致接收方无法正常接收数据
  • 拥塞控制:在数据传输过程中,可能由于网络的原因,造成网络拥堵,此时引入拥塞控制,保证可靠传输的同时提高效率
  • 流量控制:如果主机A一直向主机B发送数据,不考虑主机B的接收能力,则可能导致主机B的缓冲区已满,不能再接收数据,这会导致大量丢包,引发重传机制。如果再重传过程中,主机B的接收情况仍未好转,则会将大量时间消耗在重传机制上,导致工作效率较低。所以引入流量控制机制,主机B通过告诉主机A的接收缓冲区大小,来使主机A控制发送的数据量。

6.三次握手与四次挥手

6.1三次握手

三次握手是基于TCP协议,是服务器和客户端建立连接的过程。

  1. 首先由客户端向服务器发送连接请求,请求报文中将SYN置为1;
  2. 当服务器接收到请求之后,确认连接,发送ACK = 1到客户端,同时服务器也向客户端发送连接请求,SYN = 1,
  3. 客户端收到连接成功应答的同时,也收到了服务器的连接请求,然后向服务器发送去了ACK应答。

到此,三次握手建立连接已经完成。

6.2四次挥手

四次挥手是服务器与客户端断开连接的一个请求与应答的过程。

  1. 客户端向服务器端发送释放连接请求,报文FIN = 1,,主动关闭连接,等待服务器的应答
  2. 客户端收到请求之后,进行应答,报文ACK = 1.此时TCP属于半连接状态,即客户端到服务端的连接已经释放,而服务端到客户端的连接还未释放,可能此时服务器还要发送数据到客户端,因此不能立即断开连接
  3. 等到没有数据发送时,服务器向客户端发送释放连接请求FIN = 1,等待应答
  4. 此时客户端确认释放连接,返回确认报文ACK = 1 

6.3为什么建立连接是三次握手不是两次握手,不是四次握手呢?

为什么不是两次握手:

  • 防止已经过期的连接请求连接到服务器,造成资源浪费:假设客户端首先发送A请求到服务器,但是由于网络拥堵导致A请求没有到达服务器,由于可靠机制,在一段时间之后又重新发送B请求,这次连接成功并且互相传输数据,之后断开连接。最后A请求到达服务器,服务器接收到请求之后开始发送数据,但是此时客户端无法接收数据,导致资源浪费
  • 三次握手才能确认自己和对方的接收和发送能力都正常:第一次握手,客户端只是发送请求,无法确认什么,而服务器只能确认客户端发送能力和自己接收能力正常;第二次握手客户端可以确认自己的发送能力和接收能力正常,对方的接收能力和发送能力正常;第三次握手才能让双方都互相确认功能全部正常,此时就可以进行通信了
  • 告知对方自己的序号值,并确认对方的序号值:原因之一就是TCP报文中维护了序号字段和确认序号字段,通过这两个字段就可以知道在自己发出的数据中,哪些是已经被对方确认收到的,这两个字段的值会在初始序号值的基础递增,如果是两次握手,只有发起方的序号可以得到确认,而另一方的序号值得不到确认

为什么不是四次握手呢:

因为三次握手已经可以确认双方的发送接收能力了,双方都知道彼此已经准备好了,而且也可以完成对双方初始序号值的确认,所以就无需第四次了

6.4为什么建立连接是三次,而断开连接是四次

断开连接的时候,首先由客户端向服务器发送FIN报文段,在服务器接收到之后首先会给客户端一个ack应答,但是他不能立马断开连接,因为在此时,可能服务器还在向客户端传输数据,所以需要等待一段时间,等到数据传输完成之后,再向客户端发送FIN报文,然后客户端应答,此时连接关闭,这就是四次的原因。        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值