贫瘠之地

出来混最重要的是什么?是出来

当使用 Java 或任何其他基于 JVM 的编程语言时,其中一个核心功能是内存清理(垃圾回收)

和 C 和 C++ 等语言不同,使用者不需要关注内存相关的操作,例如 malloccallocreallocfree 等函数

释放内存的操作就是由 JVM 中名为 Garbage Collector 的角色完成的

垃圾回收器是如何工作的

JVM 在后台运行垃圾回收器来查找未使用的引用,这些引用占用的内存可以被释放并重新使用

阅读全文 »

背景

在 n 个数中,如何让抽到每一个数的概率相等

可以产生一个随机数,n 个数则在 [1,n] 中产生一个随机数即可

但如果涉及到外部数据,即一次并不能全部读取 n 个数(n 未知);例如一共 1000 个数据,一次只能加载 10 个,那么再每 10 个加载一次,总共加载 100 次的过程中如何保证最终取到的值满足 1/n

使用水塘抽样算法可以解决

阅读全文 »

背景

之前一直对索引分析中 type range 有误解

下面是官方文档对 type range 的解释

range can be used when a key column is compared to a constant using any of the =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, LIKE, or IN() operators:

1
2
3
4
5
6
7
8
9
10
11
SELECT * FROM tbl_name
WHERE key_column = 10;

SELECT * FROM tbl_name
WHERE key_column BETWEEN 10 and 20;

SELECT * FROM tbl_name
WHERE key_column IN (10,20,30);

SELECT * FROM tbl_name
WHERE key_part1 = 10 AND key_part2 IN (10,20,30);

IN 查询下的 range 什么时候会恶化为 ALL 呢?按照我之前的理解,可能有两点

阅读全文 »

如何使用

语法

1
SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

时间复杂度

一次调用是 O(1),完整的迭代是 O(N),包括不断调用直到返回 cursor 为 0;N 为集合内元素数量

阅读全文 »
0%