Kacam.net

Ver o mundo

Sistemas: um pedaço de cada vez

Não «gerência de memória» nem «redes», mas «qual a distância entre um TLB miss e um page fault» e «quantas idas e voltas antes do primeiro byte» — cada ficha cava um pedaço só, até você saber dar uma ordem de grandeza.

Por enquanto estas instruções existem só em 简体中文.

Como usar

Esta série ensina em vez de interrogar: ela guia, em vez de apertar até você não ter mais o que dizer. Quando você trava, pergunta primeiro em que camada (nunca ouvi / sei mas não sei por quê / sei por quê mas não aplico) e só então decide o que dar. Só depois de guiar duas vezes ela conta — e aí pede que você repita com suas palavras.

Ela vai cobrar números o tempo todo: responder «tem algum custo» ou «é mais rápido» faz ela te cortar. Conclusão sem ordem de grandeza é conclusão decorada — e é exatamente isso que esta série treina.

Como começar

  1. Escolha uma, abra e copie o prompt.
  2. Cole numa conversa nova e vazia, não diga nada e espere a primeira pergunta.
  3. Prepare-se para dar ordens de grandeza: quantos nanossegundos, quantos microssegundos, quantas vezes mais lento. Dizer que não sabe está ok — ela anota e segue.

Quatro comandos que você pode gritar a qualquer momento

  • 跳过 ir já para a próxima cena
  • 换个说法 explicar esta parte por outro ângulo
  • 直说吧 dar a resposta completa e depois me fazer repetir
  • 复盘 pular para o fechamento e imprimir a ficha de balanço

Três armadilhas

  • Não leia o gabarito do fim antes — aquela seção de «como as pessoas erram o raciocínio» é a resposta de cada pergunta.
  • Não corra para o jargão. Dizer «isso é um TLB miss» é fácil; dizer quanto ele é mais barato que um page fault é o que vale.
  • Quando começar a te elogiar, mande olhar a regra «não me elogie». Guiar não é fazer carinho.

Para pegar as ordens de grandeza: leituras aleatórias e depois a do primeiro byte. Para depurar em produção: malloc, travadas de TCP, trocas de contexto. Para código concorrente: reordenação e falso compartilhamento.

Memória

一次内存读,硬件走了几步
一次普通的内存读,硬件到底走了几步?
★★★★☆ · cerca de 35 min
malloc 返回之后,内存就归你了吗
8GB 的机器上 malloc(4GB) 两次,会成功吗?
★★★☆☆ · cerca de 30 min
mmap 省掉的到底是哪一次拷贝
「mmap 是零拷贝所以更快」——省的是哪一次,代价换到哪去了?
★★★★☆ · cerca de 30 min

Concorrência

重排序,是编译器干的还是 CPU 干的
你说的重排序,是编译器干的还是 CPU 干的?
★★★★★ · cerca de 40 min
改的是不同的变量,为什么互相拖慢
8 个线程各改各的计数器,为什么比单线程还慢?
★★★★☆ · cerca de 30 min
一次上下文切换,贵在哪
切换的成本主要不是保存寄存器 —— 那是什么?
★★★★☆ · cerca de 30 min

Armazenamento

一次 4KB 随机读,时间花在哪
说 SSD 快,快在哪一项上?快多少倍?
★★★☆☆ · cerca de 30 min
write 返回了,断电之后数据还在吗
write 返回了,一秒后断电 —— 数据还在吗?
★★★★☆ · cerca de 35 min

Rede

第一个字节到达之前,来回跑了几趟
打开一个 2KB 的接口,网络上来回跑了几趟?
★★★☆☆ · cerca de 30 min
两端都没挂,数据为什么过不去
两端都没挂,数据就是过不去 —— 卡了 40 毫秒还是 200 毫秒?
★★★★☆ · cerca de 35 min
Estes prompts são de código aberto O texto é mantido no repositório público kacam-net/hero-prompts. Se algum não aperta o suficiente, ou falta uma linha no gabarito dele, vá lá e mude: entrar no ar aqui é outra decisão, tomada pelo catálogo deste lado.