高频sql面试问题

高频sql面试问题,第1张

SQL(结构化查询语言)是一种设计用于检索和操作数据的数据库。它是美国国家标准协会(ANSI)的标准。此语言用于执行选择,更新,删除和插入等数据任务。

表是在具有列和行的模型中设计的数据集合。在表中,指定了列数,称为字段,但未定义行数,称为记录。

数据库是有序形式的一组信息,用于访问,存储和检索数据。

DBMS是一个控制数据维护和使用的程序。它被认为是管理数据的文件管理器。有四种类型的DBMS:

最有用的DBMS是Relational DBMS。它为数据提供了一个关系运算符。

SQL命令分为以下类型:

它包含来自一个或多个表的行和列,可以定义为虚拟表。它消耗的内存较少。

句法:

Join用于从相关的行和列中检索数据。它在两个或多个表之间工作,并且它从两个表返回至少一个匹配。

连接类型是:

数据库查询是数据库表中的数据请求。查询可以是选择查询或任何其他类型的查询。

子查询是查询的一部分。外部查询已知主查询,内部查询识别子查询。始终首先执行子查询,并将结果传递给主查询。

Autoincrement是一个关键字,用于在表中插入新记录时生成数字。

它可用于设置表中数据类型的限制。在创建或更新表语句时,可以使用约束。一些限制是:

SQL中有不同类型的键:

规范化是一种设计技术,它以减少数据依赖性的方式排列表。它将表分成小模块并按关系链接。

非规范化是一种优化方法,我们将多余的数据增加到表中,并在规范化后应用。

存储过程是一组SQL语句,用作访问数据库的函数。为了减少网络流量并提高性能,我们使用存储过程。

句法:

索引用于加速查询的性能。它可以更快地从表中检索数据。可以在一组列上创建索引。

聚簇索引 - 它有助于轻松检索数据,并且只有一个聚簇索引与一个表一起分配。它会更改记录在数据库中的保存方式。

非聚集索引 - 与聚簇索引相比,非聚簇索引很慢。并且在非集群索引的情况下,该表可以具有多个索引。它为表创建一个对象,该表是搜索后指向表的一个点。

触发器 被 用来执行对表中的特定动作,诸如插入,更新或删除 。它是一种 存储过程 。动作和事件是触发器的主要组成部分。执行Action时,事件响应该操作而出现。

通常,这些属性称为ACID。它们有助于数据库事务。

A tomicity -在一个事务中连接两个或更多个单独的数据块,或者所有的块都致力于,或者一个都不。

C onsistency - 事务或者生成新的有效数据状态,或者如果发生任何失望,则在事务启动之前将所有数据返回到其状态。

I solation - 正在进行且尚未提交的事务必须继续与任何其他操作隔离。

D urability -在此操作中,系统保存提交的数据,每当事件发生故障和系统启动后,所有的数据是可用的正确的位置。

SQL语句分为几类:

它被定义为通过为查询提供条件来设置结果集的限制。他们从整个记录中过滤掉一些行。

一些SQL CLAUSES是WHERE和HAVING。

它是一个返回单个值的数学函数。

SQL中的聚合函数是:

为了操作字符串,我们使用String Function。其中一些是:

排序规则 是一 组规则,用于确定数据如何通过比较进行排序 。例如使用一组规则存储的字符数据,这些规则定义了正确字符的序列以及类型,重音和区分大小写。

在系统内存中执行SQL语句时,会创建一个临时工作区,称为Cursor。在select语句中,游标存储了信息。游标可以使用多行,但一次只能处理一行。这组行称为活动集。

游标有两种类型:

SQL服务器是Microsoft关系数据库管理系统(RDBMS)的一种类型或示例。它在IT氛围中提供广泛的事务处理和商业智能。

运算符是一个保留字,主要用于SQL语句的WHERE子句中以进行操作。

空值是没有值的字段。它与Zero不同。假设有一个表,并且在表中有一个字段,可以在不添加值的情况下将记录插入字段,然后该字段将以NULL值保存。

空白是我们提供的价值。

零只是一个数字。

数据仓库被称为来自多个信息源的中央数据中心。这些数据可用于在线处理和挖掘。

在表中,应该只有一个PRIMARY KEY,但在另一种情况下,UNIQUE KEY可以是任意数量的。

PRIMARY KEYS不允许NULL值,但UNIQUE KEY允许NULL值。

web服务器是应用程序运行的一个基本环境.

如果一个网站只有web服务器,是不能运行的.每台电脑都可以通过添加某些组件来组建web服务器.其实这只能说有了存放网页的一个基本空间.一个网站除了服务器与网页程序外,还需要域名等要素.

web服务器常见的有windows和 UNX UNX我接触的少,一般windows使用的是IIS.

这跟浏览器直接读取与否无关 ,最先的网页是静态的,后来才出现动态的,也就是你所说的asp什么的,静态的时候浏览器只是被动的接受web服务器的数据,动态时代来临,出现了浏览器与web服务器的交互,也就是浏览器首先将浏览请求发送给web服务器上的程序,程序通过计算将某数据从数据库读出来,用网页的形式再传达给浏览器 .

