21 curated questions graded from Foundations (Easy) to Practical Patterns (Medium) and Internals & Architecture (Hard).
21
21
0
5 / Level
Foundations & Core Concepts
Answer: The RADIO Framework (developed by GreatFrontEnd and staff frontend engineers) provides a structured, time-tested approach to navigate open-ended frontend architecture interviews in 45 minutes.
graph TD
R[1. Requirements Exploration] --> A[2. Architecture & High-Level Diagram]
A --> D[3. Data Model & Client Store]
D --> I[4. Interface & API Design]
I --> O[5. Optimizations & Deep Dive]
entities (keyed by ID) + uiState (loading, active selection index, open/closed modal flags).useState).Answer: Google's Core Web Vitals measure real-world user experience and directly impact search rankings.
graph TD
Vitals[Core Web Vitals] --> LCP[LCP: Largest Contentful Paint - Loading]
Vitals --> INP[INP: Interaction to Next Paint - Responsiveness]
Vitals --> CLS[CLS: Cumulative Layout Shift - Visual Stability]
| Metric | Target | What It Measures | Optimization Strategies |
|---|---|---|---|
| LCP (Largest Contentful Paint) | $\le 2.5\text{s}$ | Time until the largest image or text block is visible in the viewport | • Add <link rel="preload" as="image" href="..." fetchpriority="high">• Use modern formats (AVIF / WebP) • Inline critical CSS; defer non-critical JS • Edge CDN caching & HTTP/3 |
| INP (Interaction to Next Paint) | $\le 200\text{ms}$ | Responsiveness to user input (clicks, keypresses, taps) | • Break long JavaScript tasks using scheduler.yield() or requestIdleCallback• Use React useTransition / Concurrent Mode• Offload heavy computation to Web Workers • Debounce/throttle expensive handlers |
| CLS (Cumulative Layout Shift) | $\le 0.1$ | Unexpected visual shifting of page elements during loading | • Set explicit width and height (or aspect-ratio) on all images and video tags• Reserve placeholder space for dynamic ads/widgets • Use font-display: optional or preload web fonts to prevent FOIT/FOUT layout shifts |
Answer:
graph TD
CSR[CSR: Client-Side Rendering] -->|Blank HTML -> Bundle JS -> Render| Browser1[Fast transitions, poor initial SEO/LCP]
SSR[SSR: Server-Side Rendering] -->|Server generates HTML on every request| Browser2[Great SEO, server CPU load]
SSG[SSG: Static Site Generation] -->|HTML built once at deploy time| Browser3[Blazing fast CDN, stale dynamic data]
ISR[ISR: Incremental Static Regeneration] -->|Background regenerate per revalidate tag| Browser4[Static speed + dynamic freshness]
RSC[RSC: React Server Components] -->|Zero-bundle components run only on server| Browser5[Optimal bundle size + streaming]
| Pattern | Render Location | Render Time | TTFB | FCP / LCP | SEO | Client JS Bundle |
|---|---|---|---|---|---|---|
| CSR (SPA) | Client Browser | On page load | Fastest (empty HTML) | Slowest | Weak | Heavy |
| SSR | Node.js Server | Per request | Moderate | Fast | Excellent | Moderate (needs Hydration) |
| SSG | Build Server | Build time | Fastest (Edge CDN) | Fastest | Excellent | Moderate |
| ISR | Edge Server | On demand / Stale | Fastest | Fastest | Excellent | Moderate |
| Islands (Astro) | Server + Client | Static + Islands | Fastest | Fastest | Excellent | Tiny (only interactive islands hydrated) |
| RSC (Next.js) | Server (Streams JSON/HTML) | Per request / cached | Fast | Fastest | Excellent | Zero JS for server-only components |
Answer: Design an accessible, production-grade autocomplete and typeahead search component delivering instant suggestions with optimal network efficiency and zero race conditions.
sequenceDiagram
autonumber
actor User
participant Input as UI Input (WAI-ARIA Combobox)
participant Cache as In-Memory LRU Trie
participant Controller as AbortController Manager
participant API as Autocomplete Backend API
User->>Input: 1. Types 're' (Debounce 250ms)
Input->>Cache: 2. Query prefix in local LRU Trie
alt Cache Hit
Cache-->>Input: 3. Return cached items instantly (0ms)
else Cache Miss
Input->>Controller: 4. Abort previous in-flight request!
Controller->>API: 5. GET /api/v1/autocomplete?q=re (Signal)
API-->>Input: 6. Return JSON results
Input->>Cache: 7. Store in LRU Trie
end
Input-->>User: 8. Render Results Listbox (aria-expanded="true")
<AutocompleteContainer>
├── <ComboboxInput> (text input, clear button, loading indicator)
├── <ResultsListbox> (dropdown popup, overflow scroll)
│ ├── <ResultOption> (item label, highlighted bold match, icon)
│ └── <EmptyState / ErrorState>
├── <CacheService> (In-memory LRU Trie store)
└── <NetworkManager> (AbortController & Debounce handler)
interface AutocompleteState {
query: string;
results: SuggestionItem[];
isOpen: boolean;
selectedIndex: number; // -1 when no option is focused
status: 'idle' | 'loading' | 'success' | 'error';
errorMessage: string | null;
}
interface SuggestionItem {
id: string;
label: string;
category?: string;
metadata?: Record<string, any>;
}
GET /api/v1/autocomplete?q={encodeURIComponent(query)}&limit=10interface AutocompleteProps {
placeholder?: string;
minQueryLength?: number; // default: 2
debounceMs?: number; // default: 250
fetchSuggestions: (query: string, signal: AbortSignal) => Promise<SuggestionItem[]>;
onSelect: (item: SuggestionItem) => void;
renderItem?: (item: SuggestionItem, isSelected: boolean) => React.ReactNode;
}
AbortController:let abortController = new AbortController();
async function handleSearch(query: string) {
abortController.abort(); // Cancel previous pending network request
abortController = new AbortController();
try {
const data = await fetchSuggestions(query, abortController.signal);
setResults(data);
} catch (err: any) {
if (err.name !== 'AbortError') setError(err);
}
}
role="combobox", aria-autocomplete="list", aria-expanded={isOpen}, aria-controls="autocomplete-results", aria-activedescendant={selectedIndex >= 0 ? "option-" + selectedIndex : undefined}.id="autocomplete-results", role="listbox".id={"option-" + index}, role="option", aria-selected={index === selectedIndex}.text.split(new RegExp('(' + query + ')', 'gi')) and wrap matched segments in <b> tags.Answer:
graph TD
LeftBtn[< Prev Button] --> Viewport[Carousel Viewport: overflow-hidden]
Viewport --> Track[Sliding Track: CSS transform translateX]
Track --> Slide1[Slide 1: Active]
Track --> Slide2[Slide 2]
Track --> Slide3[Slide 3]
Viewport <-- RightBtn[Next > Button]
transform: translate3d(-Xpx, 0, 0) and will-change: transform to trigger GPU composition rather than modifying left / margin-left (which triggers expensive browser reflows).pointerdown, pointermove, pointerup.@media (prefers-reduced-motion: reduce) by disabling smooth transition animations.aria-live="polite" status region.Get instant access to all 7 questions, in-depth model answers, code sandboxes, and all 27+ technologies for a single one-time payment.
Core concepts, definitions, basic syntax, and first principles expected in round 1 screening.
Real-world mechanisms, state management, edge cases, performance trade-offs, and practical coding.
Deep runtime internals, memory models, distributed design, concurrency failure modes, and architectural decisions.