Interview Prep · Senior Frontend · Night-Before
Round 1 — Cheat Sheet
The spine only. Story hooks, the one-liners that land, the highest-yield fundamentals, and the live-build cues — glance, don't study. Full detail lives in the Round 1 note.
Your 30-second intro
Story spines + the line that lands
One feature, four surfaces
Shared SSE custom hook (request → stream → reducer routing) + core/wrapper split. Edge cases: retries, partial streams, resume on return. "Reusable that stays fast & consistent as it spreads."
Active-round lens
Temp "peek at a previous round" → Context + localStorage, not Redux. "Smallest scope that satisfies — the scope is the cleanup."
Stream executor
One singleton owner + priority queue with preemption. Fixes: per-invocation watchdog, abort-vs-timeout flag, streamId match. "Identity, not presence." · "Local truth beats shared."
Integrated Sessions
Branching multi-mode runtime — Notion translation layer, graph nav, speculative prefetch that delegates to the executor. "Containment — the mess stops at the boundary."
Migrations — your differentiator
Bridge, not big-bang
v5-compat shim +
custom withRouter. Enzyme→RTL, 24k tests dropped. Node rollbacks = scope discipline.
Unbundled ESM dev
esbuild pre-bundle; start stops scaling with app size. HMR mixed-export → full reload. Chunk-load retry. Jest ESM tail.
Ratchet, not gate
strict:false +
noErrorTruncation. moduleResolution: bundler. isolatedModules → why Vite
is fast.
JavaScript — high-yield
TypeScript — high-yield
React — high-yield
Live-build — recall the signature
| Task | The one thing to remember |
|---|---|
Typed localStorage | feature-detect (throws in private/SSR), JSON try/catch, always return a fallback, schema-typed keys |
useLocalStorage | lazy init reads once; effect writes on change; return [v, set] as const |
RBAC can(user, action, res) | role → allowed-action set, with a function rule for ownership |
| debounce / throttle | debounce clears a timer; throttle gates on elapsed time (leading/trailing) |
| retry + backoff | loop, await, 2**n * base + jitter, rethrow after N |
| EventEmitter | on returns an unsubscribe; Set of handlers per event |
| LRU cache | Map is insertion-ordered — delete+re-set on get, evict first key on overflow |
CSS & platform quickies
Ask them (pick 2)
- "What's the frontend architecture today, and the biggest pain point you'd want a senior to fix first?"
- "How do technical decisions get made — RFCs, tech leads, consensus? How is code reviewed?"
- "What does success look like at 3 and 6 months in this role?"
- "What's your testing and release story — how confident are you shipping on a Friday?"