web服务器只是一个运行环境,你想这是由谁来完成的.web服务器与web程序的关系是,什么样的web服务器决定了相应的web程序,比如,默认的IIS服务只能运行asp而不能运行php和aspx、cgi当然这都是可以通过安装相应的程序脚本来实现的,所以,如过你去一家IDC买服务器首先要了解该服务器支持什么样的脚本语言.

1.TCP的三次握手与四次挥手过程,各个状态名称与含义,TIMEWAIT的作用

2.TCP和UDP的区别

TCP是有连接的,两台主机在进行数据交互之前必须先通过三次握手建立连接;而UDP是无连接的,没有建立连接这个过程

TCP是可靠的传输,TCP协议通过确认和重传机制来保证数据传输的可靠性;而UDP是不可靠的传输

TCP还提供了拥塞控制、滑动窗口等机制来保证传输的质量,而UDP都没有

TCP是基于字节流的,将数据看做无结构的字节流进行传输,当应用程序交给TCP的数据长度太长,超过MSS时,TCP就会对数据进行分段,因此TCP的数据是无边界的;而UDP是面向报文的,无论应用程序交给UDP层多长的报文,UDP都不会对数据报进行任何拆分等处理,因此UDP保留了应用层数据的边界

3.三次握手过程中有哪些不安全性

1)伪装的IP向服务器发送一个SYN请求建立连接,然后服务器向该IP回复SYN和ACK,但是找不到该IP对应的主机,当超时时服务器收不到ACK会重复发送。当大量的攻击者请求建立连接时,服务器就会存在大量未完成三次握手的连接,服务器主机backlog被耗尽而不能响应其它连接。即SYN泛洪攻击

防范措施:

1、降低SYN timeout时间,使得主机尽快释放半连接的占用

2、采用SYN cookie设置,如果短时间内连续收到某个IP的重复SYN请求,则认为受到了该IP的攻击,丢弃来自该IP的后续请求报文

3、在网关处设置过滤,拒绝将一个源IP地址不属于其来源子网的包进行更远的路由

2)当一个主机向服务器发送SYN请求连接,服务器回复ACK和SYN后,攻击者截获ACK和SYN。然后伪装成原始主机继续与服务器进行通信。

4.accept发生在三次握手的哪一步

        accept会监听已完成队列是否非空,当队列为空时,accept就会阻塞。当队列非空时,就从已完成队列中取出一项并返回。 

而已完成队列中的都是三次握手过程已经完成的,因此accept发生在三次握手之后。 

5.TCP在listen时的参数backlog的意义

linux内核中会维护两个队列:

1)未完成队列:接收到一个SYN建立连接请求,处于SYN_RCVD状态

2)已完成队列:已完成TCP三次握手过程,处于ESTABLISHED状态

当有一个SYN到来请求建立连接时,就在未完成队列中新建一项。当三次握手过程完成后,就将套接口从未完成队列移动到已完成队列。

backlog曾被定义为两个队列的总和的最大值,也曾将backlog的1.5倍作为未完成队列的最大长度

一般将backlog指定为5

6.TCP选项有哪些

TCP首部选项字段多达40B,一些常用的字段有:

1)选项结束字段(EOP,0x00),占1B,一个报文段仅用一次。放在末尾用于填充,用途是说明:首部已经没有更多的消息,应用数据在下一个32位字开始处

2)无操作字段(NOP, 0x01),占1B,也用于填充,放在选项的开头

3)MSS(最大报文段长度),格式如下:种类(1B,值为2),长度(1B,值为4),数值(2B)

用于在连接开始时确定MSS的大小,如果没有确定,就用默认的(一般实现是536B)

4)窗口扩大因子,格式如下:种类(1B,值为3),长度(1B,值为3),数值(1B)

新窗口值 = 首部窗口值 * 2的(扩大因子)次方

当通信双方认为首部的窗口值还不够大的时候,在连接开始时用这个来定义更大的窗口。仅在连接开始时有效。一经定义,通信过程中无法更改。

5)时间戳(应用测试RTT和防止序号绕回)

6)允许SACK和SACK选项

7.为什么建立连接需要三次握手,而断开连接需要四次握手

因为每个方向都需要一个FIN和ACK,当一端发送了FIN包之后,处于半关闭状态,此时仍然可以接收数据包。

在建立连接时,服务器可以把SYN和ACK放在一个包中发送。

但是在断开连接时,如果一端收到FIN包,但此时仍有数据未发送完,此时就需要先向对端回复FIN包的ACK。等到将剩下的数据都发送完之后,再向对端发送FIN,断开这个方向的连接。

因此很多时候FIN和ACK需要在两个数据包中发送,因此需要四次握手

8.超时重传和快速重传    

超时重传:当超时时间到达时,发送方还未收到对端的ACK确认,就重传该数据包

快速重传:当后面的序号先到达,如接收方接收到了1、 3、 4,而2没有收到,就会立即向发送方重复发送三次ACK=2的确认请求重传。如果发送方连续收到3个相同序号的ACK,就重传该数据包。而不用等待超时


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/439109.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-29
下一篇2023-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存