金卫-Apache APISIX 借助 Service Mesh 实现统一技术栈的全流量管理
Apache APISIX借助ServiceMesh 实现统一技术栈的全流量管理 金卫(API7 解决方案架构师) • 支流科技 - 解决方案架构师 • Apache APISIX PMC • Apache APISIX Ingress Controller Founder • Apache skywalking committer • Github: https://github.com/gxthrj0 码力 | 34 页 | 3.50 MB | 5 月前3Hello 算法 1.0.0b4 Golang版
hello‑algo.com 67 � 缓存局部性 在计算机中,数据读写速度排序是“硬盘 < 内存 < CPU 缓存”。当我们访问数组元素时,计算 机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓存来提升后续操作的执行速 度。链表则不然,计算机只能挨个地缓存各个节点,这样的多次“搬运”降低了整体效率。 4.4.1. Q & A � 数组存储在栈上和存储在堆上,对时间效率和空间效率是否有影响? Figure 6‑6. 线性探测 然而,线性探测存在以下缺陷: ‧ 不能直接删除元素。删除元素会在数组内产生一个空位,当查找该空位之后的元素时,该空位可能导致 程序误判元素不存在。为此,通常需要借助一个标志位来标记已删除元素。 ‧ 容易产生聚集。数组内连续被占用位置越长,这些连续位置发生哈希冲突的可能性越大,进一步促使这 一位置的聚堆生长,形成恶性循环,最终导致增删查改操作效率劣化。 以 1 ? − 1 7.2. 二叉树遍历 从物理结构的角度来看,树是一种基于链表的数据结构,因此其遍历方式是通过指针逐个访问节点。然而, 树是一种非线性数据结构,这使得遍历树比遍历链表更加复杂,需要借助搜索算法来实现。 二叉树常见的遍历方式包括层序遍历、前序遍历、中序遍历和后序遍历等。 7.2.1. 层序遍历 「层序遍历 Level‑Order Traversal」从顶部到底部逐层遍历二叉树,并在每一层按照从左到右的顺序访问节0 码力 | 347 页 | 27.40 MB | 1 年前3Hello 算法 1.0.0b4 Java版
(1) 删除元素 ?(?) ?(1) � 缓存局部性 在计算机中,数据读写速度排序是“硬盘 < 内存 < CPU 缓存”。当我们访问数组元素时,计算 机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓存来提升后续操作的执行速 度。链表则不然,计算机只能挨个地缓存各个节点,这样的多次“搬运”降低了整体效率。 4.4.1. Q & A � 数组存储在栈上和存储在堆上,对时间效率和空间效率是否有影响? Figure 6‑6. 线性探测 然而,线性探测存在以下缺陷: ‧ 不能直接删除元素。删除元素会在数组内产生一个空位,当查找该空位之后的元素时,该空位可能导致 程序误判元素不存在。为此,通常需要借助一个标志位来标记已删除元素。 ‧ 容易产生聚集。数组内连续被占用位置越长,这些连续位置发生哈希冲突的可能性越大,进一步促使这 一位置的聚堆生长,形成恶性循环,最终导致增删查改操作效率劣化。 以 1 ? − 1 7.2. 二叉树遍历 从物理结构的角度来看,树是一种基于链表的数据结构,因此其遍历方式是通过指针逐个访问节点。然而, 树是一种非线性数据结构,这使得遍历树比遍历链表更加复杂,需要借助搜索算法来实现。 二叉树常见的遍历方式包括层序遍历、前序遍历、中序遍历和后序遍历等。 7.2.1. 层序遍历 「层序遍历 Level‑Order Traversal」从顶部到底部逐层遍历二叉树,并在每一层按照从左到右的顺序访问节0 码力 | 342 页 | 27.39 MB | 1 年前3Hello 算法 1.0.0b4 Python版
删除元素 ?(?) ?(1) � 缓存局部性 在计算机中,数据读写速度排序是“硬盘 < 内存 < CPU 缓存”。当我们访问数组元素时,计算 机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓存来提升后续操作的执行速 度。链表则不然,计算机只能挨个地缓存各个节点,这样的多次“搬运”降低了整体效率。 4.4.1. Q & A � 数组存储在栈上和存储在堆上,对时间效率和空间效率是否有影响? Figure 6‑6. 线性探测 然而,线性探测存在以下缺陷: ‧ 不能直接删除元素。删除元素会在数组内产生一个空位,当查找该空位之后的元素时,该空位可能导致 程序误判元素不存在。为此,通常需要借助一个标志位来标记已删除元素。 ‧ 容易产生聚集。数组内连续被占用位置越长,这些连续位置发生哈希冲突的可能性越大,进一步促使这 一位置的聚堆生长,形成恶性循环,最终导致增删查改操作效率劣化。 以 1 ? − 1 7.2. 二叉树遍历 从物理结构的角度来看,树是一种基于链表的数据结构,因此其遍历方式是通过指针逐个访问节点。然而, 树是一种非线性数据结构,这使得遍历树比遍历链表更加复杂,需要借助搜索算法来实现。 二叉树常见的遍历方式包括层序遍历、前序遍历、中序遍历和后序遍历等。 7.2.1. 层序遍历 「层序遍历 Level‑Order Traversal」从顶部到底部逐层遍历二叉树,并在每一层按照从左到右的顺序访问节0 码力 | 329 页 | 27.34 MB | 1 年前3Hello 算法 1.0.0b4 C#版
(1) 删除元素 ?(?) ?(1) � 缓存局部性 在计算机中,数据读写速度排序是“硬盘 < 内存 < CPU 缓存”。当我们访问数组元素时,计算 机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓存来提升后续操作的执行速 度。链表则不然,计算机只能挨个地缓存各个节点,这样的多次“搬运”降低了整体效率。 4.4.1. Q & A � 数组存储在栈上和存储在堆上,对时间效率和空间效率是否有影响? Figure 6‑6. 线性探测 然而,线性探测存在以下缺陷: ‧ 不能直接删除元素。删除元素会在数组内产生一个空位,当查找该空位之后的元素时,该空位可能导致 程序误判元素不存在。为此,通常需要借助一个标志位来标记已删除元素。 ‧ 容易产生聚集。数组内连续被占用位置越长,这些连续位置发生哈希冲突的可能性越大,进一步促使这 一位置的聚堆生长,形成恶性循环,最终导致增删查改操作效率劣化。 以 1 ? − 1 7.2. 二叉树遍历 从物理结构的角度来看,树是一种基于链表的数据结构,因此其遍历方式是通过指针逐个访问节点。然而, 树是一种非线性数据结构,这使得遍历树比遍历链表更加复杂,需要借助搜索算法来实现。 二叉树常见的遍历方式包括层序遍历、前序遍历、中序遍历和后序遍历等。 7.2.1. 层序遍历 「层序遍历 Level‑Order Traversal」从顶部到底部逐层遍历二叉树,并在每一层按照从左到右的顺序访问节0 码力 | 341 页 | 27.39 MB | 1 年前3Hello 算法 1.0.0b4 C++版
删除元素 ?(?) ?(1) � 缓存局部性 在计算机中,数据读写速度排序是“硬盘 < 内存 < CPU 缓存”。当我们访问数组元素时,计算 机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓存来提升后续操作的执行速 度。链表则不然,计算机只能挨个地缓存各个节点,这样的多次“搬运”降低了整体效率。 4.4.1. Q & A � 数组存储在栈上和存储在堆上,对时间效率和空间效率是否有影响? Figure 6‑6. 线性探测 然而,线性探测存在以下缺陷: ‧ 不能直接删除元素。删除元素会在数组内产生一个空位,当查找该空位之后的元素时,该空位可能导致 程序误判元素不存在。为此,通常需要借助一个标志位来标记已删除元素。 ‧ 容易产生聚集。数组内连续被占用位置越长,这些连续位置发生哈希冲突的可能性越大,进一步促使这 一位置的聚堆生长,形成恶性循环,最终导致增删查改操作效率劣化。 以 1 ? − 1 7.2. 二叉树遍历 从物理结构的角度来看,树是一种基于链表的数据结构,因此其遍历方式是通过指针逐个访问节点。然而, 树是一种非线性数据结构,这使得遍历树比遍历链表更加复杂,需要借助搜索算法来实现。 二叉树常见的遍历方式包括层序遍历、前序遍历、中序遍历和后序遍历等。 7.2.1. 层序遍历 「层序遍历 Level‑Order Traversal」从顶部到底部逐层遍历二叉树,并在每一层按照从左到右的顺序访问节0 码力 | 343 页 | 27.39 MB | 1 年前3Hello 算法 1.0.0b2 Golang版
难度。 2.2.2. 统计时间增长趋势 「时间复杂度分析」采取了不同的做法,其统计的不是算法运行时间,而是 算法运行时间随着数据量变大时的 增长趋势。 “时间增长趋势”这个概念比较抽象,我们借助一个例子来理解。设输入数据大小为 ? ,给定三个算法 A , B , C 。 ‧ 算法 A 只有 1 个打印操作,算法运行时间不随着 ? 增大而增长。我们称此算法的时间复杂度为「常数阶」。 ‧ } } return nil } 该方法的时间复杂度为 ?(? 2) ,空间复杂度为 ?(1) ,属于时间换空间。本方法时间复杂度较高,在大数据 量下非常耗时。 方法二:辅助哈希表 考虑借助一个哈希表,key 为数组元素、value 为元素索引。循环遍历数组中的每个元素 num ,并执行: 1. 判断数字 target - num 是否在哈希表中,若是则直接返回该两个元素的索引; 2 随机访问 插入、删除 � 缓存局部性的简单解释 在计算机中,数据读写速度排序是“硬盘 < 内存 < CPU 缓存”。当我们访问数组元素时,计算 机不仅会加载它,还会缓存其周围的其它数据,从而借助高速缓存来提升后续操作的执行速度。 链表则不然,计算机只能挨个地缓存各个结点,这样的多次“搬运”降低了整体效率。 ‧ 下表对比了数组与链表的各种操作效率。 操作 数组 链表 访问元素 ?(1)0 码力 | 202 页 | 15.73 MB | 1 年前3Hello 算法 1.0.0 C语言版
代形式: // === File: recursion.c === /* 使用迭代模拟递归 */ int forLoopRecur(int n) { int stack[1000]; // 借助一个大数组来模拟栈 int top = -1; // 栈顶索引 int res = 0; // 递:递归调用 for (int i = n; i > 0; i--) { // 通过“入栈操作”模拟“递” 空间效率高:数组为数据分配了连续的内存块,无须额外的结构开销。 ‧ 支持随机访问:数组允许在 ?(1) 时间内访问任何元素。 ‧ 缓存局部性:当访问数组元素时,计算机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓 存来提升后续操作的执行速度。 连续空间存储是一把双刃剑,其存在以下局限性。 ‧ 插入与删除效率低:当数组中元素较多时,插入与删除操作需要移动大量的元素。 ‧ 长度不可变:数组在初始化 1 ? − 1 7.2 二叉树遍历 从物理结构的角度来看,树是一种基于链表的数据结构,因此其遍历方式是通过指针逐个访问节点。然而, 树是一种非线性数据结构,这使得遍历树比遍历链表更加复杂,需要借助搜索算法来实现。 二叉树常见的遍历方式包括层序遍历、前序遍历、中序遍历和后序遍历等。 7.2.1 层序遍历 如图 7‑9 所示,「层序遍历 level‑order traversal」从顶部到0 码力 | 390 页 | 17.63 MB | 1 年前3Hello 算法 1.0.0b5 Golang版
数组为数据分配了连续的内存块,无须额外的结构开销。 ‧ 支持随机访问: 数组允许在 ?(1) 时间内访问任何元素。 ‧ 缓存局部性: 当访问数组元素时,计算机不仅会加载它,还会缓存其周围的其他数据,从而借助高速缓 存来提升后续操作的执行速度。 连续空间存储是一把双刃剑,其存在以下缺点。 ‧ 插入与删除效率低: 当数组中元素较多时,插入与删除操作需要移动大量的元素。 ‧ 长度不可变: 数组在初始 图 6‑6 开放寻址和线性探测 然而,线性探测存在以下缺陷。 ‧ 不能直接删除元素。删除元素会在数组内产生一个空位,当查找该空位之后的元素时,该空位可能导致 程序误判元素不存在。为此,通常需要借助一个标志位来标记已删除元素。 ‧ 容易产生聚集。数组内连续被占用位置越长,这些连续位置发生哈希冲突的可能性越大,进一步促使这 一位置的聚堆生长,形成恶性循环,最终导致增删查改操作效率劣化。 以 1 ? − 1 7.2 二叉树遍历 从物理结构的角度来看,树是一种基于链表的数据结构,因此其遍历方式是通过指针逐个访问节点。然而, 树是一种非线性数据结构,这使得遍历树比遍历链表更加复杂,需要借助搜索算法来实现。 二叉树常见的遍历方式包括层序遍历、前序遍历、中序遍历和后序遍历等。 7.2.1 层序遍历 如图 7‑9 所示,「层序遍历 level‑order traversal」从顶部到0 码力 | 379 页 | 30.70 MB | 1 年前3Hello 算法 1.0.0b2 Java版
难度。 2.2.2. 统计时间增长趋势 「时间复杂度分析」采取了不同的做法,其统计的不是算法运行时间,而是 算法运行时间随着数据量变大时的 增长趋势。 “时间增长趋势”这个概念比较抽象,我们借助一个例子来理解。设输入数据大小为 ? ,给定三个算法 A , B , C 。 ‧ 算法 A 只有 1 个打印操作,算法运行时间不随着 ? 增大而增长。我们称此算法的时间复杂度为「常数阶」。 ‧ return new int[0]; } 该方法的时间复杂度为 ?(? 2) ,空间复杂度为 ?(1) ,属于时间换空间。本方法时间复杂度较高,在大数据 量下非常耗时。 方法二:辅助哈希表 考虑借助一个哈希表,key 为数组元素、value 为元素索引。循环遍历数组中的每个元素 num ,并执行: 1. 判断数字 target - num 是否在哈希表中,若是则直接返回该两个元素的索引; 2 随机访问 插入、删除 � 缓存局部性的简单解释 在计算机中,数据读写速度排序是“硬盘 < 内存 < CPU 缓存”。当我们访问数组元素时,计算 机不仅会加载它,还会缓存其周围的其它数据,从而借助高速缓存来提升后续操作的执行速度。 链表则不然,计算机只能挨个地缓存各个结点,这样的多次“搬运”降低了整体效率。 ‧ 下表对比了数组与链表的各种操作效率。 操作 数组 链表 访问元素 ?(1)0 码力 | 197 页 | 15.72 MB | 1 年前3
共 409 条
- 1
- 2
- 3
- 4
- 5
- 6
- 41