add link
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
# QPS Counter
|
||||
|
||||
统计各接口QPS计数
|
||||
使用一个双向循环链表结构
|
||||
使用一个双向循环链表结构
|
||||
|
||||
|
||||
|
||||
|
||||
+6
-1
@@ -6,7 +6,9 @@
|
||||
|
||||
## 链表
|
||||
|
||||
这个就不介绍了。重点说下双向链表。
|
||||
### 应用场景
|
||||
|
||||
* [redis slowlog](Redis%20slowlog.md)
|
||||
|
||||
|
||||
### 扩缩容
|
||||
@@ -18,6 +20,8 @@ java 中扩容,每次扩容新增原先容量的 1/2
|
||||
int newCapacity = oldCapacity + (oldCapacity >> 1);
|
||||
```
|
||||
|
||||
这个就不介绍了。重点说下双向链表。
|
||||
|
||||
|
||||
## 双向链表
|
||||
|
||||
@@ -38,6 +42,7 @@ typedef struct Entry{
|
||||
|
||||
最后一个节点指针指向头节点的链表
|
||||
|
||||
[QPS 计数器实现](QPS%20Counter.md)
|
||||
|
||||
|
||||
## 双向循环链表
|
||||
|
||||
@@ -6,7 +6,11 @@
|
||||
* 散列函数设计
|
||||
* 冲突处理
|
||||
* hashmap数据结构
|
||||
* Java 中HashMap实现
|
||||
|
||||
[Golang 中HashMap实现](HashMap%20in%20Golang.md)
|
||||
[Java 中HashMap实现](HashMap%20in%20Java.md)
|
||||
[Java 中LinkedHashMap实现](LinkedHashMap.md)
|
||||
[Java 中TreeMap实现](TreeMap%20in%20Java.md)
|
||||
|
||||
|
||||
散列表使用某种算法操作(散列函数)将键转化为数组的索引来访问数组中的数据,这样可以通过Key-value的方式来访问数据,达到常数级别的存取效率。现在的nosql数据库都是采用key-value的方式来访问存储数据。
|
||||
@@ -29,7 +33,7 @@
|
||||
|
||||
散列函数就是将键转化为数组索引的过程。且这个函数应该易于计算且能够均与分布所有的键。
|
||||
|
||||
散列函数最常用的方法是`除留余数法`。这时候被除数应该选用`素数`,这样才能保证键值的均匀散步。
|
||||
散列函数最常用的方法是`除留余数法`。这时候被除数应该选用`素数`,这样才能保证键值的均匀散布。
|
||||
|
||||
散列函数和键的类型有关,每种数据类型都需要相应的散列函数;比如键的类型是整数,那我们可以直接使用`除留余数法`;这里特别说明下,大多数情况下,键的类型都是字符串,这个时候我们任然可以使用`除留余数法`,将字符串当做一个特别大的整数。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user