TCP开启SYN Cookies后导致数据丢失

28 Aug 2023 | Linux, TCP, Bug |

这是一个Linux TCP SYN Cookies导致的服务端丢数据问题,其特殊之处在于:数据丢失时,协议栈、应用层socket接口均无任何报错。

注:本文来源于生产环境遇到的真实案例,在排查过程中查到了国外一个博客的资料:https://wpbolt.com/syn-cookies-ate-my-dog-breaking-tcp-on-linux/ 想了解问题根源的朋友可以直接去看资料。

Continue Reading →

ibv_fork_init 原理,局限性与最佳实践

08 Oct 2022 | RDMA |

本文介绍RDMA verbs函数: ibv_fork_init() 的出现原因、作用原理、局限性,并提出RDMA编程中关于fork场景的最佳实践。

Continue Reading →

C++14的异构比较

03 Oct 2021 | C/CPP, STL |

在”IRResolver(STL set重叠区间以及异构查询)“里面,提到过std::set在c++14后可以进行异构查询。这部分其实可以展开讲讲,不仅限于上述文章的用法,也不仅限于std::set。不过我们还是以std::set为例,毕竟这个最典型也最常用。

Continue Reading →

字典树的几种实现方式以及应用

29 Aug 2021 | Trie, Algorithm |

字典树

字典树(Trie)这一概念有时候会跟基数树(Radix Tree)、前缀树(Prefix Tree)等混用。其中前缀树、字典树是从字符串存储角度的称呼,基数树更多是从数值(多为二进制)角度的称呼,可以看作广义的字典树。以下以字典树来统称字典树和基数树。

关于字典树的介绍,前面的文章有一个直观的介绍,也不多赘述。

功能对比

数据结构 增加 删除 精确查找 极值查找 顺序遍历 前缀遍历 数据约束
哈希表       哈希函数;等于比较
      小于比较
平衡树 小于比较
字典树 二进制比较(字符比较)

基础版本字典树的特点:

  • 查询时间只和key长度有关,和树中的节点数量无关
  • 设每个字符长度是s bits,一个key长度是k bits,最多只需要比较k / s个node

不足:

  • 基本只适用于基本数据(整数,字符串、二进制串)
  • 很难像哈希表或者平衡树那样,通过自定义哈希函数或者比较函数来存储自定义类型

字典树的优化方向:

  • 减少内存overhead(减少节点大小、分支数量、节点层数)
  • 缓存友好

Continue Reading →

[译]HAT-trie,缓存敏感字典树

12 Apr 2020 | Trie, Algorithm, Translation |

原文: https://tessil.github.io/2017/06/22/hat-trie.html

字典树 (也被称为前缀树) 是个有趣的怪物. 字典树是一种存储字符串的树形结构,一个节点的所有后代都共享相同的前缀. 这种结构可以进行快速的前缀查找, 例如查找所有以ap为前缀的单次, 并且由于共享前缀的特点,它可以采用紧凑的方式存储字符串.

跟大多数树形数据结构一样,前缀树的主流实现方法都存在缓存不友好的问题.在前缀节点之间遍历的每一步都可能会造成缓存缺失,这不利于进行快速查找。

本文中我们结合了传统字典树和缓存敏感哈希表,提出了缓存敏感的字典树:HAT-trie.

你可以从GitHub中找到 C++ 实现 ,以及一些HAT-trie同其他字典树和关联数据结构的 基准测试 .

接下来的章节, 我们首先更详细的介绍字典树的概念. 然后介绍 burst-trie 以及数组哈希表, 这些是HAT-trie所依赖的中间数据结构. 最后我们讲HAT-trie本身.

Continue Reading →

IRResolver(STL set重叠区间以及异构查询)

01 Mar 2020 | C/CPP, STL, Algorithm |

代码见 https://github.com/jiangzhuti/IRResolver

问题

有一些区间数据:

$ head data.txt 
3640-3610(s, sh)    O-H stretch, free hydroxyl     alcohols, phenols
3500-3200(s,b)      O–H stretch, H–bonded          alcohols, phenols
3400-3250(m)        N–H stretch                    1°, 2° amines, amides
3300-2500(m)        O–H stretch                    carboxylic acids
3330-3270(n, s)     –C≡C–H: C–H stretch            alkynes (terminal)
3100-3000(s)        C–H stretch                    aromatics
3100-3000(m)        =C–H stretch                   alkenes
3000-2850(m)        C–H stretch                    alkanes
2830-2695(m)        H–C=O: C–H stretch             aldehydes
2260-2210(v)        C≡N stretch                    nitriles

要求给出一个数值,输出所有包含该数值的区间信息。

分析

利用STL set构建查询树。需要注意两点:

  1. 支持按区间插入,按值查询(异构查询)
  2. 处理区间重叠

Continue Reading →

1 2 3 4