Interview track

Frontend Developer interview prep

A spaced-repetition deck of 121+ Frontend Developer interview questions — organised by topic and difficulty, and scheduled for review based on your ratings. Preview a few cards below, then choose access to study the whole track on an Anki-style SM-2 schedule.

121 cards9 topics
See access options

Eligible new monthly or yearly subscribers get 7 days free. Checkout confirms eligibility and charges.

Before you start

Start with basic HTML/CSS and JavaScript and experience building a small browser interface. React and TypeScript examples assume you can read component code.

First pass: HTML & CSS → JavaScript. Begin with the foundational questions in these modules, then follow the outline. Revisit advanced and senior questions as the job requires; all cards remain available from the start.

Shared topics can appear in several tracks and keep one review history. The outline labels shared foundations and role-specific modules; choose your depth for the job you are preparing for.

What's covered

Every topic in this track, grouped the way you'd study it.

HTML & CSS

12 cards

Role-specific module

HTML & CSS

JavaScript

14 cards

Role-specific module

JavaScript

TypeScript

10 cards

Role-specific module

TypeScript

React & Frameworks

14 cards

Role-specific module

React

Browser & Performance

10 cards

Role-specific module

Performance

Accessibility

8 cards

Role-specific module

Accessibility

Tooling, Build & Testing

10 cards

Role-specific module

Tooling & Testing

Frontend System Design

8 cards

Role-specific module

System Design

Behavioral

35 cards

Shared foundations

Behavioral

Sample questions

A few cards from the deck — reveal each answer, then choose access to study the full set on a schedule.

What is semantic HTML and why does it matter (accessibility, SEO, maintainability)?

Short answer: Semantic HTML means using tags for their meaning (<nav>, <article>, <button>) instead of <div> for everything. Browsers and assistive tech understand the document structure, which buys you accessibility, SEO, and readable code.

In depth:

  1. Accessibility (a11y) — screen readers build the accessibility tree from tags: <nav>, <main>, <h1> enable landmark and heading navigation. Div soup is announced as unstructured text.
  2. SEO — search engines treat <article>, <h1>–<h6>, <time> as structure and content-importance signals.
  3. Maintainability — <header>/<footer>/<aside> self-document the markup; you don't read class names to learn a block's role.
  4. Free behavior — <button> is focusable and reacts to Enter/Space, <a> navigates, <details> toggles — no JS required.
<!-- ❌ div soup -->
<div class="nav"><div class="link" onclick="go()">Home</div></div>

<!-- ✅ semantic -->
<header>
  <nav aria-label="Primary">
    <a href="/">Home</a>
  </nav>
</header>
<main>
  <article>
    <h1>Article title</h1>
    <time datetime="2026-06-30">June 30, 2026</time>
  </article>
</main>

⚠️ Common mistake: making a clickable <div onclick> instead of a <button> — you lose focus, keyboard handling, and the screen-reader role.

What is hoisting, and how do var, let, and const differ in scope and TDZ?

Short answer: Hoisting is moving declarations to the top of their scope at compile time. var is hoisted and initialized to undefined (function scope), while let/const are hoisted but stay in the TDZ (temporal dead zone) until the declaration line and have block scope.

