Study Notes
Note

Round 1 — Night-Before Cheat Sheet

The one-page spine of the Round 1 note — story hooks, the one-liners that land, high-yield JS/TS/React facts, migration principles, and live-build cues. Glance, don't study.

4 min read
CondensedOne-linersRecall

Interview Prep · Senior Frontend · Night-Before

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)#

  • "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?"
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.