Kacam.net

세상을 보다

컴퓨터 시스템: 한 번에 한 곳만

「메모리 관리」「네트워크」가 아니라 「TLB 미스와 페이지 폴트는 얼마나 다른가」「첫 바이트까지 몇 번 오갔나」—— 한 편에 한 곳만, 자릿수를 말할 수 있을 때까지 팝니다.

이 프롬프트 모음은 지금은 简体中文만 있습니다.

사용법

이 묶음은 학습형입니다: 말문이 막힐 때까지 몰아붙이지 않고 이끕니다. 막히면 먼저 어느 층에서 막혔는지 묻고(들어본 적 없음 / 알지만 왜인지 모름 / 알지만 못 씀), 그다음 무엇을 줄지 정합니다. 같은 지점에서 두 번 이끌어도 안 되면 그때 답을 말하고, 당신의 말로 다시 설명하게 합니다.

계속 숫자를 요구합니다: 「오버헤드가 있다」「빠르다」고 답하면 끊습니다. 자릿수를 못 대는 결론은 외운 결론 —— 이 묶음이 단련하는 게 바로 그것입니다.

시작하는 법

  1. 하나 골라서 열고, 프롬프트를 복사합니다.
  2. 새 빈 대화에 붙여 넣고, 아무 말도 하지 말고 첫 질문을 기다립니다.
  3. 자릿수를 물어볼 각오를 하세요: 몇 나노초, 몇 마이크로초, 몇 배 차이. 모르면 모른다고 하면 기록하고 넘어갑니다.

도중에 언제든 외칠 수 있는 네 가지 명령

  • 跳过 바로 다음 장면으로
  • 换个说法 이 부분을 다른 각도로 다시 설명
  • 直说吧 답을 전부 말하고, 그다음 내가 다시 설명하게
  • 复盘 바로 마무리로 넘어가 회고 카드 출력

세 가지 함정

  • 끝에 있는 정답 카드를 먼저 읽지 마세요 —— 그 「흔히 잘못 아는 것」 항목이 곧 모든 질문의 답입니다.
  • 용어부터 꺼내지 마세요. 「이건 TLB 미스」라고 말하기는 쉽고, 페이지 폴트보다 몇 자릿수 빠른지 말할 수 있어야 아는 것입니다.
  • 칭찬하기 시작하면 「칭찬하지 말라」는 철칙을 상기시키세요. 이끄는 것과 달래는 것은 다릅니다.

숫자 감각부터라면 랜덤 읽기와 첫 바이트 편을. 장애 조사에 쓰이는 건 malloc, TCP 멈춤, 컨텍스트 스위치. 동시성 코드를 쓴다면 재배치와 거짓 공유를.

메모리

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

동시성

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

스토리지

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

네트워크

第一个字节到达之前,来回跑了几趟
打开一个 2KB 的接口,网络上来回跑了几趟?
★★★☆☆ · 약 30분
两端都没挂,数据为什么过不去
两端都没挂,数据就是过不去 —— 卡了 40 毫秒还是 200 毫秒?
★★★★☆ · 약 35분
이 프롬프트들은 오픈 소스입니다 본문은 공개 저장소 kacam-net/hero-prompts에서 관리합니다. 어느 하나가 충분히 몰아붙이지 못한다거나 정답 패에 한 줄이 빠졌다면 고치러 오세요 —— 사이트에 올릴지는 별개의 판단이고, 이쪽 목록이 정합니다.