计算机网络+数据库面经

1、http/https的区别

http:http协议是超文本传输协议,被用于浏览器和服务器之间的消息通信,该协议以明文方式传输,其中不够安全。

https:https是安全套接字层超文本传输协议,为了数据安全,其中在http的基础上加入SSL/TLS协议,SSL/TLS协议依靠验证服务器的身份,并未浏览器和服务器之间进行通信加密。

主要区别:https比http传输更安全,因为加了SSL/TLS协议;两者连接方式不同,端口号不同,如http是443,https是80;https加密过程需要证书,因此大部分需要消耗费用,http不需要这些(因为他是不加密的,无状态)。

2、https的工作原理

【1】用户把url发给服务器;

【2】和web进行SSL连接;

【3】web服务器收到请求后将证书的公钥返回给客户端;

【4】客户端和web服务器确认SSL/TLS的信息加密等级;

【5】客户端确认加密等级,建立会话的密钥,利用网站的公钥加密传输给网站;

【6】web服务器解释密钥,然后用密钥进行两者的保护传输。

3、http的请求过程

【1】域名解析;

【2】发起TCP三次握手;

【3】建立连接后发起http请求;

【4】服务器相应http请求,浏览器得到html代码;

【5】浏览器解释html代码,并请求html代码中的资源(js/css/image等);

【6】浏览器对页面进行渲染呈现。

4、OSI七层协议

OSI七层模型TCP/IP四层传输形式功能对应网络协议
应用层应用层数据段文件传输,电子邮件,文件服务,虚拟终端HTTP,FTP
表示层应用层数据段数据格式化,代码转换,数据加密Telnet,Rlogin
会话层应用层数据段接触或建立与其他节点的联系SMTP,DNS
传输层传输层数据报提供端对端的接口TCP,UDP
网络层网络层数据帧为数据报选择路由IP,ICMP,ARP
数据链路层网络接口层比特传输有地址的帧,错误检测FDDI,Ethernet
物理层网络接口层比特以二进制数据形式在物理媒体上传输数据IEEE 802等

TCP/IP四层模型

层级tcp/ip五层
应用层HTTPS、HTTP(超文本传输协议)、telnet(是Internet远程登陆服务的标准协议和主要方式)、ftp(文件传输协议)、tftp、dns、smtp(简单邮件传输协议)
传输层tcp(一种面向连接的、可靠的、基于字节流的传输层通信协议)、udp(用户数据报协议,一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务)
网络层ip、icmp(Internet控制报文协议。)、rip、igmp(组播协议包括组成员管理协议和组播路由协议。)、arp(地址解析协议。)
网络接口层以太网、令牌环、ppp、pptp、L2TP、atmp

SMTP协议的三个阶段

  1. 连接建立

  2. 邮件传送

  3. 链接释放

ARP协议

地址解析协议:是根据IP地址获取物理地址的一个TCP/IP协议。它是一个通过用于实现从 IP 地址到 MAC 地址的映射,即询问目标 IP 对应的 MAC 地址的一种协议。

工作机制:主机 A 想要获取主机 B 的 MAC 地址,通过主机 A 会通过广播 的方式向以太网上的所有主机发送一个 ARP 请求包,这个 ARP 请求包中包含了主机 A 想要知道的主机 B 的 IP 地址的 MAC 地址。

5、TCP/UDP

三次握手

  • 客户端向服务端发送一个SYN帧(连接请求),阻塞等候服务端的回复;(第一次握手)

  • 服务端收到客户端的SYN帧后,回传一个ACK帧告诉客户端已经准备好了,并发一个SYN问客户端是否准备好;(第二次握手)

  • 客户端收到服务端发来的ACK帧后,进入established(建立)状态准备就绪,并回复一个ACK帧给服务端表示也准备好了,服务端接收到ACK后确认了对方的状态也进入established状态建立连接。(三次握手)

四次挥手(终止TCP连接)

  • 客户端发送一个FIN帧用于关闭客户端到服务端的数据传输,此时客户端进入FIN_WAIT状态;(第一次挥手)

  • 服务端接收到FIN帧后,会送一个ACK帧给客户端,确认序号为收到序号+1,服务端进入CLOSE_WAIT状态;(第二次挥手)

  • 服务端发送一个FIN帧,用来关闭服务端到客户端的数据传输,服务端进入LAST_ACK状态;(第三次挥手)

  • 客户端收到FIN帧,进入TIME_WAIT状态,接着回送一个ACK帧给服务端,确认序号为收到序号+1,服务端进入CLOSED状态。(第四次挥手)

