IMWebConf 2017 前端开发者大会webim接入层实现架构,柔 性服务特性,监控上报等方 面的实践进行分享 springswang(王 跃) 王跃,腾讯高级前端工程师,拥有10+年前端 开发经验。2013年加入腾讯,负责互娱自助营 销系统,道聚城等多个项目前端架构和开发, 最近一年比较关注小程序发展,曾就职于搜狐 和新浪。 本次主要分享下近1年对小程 序底层框架实现原理研究和 小程序实战经验,帮助开发 者更好的理解小程序的实现0 码力 | 8 页 | 698.99 KB | 1 年前3
Hello 算法 1.2.0 繁体中文 Dart 版叫自身來解決問題。它主要包含兩個階段。 1. 遞:程式不斷深入地呼叫自身,通常傳入更小或更簡化的參數,直到達到“終止條件”。 2. 迴:觸發“終止條件”後,程式從最深層的遞迴函式開始逐層返回,匯聚每一層的結果。 而從實現的角度看,遞迴程式碼主要包含三個要素。 1. 終止條件:用於決定什麼時候由“遞”轉“迴”。 2. 遞迴呼叫:對應“遞”,函式呼叫自身,通常輸入更小或更簡化的參數。 3. 124 圖 6‑6 開放定址(線性探查)雜湊表的鍵值對分佈 然而,線性探查容易產生“聚集現象”。具體來說,陣列中連續被佔用的位置越長,這些連續位置發生雜湊衝 突的可能性越大,從而進一步促使該位置的聚堆積生長,形成惡性迴圈,最終導致增刪查改操作效率劣化。 值得注意的是,我們不能在開放定址雜湊表中直接刪除元素。這是因為刪除元素會在陣列內產生一個空桶 None ,而當查詢元素時,線性探查到該空桶就 27, 30, 33, … } hash = {0, 3, 6, 0, 3, 6, 0, 3, 6, 0, 3, 6, … } 如果輸入 key 恰好滿足這種等差數列的資料分佈,那麼雜湊值就會出現聚堆積,從而加重雜湊衝突。現在, 假設將 modulus 替換為質數 13 ,由於 key 和 modulus 之間不存在公約數,因此輸出的雜湊值的均勻性會明 顯提升。 modulus = 13 key0 码力 | 378 页 | 18.77 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 JavaScript 版叫自身來解決問題。它主要包含兩個階段。 1. 遞:程式不斷深入地呼叫自身,通常傳入更小或更簡化的參數,直到達到“終止條件”。 2. 迴:觸發“終止條件”後,程式從最深層的遞迴函式開始逐層返回,匯聚每一層的結果。 而從實現的角度看,遞迴程式碼主要包含三個要素。 1. 終止條件:用於決定什麼時候由“遞”轉“迴”。 2. 遞迴呼叫:對應“遞”,函式呼叫自身,通常輸入更小或更簡化的參數。 3. 123 圖 6‑6 開放定址(線性探查)雜湊表的鍵值對分佈 然而,線性探查容易產生“聚集現象”。具體來說,陣列中連續被佔用的位置越長,這些連續位置發生雜湊衝 突的可能性越大,從而進一步促使該位置的聚堆積生長,形成惡性迴圈,最終導致增刪查改操作效率劣化。 值得注意的是,我們不能在開放定址雜湊表中直接刪除元素。這是因為刪除元素會在陣列內產生一個空桶 None ,而當查詢元素時,線性探查到該空桶就 27, 30, 33, … } hash = {0, 3, 6, 0, 3, 6, 0, 3, 6, 0, 3, 6, … } 如果輸入 key 恰好滿足這種等差數列的資料分佈,那麼雜湊值就會出現聚堆積,從而加重雜湊衝突。現在, 假設將 modulus 替換為質數 13 ,由於 key 和 modulus 之間不存在公約數,因此輸出的雜湊值的均勻性會明 顯提升。 第 6 章 雜湊表 www0 码力 | 379 页 | 18.78 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 TypeScript 版叫自身來解決問題。它主要包含兩個階段。 1. 遞:程式不斷深入地呼叫自身,通常傳入更小或更簡化的參數,直到達到“終止條件”。 2. 迴:觸發“終止條件”後,程式從最深層的遞迴函式開始逐層返回,匯聚每一層的結果。 而從實現的角度看,遞迴程式碼主要包含三個要素。 1. 終止條件:用於決定什麼時候由“遞”轉“迴”。 2. 遞迴呼叫:對應“遞”,函式呼叫自身,通常輸入更小或更簡化的參數。 3. 。 圖 6‑6 開放定址(線性探查)雜湊表的鍵值對分佈 然而,線性探查容易產生“聚集現象”。具體來說,陣列中連續被佔用的位置越長,這些連續位置發生雜湊衝 突的可能性越大,從而進一步促使該位置的聚堆積生長,形成惡性迴圈,最終導致增刪查改操作效率劣化。 值得注意的是,我們不能在開放定址雜湊表中直接刪除元素。這是因為刪除元素會在陣列內產生一個空桶 None ,而當查詢元素時,線性探查到該空桶就 27, 30, 33, … } hash = {0, 3, 6, 0, 3, 6, 0, 3, 6, 0, 3, 6, … } 如果輸入 key 恰好滿足這種等差數列的資料分佈,那麼雜湊值就會出現聚堆積,從而加重雜湊衝突。現在, 假設將 modulus 替換為質數 13 ,由於 key 和 modulus 之間不存在公約數,因此輸出的雜湊值的均勻性會明 顯提升。 第 6 章 雜湊表 www0 码力 | 384 页 | 18.80 MB | 10 月前3
Hello 算法 1.1.0 Dart版124 图 6‑6 开放寻址(线性探测)哈希表的键值对分布 然而,线性探测容易产生“聚集现象”。具体来说,数组中连续被占用的位置越长,这些连续位置发生哈希冲 突的可能性越大,从而进一步促使该位置的聚堆生长,形成恶性循环,最终导致增删查改操作效率劣化。 值得注意的是,我们不能在开放寻址哈希表中直接删除元素。这是因为删除元素会在数组内产生一个空桶 None ,而当查询元素时,线性探测到该空桶就会 27, 30, 33, … } hash = {0, 3, 6, 0, 3, 6, 0, 3, 6, 0, 3, 6, … } 如果输入 key 恰好满足这种等差数列的数据分布,那么哈希值就会出现聚堆,从而加重哈希冲突。现在,假 设将 modulus 替换为质数 13 ,由于 key 和 modulus 之间不存在公约数,因此输出的哈希值的均匀性会明显 提升。 modulus = 13 key 元素存储在同一个链表中。然而,链表过长会降低查 询效率,可以通过进一步将链表转换为红黑树来提高效率。 ‧ 开放寻址通过多次探测来处理哈希冲突。线性探测使用固定步长,缺点是不能删除元素,且容易产生聚 集。多次哈希使用多个哈希函数进行探测,相较线性探测更不易产生聚集,但多个哈希函数增加了计算 量。 ‧ 不同编程语言采取了不同的哈希表实现。例如,Java 的 HashMap 使用链式地址,而 Python0 码力 | 378 页 | 18.45 MB | 1 年前3
Hello 算法 1.1.0 JavaScript版123 图 6‑6 开放寻址(线性探测)哈希表的键值对分布 然而,线性探测容易产生“聚集现象”。具体来说,数组中连续被占用的位置越长,这些连续位置发生哈希冲 突的可能性越大,从而进一步促使该位置的聚堆生长,形成恶性循环,最终导致增删查改操作效率劣化。 值得注意的是,我们不能在开放寻址哈希表中直接删除元素。这是因为删除元素会在数组内产生一个空桶 None ,而当查询元素时,线性探测到该空桶就会 27, 30, 33, … } hash = {0, 3, 6, 0, 3, 6, 0, 3, 6, 0, 3, 6, … } 如果输入 key 恰好满足这种等差数列的数据分布,那么哈希值就会出现聚堆,从而加重哈希冲突。现在,假 设将 modulus 替换为质数 13 ,由于 key 和 modulus 之间不存在公约数,因此输出的哈希值的均匀性会明显 提升。 第 6 章 哈希表 hello‑algo 询效率,可以通过进一步将链表转换为红黑树来提高效率。 第 6 章 哈希表 hello‑algo.com 133 ‧ 开放寻址通过多次探测来处理哈希冲突。线性探测使用固定步长,缺点是不能删除元素,且容易产生聚 集。多次哈希使用多个哈希函数进行探测,相较线性探测更不易产生聚集,但多个哈希函数增加了计算 量。 ‧ 不同编程语言采取了不同的哈希表实现。例如,Java 的 HashMap 使用链式地址,而 Python0 码力 | 379 页 | 18.46 MB | 1 年前3
Hello 算法 1.1.0 TypeScript版。 图 6‑6 开放寻址(线性探测)哈希表的键值对分布 然而,线性探测容易产生“聚集现象”。具体来说,数组中连续被占用的位置越长,这些连续位置发生哈希冲 突的可能性越大,从而进一步促使该位置的聚堆生长,形成恶性循环,最终导致增删查改操作效率劣化。 值得注意的是,我们不能在开放寻址哈希表中直接删除元素。这是因为删除元素会在数组内产生一个空桶 None ,而当查询元素时,线性探测到该空桶就会 27, 30, 33, … } hash = {0, 3, 6, 0, 3, 6, 0, 3, 6, 0, 3, 6, … } 如果输入 key 恰好满足这种等差数列的数据分布,那么哈希值就会出现聚堆,从而加重哈希冲突。现在,假 设将 modulus 替换为质数 13 ,由于 key 和 modulus 之间不存在公约数,因此输出的哈希值的均匀性会明显 提升。 第 6 章 哈希表 hello‑algo 询效率,可以通过进一步将链表转换为红黑树来提高效率。 第 6 章 哈希表 hello‑algo.com 133 ‧ 开放寻址通过多次探测来处理哈希冲突。线性探测使用固定步长,缺点是不能删除元素,且容易产生聚 集。多次哈希使用多个哈希函数进行探测,相较线性探测更不易产生聚集,但多个哈希函数增加了计算 量。 ‧ 不同编程语言采取了不同的哈希表实现。例如,Java 的 HashMap 使用链式地址,而 Python0 码力 | 383 页 | 18.49 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Dart 版124 图 6‑6 开放寻址(线性探测)哈希表的键值对分布 然而,线性探测容易产生“聚集现象”。具体来说,数组中连续被占用的位置越长,这些连续位置发生哈希冲 突的可能性越大,从而进一步促使该位置的聚堆生长,形成恶性循环,最终导致增删查改操作效率劣化。 值得注意的是,我们不能在开放寻址哈希表中直接删除元素。这是因为删除元素会在数组内产生一个空桶 None ,而当查询元素时,线性探测到该空桶就会 27, 30, 33, … } hash = {0, 3, 6, 0, 3, 6, 0, 3, 6, 0, 3, 6, … } 如果输入 key 恰好满足这种等差数列的数据分布,那么哈希值就会出现聚堆,从而加重哈希冲突。现在,假 设将 modulus 替换为质数 13 ,由于 key 和 modulus 之间不存在公约数,因此输出的哈希值的均匀性会明显 提升。 modulus = 13 key 元素存储在同一个链表中。然而,链表过长会降低查 询效率,可以通过进一步将链表转换为红黑树来提高效率。 ‧ 开放寻址通过多次探测来处理哈希冲突。线性探测使用固定步长,缺点是不能删除元素,且容易产生聚 集。多次哈希使用多个哈希函数进行探测,相较线性探测更不易产生聚集,但多个哈希函数增加了计算 量。 ‧ 不同编程语言采取了不同的哈希表实现。例如,Java 的 HashMap 使用链式地址,而 Python0 码力 | 378 页 | 18.46 MB | 10 月前3
Hello 算法 1.2.0 简体中文 JavaScript 版123 图 6‑6 开放寻址(线性探测)哈希表的键值对分布 然而,线性探测容易产生“聚集现象”。具体来说,数组中连续被占用的位置越长,这些连续位置发生哈希冲 突的可能性越大,从而进一步促使该位置的聚堆生长,形成恶性循环,最终导致增删查改操作效率劣化。 值得注意的是,我们不能在开放寻址哈希表中直接删除元素。这是因为删除元素会在数组内产生一个空桶 None ,而当查询元素时,线性探测到该空桶就会 27, 30, 33, … } hash = {0, 3, 6, 0, 3, 6, 0, 3, 6, 0, 3, 6, … } 如果输入 key 恰好满足这种等差数列的数据分布,那么哈希值就会出现聚堆,从而加重哈希冲突。现在,假 设将 modulus 替换为质数 13 ,由于 key 和 modulus 之间不存在公约数,因此输出的哈希值的均匀性会明显 提升。 第 6 章 哈希表 www.hello‑algo 询效率,可以通过进一步将链表转换为红黑树来提高效率。 第 6 章 哈希表 www.hello‑algo.com 133 ‧ 开放寻址通过多次探测来处理哈希冲突。线性探测使用固定步长,缺点是不能删除元素,且容易产生聚 集。多次哈希使用多个哈希函数进行探测,相较线性探测更不易产生聚集,但多个哈希函数增加了计算 量。 ‧ 不同编程语言采取了不同的哈希表实现。例如,Java 的 HashMap 使用链式地址,而 Python0 码力 | 379 页 | 18.47 MB | 10 月前3
Hello 算法 1.0.0b5 JavaScript版时,该空位可能导致 程序误判元素不存在。为此,通常需要借助一个标志位来标记已删除元素。 ‧ 容易产生聚集。数组内连续被占用位置越长,这些连续位置发生哈希冲突的可能性越大,进一步促使这 一位置的聚堆生长,形成恶性循环,最终导致增删查改操作效率劣化。 以下代码实现了一个简单的开放寻址(线性探测)哈希表。 ‧ 我们使用一个固定的键值对实例 removed 来标记已删除元素。也就是说,当一个桶内的元素为 27, 30, 33, … } hash = {0, 3, 6, 0, 3, 6, 0, 3, 6, 0, 3, 6, … } 如果输入 key 恰好满足这种等差数列的数据分布,那么哈希值就会出现聚堆,从而加重哈希冲突。现在,假设 将 modulus 替换为质数 13 ,由于 key 和 modulus 之间不存在公约数,输出的哈希值的均匀性会明显提升。 modulus = 13 key = 冲突元素存储在同一个链表中。然而,链表过长会降低查 询效率,可以进一步将链表转换为红黑树来提高效率。 ‧ 开放寻址通过多次探测来处理哈希冲突。线性探测使用固定步长,缺点是不能删除元素,且容易产生聚 集。多次哈希使用多个哈希函数进行探测,相较线性探测更不易产生聚集,但多个哈希函数增加了计算 量。 ‧ 不同编程语言采取了不同的哈希表实现。例如,Java 的 HashMap 使用链式地址,而 Python0 码力 | 375 页 | 30.68 MB | 1 年前3
共 19 条
- 1
- 2













