Area TECNICA — Tecnica informatica

Programmazione, algoritmi, strutture dati, web, DOM, architetture software. Argomenti tecnici specifici del profilo informatico.

22 domande disponibili in questa area — Pratica solo questa area →

Domande del paniere

1. Rif. INF-0046 · Tipo: profilo

In JavaScript, `element.addEventListener('click', handler, true)` registra il gestore nella fase di:

[A] Bubbling: l'evento risale dal target verso la radice
[B] Capturing: l'evento scende dalla radice verso il target ✓
[C] Un thread separato per non bloccare il rendering
[D] Coda microtask, eseguita dopo i macrotask
Spiegazione

✅ B. Il terzo parametro `true` di addEventListener attiva la fase di CAPTURING (discesa dalla radice al target). Con `false` (default) è il BUBBLING (risalita dal target alla radice). Non esistono «thread separati» nel modello di eventi DOM — JavaScript è single-threaded. ❌ A: il bubbling corrisponde al valore `false`. ❌ C: i thread separati non esistono per i gestori DOM normali. ❌ D: la coda microtask è per Promise/queueMicrotask, non per addEventListener.

2. Rif. INF-0047 · Tipo: profilo

Padre e figlio hanno entrambi un gestore 'click' in modalità bubbling. Cliccando sul figlio, quale scatta per primo?

[A] Il gestore del padre, poi quello del figlio
[B] Il gestore del figlio, poi quello del padre ✓
[C] Entrambi simultaneamente in thread separati
[D] Solo quello del figlio (il padre non riceve l'evento)
Spiegazione

✅ B. In fase di BUBBLING l'evento parte dal target (figlio) e risale verso gli antenati: prima gestore del figlio, poi del padre. In capturing (terzo parametro `true`) è l'opposto. ❌ A: descrive il comportamento in fase capturing, non bubbling. ❌ C: thread separati non esistono per il DOM. ❌ D: il padre riceve l'evento tramite bubbling, salvo `stopPropagation()`.

3. Rif. INF-0048 · Tipo: profilo

Qual è la differenza tra `event.stopPropagation()` e `event.preventDefault()`?

[A] Sono sinonimi, fanno la stessa cosa
[B] stopPropagation blocca la propagazione dell'evento verso altri elementi; preventDefault annulla l'azione default del browser ✓
[C] preventDefault blocca la propagazione; stopPropagation annulla l'azione default
[D] stopPropagation ferma tutti gli script sulla pagina; preventDefault ferma solo il form
Spiegazione

✅ B. `stopPropagation()` impedisce che l'evento si propaghi (né bubbling né capturing). `preventDefault()` annulla l'azione di default del browser (es. submit del form, follow di un link). Sono indipendenti: si possono usare entrambi, uno solo, o nessuno. ❌ A: sono metodi distinti con effetti diversi. ❌ C: li inverte. ❌ D: stopPropagation non ferma «tutti gli script», agisce solo sulla catena di propagazione dell'evento corrente.

4. Rif. INF-0049 · Tipo: profilo

JavaScript nel browser è fondamentalmente:

[A] Multithreaded: ogni callback gira in un thread dedicato
[B] Single-threaded con event loop: un solo blocco di codice JS alla volta nel main thread ✓
[C] Multithreaded per le Promise, single-threaded per gli eventi DOM
[D] Eseguito da più thread condivisi che accedono al DOM in parallelo
Spiegazione

✅ B. JS ha un singolo thread principale (main thread). L'event loop gestisce una coda di callback/messaggi eseguendoli uno alla volta. I Web Workers sono thread separati ma NON accedono al DOM direttamente. Le Promise non cambiano questo — usano la coda delle microtask nello stesso thread. ❌ A e D: il DOM non è thread-safe; l'accesso parallelo causerebbe race condition. ❌ C: anche le Promise girano nel main thread tramite microtask queue.

5. Rif. INF-0050 · Tipo: profilo

In RSA, quando il mittente crea una firma digitale, cifra l'hash del documento con:

[A] La propria chiave pubblica
[B] La chiave pubblica del destinatario
[C] La propria chiave privata ✓
[D] La chiave privata del destinatario
Spiegazione

✅ C. La firma digitale = hash del documento cifrato con la CHIAVE PRIVATA del mittente. Solo il mittente conosce la propria chiave privata → autenticazione. Il destinatario verifica decifrando con la chiave PUBBLICA del mittente e confrontando con l'hash ricalcolato. ❌ A: cifrare l'hash con la propria chiave pubblica non darebbe autenticazione (chiunque ha la chiave pubblica). ❌ B: cifrare con la chiave pubblica del destinatario è la cifratura per RISERVATEZZA, non firma. ❌ D: la chiave privata del destinatario è segreta e usata per decifrare messaggi ricevuti.

6. Rif. INF-0051 · Tipo: profilo

Per verificare la firma digitale apposta da Mario su un documento, il destinatario deve usare:

[A] La propria chiave privata
[B] La chiave privata di Mario
[C] La propria chiave pubblica
[D] La chiave pubblica di Mario ✓
Spiegazione

✅ D. Per verificare la firma di Mario si usa la CHIAVE PUBBLICA di Mario (pubblica = accessibile a tutti). Il destinatario: 1) decifra la firma con la chiave pubblica di Mario → ottiene l'hash originale; 2) calcola l'hash del documento ricevuto; 3) se i due hash coincidono, la firma è valida. ❌ A: la chiave privata del destinatario serve per decifrare messaggi cifrati per lui. ❌ B: la chiave privata di Mario è segreta, non accessibile al destinatario. ❌ C: la propria chiave pubblica non ha relazione con la firma di Mario.