为什么需要三次握手,而不是两次握手?

防止失效的连接请求报文段被服务端接收,从而产生错误。 总的来说,三次握手是为了防止当已失效的连接请求报文段突然又传到服务端,造成双方的不一致,导致资源的浪费。

post和get的区别

GET用来获取资源,它只是获取、查询数据,不会修改服务器的数据,从这点来讲,它是安全的。由于它是读取的,因此可以对GET请求的数据进行缓存。

POST则是可以向服务器发送修改请求,进行数据的修改的。

  1. get一般是用来请求数据的,而post一般是发送数据到后台;

  2. get也可以传数据,但是数据在url中可见,安全性不高且长度受限,一般需要做加密;post请求参数放在request body中,不会再url中显示,比get安全且参数长度无限制;

  3. 对于浏览器,get请求刷新或者回退是没影响,post则会重新提交请求;

  4. get请求可保留记录、缓存、书签在浏览器,post不会;

  5. get支持url编码,但是post支持多种编码;

  6. 个体请求比较常见的方式是url请求,post则是通过form表单发送数据请求。

TCP与UDP的区别

  • tcp面向连接,数据传输之前需要建立会话,而udp不需要;

  • tcp提供可靠传输,保证数据不丢包、不重复且按顺序到达,udp主管交付,不保证可靠性;

  • tcp提供拥塞控制,而udp没有;

  • tcp面向字节流,udp面向报文;

  • tcp只支持点对点的通信,udp支持一对一、一对多、多对多的通信;

  • tcp首部开销大(20字节),udp首部开销小(8字节)。

7、UDP编程

建立服务端

  1. 创建一个socket,用函数socket();

  2. 设置socket属性,用函数setsockopt();* 可选

  3. 绑定IP地址、端口等信息到socket上,用函数bind();

  4. 循环接收数据,用函数recvfrom();

  5. 关闭网络连接;

建立客户端

  1. 创建一个socket,用函数socket();

  2. 设置socket属性,用函数setsockopt();* 可选

  3. 绑定IP地址、端口等信息到socket上,用函数bind();* 可选

  4. 设置对方的IP地址和端口等属性;

  5. 发送数据,用函数sendto();

  6. 关闭网络连接;

8、TCP编程

建立服务端

  1. 创建一个socket,用函数socket();

  2. 设置socket属性,用函数setsockopt(); * 可选

  3. 绑定IP地址、端口等信息到socket上,用函数bind();

  4. 开启监听,用函数listen();

  5. 接收客户端上来的连接,用函数accept();

  6. 收发数据,用函数send()和recv(),或者read()和write();

  7. 关闭网络连接;

  8. 关闭监听.

建立客户端

  1. 创建一个socket,用函数socket();

  2. 设置socket属性,用函数setsockopt();* 可选

  3. 绑定IP地址、端口等信息到socket上,用函数bind();* 可选

  4. 设置要连接的对方的IP地址和端口等属性;

  5. 连接服务器,用函数connect();

  6. 收发数据,用函数send()和recv(),或者read()和write();

  7. 关闭网络连接.

9、socket中的close是一次就关闭的吗?半关闭状态是怎么产生的?

不是,当A发送给B控制FIN的时候,A到B这个方向的连接就关闭了,这个时候处于半关闭的状态,但是B到A这个方向的连接并没有关闭,因为B要等到将数据全部发送完毕之后才会发送FIN给A。

10、拥塞控制与超时重传

(1)什么是拥塞,产生网络拥塞的条件是什么?拥塞控制的表现是什么?

  • 防止发送方发的太快,使得网络来不及处理,从而导致网络拥塞。

  • 当资源的需求总和大于可用资源时,会发生拥塞;

  • 丢包、延时变长。

(2)拥塞控制算法由那些?

慢开始、拥塞避免、快重传、快恢复。

(3)简述拥塞算法的思路原理。

  • 慢开始算法:有小到大逐渐增大发送窗口,也就是从小到大逐渐增大拥塞窗口。当然收到单个确认但此确认多个数据报的时候就加相应的数值。每经过一个传输轮次,拥塞窗口就加倍。

  • 拥塞避免算法思路:让cwmd缓慢的增大,每经过一个往返时间RTT之后就把发送方的拥塞窗口cwnd加1,而不是像慢开始阶段那样加倍增长。

  • 快重传算法思路:发送方只要一连收到3个重复确认,就知道接收方确实没有收到下一个报文段,因而需要立即进行重传,这样就不会出现超时,发送方也不会认为出现了网络拥塞。

  • 快恢复算法思路:配合快重传使用,不执行慢开始算法。将ssthresh调整为当前cwnd的一半,随后 将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。

