0%

不同的继承方式会影响基类成员在派生类中的访问权限。

  1. public继承方式
  • 基类中所有 public 成员在派生类中为 public 属性;
  • 基类中所有 protected 成员在派生类中为 protected 属性;
  • 基类中所有 private 成员在派生类中不能使用。
  1. protected继承方式
  • 基类中的所有 public 成员在派生类中为 protected 属性;
  • 基类中的所有 protected 成员在派生类中为 protected 属性;
  • 基类中的所有 private 成员在派生类中不能使用。
  1. private继承方式
  • 基类中的所有 public 成员在派生类中均为 private 属性;
  • 基类中的所有 protected 成员在派生类中均为 private 属性;
  • 基类中的所有 private 成员在派生类中不能使用。

默认是私有继承

拥塞控制

  1. 慢开始

    在发生拥塞(触发超时重传)时执行慢开始算法,发生拥塞时慢开始门限ssthresh减为原来一半。

    慢开始时把拥塞窗口cwnd设为1,每收到一个ack时cwnd+1,所以每经过一轮RTT后cwnd会乘2。

  2. 拥塞避免

    当拥塞窗口cwnd大于慢开始门限sstresh之后,cwnd每经过一轮RTT后自增1.

  3. 快重传

    有时网络没有拥塞但是个别报文也会丢失,这时候如果触发慢开始就会导致网络利用率下降,所以有了快重传算法。

    快重传就是在发射端连续接收到三个相同的ack时立刻对丢失的报文进行重传而不管重传计时器是否超时,之后进行快恢复而不是慢开始。

  4. 快恢复

    快恢复就是把拥塞窗口cwnd和慢开始门限都设置为触发快重传时cwnd的一半,然后执行拥塞避免。

20211218115702

总结

拥塞窗口小于慢开始门限时,执行慢开始算法,拥塞窗口指数增长;拥塞窗口大于慢开始门限时,执行拥塞避免算法,拥塞窗口线性增长。

在没有发生拥塞时,拥塞窗口增大;在可能发生拥塞时,拥塞窗口减小。

判断网络是否发生拥塞的依据为是否触发超时重传。

1.DNS解析

输入网址后,浏览器会先在自己的缓存中查找网址对应的ip

如果没找到,会从计算机缓存中查找(在host中手动绑定的网址和ip会记录在计算机缓存中)

如果还没找到,会向路由器缓存中查找

如果还没有,就向DNS服务器查找

如果还找不到,会向根域名服务器查找,根域名服务器会根据网址递归地一层一层向下属域名服务器查找,最后将ip返回给客户端

客户端拿到ip后更新自己的缓存并与服务器建立连接

2.网络通信

TCP三次握手建立链接

20211215213744

四次挥手释放链接

20211215213754

为什么“握手”是三次,“挥手”却要四次?

TCP建立连接时之所以只需要”三次握手”,是因为在第二次”握手”过程中,服务器端发送给客户端的TCP报文是以SYN与ACK作为标志位的。SYN是请求连接标志,表示服务器端同意建立连接;ACK是确认报文,表示告诉客户端,服务器端收到了它的请求报文。

即SYN建立连接报文与ACK确认接收报文是在同一次”握手”当中传输的,所以”三次握手”不多也不少,正好让双方明确彼此信息互通。

TCP释放连接时之所以需要“四次挥手”,是因为FIN释放连接报文与ACK确认接收报文是分别由第二次和第三次”握手”传输的。为何建立连接时一起传输,释放连接时却要分开传输?

建立连接时,被动方服务器端结束CLOSED阶段进入“握手”阶段并不需要任何准备,可以直接返回SYN和ACK报文,开始建立连接。释放连接时,被动方服务器,突然收到主动方客户端释放连接的请求时并不能立即释放连接,因为还有必要的数据需要处理,所以服务器先返回ACK确认收到报文,经过CLOSE-WAIT阶段准备好释放连接之后,才能返回FIN释放连接报文。

