败犬日报 2025-08-15
1. std::unordered_map 为什么要用性能不好的链表法
接口约定,std 确定标准的时候是对着链表法设计的。
boost.unordered 里面有篇文章讲这个。
2. go 的日期格式串
其他语言:xxx.format("YYYY-MM-DD HH:mm:ss");
(js: day.js) xxx.strftime("%Y-%m-%d %H:%M:%S")
(python: datetime)
go:xxx.Format("2006-01-02 15:04:05")
(万恶之源)Rob Pike 说:
The choice was made by the output of the date command on my Unix machine. I should have realized the format varies with locale. Mea culpa. But I can still claim it's easy to remember and well documented.
《符合我对大道至简语言的刻板印象》
3. 代码鉴赏 auto res = std::move(func());
func 返回值是 std::vector
其实运行没问题,但是 move 会阻止复制消除(多一次移动),完全可以去掉。
4. 代码鉴赏 pair<pair, pair>
,xxx.first.second
用结构体和结构化绑定。
5. 什么时候用 mmap
对内存可以有其他要求,比如共享内存,huge pages,可执行内存,还可以绕过 glibc 自己管理内存(不同场景可能要求内存碎片少,或者亲核性之类的)。
6. 暂停世界是什么
gc(垃圾回收)在做回收的时候要暂停所有线程,所以有 pause the world 的说法。
7. 优化链表性能(文章)
https://johnnysswlab.com/the-quest-for-the-fastest-linked-list/
8. 群友锐评链表性能
很多搞压测的玩弄数据,实际上链表空间上是不是连续内存,时间上是不是连续操作,还有对象是不是复杂类,要具体场景具体分析。
最通用的做法,侵入式 + 内存池,能尽可能保证内存连续性。
9. switch case 里少写个 break 查了半周
编译选项 -Wimplicit-fallthrough
,这个不在 -Wall
里,但是在 -Wextra
里。
10. 协程是不是做不到暂停一个死循环
做不到,协程暂停都是要手动的,比如要在每次循环加 flag 检查再暂停。其他任何做法(可能只有中断)都超出协程范畴了。