7. Rif. INF-0052 · Tipo: profilo

Per garantire la riservatezza di un messaggio inviato a Sara, il mittente deve cifrarlo con:

[A] La propria chiave privata
[B] La propria chiave pubblica
[C] La chiave pubblica di Sara ✓
[D] La chiave privata di Sara
Spiegazione

✅ C. Per riservatezza: si cifra con la CHIAVE PUBBLICA del destinatario (Sara). Solo Sara, con la propria chiave privata, potrà decifrarlo. ❌ A: cifrare con la propria chiave privata crea una firma (autenticazione), non riservatezza. ❌ B: cifrare con la propria chiave pubblica sarebbe decifrabile solo con la propria chiave privata — inutile per la comunicazione. ❌ D: la chiave privata di Sara è segreta e non accessibile al mittente.

8. Rif. INF-0053 · Tipo: profilo

Un array RAID 5 è composto da 7 dischi da 4TB ciascuno. Qual è la capacità netta utilizzabile?

[A] 28TB
[B] 24TB ✓
[C] 20TB
[D] 16TB
Spiegazione

✅ B (24TB). RAID 5: capacità = (N-1) × dimensione_disco = (7-1) × 4TB = 6 × 4TB = 24TB. Un disco equivalente è usato per la parità (distribuita tra tutti). ❌ A (28TB): sarebbe la capacità totale senza ridondanza (RAID 0). ❌ C (20TB): sarebbe (N-2)×4=20 → formula del RAID 6. ❌ D (16TB): formula errata.

9. Rif. INF-0054 · Tipo: profilo

Un array RAID 6 con 8 dischi da 2TB ha capacità netta di:

[A] 16TB
[B] 14TB
[C] 12TB ✓
[D] 10TB
Spiegazione

✅ C (12TB). RAID 6: doppia parità → capacità = (N-2) × dimensione = (8-2) × 2TB = 6 × 2TB = 12TB. Tollera la perdita di 2 dischi contemporaneamente. ❌ A (16TB): è la capacità totale (RAID 0). ❌ B (14TB): formula (N-1) corretta per RAID 5, non RAID 6. ❌ D (10TB): formula errata.

10. Rif. INF-0055 · Tipo: profilo

RAID 1 con 4 dischi da 1TB: capacità netta e numero di guasti tollerati?

[A] 4TB, tollera 1 guasto
[B] 2TB, tollera 1 guasto
[C] 1TB, tollera 3 guasti ✓
[D] 1TB, tollera 2 guasti
Spiegazione

✅ C. RAID 1 puro (mirroring) con 4 dischi: tutti i dischi contengono gli stessi dati → capacità = 1 disco = 1TB. Può perdere fino a 3 dischi su 4 (rimane almeno 1 copia). ❌ A (4TB): è la capacità totale senza ridondanza. ❌ B: RAID 1 con 2 dischi avrebbe 1TB e tollera 1 guasto; con 4 dischi la capacità rimane 1TB ma la tolleranza è maggiore. ❌ D: con 4 dischi in mirror si tollerano 3 guasti (non 2).

11. Rif. INF-0056 · Tipo: profilo

RAID 10 (1+0) combina:

[A] Parità distribuita e striping
[B] Mirroring e striping: i dati sono in strisce su coppie di dischi in mirror ✓
[C] Solo mirroring senza striping
[D] Solo striping con parità singola
Spiegazione

✅ B. RAID 10 = RAID 1 (mirroring) + RAID 0 (striping). I dati sono distribuiti in stripe su più coppie di dischi specchiati. Con 4 dischi: capacità = 50% del totale, tollera la perdita di 1 disco per ogni coppia. ❌ A: la parità distribuita è RAID 5. ❌ C: solo mirroring è RAID 1. ❌ D: striping con parità singola è RAID 5.

