Ela's Notes
So Be It


Hitokoto ·
知识点整理【四大件+数据库篇】

计科四大件的知识点汇总(含数据库)
面向面试和平时知识储备

操作系统

进程线程

进程和线程的关系

  • 一个进程由一个或多个线程组成,各线程共享进程的内存空间(代码,数据,堆)和一些进程级的资源(打开的文件和信号)。进程有自己独立的寄存器和栈。

进程和资源的关系

进程可以申请资源,由系统分配资源给进程。如果没有足够的空闲资源分配给进程,则进程会进入阻塞状态。

父子进程的关系

  • 子进程的代码段与父进程共享,其资源是父进程的一个副本,不共享内存地址空间,是两个独立的进程。
  • 父子进程共享文件表项,即一个进程修改了文件,另一个进程也知道此文件被修改了

计算机网络

TCP的三次握手

每一步的过程

  1. 客户端向服务器发送初始序列号seq=x,和请求标志同步SYN=1
  2. 服务端若同意连接,向客户端发送自己的序列号y和对方的确认号ack=x+1、请求标志SYN=1和确认标志ACK=1
  3. 客户端发送自己的序列号x+1、对方的确认号ack=y+1和确认标志ACK=1

为什么需要三次握手

  • 根本原因是信道不可信
  • 两次握手是最基本的
    • 第一次握手,客户端发送连接请求到服务器
    • 第二次握手,客户端需要知道服务器是可以连接上的,所以服务器收到第一次握手后向客户端应答
  • 第三次握手的目的是防止失效的连接请求报文突然又传到服务器,因而产生错误
  • 例如客户端发送的第一个连接请求由于某些原因在网络节点中滞留,直到连接释放后才到达服务器,这是一个早已失效的报文,但是服务端仍然认为这是客户端的第一次握手,于是回应了客户端,进行了第二次握手。

TCP的四次挥手

每一步的过程

  1. 客户端发送自己的序列号seq=u和释放标志FIN等于1,进入FIN-WAIT-1状态
  2. 服务器收到客户端的释放报文后,发出自己的序列号v和客户端的确认号u+1,和确认标志ACK=1,进入CLOSE-WAIT状态
  3. 客户端收到服务器的确认报文后,进入FIN-WAIT-2状态。此时服务器再发送释放标志FIN=1、确认标志ACK=1,确认序号ack=u+1,自己的序号seq=w,服务器进入LAST-ACK状态
  4. 客户端收到回复后,发送确认标志ACK=1,确认号ack=w+1,序号seq=u+1,客户端进入TIME-WAIT状态。服务器收到报文后立刻CLOSE,客户端等待两个最长报文段寿命后也CLOSE。

为什么最后挥手要等2个生命周期时间

客户端需要保证最后一次发送的ACK报文到服务器,如果服务器未收到,可以请求客户端重发,这样客户端还有时间重发,重启2MSL计时

数据库

事务四种特性(ACID)

  • 原子性
    • 作这些指令时,要么全部执行成功,要么全部不执行。
    • 只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态。
  • 一致性
    • 事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。
  • 隔离性
    • 当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
    • 对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
  • 持久性
    • 当事务正确完成后,它对于数据的改变是永久性的。

      事务的四个隔离级别

  • 由低到高:Read uncommitted(RU) 、Read committed(RC) 、Repeatable read (RR)、Serializable(S)

  • Read uncommitted(最低级别,任何情况都无法保证。)

    • 读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据。
  • Read committed(可避免脏读的发生。)

    • 读提交,顾名思义,就是一个事务要等另一个事务提交后才能读取数据。
  • Repeatable read(可避免脏读、不可重复读的发生。)

    • 重复读,就是在开始读取数据(事务开启)时,不再允许修改操作
  • Serializable(可避免脏读、不可重复读、幻读的发生。)
    • Serializable(序列化) 是最高的事务隔离级别。
    • 在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。
    • 但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

事务并发导致的问题

  1. 第一类丢失更新

    • 撤销一个事务时,把其他事务已提交的更新数据覆盖。
  2. 脏读

    • 在一个事务处理过程里读取了另一个未提交的事务中的数据。
  3. 幻读(虚读)

    • 一个事务执行两次查询,第二次结果集包含第一次中没有或某些行已经被删除的数据,造成两次结果不一致,是另一个事务在这两次查询中间插入或删除了数据造成的。
    • 幻读是事务非独立执行时发生的一种现象。
    • 例:事务T1将表中某数据项从1修改为2,事务T2插入了一条该数据项为1的数据,导致T1再读时发现还有一条没修改,即发生了幻读。
  4. 不可重复读

    • 一个事务两次读取同一行的数据,结果得到不同状态的结果,中间正好另一个事务更新了该数据,两次结果相异,不可被信任。
    • 不可重复读和脏读的区别:脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。
    • 幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。
  5. 第二类丢失更新
    • 是不可重复读的特殊情况。
    • 如果两个事物都读取同一行,然后两个都进行写操作,并提交,第一个事物所做的改变就会丢失。

评论

发送失败 可能是您的发言太频繁或联系方式有误

提交评论

Theme LightWhite Made by Archeb With
自豪地使用Typecho
© 2017 - 2020 elatis.cn 版权所有 ICP证: 冀ICP备18008017号-1
全站共 21.03 W 字
博客已经运行了