11、流量控制

(1)什么是流量控制?怎样实现流量控制?

  • 防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理;

  • 使用滑动窗口协议

    • 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。

11、流量控制与拥塞控制的区别?

  • 拥塞控制的任务是确保子网能够承载所到达的流量,这是一个全局性问题。

  • 流量控制只与特定的发送方和特定的接收方之间的点到点流量有关。它的任务是确保一个快速的发送方不会持续地以超过接收方吸收能力的速率传输数据

数据库

1、并发事务带来的问题?

  • 脏读:当事务(T1)在访问数据并且对数据进行修改,而这种修改还未提交到数据库,此时又来一个事务(T2)对此数据进行访问并使用,这样读到的数据为“脏数据”,依据脏数据所做的操作可能是不正确的。

  • 丢失修改:一个事务(T1)对数据进行访问并修改,此时另一个事务(T2)也访问并修改,因此事务(T1)对数据的修改将会被事务(T2)覆盖,导致事务(T1)修改的数据丢失,这样就是“丢失修改”。

  • 不可重复读:一个事务(T1)对同一数据进行多次访问,事务(T1)还未结束,另一个事务(T2)也访问该数据。那么在事务(T1)的两次读数据之间,由于事务(T2)的修改会导致事务(T1)两次读到的数据会不一样,这样的情况称之为“不可重复读”。

  • 幻读:与不可重复读一样,当事务(T1)读取数据几行时,接着并发出事务(T2)插入一些数据,在之后事务(T1)进行查询时就会发现多了一些原本不该有的记录,就好像产生了“幻觉”,所以称之为“幻读”。

  • 幻读和不可重复读的区别:不可重复读的重点是修改⽐如多次读取⼀条记录发现其中某些列的值被修改,幻读的重点在于新增或者删除比如多次读取⼀条记录发现记录增多或减少了。

2、数据库事务有了解吗?事务的隔离级别?你在项目中使用的隔离级别是什么?

事务是逻辑上的一组操作,要么都执行,要么都不执行

事务最经典的也经常被拿出来说的就是转账了。加入小明转账小红,这个转账会设计两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加, 这样就不对了。事务就是保证这两个关键操作要么都成功,要么都失败。

事务的四大特征:

原子性:事务是最小的执行单位,不允许分割

隔离性:并发访问数据库是,一个用户的事务都不被其他事务所干扰,各并发事务之间数据库是独立的

一致性:执行事务前后,数据保持一致,多个事务对同一个事务的读取结构都是相同的

持久性:一个事务被提交后,他对数据库中的数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响

SQL标准定义了四个隔离标准:

  • READ—UNCOMMITTED(读取未提交):最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复度。

  • READ—COMMITTED(读取已提交):允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。

  • REPEATABLE-READ(可重复读):对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。

  • SERIALIAZABLE(可串行化):最高的隔离级别,完全服从ACID的隔离界别。所有事务一次诸葛执行,这样事务之间就完全不可能产生干扰,也就是说,该界别可以防止脏读、不可重复读以及幻读。

MySQL InnoDB存储引擎的默认支持的隔离级别是可重复。

InnoDB存储引擎在分布式事务的情况下一般都会用到SERIALIZABLE(可串行化)隔离级别。

3、数据库的主属性、码、主码的区别是什么?

  • 候选码:在数据库表中能够用于区分的每个记录(元组)的属性或属性集合;

  • 主码:指定一个用来区分开每个记录(元组)的码;

  • 主属性:指的是含在候选码中的属性。

4、数据库索引的作用?优点缺点是什么?

作用:创建索引能够大大的提高系统的性能

优点:

  • 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性

  • 大大加快数据的检索速度,这也是创建索引的最主要原因

  • 加快表与表之间的连接,在实现数据的参考完整性方面特别有意义

  • 在使用分组和排序,子句进行数据检索时,同样可以显著减少查询中分组和排序的时间

  • 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。

缺点:

  • 创建索引和维护索引需要时间,这种时间随着数据量的增加而增加

  • 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占物理空间,如果要建立聚簇索引,需要的空间更大

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

