西维蜀黍

【Network】Charles 为什么可以获取 HTTPS 包内容

背景

之前,我们在【Security】HTTPS【Security】安全的 HTTP 的演化中介绍了HTTPS的工作原理,HTTPS的一个重要的作用,就是防止中间人攻击(Man-in-the-Middle Attack,MITM)。

然而,不知道你有没有考虑过,作为一个常用的macOS下抓包工具 - Charles,它是如何获取到HTTPS包中明文内容的。

  ...


【Data Structure】哈希表(Hash table)

哈希表(Hash table)

哈希表Hash table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数(Hash function),存放元素的数组称做散列表(Hash table)

  ...


【Data Structure】常用数据结构的时间复杂度

常用数据结构的时间复杂度

Data Structure Add Find Delete GetByIndex
Array (T[]) O(n) O(n) O(n) O(1)
Linked list (LinkedList) O(1) O(n) O(n) O(n)
Resizable array list (List) O(1) O(n) O(n) O(1)
Stack (Stack) O(1) - O(1) -
Queue (Queue) O(1) - O(1) -
Hash table (Dictionary) O(1) O(1) O(1) -
Tree-based dictionary (SortedDictionary<K,T>) O(log n) O(log n) O(log n) -
Hash table based set (HashSet) O(1) O(1) O(1) -
Tree based set (SortedSet) O(log n) O(log n) O(log n) -
  ...


【Data Structure】哈夫曼树(Huffman Tree)

背景

在了解赫夫曼树之前,我们首先先介绍一些基础概念。

路径

路径是指在一棵树中,从一个节点到另一个节点之间的分支构成的通路。

  ...


【Data Structure】平衡二叉查找树(Balanced Binary Search Tree) - 红黑树(Red-Black Tree)

红黑树(Red-Black Tree)

在 1972 年,慕尼黑理工大学(Technical University of Munich)的计算机科学家 Rudolf Bayer 创造了**红黑树(Red-Black Tree)**数据结构。

除了包含数据和左右孩子节点之外,红黑树的节点还包含了一项特别的信息 – 颜色。这个颜色只包含两种颜色,即红色和黑色。

  ...


【Data Structure】平衡二叉查找树(Balanced Binary Search Tree) - AVL树

AVL 树

在 1962 年,俄罗斯数学家 G. M. Andel’son-Vel-skii 和 E. M. Landis 发明了第一种自平衡二叉查找树,叫做 AVL 树。AVL 树必须维持如下平衡条件,对每个节点 n:节点 n 的左子树的高度与右子树的高度的差至多是 1

  ...


【Data Structure】平衡二叉查找树(Balanced Binary Search Tree)

背景

实际上,二叉查找树操作的运行时间与树的高度(Height)是有关系的。一个树的高度指的是从树的根开始所能到达的最长的路径长度。树的高度可被递归性地定义为:

  • 如果节点没有子节点,则高度为 0;
  • 如果节点只有一个子节点,则高度为该子节点的高度加 1;
  • 如果节点有两个子节点,则高度为两个子节点中高度较高的加 1;
  ...


【Data Structure】二叉查找树(Binary Search Tree)

二叉查找树(Binary Search Tree,BST)

二叉查找树(Binary Search Tree),也称为二叉搜索树有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree),是指一棵空树或者一颗二叉树的任何节点均满足:

  • 若节点的左子树不空,则左子树上所有节点的值均小于这个节点的值;
  • 若节点的右子树不空,则右子树上所有节点的值均大于这个节点的值;
  • 节点的左、右子树也分别为二叉查找树;
  • 没有值相等的节点
  ...


【Data Structure】线索二叉树(Threaded Binary Tree)

线索二叉树(Threaded Binary Tree)

通过观察二叉链表,我们发现,不管二叉树的形态如何,空链域的个数总是多于非空链域的个数。准确的说,有n个结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。如下图所示。

  ...


【Data Structure】二叉树(Binary Tree)

二叉树(Binary Tree)

简单地理解,满足以下两个条件的树就是二叉树:

  • 本身是有序树;
  • 树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2;
  ...