滑动窗口

固定窗口的问题


我们假设这个固定窗口的大小为1,也就是每次只能发送一个数据,只有接收方对这个数据进行了确认后才能发送第二个数据。在图中我们可以看到,发送方每发送一个数据接收方就要给发送方一个ACK对这个数据进行确认。只有接收了这个确认数据以后发送方才能传输下个数据。
这样大大降低了网络吞吐量。

Read more »

B树

B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是另一种树。而事实上是,B-tree就是指的B树。
B树的定义如下:

  • 定义任意非叶子结点最多只有M个儿子,且M>2;
  • 根结点的儿子数为[2, M];
  • 除根结点以外的非叶子结点的儿子数为[M/2, M],向上取整;
  • 非叶子结点的关键字个数=儿子数-1;
  • 所有叶子结点位于同一层;
  • k个关键字把节点拆成k+1段,分别指向k+1个儿子,同时满足查找树的大小关系。
    Read more »

SSL/TLS

  1. 基本流程
  • 客户端想服务端索要并验证公钥。
  • 双方协商生成对话密钥。
  • 双方采用对话密钥进行加密通信。
    Read more »

HTTP1.0

每一个请求建立一个TCP连接,请求完成后立马断开连接。这将会导致2个问题:连接无法复用,head of line blocking
连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。head of line blocking会导致带宽无法被充分利用,以及后续健康请求被阻塞.

Read more »

用法

有时候模板名称很长,我们想用一个别名替代这串模板声明:
看似好像跟#define一样,就像下面这样:

1
#define Vec<T> template<typename T> std::vector<T,MyAlloc<T>>
Read more »

源从何来

很长时间以来我们都希望有这么一个功能:给定一个对象,通过某个函数或者关键字,获得它的类型。c++有typeid的实现,也就是返回一个对象的typeid字符串,但是这个字符串不能用来声明一个新变量。因此c++11就出现了decltype这个关键字。

Read more »

基本形式

lambda表达式的本质就是重载了()运算符的类,这种类通常被称为functor,即行为像函数的类。因此lambda表达式对象其实就是一个匿名的functor。
一个标准的lambda表达式包括:捕获列表、参数列表、mutable指示符、尾置返回类型(->返回类型)和函数体:

Read more »