MySQL索引使用的数据数据结构主要有BTree索引和哈希索引。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希诱因,查询性能最快。其余大部分场景,建议选择BTree索引

MySQL的BTree索引使用的是B树中的B+Tree,但对于主要的两种存储引擎的实现方式是不同的。

  • MyISAM:B+树叶结点的data存放的是数据记录的地址。在索引检索的时候,首先按照B+Tree搜索算法搜索索引,如果指定的key存在,则取出其data域的值,然后以data域的值为地址读取相应的数据记录。这被称为“非聚簇索引”,简单来说就是索引和数据不存在一起。

  • InnoDB:相对于以MyISAM来说,B+Tree的叶结点data数据域保存了完整的数据记录,这个索引的key就是数据表的主键。所以称为“聚簇索引”

5、数据库范式了解吗?在你的项目中怎么运用的?会出现什么问题?

第一范式

第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

举例说明:

项目中用到第三范式就可以了

第一范式:每一列数据都具有原子性,就是列的属性不能再分

第二范式:在第一范式的基础上,非主属性必须完全依赖主属性

第三范式,在第二范式基础上,任何非主属性都不依赖其他非主属性(在第二范式上消除了传递依赖)

6、MySQL 执行一条查询语句的内部执行过程?

  • 客户端先通过连接器连接到 MySQL 服务器;

  • 连接器权限验证通过之后,先查询是否有查询缓存,如果有缓存(之前执行过此语句)则直接返回缓存数据,如果没有缓存则进入分析器;

  • 分析器会对查询语句进行语法分析和词法分析,判断 SQL 语法是否正确,如果查询语法错误会直接返回给客户端错误信息,如果语法正确则进入优化器;

  • 优化器是对查询语句进行优化处理,例如一个表里面有多个索引,优化器会判别哪个索引性能更好;

  • 优化器执行完就进入执行器,执行器则开始执行语句进行查询比对了,直到查询到满足条件的所有数据,然后进行返回。

7、项用中使用到外键了吗?外键作用?使用外键要注意些什么问题?

外键的作用:外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。

优点:能够由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器宕机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。

缺点:性能差,当每次插入数据时,当存在外键约束的时候,每次都要扫描此记录是否合格,一般还不止一个字段有外键,这样扫描数量是成级数的增长。

注意点:

  • 父表和子表都必须使用相同的存储引擎,而且禁止使用临时表

  • 数据库存储引擎只能为InnoDB(MySQL)

  • 外键列与参照列的数据类型必须相同

8、Redis数据库和MySQL数据库的区别

Redis数据库和MySQL数据库的区别就是,Redis在拓展性方面有更好的表现,而MySQL是批量更新方面更有优势。选择使用什么样的数据库,取决于具体的业务。另外值得一提的是,由于Redis是远程内存型数据库,虽然也有持久化的作用,但是更多的时候,只是把它看成一个内存存储,在数据安全性和稳定性方面,是不如MySQL的。

9、MySQL、SqlServer、Oracle三种数据库区别在哪里?

一、sqlserver 优点:

易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等; 为数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势。从数据管理和分析角度看,将原始数据转化为商业智能和充分利用Web带来的机会非常重要。作为一个完备的数据库和数据分析包,SQLServer为快速开发新一代企业级商业应用程序、为企业赢得核心竞争优势打开了胜利之门。作为重要的基准测试可伸缩性和速度奖的记录保持者,SQLServer是一个具备完全Web支持的数据库产品,提供了对可扩展标记语言 (XML)的核心支持以及在Internet上和防火墙外进行查询的能力;

缺点:

开放性 :SQL Server 只能windows上运行没有丝毫开放性操作系统系统稳定对数据库十分重要Windows9X系列产品偏重于桌面应用NT server只适合小型企业而且windows平台靠性安全性和伸缩性非常有限象unix样久经考验尤其处理大数据库; 伸缩性并行性 :SQL server 并行实施和共存模型并成熟难处理日益增多用户数和数据卷伸缩性有限; 安全性:没有获得任何安全证书。 性能 :SQL Server 多用户时性能佳 ; 客户端支持及应用模式: 客户端支持及应用模式。只支持C/S模式,SQL Server C/S结构只支持windows客户用ADO、DAO、OLEDB、ODBC连接; 使用风险:SQL server 完全重写代码经历了长期测试断延迟许多功能需要时间来证明并十分兼容;