3.页面渲染

数据编号:20211213_205317

第4个特征值对应的呼吸好像比较靠谱

每次呼吸的峰值都是负数,应该是因为原始数据的dcir采用的是后一帧减前一帧,而呼吸时前半段是胸膛隆起,对应测得的反射径的距离是逐渐减小,所以是负数。

20211213210148

用原始cir进行pca

20211213212723

对cir进行低通滤波

20211213212756

用差分的dcir进行pca

第四个特征值对应的结果出奇的好

20211213213401

对dcir进行低通滤波

效果变差了

20211213213732

数据编号:20211213_214603

20211213215710

索引是对数据库表中一列或多列的值进行处理后的一种结构,使用索引可快速访问数据库表中的特定信息。

Hash索引

说到Hash,老铁们很容易联想到HashMap,没错,Hash索引的结构和HashMap相类似,键值 key 通过 Hash 映射找到桶 bucket。在这里桶(bucket)指的是一个能存储一条或多条记录的存储单位。一个桶的结构包含了一个内存指针数组,桶中的每行数据都会指向下一行,形成链表结构,当遇到 Hash 冲突时,会在桶中进行键值的查找。

InnoDB中采用除法散列函数(取余法),冲突机制采用链接法。

Hash索引和B+tree索引查询效率

采用 Hash 进行检索效率非常高,基本上一次检索就可以找到数据,而 B+ 树需要自顶向下依次查找,多次访问节点才能找到数据,中间需要多次 I/O 操作,理论上来说 Hash 比 B+ tree更快。下图是引用网上的Hash索引图片和 B+tree 索引图片,便于直观的理解2种索引结构。

Hash索引

20211204161752

B+树索引

20211204161803

Hash索引和B+tree索引的区别

  1. 在查询速度上,如果是等值查询,那么Hash索引明显有绝对优势,因为只需要经过一次 Hash 算法即可找到相应的键值,复杂度为O(1);当然了,这个前提是键值都是唯一的。如果键值不是唯一(或存在Hash冲突),就需要先找到该键所在位置,然后再根据链表往后扫描,直到找到相应的数据,这时候复杂度会变成O(n),降低了Hash索引的查找效率。所以,Hash 索引通常不会用到重复值多的列上,比如列为性别、年龄的情况等(当然B+tree索引也不适合这种离散型低的字段上);

  2. Hash 索引是无序的,如果是范围查询检索,这时候 Hash 索引就无法起到作用,即使原先是有序的键值,经过 Hash 算法后,也会变成不连续的了。因此:

    1. Hash 索引只支持等值比较查询、无法索成范围查询检索,B+tree索引的叶子节点形成有序链表,便于范围查询。

    2. Hash 索引无法做 like ‘xxx%’ 这样的部分模糊查询,因为需要对 完整 key 做 Hash 计算,定位bucket。而 B+tree 索引具有最左前缀匹配,可以进行部分模糊查询。

    3. Hash索引中存放的是经过Hash计算之后的Hash值,而且Hash值的大小关系并不一定和Hash运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算。B+tree 索引的叶子节点形成有序链表,可用于排序。

  3. Hash 索引不支持多列联合索引,对于联合索引来说,Hash 索引在计算 Hash 值的时候是将索引键合并后再一起计算 Hash 值,不会针对每个索引单独计算 Hash 值。因此如果用到联合索引的一个或者几个索引时,联合索引无法被利用;

  4. 因为存在哈希碰撞问题,在有大量重复键值情况下,哈希索引的效率极低。B+tree 所有查询都要找到叶子节点,性能稳定;

场景区分

  1. 大多数场景下,都会有组合查询,范围查询、排序、分组、模糊查询等查询特征,Hash 索引无法满足要求,建议数据库使用B+树索引。

  2. 在离散型高,数据基数大,且等值查询时候,Hash索引有优势。