12. Rif. INF-0057 · Tipo: profilo

Il livello di isolamento SQL REPEATABLE READ previene:

[A] Solo dirty read
[B] Dirty read e non-repeatable read, ma NON i phantom read ✓
[C] Dirty read, non-repeatable read e phantom read
[D] Solo phantom read
Spiegazione

✅ B. REPEATABLE READ garantisce che le righe lette nella transazione non cambino se rilette → previene dirty read e non-repeatable read. NON previene i phantom read (nuove righe inserite da altre transazioni che appaiono in query successive con predicati di range). ❌ A: solo dirty read è READ COMMITTED. ❌ C: tutti e tre sono prevenuti da SERIALIZABLE (non da REPEATABLE READ). ❌ D: solo phantom read non corrisponde a nessun livello standard.

13. Rif. INF-0058 · Tipo: profilo

Il livello READ COMMITTED (default in molti DBMS) previene:

[A] Dirty read, non-repeatable read e phantom read
[B] Solo dirty read ✓
[C] Solo non-repeatable read
[D] Dirty read e phantom read, ma non non-repeatable read
Spiegazione

✅ B. READ COMMITTED previene SOLO i dirty read (lettura di dati non ancora committati). Non previene: non-repeatable read (stessa riga riletta dà valori diversi) né phantom read (nuove righe appaiono). ❌ A: tutti e tre prevenuti = SERIALIZABLE. ❌ C: non-repeatable read non è prevenuto da READ COMMITTED. ❌ D: i phantom read non sono prevenuti da READ COMMITTED.

14. Rif. INF-0059 · Tipo: profilo

Un phantom read si verifica quando:

[A] Una transazione legge dati modificati ma non ancora committati da un'altra
[B] La stessa riga, riletta nella stessa transazione, restituisce un valore diverso dopo il commit di un'altra transazione
[C] Una query che usa un predicato di range restituisce righe diverse (nuove o eliminate) se eseguita due volte nella stessa transazione ✓
[D] Un indice non aggiornato causa risultati obsoleti
Spiegazione

✅ C. Phantom read = nuove righe (o righe eliminate) inserite/cancellate da altre transazioni compaiono (o scompaiono) tra due esecuzioni della stessa query con predicato (es. WHERE età > 30). ❌ A: è la definizione di dirty read. ❌ B: è la definizione di non-repeatable read (stessa riga, valore diverso). ❌ D: gli indici obsoleti sono un problema di implementazione, non un'anomalia di isolamento.

15. Rif. INF-0060 · Tipo: profilo

In un'architettura a strati (layered), ogni strato:

[A] Può accedere direttamente a qualsiasi altro strato per massimizzare le prestazioni
[B] Dipende unicamente dallo strato immediatamente sottostante e offre servizi allo strato sovrastante ✓
[C] Comunica bidirezionalmente con tutti gli altri strati
[D] È completamente indipendente e non conosce gli altri strati
Spiegazione

✅ B. Il principio fondamentale del layered architecture: ogni strato usa i servizi del layer SOTTO e espone servizi al layer SOPRA. La dipendenza è unidirezionale verso il basso. Questo garantisce separazione delle responsabilità e sostituibilità dei layer. ❌ A: l'accesso arbitrario tra strati elimina i vantaggi del layering. ❌ C: la comunicazione bidirezionale con TUTTI violerebbe l'incapsulamento. ❌ D: l'indipendenza totale non è corretta — ogni layer dipende da quello sotto.

16. Rif. INF-0061 · Tipo: profilo

L'algoritmo SHA-256 produce un digest di:

[A] 128 bit (16 byte)
[B] 160 bit (20 byte)
[C] 256 bit (32 byte) ✓
[D] 512 bit (64 byte)
Spiegazione

✅ C. SHA-256 (SHA-2 family) produce sempre un hash di 256 bit = 32 byte. ❌ A (128 bit): è MD5 (sconsigliato, vulnerabile a collisioni). ❌ B (160 bit): è SHA-1 (deprecato). ❌ D (512 bit): è SHA-512 (stessa famiglia SHA-2 ma digest più lungo).

17. Rif. INF-0062 · Tipo: profilo

In un'infrastruttura PKI, la catena di certificazione (chain of trust) serve a:

[A] Cifrare i messaggi end-to-end tra client e server
[B] Verificare che un certificato sia firmato da una CA radice fidata, passando per CA intermedie ✓
[C] Distribuire le chiavi private ai client in modo sicuro
[D] Rinnovare automaticamente i certificati scaduti
Spiegazione

