zhuizhuhaomeng Blog

「记录下来,一切都会更容易理解」

Heap Algorithm and C implememtation

这里并没有啥新意,只是为了方便我自己拷贝算法。 虽然号称 AI 能给很好的代码,但是我搜索的时候经常找不到满意的代码。 堆的介绍 我们经常会听说堆排序,最大堆,最小堆。这里的堆跟内存分配中的堆栈的堆是没有关系的。内存分配中的堆是有别于栈的另一个内存空间,堆是不会自动回收的, 而栈在函数调用返回后就自动收缩了。 我们这里要讨论的是一种排序算法。以最大堆为例,最大堆的根节点的值整个堆里面...

How to dump a process memory

By the time we realize the problem, it is already happening. If we want to know what caused the problem, we usually need to understand how it happened. It’s kind of like the chicken or the egg ca...

Lua GC 接口探讨

垃圾回收 LuaJIT 是使用 Lua 5.1 的标准。 跟 Lua 5.1 一样, LuaJIT 也是使用增量标记和扫描回收的算法。Lua 5.2 ~ 5.4 的垃圾回收算法已经更新成分代垃圾回收算法,可以参考 云风的博客。 LuaJIT 的垃圾回收是在主线程中执行的,而不是像 JAVA/GO 在一个独立的线程中执行,如果主线程不执行,那么垃圾回收肯定也不会执行。 因此 LuaJIT ...

How to debug web problem using curl

All you need to know about curl https://everything.curl.dev/http/redirects.html Connect to the specific host You should always use the –resolve to connecto the the specific host. For example 1...

How to write error log when checking the arguments?

A good error log should help you to resolve the problem. Or give you enough information to find the cause of the problem. For the error log of the Lua code, I think it should at least include the ...

How to do request ratelimt on OpenResty?

#

使用 OpenResty 共享字典的注意事项

OpenResty 共享内存的字典如果设置得太大,那么就会进程占用太多的宝贵内存; 如果内存设置得过小,那么内存不足会导致申请失败或者提前淘汰未过期的表项。 如何用好共享字典其实是很有讲究的。我们来看看共享字典的一些问题。 OpenResty 共享内存字典如何淘汰表项 OpenResty 共享字典淘汰表项主要可以分为淘汰过期表项和淘汰未过期表项。 淘汰过期表项是每次操作都会进行的,而淘...

再论 C 语言的字符转义

问题来了 虽然 C 语言的语法特性已经是最简单的了,但是作为一个 C 语言的老鸟,免不了还是要栽在 C 语言的大坑里。 最近在做一个项目,需要将多个字符串拼接为 LV 格式的字符串。 这里的 LV 是代表 Length Value 格式,而不是奢侈品的 LV 包包的 LV。 因为子字符串的长度只能小于 256 字节, 因此 L 用一个字节来表示。 比如 “abc” “com” 两个字符...

vs code 使用

自动跳转 vscode 插件好多好多,多到让人头花脑胀。而我最讨厌的就是 C、C++ 无法自动跳转了。 不过还好现在有了 clangd 插件,可以更好的自动跳转了。 虽然插件很好,但是还是配置还是有门槛。 如果是 cmake 系统,应该使用这样的方式 1 cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 如果就只有 Makefile,那么应该使用 ...

使用 git pre-commit hooks 做好代码提交前的检查

每个公司甚至小组都有各种规范,但是有时候又是那么的容易忘记。 这时候试用 git 自带的 commit hooks 可以强制检查,拒绝二次犯错。 比如这个是我的 pre-commit 的钩子 1 2 3 4 5 6 7 8 9 10 11 12 #!/bin/sh find t -name "*.t" | xargs grep -E -- "(--- ONLY|--- LAST)" &...