In depth:

  1. var — function scope, readable as undefined before declaration, re-declarable.
  2. let — block scope, in the TDZ until declaration, reassignment allowed.
  3. const — like let but no reassignment (the object's value itself is still mutable).
  4. TDZ — accessing a let/const before declaration throws ReferenceError instead of returning undefined.
console.log(a); // undefined — var hoisted
var a = 1;

console.log(b); // ReferenceError — b in TDZ
let b = 2;
Scope Before declaration Reassign
var function undefined yes
let block TDZ → error yes
const block TDZ → error no

⚠️ Common mistake: believing let/const "aren't hoisted." They are — but accessing them before initialization throws because of the TDZ.

Why use TypeScript over JavaScript, and what is structural (duck) typing?

Short answer: TypeScript adds static type checking on top of JS: errors are caught in the editor and at build time instead of at runtime. Its typing is structural — compatibility is decided by an object's shape (its set of fields), not by the type's name or an explicit implements.

In depth:

  1. What TS buys you — autocompletion and navigation, safe refactoring, self-documenting contracts, catching typos and undefined before running.
  2. Structural vs nominal — in Java/C# types match by name (nominal typing). In TS, if an object has the required fields it fits, even if it was created with no knowledge of the target type.
  3. Type erasure — types exist only at compile time; at runtime it is plain JS. You can't instanceof-check an interface.
interface Point { x: number; y: number }

function len(p: Point): number {
  return Math.hypot(p.x, p.y);
}

// the object never declared implements Point, but its shape fits
const v = { x: 3, y: 4, label: "v" };
len(v); // OK — structural typing: the extra label field is fine

⚠️ Common mistake: assuming TS protects you at runtime. Data from an API must be validated (zod, etc.) — the compiler takes your annotations on faith.

What is JSX and what does it compile to?

Short answer: JSX is syntactic sugar over element-creation calls. A compiler (Babel/SWC) turns it into jsx-runtime calls (or React.createElement in the classic transform) that return plain JS objects describing the UI — not real DOM nodes.

In depth:

  1. It's an expression, not HTML — JSX compiles to JavaScript and can go anywhere an expression is allowed.
  2. The new JSX transform (React 17+) — imports jsx/jsxs from react/jsx-runtime, so you no longer need import React just for JSX.
  3. It returns an element object — shaped like { type, key, props }; real DOM appears only on render.
  4. Case matters — a capitalized tag is a component, a lowercase one is a DOM element.
const el = <button className="btn" onClick={fn}>Save</button>;
// the new transform compiles this to:
import { jsx } from "react/jsx-runtime";
const el = jsx("button", { className: "btn", onClick: fn, children: "Save" });

⚠️ Common mistake: treating JSX as a string or HTML. It's JS: you write className, not class, and attributes are camelCase (onClick, tabIndex).

What is the Critical Rendering Path and which resources block it?

Short answer: The Critical Rendering Path is the browser's sequence from receiving HTML to the first painted pixel: DOM + CSSOM → render tree → layout → paint → composite. Synchronous CSS and blocking JS delay this path.

In depth:

  1. DOM — the browser parses HTML into a tree of nodes.
  2. CSSOM — the style object model is built in parallel; CSS blocks rendering because styles can't be computed without it.
  3. Render tree — DOM and CSSOM merge; display: none nodes are dropped.
  4. Layout (reflow) — element geometry and positions are computed.
  5. Paint — nodes are rasterized into pixel layers.
  6. Composite — layers are assembled on screen (often on the GPU).
HTML ─► DOM ─┐
             ├─► Render Tree ─► Layout ─► Paint ─► Composite ─► screen
CSS  ─► CSSOM┘
  ▲ blocks rendering        ▲ <script> without defer/async

⚠️ Common mistake: assuming JS never interferes with rendering. A synchronous <script> in the <head> halts HTML parsing and DOM construction — use defer or move scripts to the bottom.

What is accessibility (a11y) and why does it matter?

Short answer: Accessibility (a11y) means designing products so people with visual, hearing, motor, and cognitive disabilities can use them. It matters for three reasons: ethical (people), business (wider audience), and legal (WCAG, ADA, the European Accessibility Act).

In depth:

  1. People — about 15% of the population lives with some disability; temporary (a broken arm) and situational (bright sun, a noisy train) limitations affect everyone.
  2. Business — more users, better SEO (semantics = clear structure), fewer drop-offs.
  3. Law — WCAG 2.x is the de-facto standard; the US has ADA/Section 508, the EU has the EAA; lawsuits over inaccessible sites are real.
Disability Barrier Solution
Vision can't see the screen screen reader, contrast, alt
Hearing can't hear audio captions, transcripts
Motor can't use a mouse keyboard accessibility
Cognitive complex UI plain language, clear structure

⚠️ Common mistake: treating accessibility as a 'feature for a minority' — in reality it improves UX for everyone (the curb-cut effect).

Ready to make it stick?

Explore a sample, choose a track, and build a review routine that fits your preparation.

Questions about this track

How should I prepare for a Frontend Developer interview?

Study the concepts you'll be asked to explain, not just the ones you can code. RecallDeck's Frontend Developer track gives you 121+ curated interview questions and resurfaces each one with an Anki-style SM-2 schedule based on your ratings — to practise recalling and explaining them. Combine reviews with coding and mock interviews.

What topics does the Frontend Developer track cover?

The Frontend Developer track is organised into the core areas Frontend Developer interviews actually test, grouped by topic and by difficulty (Concept, Junior, Middle, Senior). You can preview the full outline and sample questions above before signing in.

Is spaced repetition effective for Frontend Developer interview prep?

Yes. Active recall and spaced practice can help retain what you study. Grade yourself honestly and check your understanding with practical work. RecallDeck schedules each Frontend Developer card using your ratings, so familiar cards return less often and difficult ones get more practice.

Can I try the Frontend Developer track before paying?

Eligible new monthly or yearly subscribers can try the complete Frontend Developer track and every feature for seven days. Checkout confirms trial eligibility and the amount due; returning subscribers may be charged immediately. Cancel online before the trial ends to avoid its first charge. Lifetime access has no trial.

Other interview tracks