✅ B. La catena di fiducia PKI: il certificato del server è firmato da una CA intermedia, che è firmata dalla CA radice (root CA). Il client verifica la catena risalendo fino alla root CA che ha in memoria come fidata. ❌ A: la PKI gestisce l'autenticazione/identità; la cifratura usa le chiavi derivate dall'handshake TLS. ❌ C: le chiavi private NON vengono mai distribuite dalla CA — restano sempre sul proprietario. ❌ D: il rinnovo è un processo separato (ACME, SCEP).

18. Rif. INF-0063 · Tipo: profilo

L'handshake TLS 1.3 (rispetto a TLS 1.2) è migliorato perché:

[A] Usa cifratura simmetrica invece di asimmetrica
[B] Richiede solo 1 round-trip invece di 2 per stabilire la connessione sicura ✓
[C] Elimina completamente l'uso dei certificati X.509
[D] Usa solo algoritmi MD5 per la velocità
Spiegazione

✅ B. TLS 1.3 riduce a 1 round-trip (1-RTT) l'handshake rispetto ai 2 di TLS 1.2, con «0-RTT» per le sessioni ripristinate. Elimina algoritmi deboli (RSA key exchange, RC4, MD5/SHA-1) e usa solo suite sicure (ECDHE, AES-GCM, ChaCha20). ❌ A: TLS usa sempre sia asimmetrica (key exchange) sia simmetrica (dati). ❌ C: i certificati X.509 rimangono fondamentali per l'autenticazione. ❌ D: MD5 è eliminato da TLS 1.3, non adottato.

19. Rif. INF-0064 · Tipo: profilo

Un server restituisce HTTP 401. Questo indica:

[A] L'utente è autenticato ma non ha i permessi necessari (autorizzazione negata)
[B] La risorsa non esiste
[C] Il client non è autenticato o le credenziali fornite sono errate ✓
[D] Il server ha un errore interno
Spiegazione

✅ C. HTTP 401 (Unauthorized) = manca l'autenticazione o le credenziali sono errate. Il client deve autenticarsi. ❌ A: l'autenticato senza permessi riceve 403 (Forbidden). ❌ B: risorsa inesistente = 404 Not Found. ❌ D: errore interno server = 500 Internal Server Error.

20. Rif. INF-0065 · Tipo: profilo

Il principio REST di «statelessness» significa che:

[A] Il server non salva mai dati nel database
[B] Ogni richiesta HTTP deve contenere tutte le informazioni necessarie per essere elaborata, senza dipendere da sessioni server-side ✓
[C] Il client non può salvare nulla in locale (cookie, localStorage)
[D] Le risorse REST non hanno stato (sono immutabili)
Spiegazione

✅ B. Stateless = il server non mantiene stato della sessione tra richieste. Ogni richiesta è autosufficiente (include token di autenticazione, parametri, etc.). Questo facilita scalabilità orizzontale. ❌ A: il DB è separato dallo stato della sessione. ❌ C: il client può usare cookie/localStorage; il vincolo riguarda il server. ❌ D: le risorse REST hanno stato (possono essere modificate via PUT/PATCH/DELETE).

21. Rif. INF-0066 · Tipo: profilo

Quale query SQL è VULNERABILE a SQL injection?

[A] SELECT * FROM utenti WHERE id = ? (con prepared statement)
[B] SELECT * FROM utenti WHERE nome = 'nomeUtente' (concatenazione diretta) ✓
[C] SELECT * FROM utenti WHERE email = :email (named parameter)
[D] SELECT * FROM utenti WHERE id = $1 (parametro posizionale PostgreSQL)
Spiegazione

✅ B. La concatenazione diretta dell'input utente nella stringa SQL è la causa classica di SQL injection. Un input come `' OR '1'='1` modifica la logica della query. ❌ A, C, D: tutte usano parametri — il DBMS interpreta il valore dell'utente come dato puro, mai come codice SQL. Questo è il modo corretto (prepared statements / parametrized queries).

22. Rif. INF-0067 · Tipo: profilo

Un attacco XSS (Cross-Site Scripting) stored si differisce dal reflected perché:

[A] Il reflected è più pericoloso del stored
[B] Nel stored, il codice malevolo è salvato nel DB del sito e colpisce chiunque visiti la pagina infetta; nel reflected il payload è nell'URL e colpisce solo chi clicca il link malevolo ✓
[C] Nel stored l'attaccante deve avere accesso fisico al server
[D] Il reflected cifra il payload, lo stored no
Spiegazione

✅ B. XSS stored (persistente): lo script malevolo è salvato nel DB (es. in un commento) e viene servito a tutti gli utenti che visitano la pagina → più pericoloso. XSS reflected: il payload è nel request (URL, form) e il server lo «rimanda» (reflect) nella risposta → colpisce solo chi clicca il link malevolo. ❌ A: è l'opposto. ❌ C: non è richiesto accesso fisico. ❌ D: né l'uno né l'altro cifra il payload.