Domande per il Colloquio di Sviluppatore Frontend Junior: Fondamenti di HTML, CSS e JavaScript

Milad Bonakdar
Autore
Padroneggia i fondamenti principali con 32 domande essenziali per il colloquio che coprono HTML, CSS e JavaScript. Preparazione perfetta per i colloqui da sviluppatore frontend junior nel 2024-2025.
Introduzione
Questa guida completa contiene 32 domande di colloquio accuratamente selezionate che coprono i fondamenti principali dello sviluppo frontend: HTML, CSS e JavaScript. 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 un livello di difficoltà basato sull'analisi di centinaia di colloqui reali provenienti da importanti aziende tecnologiche e startup.
Questa è la Parte 1 della nostra guida completa per i colloqui. Per domande su React, strumenti di build, ottimizzazione delle prestazioni, debugging, accessibilità, testing e soft skills, consulta Parte 2: React, Strumenti e Argomenti Avanzati.
Fondamenti di HTML (7 Domande)
1. Cosa sono gli elementi HTML semantici e perché sono importanti?
Risposta: Gli elementi HTML semantici descrivono chiaramente il loro significato e scopo sia ai browser che agli sviluppatori. Esempi includono <header>, <nav>, <main>, <article>, <section>, <aside> e <footer>. Sono importanti perché migliorano l'accessibilità per gli screen reader e le tecnologie assistive, migliorano la SEO aiutando i motori di ricerca a comprendere la struttura del contenuto e rendono il codice più manutenibile e leggibile. A differenza degli elementi generici <div> e <span> che non forniscono alcun contesto, gli elementi semantici comunicano il ruolo e il significato del contenuto.
Rarità: Comune
Difficoltà: Facile
2. Spiega la differenza tra elementi inline, block e inline-block
Risposta:
- Gli elementi block iniziano su una nuova riga e occupano l'intera larghezza disponibile (ad esempio,
<div>,<p>,<h1>). È possibile impostare le proprietà width e height. - Gli elementi inline rimangono sulla stessa riga e occupano solo la larghezza necessaria (ad esempio,
<span>,<a>,<strong>). Non è possibile impostare width o height. - Gli elementi inline-block rimangono inline ma consentono di impostare width e height come gli elementi block. Questo combina il flusso di inline con le capacità di dimensionamento di block.
Rarità: Comune
Difficoltà: Facile
3. Cosa sono gli elementi void (auto-chiusura) in HTML?
Risposta: Gli elementi void sono elementi HTML che non hanno tag di chiusura e non possono contenere contenuto. Esempi comuni includono: <img>, <br>, <hr>, <input>, <meta>, <link>, <area>, <base>, <col>, <embed> e <source>. Questi elementi sono completi solo con il loro tag di apertura e gli attributi. Ad esempio, <img src="photo.jpg" alt="description"> non ha bisogno di un tag di chiusura </img>.
Rarità: Comune
Difficoltà: Facile
4. Come si rende accessibile un sito web? Quali attributi HTML migliorano l'accessibilità?
Risposta: Per rendere i siti web accessibili:
- Utilizzare elementi HTML semantici (
<nav>,<main>,<header>,<footer>) - Fornire attributi
altper tutte le immagini che descrivono il loro contenuto - Mantenere una corretta gerarchia dei titoli (H1-H6) senza saltare i livelli
- Etichettare gli input del modulo con elementi
<label>usando l'attributofor - Garantire l'accessibilità da tastiera con un corretto ordine di tabulazione
- Utilizzare gli attributi ARIA quando l'HTML semantico non è sufficiente:
aria-label,aria-describedby,aria-hidden,aria-live - Aggiungere attributi
roleper widget complessi - Garantire un contrasto di colore sufficiente (4.5:1 per il testo normale)
- Rendere gli elementi interattivi focalizzabili e fornire indicatori di focus visibili
Rarità: Comune
Difficoltà: Media
5. Spiega la differenza tra i metodi GET e POST nei moduli
Risposta:
- GET: Aggiunge i dati del modulo all'URL come parametri di query, rendendo i dati visibili nel browser. Ha limitazioni di lunghezza (~2000 caratteri), può essere memorizzato nella cache e aggiunto ai segnalibri, non è sicuro per i dati sensibili. Utilizzato per recuperare dati dove la richiesta non modifica lo stato del server (ricerche, filtri).
- POST: Invia i dati nel corpo della richiesta, non visibili nell'URL. Nessuna restrizione di lunghezza, non può essere memorizzato nella cache per impostazione predefinita, più sicuro per le informazioni sensibili. Utilizzato per inviare dati che modificano lo stato del server (moduli di accesso, caricamento di file, creazione di record).
Esempio: i moduli di ricerca utilizzano tipicamente GET in modo che i risultati possano essere aggiunti ai segnalibri, mentre i moduli di accesso utilizzano POST per nascondere le credenziali.
Rarità: Comune
Difficoltà: Facile-Media
6. Qual è lo scopo del tag <meta>?
Risposta: Il tag <meta> fornisce metadati sul documento HTML che non vengono visualizzati sulla pagina ma vengono utilizzati da browser, motori di ricerca e altri servizi web. Usi comuni includono:
- Codifica dei caratteri:
<meta charset="UTF-8"> - Impostazioni della viewport per il design reattivo:
<meta name="viewport" content="width=device-width, initial-scale=1.0"> - Descrizioni SEO:
<meta name="description" content="Descrizione della pagina"> - Informazioni sull'autore:
<meta name="author" content="Nome"> - Parole chiave (meno rilevanti ora):
<meta name="keywords" content="parola chiave1, parola chiave2">
Rarità: Comune
Difficoltà: Facile
7. Qual è la differenza tra <script>, <script async> e <script defer>?
Risposta:
<script>regolare: Blocca l'analisi HTML mentre lo script viene scaricato ed eseguito. Il rendering della pagina si interrompe fino al completamento dello script.<script async>: Scarica lo script in parallelo con l'analisi HTML, ma esegue immediatamente quando è pronto (potenzialmente bloccando l'analisi). L'ordine di esecuzione non è garantito. Ottimo per script indipendenti come l'analisi.<script defer>: Scarica in parallelo ma esegue solo dopo che l'analisi HTML è completata, mantenendo l'ordine degli script. Migliore per script che dipendono dal DOM o da altri script.
Best practice: Posizionare <script defer> nell' <head> per prestazioni ottimali garantendo al contempo un corretto ordine di esecuzione.
Rarità: Non comune
Difficoltà: Media
Fondamenti di CSS (10 Domande)
8. Spiega il Modello a Scatola CSS (CSS Box Model)
Risposta: Il Modello a Scatola CSS descrive come gli elementi vengono renderizzati con quattro componenti (dall'interno verso l'esterno):
- Content: Il contenuto effettivo (testo, immagini)
- Padding: Spazio tra il contenuto e il bordo (interno)
- Border: Il bordo che circonda il padding
- Margin: Spazio esterno al bordo (tra gli elementi)
La proprietà box-sizing influisce sui calcoli:
box-sizing: content-box(predefinito): Larghezza/altezza si applicano solo al contenuto; padding e border vengono aggiuntibox-sizing: border-box: Larghezza/altezza includono contenuto + padding + border (più intuitivo)
Esempio: Con box-sizing: border-box, un elemento con width: 100px; padding: 10px; border: 2px; rimane esattamente largo 100px.
Rarità: Comune
Difficoltà: Facile-Media
9. Spiega la specificità CSS e come funziona
Risposta: La specificità CSS determina quali stili vengono applicati quando più regole puntano allo stesso elemento. La specificità viene calcolata contando i selettori:
- Stili inline: 1000 punti
- ID: 100 punti ciascuno
- Classi, attributi, pseudo-classi: 10 punti ciascuno
- Elementi, pseudo-elementi: 1 punto ciascuno
Esempi:
#nav .button= 110 (1 ID + 1 classe).header .nav a= 21 (2 classi + 1 elemento)div p= 2 (2 elementi)
Quando la specificità è uguale, l'ultima regola vince (cascata). !important sovrascrive tutto ma dovrebbe essere evitato. Best practice: utilizzare le classi per lo styling, evitare ID e !important.
Rarità: Comune
Difficoltà: Media
10. Cos'è Flexbox e quando lo useresti?
Risposta: Flexbox è un sistema di layout unidimensionale per disporre gli elementi lungo un singolo asse (riga o colonna).
Proprietà del genitore (contenitore flex):
display: flex- abilita flexboxflex-direction- row, column, row-reverse, column-reversejustify-content- allineamento lungo l'asse principale (center, space-between, space-around)align-items- allineamento lungo l'asse trasversale (center, flex-start, flex-end, stretch)flex-wrap- controlla il wrapping (nowrap, wrap)
Proprietà del figlio (elemento flex):
flex-grow- quanto l'elemento cresce rispetto agli altriflex-shrink- quanto l'elemento si restringeflex-basis- dimensione iniziale prima di crescere/restringersialign-self- sovrascrive align-items per il singolo elemento
Usa Flexbox per: Barre di navigazione, layout a schede, centrare elementi, distribuire lo spazio in modo uniforme, allineare elementi all'interno dei contenitori.
Rarità: Comune
Difficoltà: Media
11. Cos'è CSS Grid e come differisce da Flexbox?
Risposta: CSS Grid è un sistema di layout bidimensionale per creare layout complessi con righe E colonne simultaneamente.
Differenze chiave:
- Grid: Bidimensionale (righe + colonne), migliore per i layout di pagina
- Flexbox: Unidimensionale (asse singolo), migliore per i componenti
Proprietà Grid:
Quando usare:
- Grid: Layout di pagina generali, design in stile rivista, strutture a griglia complesse
- Flexbox: Barre di navigazione, schede, componenti all'interno delle celle della griglia
- Entrambi insieme: Grid per il layout macro, Flexbox per i layout micro
Rarità: Comune
Difficoltà: Media
12. Come si centra un div orizzontalmente e verticalmente?
Risposta:
Approcci moderni (preferiti):
Approcci legacy:
Flexbox e Grid sono ora le soluzioni standard in quanto sono più pulite e flessibili.
Rarità: Comune
Difficoltà: Facile-Media
13. Spiega il posizionamento CSS: static, relative, absolute, fixed e sticky
Risposta:
- Static (predefinito): Flusso normale del documento, nessun posizionamento speciale
- Relative: Posizionato rispetto alla sua posizione normale usando top/right/bottom/left. Lo spazio originale nel flusso del documento viene preservato. Spesso usato come contesto di posizionamento per i figli assoluti.
- Absolute: Rimosso dal flusso, posizionato rispetto all'antenato posizionato più vicino (o alla viewport se nessuno). Non influisce sugli altri elementi.
- Fixed: Rimosso dal flusso, posizionato rispetto alla viewport. Rimane in posizione durante lo scorrimento.
- Sticky: Ibrido di relative e fixed. Agisce in modo relativo fino alla soglia di scorrimento, quindi diventa fixed. Utile per le intestazioni sticky che iniziano in-flow.
Esempio: La navigazione che diventa fixed dopo lo scorrimento utilizza position: sticky; top: 0;
Rarità: Comune
Difficoltà: Media
14. Qual è la differenza tra display: none, visibility: hidden e opacity: 0?
Risposta:
display: none: Elemento completamente rimosso dal flusso del documento, non occupa spazio, non accessibile agli screen reader, nessun evento puntatorevisibility: hidden: Elemento invisibile ma mantiene lo spazio nel layout, ancora nel DOM, non accessibile agli screen reader, nessun evento puntatoreopacity: 0: Elemento invisibile ma mantiene lo spazio, ancora nel DOM, ANCORA accessibile agli screen reader, ANCORA riceve eventi puntatore
Casi d'uso:
display: none- attivazione/disattivazione della visibilità (modali, dropdown)visibility: hidden- mantenimento del layout durante l'occultamentoopacity: 0- animazioni di dissolvenza, mantenendo l'elemento interattivo
Rarità: Comune
Difficoltà: Facile-Media
15. Cosa sono le pseudo-classi e gli pseudo-elementi CSS? Fornisci esempi.
Risposta:
Pseudo-classi (due punti singoli) - Selezionare elementi in base allo stato o alla posizione:
Altri esempi: :active, :checked, :first-child, :last-child, :nth-of-type()
Pseudo-elementi (due punti doppi) - Stile di parti specifiche o inserimento di contenuto:
Gli pseudo-elementi sono ottimi per elementi decorativi senza aggiungere HTML.
Rarità: Comune
Difficoltà: Media
16. Come si creano layout reattivi? Spiega le media queries.
Risposta: I layout reattivi si adattano a diverse dimensioni dello schermo utilizzando:
Media Queries:
Breakpoint comuni:
- 320px: Mobile piccolo
- 768px: Tablet
- 1024px: Desktop
- 1440px: Desktop grande
Altre tecniche reattive:
- Layout fluidi (percentuali, unità
vw/vh) - Flexbox e Grid flessibili
- Immagini reattive (
max-width: 100%, attributosrcset) - Query
min-width(mobile-first) vsmax-width(desktop-first)
Rarità: Comune
Difficoltà: Media
17. Cos'è z-index e come funziona?
Risposta: z-index controlla l'ordine di impilamento degli elementi posizionati (relative, absolute, fixed, sticky) lungo l'asse z (fronte-retro).
Punti chiave:
- Funziona solo su elementi posizionati (non statici)
- I valori più alti appaiono davanti
- Può usare valori negativi
- Il valore predefinito è
auto(effettivamente 0) - Crea un "contesto di impilamento" che influisce su come i figli si impilano
Gotcha comune:
Il figlio con z-index 9999 non può apparire sopra un altro elemento con z-index 2 che è al di fuori del contesto di impilamento del genitore.
Rarità: Comune
Difficoltà: Media
Fondamenti di JavaScript (15 Domande)
18. Spiega la differenza tra var, let e const
Risposta:
var: Ambito di funzione, sollevato (hoisted) e inizializzato conundefined, può essere ridichiarato, ampiamente deprecato nel codice modernolet: Ambito di blocco, sollevato ma nella Temporal Dead Zone (TDZ) fino alla dichiarazione, non può essere ridichiarato nello stesso ambitoconst: Ambito di blocco, sollevato ma nella TDZ, deve essere inizializzato alla dichiarazione, non può essere riassegnato (ma il contenuto di oggetti/array può essere mutato)
Best practice:
- Utilizzare
constper impostazione predefinita - Utilizzare
letquando è necessario riassegnare - Non utilizzare mai
varin JavaScript moderno
Esempio:
Rarità: Comune
Difficoltà: Facile
19. Cosa sono le closure e fornisci un esempio pratico?
Risposta: Una closure si verifica quando una funzione interna ha accesso alle variabili dall'ambito della sua funzione esterna (contenitore), anche dopo che la funzione esterna è stata restituita. La funzione interna "si chiude" su queste variabili.
Esempio:
La funzione interna mantiene l'accesso a count anche se createCounter ha terminato l'esecuzione. Ciò consente la privacy dei dati - count non può essere accessibile direttamente dall'esterno.
Casi d'uso: Privacy dei dati, fabbriche di funzioni, callback, modelli di modulo, gestori di eventi
Rarità: Comune
Difficoltà: Media
20. Spiega == vs === in JavaScript
Risposta:
==(uguaglianza debole): Esegue la coercizione del tipo prima del confronto, converte i tipi per farli corrispondere===(uguaglianza stretta): Controlla sia il valore CHE il tipo, nessuna coercizione del tipo
Esempi:
Best practice: Utilizzare sempre === e !== per evitare bug imprevisti dalla coercizione del tipo.
Rarità: Comune
Difficoltà: Facile
21. Cos'è l'hoisting in JavaScript?
Risposta: L'hoisting è il comportamento di JavaScript di spostare le dichiarazioni di variabili e funzioni nella parte superiore del loro ambito durante la fase di compilazione, prima dell'esecuzione del codice.
Diversi comportamenti di hoisting:
Punti chiave:
- Le dichiarazioni
varvengono sollevate e inizializzate conundefined let/constvengono sollevate ma rimangono non inizializzate (Temporal Dead Zone)- Le dichiarazioni di funzioni vengono completamente sollevate (inclusa l'implementazione)
- Le espressioni di funzioni non vengono completamente sollevate
Rarità: Comune
Difficoltà: Media
22. Spiega la parola chiave this e come differisce nelle arrow function
Risposta: this si riferisce al contesto in cui una funzione viene eseguita. Il suo valore dipende da COME la funzione viene chiamata.
Funzioni regolari:
Arrow function:
Differenze chiave:
- Funzioni regolari:
thisdeterminato dal punto di chiamata - Arrow function:
thisereditato lessicalmente dall'ambito di chiusura - Le arrow function non hanno il proprio
this,argumentsosuper
Caso d'uso: Le arrow function sono ottime per le callback in cui si desidera preservare il this esterno:
Rarità: Comune
Difficoltà: Medio-Difficile
23. Cosa sono i template literal e i loro vantaggi?
Risposta: I template literal sono stringhe letterali che utilizzano backtick (`) che supportano l'interpolazione di stringhe e le stringhe multi-linea.
Caratteristiche:
Vantaggi:
- Sintassi più pulita rispetto alla concatenazione di stringhe
- Nessuna necessità di
\nper le interruzioni di riga - Può incorporare qualsiasi espressione JavaScript con
${} - Migliore per la generazione di HTML/CSS
Rarità: Comune
Difficoltà: Facile
24. Spiega le Promise e i loro tre stati
Risposta: Una Promise rappresenta il completamento (o il fallimento) eventuale di un'operazione asincrona e il suo valore risultante.
Tre stati:
- Pending: Stato iniziale, operazione non completata
- Fulfilled: Operazione completata con successo
- Rejected: Operazione fallita
Esempio:
Vantaggi rispetto alle callback:
- Evita l'inferno delle callback
- Concatenabile con
.then() - Migliore gestione degli errori con
.catch() - Può utilizzare Promise.all() per operazioni parallele
Rarità: Comune
Difficoltà: Media
25. Cosa sono async/await e come migliorano la leggibilità del codice?
Risposta: async/await è zucchero sintattico costruito su Promise che rende il codice asincrono più simile e si comporta più come codice sincrono.
Esempio:
Punti chiave:
- La funzione
asyncrestituisce sempre una Promise awaitmette in pausa l'esecuzione fino a quando la Promise non si risolve- Utilizzare
try/catchper la gestione degli errori - Rende le operazioni sequenziali più chiare
- Gestione degli errori più naturale di
.catch()
Rarità: Comune
Difficoltà: Media
26. Spiega l'Event Loop e come JavaScript gestisce le operazioni asincrone
Risposta: JavaScript è single-threaded ma gestisce le operazioni asincrone attraverso il meccanismo Event Loop.
Componenti:
- Call Stack: Esegue codice sincrono (LIFO)
- Web API: Gestisce operazioni asincrone (setTimeout, fetch, eventi DOM)
- Callback Queue (Task Queue): Contiene callback da Web API
- Microtask Queue: Contiene callback Promise (priorità più alta)
- Event Loop: Sposta le attività dalle code allo stack di chiamate quando lo stack è vuoto
Ordine di esecuzione:
Ordine di esecuzione: Call Stack → Microtask Queue → Callback Queue (Macrotasks)
Rarità: Comune
Difficoltà: Difficile
27. Come si selezionano e manipolano gli elementi DOM?
Risposta:
Metodi di selezione:
Manipolazione:
Rarità: Comune
Difficoltà: Facile
28. Spiega la delega degli eventi e perché è utile
Risposta: La delega degli eventi consiste nell'associare un singolo listener di eventi a un elemento genitore invece di più listener a elementi figlio, sfruttando il bubbling degli eventi.
Senza delega (inefficiente):
Con delega (efficiente):
Vantaggi:
- Prestazioni migliori: Singolo listener vs molti
- Funziona con elementi dinamici: Gestisce automaticamente gli elementi aggiunti in seguito
- Minore utilizzo di memoria: Meno listener di eventi
- Codice più pulito: Gestione centralizzata degli eventi
Caso d'uso: Elenchi in cui gli elementi possono essere aggiunti/rimossi dinamicamente (liste di cose da fare, carrelli della spesa, sezioni di commenti)
Rarità: Comune
Difficoltà: Media
29. Cos'è l'event bubbling? Come si interrompe la propagazione?
Risposta: L'event bubbling si verifica quando un evento attivato su un elemento figlio "sale" attraverso i suoi antenati fino alla radice del documento.
Tre fasi:
- Fase di cattura (Capturing Phase): L'evento viaggia dalla finestra all'obiettivo
- Fase di destinazione (Target Phase): L'evento raggiunge l'elemento di destinazione
- Fase di bubbling (Bubbling Phase): L'evento sale dalla destinazione alla finestra (predefinito)
Esempio:
Interruzione della propagazione:
Rarità: Comune
Difficoltà: Media
30. Spiega il destructuring per oggetti e array
Risposta: Il destructuring estrae valori da array o proprietà da oggetti in variabili distinte.
Destructuring di array:
Destructuring di oggetti:
Parametri di funzione:


