Domande per Colloqui Junior Frontend Developer: React, Strumenti e Argomenti Avanzati

Milad Bonakdar
Autore
Padroneggia React, strumenti di build, ottimizzazione delle prestazioni, debugging, accessibilità, testing e soft skills con 23 domande essenziali per il colloquio. Preparazione perfetta per i colloqui da junior frontend developer nel 2024-2025.
Introduzione
Questa guida completa contiene 21 domande per il colloquio accuratamente selezionate che coprono argomenti avanzati di sviluppo frontend: React e framework, strumenti di build e controllo della versione, ottimizzazione delle prestazioni, debugging, accessibilità, testing e soft skills. Queste sono le domande che gli sviluppatori frontend junior incontrano effettivamente nei colloqui del 2024-2025. Ogni domanda include una risposta approfondita, una valutazione della rarità e una valutazione della difficoltà basata sull'analisi di centinaia di colloqui reali di importanti aziende tecnologiche e startup.
Questa è la Parte 2 della nostra guida completa ai colloqui. Per i fondamenti di HTML, CSS e JavaScript, consulta Parte 1: Fondamenti di HTML, CSS e JavaScript.
React e Framework (8 Domande)
33. Cos'è JSX e perché lo usiamo in React?
Risposta: JSX (JavaScript XML) è un'estensione della sintassi per JavaScript che assomiglia all'HTML e viene utilizzata per descrivere la struttura dell'interfaccia utente in React.
Esempio:
Vantaggi:
- Più leggibile e intuitivo di
React.createElement() - Sembra HTML ma con la piena potenza di JavaScript
- Supporta espressioni tra parentesi graffe
{} - Type-safe quando si usa TypeScript
- Sintassi familiare per gli sviluppatori
Differenze chiave dall'HTML:
- Usa
classNameinvece diclass - Usa
htmlForinvece difor - Tutti gli attributi sono camelCase (
onClick,onChange) - È necessario chiudere tutti i tag (inclusi
<img />,<br />)
Rarità: Comune Difficoltà: Facile
34. Spiega la differenza tra props e state in React
Risposta:
Props (Proprietà):
- Dati passati DAL componente padre AL componente figlio
- Sola lettura (immutabile dal punto di vista del figlio)
- Usato per la configurazione del componente
- Le modifiche provengono dal re-rendering del padre
State (Stato):
- Dati gestiti ALL'INTERNO di un componente
- Mutabile (può essere modificato con la funzione setter)
- Le modifiche attivano i re-render
- Privato al componente
Differenza chiave: Le props fluiscono verso il basso (da padre a figlio), lo state è locale al componente.
Rarità: Comune Difficoltà: Facile
35. Cos'è l'hook useState e come lo usi?
Risposta: useState è un Hook di React che aggiunge la gestione dello stato ai componenti funzionali.
Sintassi:
Esempi:
Punti chiave:
- Gli aggiornamenti dello stato attivano i re-render
- Gli aggiornamenti dello stato sono asincroni
- Usa aggiornamenti funzionali per lo stato basato sullo stato precedente:
setCount(prev => prev + 1)
Rarità: Comune Difficoltà: Facile-Media
36. Cosa fa l'hook useEffect? Spiega l'array delle dipendenze.
Risposta: useEffect esegue effetti collaterali dopo il rendering (data fetching, sottoscrizioni, manipolazione del DOM).
Sintassi:
Comportamento dell'array delle dipendenze:
Casi d'uso comuni:
Rarità: Comune Difficoltà: Media
37. Come visualizzi un elenco di elementi in React? Perché abbiamo bisogno delle chiavi?
Risposta:
Visualizzazione elenchi:
Perché le chiavi sono importanti: Le chiavi aiutano React a identificare quali elementi sono stati modificati, aggiunti o rimossi. Consentono aggiornamenti efficienti:
- Riducendo al minimo la manipolazione del DOM
- Preservando lo stato del componente
- Mantenendo l'identità corretta dell'elemento
- Ottimizzando l'algoritmo di riconciliazione
Linee guida per le chiavi:
Quando l'indice è accettabile: Elenchi statici che non vengono mai riordinati o modificati.
Rarità: Comune Difficoltà: Facile-Media
38. Cos'è il Virtual DOM e perché React lo usa?
Risposta: Il Virtual DOM è una rappresentazione JavaScript leggera del DOM reale che React mantiene in memoria.
Come funziona:
- Render: React crea un albero Virtual DOM quando lo stato cambia
- Diff: React confronta il nuovo Virtual DOM con la versione precedente (riconciliazione)
- Update: React calcola le modifiche minime necessarie
- Patch: React aggiorna solo le parti modificate del DOM reale
Perché è vantaggioso:
- Prestazioni: La manipolazione diretta del DOM è lenta; React raggruppa e riduce al minimo gli aggiornamenti
- Efficienza: Aggiorna solo gli elementi modificati, non l'intero albero
- Esperienza dello sviluppatore: Scrivi codice dichiarativo, React gestisce aggiornamenti efficienti
- Astrazione: Lo stesso codice può essere destinato a piattaforme diverse (React Native, VR)
Esempio:
Nota: React moderno (architettura Fiber) non confronta letteralmente due Virtual DOM, ma utilizza un concetto simile con i nodi Fiber.
Rarità: Comune Difficoltà: Media
39. Come gestisci i form in React?
Risposta:
Componenti controllati (consigliato): I valori degli elementi del form sono controllati dallo stato di React.
Componenti non controllati (meno comuni): Usa i ref per accedere direttamente ai valori del DOM.
Best practice: Usa componenti controllati nella maggior parte dei casi.
Rarità: Comune Difficoltà: Media
40. Qual è la differenza tra componenti funzionali e di classe?
Risposta:
Componenti Funzionali (Moderni, preferiti):
Componenti di Classe (Legacy):
Differenze chiave:
- Sintassi: Funzioni vs classi
- State: Hooks (useState) vs this.state
- Lifecycle: Hooks (useEffect) vs metodi del ciclo di vita
- Parola chiave this: Non necessaria nei componenti funzionali
- Boilerplate: Meno codice nei componenti funzionali
- Prestazioni: Leggermente migliori con i componenti funzionali
Standard moderno: I componenti funzionali con Hooks sono ora l'approccio raccomandato (da React 16.8). I componenti di classe funzionano ancora, ma sono considerati legacy.
Rarità: Comune Difficoltà: Facile-Media
Strumenti di Build e Controllo della Versione (5 Domande)
41. Cos'è npm e a cosa serve package.json?
Risposta: npm (Node Package Manager) è il gestore di pacchetti predefinito per JavaScript, utilizzato per installare, gestire e condividere pacchetti di codice.
package.json è il file manifest che contiene:
- Metadata: Nome del progetto, versione, descrizione, autore
- Dependencies: Pacchetti necessari per la produzione (
dependencies) - DevDependencies: Pacchetti necessari solo per lo sviluppo (
devDependencies) - Scripts: Comandi per attività comuni (start, build, test)
Esempio di package.json:
Comandi comuni:
npm install- Installa tutte le dipendenzenpm install package-name- Installa un pacchetto specificonpm install --save-dev package-name- Installa come dipendenza di svilupponpm run script-name- Esegui uno script npmnpm update- Aggiorna i pacchetti
Rarità: Comune Difficoltà: Facile
42. Cos'è Git e perché i team lo usano?
Risposta: Git è un sistema di controllo della versione distribuito che tiene traccia delle modifiche nel codice nel tempo.
Perché i team usano Git:
- Collaborazione: Più sviluppatori lavorano sulla stessa codebase senza conflitti
- Cronologia: Record completo di tutte le modifiche (chi, cosa, quando, perché)
- Branching: Lavora su funzionalità indipendentemente senza influire sul codice principale
- Backup: Codice archiviato in più posizioni (locale + remoto)
- Rollback: Ripristina facilmente le versioni di lavoro precedenti
- Code review: Rivedi le modifiche prima di unirle (pull request)
- Sperimentazione: Prova nuove idee nei branch senza rischi
Concetti di base:
- Repository (repo): Cartella del progetto tracciata da Git
- Commit: Snapshot delle modifiche con messaggio
- Branch: Linea di sviluppo indipendente
- Merge: Combina le modifiche da diversi branch
- Remote: Repository ospitato online (GitHub, GitLab)
Standard del settore: Oltre il 93% degli sviluppatori utilizza Git in tutto il mondo.
Rarità: Comune Difficoltà: Facile
43. Spiega i comandi Git comuni e il flusso di lavoro
Risposta:
Flusso di lavoro di base:
Comandi essenziali che i junior devono conoscere:
clone- Copia la repository remotaadd- Esegui lo stage delle modifichecommit- Salva lo snapshot con un messaggiopush- Carica sul remotepull- Scarica + unisci le modifiche remotebranch- Elenca/crea branchcheckout/switch- Cambia branchstatus- Visualizza lo stato correntelog- Visualizza la cronologia dei commit
Rarità: Comune Difficoltà: Facile-Media
44. Cos'è un conflitto di merge e come lo risolveresti?
Risposta: Un conflitto di merge si verifica quando Git non può unire automaticamente le modifiche perché esistono modifiche concorrenti sulle stesse righe di codice.
Scenario comune:
Marcatori di conflitto:
Passaggi per la risoluzione:
- Identifica i conflitti: Git contrassegna i file con conflitti
- Apri i file in conflitto: Cerca i marcatori di conflitto
- Decidi cosa mantenere: Rivedi entrambe le modifiche
- Modifica il codice: Rimuovi i marcatori, mantieni il codice desiderato
- Test: Assicurati che il codice funzioni correttamente
- Esegui lo stage dei file risolti:
git add file.js - Completa il merge:
git commit
Best practice:
- Comunica con il team
- Esegui il pull frequentemente per ridurre al minimo i conflitti
- Mantieni i commit piccoli e mirati
- Esegui test approfonditi dopo la risoluzione
Rarità: Comune Difficoltà: Media
45. Cosa fa Webpack? Cos'è Vite?
Risposta:
Webpack: Un bundler di moduli che prende JavaScript, CSS, immagini e altre risorse, li elabora e li raggruppa in file ottimizzati per il browser.
Cosa fa:
- Raggruppa più file in meno file
- Trasforma il codice (Babel per JSX/ES6, Sass in CSS)
- Ottimizza per la produzione (minificazione, tree shaking)
- Gestisce le dipendenze
- Code splitting per le prestazioni
Concetto di base:
Vite: Strumento di build moderno che è significativamente più veloce dei bundler tradizionali come Webpack.
Perché Vite è più veloce:
- Utilizza i moduli ES nativi durante lo sviluppo (nessun bundling necessario)
- Hot Module Replacement (HMR) è istantaneo
- Esegue il bundling solo per la produzione
- Migliore esperienza per gli sviluppatori
Quando usare:
- Vite: Nuovi progetti, framework moderni (React, Vue)
- Webpack: Progetti esistenti, necessità di configurazione complessa
Rarità: Comune Difficoltà: Facile-Media
Prestazioni Web e Ottimizzazione (3 Domande)
46. Come ottimizzeresti le prestazioni di caricamento di un sito web?
Risposta:
Ottimizzazione delle immagini:
- Comprimi le immagini (JPG per le foto, PNG per la grafica, WebP per entrambi)
- Usa dimensioni appropriate (non caricare un'immagine di 4000px per una visualizzazione di 300px)
- Carica le immagini sotto la piega in modo lazy
- Usa
srcsetper immagini responsive
Ottimizzazione del codice:
- Minifica JavaScript, CSS, HTML (rimuovi spazi bianchi, commenti)
- Raggruppa e comprimi i file (gzip o Brotli)
- Rimuovi CSS/JS inutilizzati (tree shaking)
- Code splitting (carica solo il codice necessario per pagina)
Caching:
- Caching del browser con intestazioni di cache appropriate
- Usa CDN per risorse statiche
- Service worker per funzionalità offline
Strategie di caricamento:
- CSS critico inline in
<head> - Differisci JavaScript non critico
- Precarica risorse importanti
- Riduci le richieste HTTP
Metriche delle prestazioni:
- Misura con Lighthouse, PageSpeed Insights
- Obiettivo: FCP < 1.8s, LCP < 2.5s, CLS < 0.1
Rarità: Comune Difficoltà: Media
47. Quali strumenti useresti per misurare le prestazioni di un sito web?
Risposta:
Browser DevTools:
- Scheda Network di Chrome DevTools: Analizza i tempi delle richieste, le dimensioni dei file, l'ordine di caricamento
- Scheda Performance/Lighthouse: Genera report sulle prestazioni con punteggi
- Scheda Coverage: Trova JavaScript/CSS inutilizzati
- Console: Misura con
console.time()e Performance API
Strumenti online:
- Google PageSpeed Insights: Ottieni punteggi sulle prestazioni e raccomandazioni
- WebPageTest: Grafici a cascata dettagliati, posizioni multiple
- GTmetrix: Analisi delle prestazioni con voti
Metriche da monitorare:
- First Contentful Paint (FCP): Quando appare il primo contenuto
- Largest Contentful Paint (LCP): Quando il contenuto principale viene caricato
- Time to Interactive (TTI): Quando la pagina diventa interattiva
- Cumulative Layout Shift (CLS): Stabilità visiva
- Total Blocking Time (TBT): Tempo di blocco del thread principale
Per i junior: È sufficiente una familiarità di base con Chrome DevTools e Lighthouse. Non sono previste competenze approfondite di profilazione.
Rarità: Comune Difficoltà: Facile-Media
48. Cos'è il lazy loading e quando lo useresti?
Risposta: Il lazy loading rimanda il caricamento di risorse non critiche fino a quando non sono necessarie, in genere quando stanno per entrare nel viewport.
Casi d'uso comuni:
Immagini:
Lazy loading nativo (browser moderni):
JavaScript/React:
Vantaggi:
- Caricamento della pagina iniziale più veloce
- Utilizzo della larghezza di banda ridotto
- Prestazioni migliori su connessioni lente
- Migliore esperienza utente (il contenuto appare più velocemente)
Quando usare:
- Immagini sotto la piega
- Componenti pesanti non immediatamente visibili
- Contenuto in schede/accordion
- Implementazioni di scorrimento infinito
Rarità: Non comune Difficoltà: Media
Debugging e Strumenti per Sviluppatori (2 Domande)
49. Come esegui il debug di un errore JavaScript nel browser?
Risposta:
Processo di debug passo dopo passo:
1. Controlla la Console:
2. Usa i Breakpoint:
- Apri il pannello Sources/Debugger di DevTools
- Fai clic sul numero di riga per impostare un breakpoint
- L'esecuzione del codice si interrompe al breakpoint
- Ispeziona le variabili nel pannello Scope
- Esegui il codice passo dopo passo (Step Over, Step Into, Step Out)
3. Esamina lo Stack Trace:
- I messaggi di errore mostrano i nomi dei file e i numeri di riga
- Segui lo stack di chiamate per trovare l'origine dell'errore
- Controlla gli errori di rete nella scheda Network
4. Esegui il debug dei problemi del DOM:
- Ispeziona gli elementi nel pannello Elements
- Controlla gli stili calcolati
- Usa l'imposizione dello stato
:hover - Verifica che i listener di eventi siano collegati
5. Controlla le Richieste di Rete:
- La scheda Network mostra le chiamate API non riuscite
- Esamina le intestazioni di richiesta/risposta
- Controlla i codici di stato (404, 500, ecc.)
Tecniche di debugging comuni:
- Aggiungi l'istruzione
debugger;per mettere in pausa l'esecuzione - Usa breakpoint condizionali
- Osserva le espressioni
- Metti in black box il codice di terze parti
Rarità: Comune Difficoltà: Facile-Media
50. Quali sono i pannelli principali in Chrome DevTools e a cosa servono?
Risposta:
Pannelli essenziali:
1. Console:
- Visualizza errori e log JavaScript
- Esegui comandi JavaScript
- Prova le espressioni in modo interattivo
- Testing API
2. Elements (Inspector):
- Ispeziona e modifica la struttura HTML
- Modifica il CSS in tempo reale
- Esegui il debug dei problemi di layout
- Visualizza stili calcolati, box model
- Prova design responsive
3. Sources (Debugger):
- Visualizza i file sorgente
- Imposta i breakpoint
- Esegui il codice passo dopo passo
- Modifica e salva le modifiche (workspaces)
- Visualizza lo stack di chiamate
4. Network:
- Monitora le richieste/risposte HTTP
- Controlla i tempi di caricamento e le dimensioni dei file
- Esegui il debug delle chiamate API
- Filtra per tipo (JS, CSS, XHR, immagini)
- Limita la velocità di rete
5. Performance/Lighthouse:
- Analizza le prestazioni di runtime
- Genera audit delle prestazioni
- Identifica i colli di bottiglia
- Controlla Core Web Vitals
6. Application:
- Ispeziona local storage, session storage
- Visualizza e cancella i cookie
- Controlla i service worker
- Gestisci la cache
Per i junior: È prevista una forte familiarità con Console, Elements, Sources e Network. La profilazione delle prestazioni è un vantaggio.
Rarità: Comune Difficoltà: Facile
Accessibilità e Best Practice (2 Domande)
51. Cos'è l'accessibilità web e perché è importante?
Risposta: L'accessibilità web significa progettare e sviluppare siti web che possono essere utilizzati da tutti, comprese le persone con disabilità (visive, uditive, motorie, cognitive).
Perché è importante:
1. Design inclusivo: il 15% della popolazione mondiale ha qualche forma di disabilità 2. Requisiti legali: ADA (Americans with Disabilities Act), Section 508, conformità WCAG 3. Migliore UX per tutti: I sottotitoli aiutano in ambienti rumorosi, la navigazione da tastiera aiuta gli utenti esperti 4. Vantaggi SEO: HTML semantico e struttura corretta migliorano il posizionamento nella ricerca 5. Pubblico più ampio: Non escludere potenziali utenti/clienti 6. Responsabilità etica: L'uguaglianza di accesso è un diritto umano
Disabilità comuni da considerare:
- Visiva: Cecità, ipovisione, daltonismo
- Uditiva: Sordità, perdita dell'udito
- Motoria: Mobilità limitata, tremori, paralisi
- Cognitiva: Difficoltà di apprendimento, problemi di memoria
Business case: I siti web accessibili raggiungono più utenti, si posizionano meglio nella ricerca, evitano cause legali, dimostrano responsabilità aziendale.
Rarità: Comune Difficoltà: Facile-Media
52. Quali sono alcuni modi di base per rendere un sito web più accessibile?
Risposta:
Struttura HTML:
- Usa elementi semantici (
<header>,<nav>,<main>,<article>,<footer>) - Gerarchia di intestazioni appropriata (H1 → H2 → H3, senza salti)
- Etichetta correttamente gli input del form
Immagini:
- Includi sempre un testo
altdescrittivo - Usa alt vuoto per le immagini decorative:
alt=""
Navigazione da tastiera:
- Tutti gli elementi interattivi devono essere accessibili da tastiera
- Ordine di tabulazione logico
- Indicatori di focus visibili
- Non rimuovere il contorno di
:focus
Colore e contrasto:
- Contrasto di colore sufficiente (4.5:1 per il testo normale, 3:1 per il testo grande)
- Non fare affidamento esclusivamente sul colore per trasmettere informazioni
- Prova con simulatori di daltonismo
Attributi ARIA (quando necessario):
Testing:
- Usa screen reader (VoiceOver, NVDA, JAWS)
- Navigazione solo da tastiera
- Strumenti di accessibilità del browser (Lighthouse, axe)
Rarità: Comune Difficoltà: Media
Consapevolezza del Testing (1 Domanda)
53. Cos'è l'unit testing e perché è importante?
Risposta: L'unit testing prevede il test di singole funzioni o componenti in isolamento per verificare che funzionino correttamente.
Cosa testa:
- La funzione restituisce l'output previsto per l'input fornito?
- Il componente esegue il rendering corretto con le props fornite?
- I casi limite funzionano correttamente?
Esempio (Jest):
Perché è importante:
- Individua i bug in anticipo: Trova i problemi prima della produzione
- Fiducia nelle modifiche: Refactor senza paura
- Documentazione: I test mostrano come dovrebbe essere utilizzato il codice
- Debugging più veloce: Individua la posizione esatta del fallimento
- Design migliore: Il codice testabile è solitamente codice più pulito
Piramide del testing:
- Molti unit test (veloci, economici)
- Meno integration test (testa i componenti insieme)
- Pochi end-to-end test (flussi utente completi, lenti)
Per i junior: È sufficiente capire perché il testing è importante e i concetti di base. La scrittura di suite di test complete non è in genere prevista per le posizioni entry-level, ma la volontà di imparare il testing è importante.
Framework comuni: Jest, React Testing Library, Mocha, Jasmine
Rarità: Comune Difficoltà: Facile-Media
Totale: 21 domande
Questa raccolta rappresenta gli argomenti e gli strumenti avanzati che gli sviluppatori frontend junior incontrano nei colloqui. In combinazione con Parte 1: Fondamenti di HTML, CSS e JavaScript, avrai una copertura completa di 55 domande essenziali per il colloquio per il 2024-2025.