二、Oracle 优点:

开放性:Oracle 能所有主流平台上运行(包括 windows)完全支持所有工业标准采用完全开放策略使客户选择适合解决方案对开发商全力支持; 可伸缩性,并行性:Oracle 并行服务器通过使组结点共享同簇工作来扩展windownt能力提供高用性和高伸缩性簇解决方案windowsNT能满足需要用户把数据库移UNIXOracle并行服务器对各种UNIX平台集群机制都有着相当高集成度; 安全性:获得最高认证级别的ISO标准认证。 性能:Oracle 性能高 保持开放平台下TPC-D和TPC-C世界记录; 客户端支持及应用模式:Oracle 多层次网络计算支持多种工业标准用ODBC、JDBC、OCI等网络客户连接 使用风险:Oracle 长时间开发经验完全向下兼容得广泛应用地风险低

缺点:

对硬件的要求很高; 价格比较昂贵; 管理维护麻烦一些; 操作比较复杂,需要技术含量较高;

三、MySql 优点:

体积小、速度快、总体拥有成本低,开源; 支持多种操作系统; 是开源数据库,提供的接口支持多种语言连接操作 MySql的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。用多线程和C语言实现的MySql能很容易充分利用CPU; MySql有一个非常灵活而且安全的权限和口令系统。当客户与MySql服务器连接时,他们之间所有的口令传送被加密,而且MySql支持主机认证; 支持ODBC for Windows, 支持所有的ODBC 2.5函数和其他许多函数, 可以用Access连接MySql服务器, 使得应用被扩展; 支持大型的数据库, 可以方便地支持上千万条记录的数据库。作为一个开放源代码的数据库,可以针对不同的应用进行相应的修改。 拥有一个非常快速而且稳定的基于线程的内存分配系统,可以持续使用面不必担心其稳定性; MySQL同时提供高度多样性,能够提供很多不同的使用者介面,包括命令行客户端操作,网页浏览器,以及各式各样的程序语言介面,例如C+,Perl,Java,PHP,以及Python。你可以使用事先包装好的客户端,或者干脆自己写一个合适的应用程序。MySQL可用于Unix,Windows,以及OS/2等平台,因此它可以用在个人电脑或者是服务器上;

缺点:

不支持热备份; MySQL最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用mysqladmin来重读用户权限时才发生改变; 没有一种存储过程(Stored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制; MySQL的价格随平台和安装方式变化。Linux的MySQL如果由用户自己或系统管理员而不是第三方安装则是免费的,第三方案则必须付许可费。Unix或Linux 自行安装 免费 、Unix或Linux 第三方安装 收费;

10、SQL优化有什么思路?

  • 创建索引

    • 要尽量避免全表扫描,首先应考虑where及order by 涉及的列上建立索引。

    • 在经常需要进行检索的字段上创建索引。

    • 在一个表的索引数最好不要超过六个。

  • 避免在索引上使用计算

    • 在where字句中,如果索引列是计算或者函数的一部分,DBMS的优化器将不会使用索引而使用全表查询,函数 属于计算的一种,同事在in和exists中通常情况下使用exists,因为in不走索引。

  • 尽量将多条sql语句压缩到一句sql中

    • 每次执行sql的时候都要建立网络连接、进行权限校验、进行sql语句的查询优化、发送执行结果、这个过程是非常耗时的,因此应该避免过多的执行sql语句,能够压缩一句sql执行的语句就不要多条来执行。

  • 用where字句替换having字句

    • 避免使用having字句,因为having只会在检索出所有记录之后才对结果进行过滤,而where则是在聚合前刷选记录,如果能通过where字句限制记录的数目,那就能减少这方面的开始小。

  • 查询select语句优化

  • 任何地方都不要使用selct * form t,要具体的字段列表代替* ,不要返回用不到的字段。

  • 应尽量避免在where子句中进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描。

  • 更新update语句优化

  • 如果只更新一两个字段,就不要更新全部字段,否则会导致频繁调用引起明细的新能消耗,带来大量日志。

  • 插入inset 语句优化

  • 在新建临时表时,如果一次性插入数据量很大,那么可以使用selcet into 代替create table,避免造成大量log,日高数据。

  • 大表优化:当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下:

    • 限定数据的范围:务必禁止不待任何限制数据范围条件的搜索语句。比如:我们当前用户在查询订单历史的时候,我们可以控制在一个月的范围内;

    • 读写分离:经典的数据库拆分方案,主库负责写,从副库负责读

    • 垂直分区:根据数据库里面的数据表的相关性进行拆分。例如,用户表中既有用户的登录信息又有用户的基本信息,可以将用户表拆分成两个单独的表,甚至放到单独的库做分库。简单来说垂直拆分是指数据表列的拆分,把一张列比较多的表拆分称为多个表。

      • 优点:可以使得列数据变小,在查询时减少读取的Block数,减少I/O次数。此外,垂直分布可以简化表的结构,易于维护。

      • 缺点:主键会出现冗余,需要管理冗余列。垂直分区会让事务变得更复杂。

    • 水平分区:保持数据表结构不变,通过某种策略存储数据分片。这样每一片数据分散到不同的表或者库中,达到了分布式的目的。

      • 优点:支持非常大的数据量存储,应用端改造也小

      • 缺点:分片事务难以解决,跨结点的jion性能较差、逻辑复杂

11、锁机制与InnoDB锁算法

InnoDB存储引擎的锁的算法有三种:

  • Record lock:单个行记录上的锁

  • Gap lock:间隙锁,锁定一个范围,不包括记录本身

  • Next-key lock:record+gap 锁定一个范围,包含记录本身

相关知识点:

  1. innodb对于行的查询使用next-key lock

  2. Next-locking keying为了解决Phantom Problem幻读问题

  3. 当查询的索引含有唯一属性时,将next-key lock降级为record key

  4. Gap锁设计的⽬的是为了阻⽌多个事务将记录插⼊到同一范围内,⽽这会导致幻读问题的产生

  5. 有两种方式显式关闭gap锁:(除了外键约束和唯一性检查外,其余情况仅使用record lock) A. 将事务隔离级别设置为RC B. 将参数innodb_locks_unsafe_for_binlog设置为1

设计模式

单例模式

  • 确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。

  • 单例模式有三个特点:

    • 这个类是能是一个实例;

    • 必须自己创建这个实例;

    • 必须自己向整个系统提供这个实例。

  • 优点:

    • 单例模式提供了严格的对唯一实例的创建和访问

    • 单例模式的实现可以节省系统资源

  • 缺点:

    • 如果某个实例负责多重职责但又必须实例唯一,那单例类的职责过多,这违背了单一职责原则;

    • 多线程下需要考虑线程安全机制;

    • 单例模式没有抽象层,不方便扩展。

浅谈分布式系统

1、什么是分布式系统?

所谓分布式系统就是利用多台计算机协同解决单台计算机所不能解决的计算机、存储等问题。

2、单机系统与分布式系统最大的区别?

单机系统与分布式系统的最大的区别在于问题的规模,即计算、存储的数据量的区别。将一个单机问题使用分布式解决,首先要解决的就是如何将问题拆解为可以使用多机分布式解决,使得分布式系统中的每台机器负责原问题的一个子集。由于无论是计算还是存储,其问题输入对象都是数据,所以如何拆解分布式系统的输入数据成为分布式系统的基本问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很高兴回答你关于计算机网络原理的问题!以下是一些常见的面试问题和面试经验,希望能帮助到你: 1. OSI七层模型和TCP/IP四层模型的区别是什么? - OSI七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 - TCP/IP四层模型:网络接口层、网络层、传输层、应用层。 主要的区别在于OSI模型将会话层、表示层分开,而TCP/IP模型将其合并到应用层。 2. TCP和UDP的区别是什么? - TCP(传输控制协议):面向连接、可靠的传输协议,适用于需要可靠传输的场景,如文件传输。 - UDP(用户数据报协议):无连接、不可靠的传输协议,适用于实时性要求较高的场景,如音视频传输。 3. 网络中的IP地址和MAC地址有什么区别? - IP地址:用于标识网络中的设备,通过IP地址可以实现不同网络之间的通信。 - MAC地址:用于标识网络中的网卡,是物理地址,用于在本地局域网内进行通信。 4. 什么是DNS? - DNS(域名系统):将域名转换为IP地址的系统,用于通过域名访问互联网资源。 5. 什么是HTTP和HTTPS? - HTTP(超文本传输协议):用于在客户端和服务器之间传输超文本的协议。 - HTTPS(安全超文本传输协议):在HTTP基础上加入了SSL/TLS加密层,提供了安全的通信机制。 这些是一些常见的计算机网络原理面试问题,希望能对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值