Files
learning-go-for-sre-interview/README.md
T
kacerrandClaude Fable 5 7219eb5a23 Initial commit: Go SRE interview exercises
Includes solved 02-worker-pool and 09-safe-counter (mutex, atomic, sharded).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GbnJj9ZqEx9nUvzkjdwfMq
2026-08-28 22:18:09 +02:00

67 lines
3.0 KiB
Markdown

# Go SRE Interview Gym
A monorepo of hands-on exercises covering what actually gets asked in Go
live-coding rounds for SRE roles. Each numbered folder is self-contained:
- `main.go` — the assignment (in comments) + a scaffold with TODOs and a small
runnable demo
- `main_test.go` — the interviewer: tests that define "correct", including the
traps (goroutine leaks, races, boundary conditions)
- `README.md` — the deep dive: why the idiom exists, what breaks in production,
and the follow-up questions interviewers reach for
## Setup
Go ≥ 1.22 required (loop-variable semantics), any recent toolchain is fine —
built and verified against **go 1.27**. Pure stdlib, zero dependencies.
## Workflow
```bash
# pick an exercise, read the assignment in main.go, implement the TODOs
go test -race ./01-url-health-checker/ # -race ALWAYS. non-negotiable.
# run everything you've solved so far
go test -race ./...
# some exercises have benchmarks worth exploring
go test -bench=. -cpu=1,4,8 ./09-safe-counter/
```
Interview-realistic rules: timer set to 30 min, no autocomplete, no LSP if
you're brave, and **narrate your reasoning out loud** — the talking is graded
as much as the code.
## The ladder
| # | Exercise | Core skill | Freq in interviews |
|---|----------|-----------|--------------------|
| 01 | url-health-checker | bounded concurrency, ctx, HTTP hygiene | ★★★★★ |
| 02 | worker-pool | channel closing protocol, WaitGroup | ★★★★★ |
| 03 | rate-limiter | lazy state, mutex, monotonic time | ★★★★☆ |
| 04 | log-topn | streaming, Scanner limits, map→sort | ★★★★☆ |
| 05 | lru-cache | map+list composite, O(1) design | ★★★★☆ |
| 06 | retry-backoff | jitter, ctx-aware sleep, error classes | ★★★☆☆ |
| 07 | fan-in | leak-free cancellation, nil-channel trick | ★★★☆☆ |
| 08 | graceful-shutdown | signals, Shutdown ctx inversion, k8s | ★★★☆☆ |
| 09 | safe-counter | mutex vs atomic vs sharding, -race | ★★★★☆ (as warm-up) |
| 10 | gotchas | "what does this print" trivia round | ★★★★★ |
Suggested order: 09 → 02 → 01 → 03 → 05 → 04 → 06 → 07 → 08, with gotchas (10)
sprinkled daily. 09 first because it calibrates you on `-race`; 01/02 are the
highest-yield; 08 is the best *conversation* generator in on-sites.
## Ground rules baked into the tests
- Tests use timeouts to catch deadlocks and missing `close()` — a hanging test
is a failing test with extra steps.
- Several tests count goroutines or track peak concurrency with atomics —
read them after solving; test-writing techniques are interview material too.
- Everything must pass under `-race`. A green test that fails `-race` is red.
## Note on the gotchas folder
`10-gotchas/*` are predict-then-run programs: ex02 deadlocks on purpose, ex11
doesn't compile on purpose. Run them individually (`go run ./10-gotchas/ex01-loopvar/`),
not as part of `go build ./...`. Answers are collapsed in `10-gotchas/README.md`.