Study Index

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.

Read ~5 minUse the morning of
For every answer: state it plainly, then add the trade-off. "Here's how it works… and here's when it bites." Pairing the fact with the failure mode is the clearest senior signal you can give.
1

Your 30-second intro

Say this "Frontend engineer, ~5 years, all at Bluesapling on BestWe — an enterprise platform that helps organisations improve team effectiveness through surveys and metrics. React + TypeScript. Recent work I'm proudest of: Genius, our AI assistant — one streaming feature reused across four surfaces behind a single shared hook. I like architecture and performance work — reusable things that stay fast as they spread — which is why [this role] stood out."
lead with now + scope 2–3 threads, not the résumé frame 5-yrs-1-product as depth & ownership tailor [this role] per company
2

Story spines + the line that lands

Signature · Genius
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."

Scope decision
Active-round lens

Temp "peek at a previous round" → Context + localStorage, not Redux. "Smallest scope that satisfies — the scope is the cleanup."

Concurrency
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."

Architecture
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."

3

Migrations — your differentiator

React 16→18
Bridge, not big-bang

v5-compat shim + custom withRouter. Enzyme→RTL, 24k tests dropped. Node rollbacks = scope discipline.

webpack→Vite
Unbundled ESM dev

esbuild pre-bundle; start stops scaling with app size. HMR mixed-export → full reload. Chunk-load retry. Jest ESM tail.

TS 3.8→5.9
Ratchet, not gate

strict:false + noErrorTruncation. moduleResolution: bundler. isolatedModules → why Vite is fast.

version bump is 1% bridges beat big bangs one axis at a time gates → ratchets name the compromise migrations = CVE liberation, not features StrictMode is a standard, not a switch
4

JavaScript — high-yield

closures capture variables, not values TDZ for let/const arrow = lexical this microtasks (Promise) before macrotasks (setTimeout) === always; == coerces structuredClone for deep copy debounce = wait for quiet · throttle = rate limit delegation = one listener on the parent for-var closure bug → use let ESM static → tree-shakeable
5

TypeScript — high-yield

unknown > any never = exhaustiveness interface = shapes · type = unions/computed Partial / Pick / Omit / Record discriminated unions for state as const (narrow) · satisfies (check, keep narrow) structural typing generics + extends constraint types erased → validate boundaries
6

React — high-yield

re-render: own state / parent / context keys = stable identity (never index on reorder) hooks top-level — tracked by call order effect deps + cleanup + AbortController memo/useMemo/useCallback only when measured functional setState: setX(v => …) split context to stop wide re-renders useLayoutEffect = before paint StrictMode double-invokes effects (dev) SSE for one-way token streaming
7

Live-build — recall the signature

TaskThe one thing to remember
Typed localStoragefeature-detect (throws in private/SSR), JSON try/catch, always return a fallback, schema-typed keys
useLocalStoragelazy 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 / throttledebounce clears a timer; throttle gates on elapsed time (leading/trailing)
retry + backoffloop, await, 2**n * base + jitter, rethrow after N
EventEmitteron returns an unsubscribe; Set of handlers per event
LRU cacheMap is insertion-ordered — delete+re-set on get, evict first key on overflow
8

CSS & platform quickies

flex overflow → min-width: 0 box-sizing: border-box specificity: inline > id > class > el CORS is browser-enforced (server opts in) tokens → HttpOnly Secure SameSite cookie CWV: LCP · CLS · INP semantic HTML first, ARIA to fill gaps
9

Ask them (pick 2)

Last thing before you close the laptop Breathe. You've shipped an AI streaming layer, a branching session engine, and three toolchain migrations on a live product. You're not hoping to pass — you're evaluating them too.