Skip to content

败犬日报 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 检查再暂停。其他任何做法(可能只有中断)都超出协程范畴了。