Y!an 发布的文章

简介

Snowflake 是 Twitter 提出一种的分布式唯一序列号生成算法,理论上单节点 1 毫秒可以生成 4096 个(每秒四百万个)唯一序列,这个序列是个 long 类型的数字,在数据库中的存储和查询也非常高效。其原理很简单,却又很精妙。

原理

Snowflake 算法生成的序列号充分地利用了每一个比特位,需要占用 8bytes(64bits) 空间,这 64 个 bit 一共分成 4 部分:

0         | 00000000000000000000000000000000000000000 | 0000000000    | 000000000000
定值,1 位 | 时间戳(毫秒),41 位                        | 节点序号,10 位 | 自增序列,12 位

- 阅读剩余部分 -

进行 PHP 开发时,一般会用到 Apache 或者是 nginx 去作为 web server。

我是在 Windows 环境下进行开发的,使用 Apache 的时候,我会把 Apache 的 bin 目录加入到环境变量中去,这样我只要打开 Powershell 就能直接使用 httpd 命令来启动 Apache 了;又或者我会将它注册成服务,这样使用 net start apache2.4 也可以快速启动,很方便。

后来使用到了 nginx,我也尝试同样的方法——将 nginx 目录加入到环境变量,重启 Powershell(以管理员身份运行),直接执行 nginx 命令,发现报错了:

- 阅读剩余部分 -

某天突然想了个关于结构体的问题,由于很久没有接触 C 语言,一开始并不知道其实这个问题本身就存在语法错误的问题,但正是因为对 C 知识的遗忘,才有了这次探索与巩固。

0x00 最初的问题

假设有如下结构体:

struct foo
{
    /* some other variables...*/
    struct foo bar;
};

那么我在定义一个 foo 变量的时候,

int main()
{
    struct foo hello;
    return 0;
}

会不会因为结构体里有一个循环引用而造成“内存爆炸”呢?

- 阅读剩余部分 -