Domande colloquio sviluppatore Android junior

Milad Bonakdar
Autore
Preparati a un colloquio Android junior con domande su Kotlin, lifecycle, Jetpack Compose, Room, networking e coroutine.
Introduzione
In un colloquio da sviluppatore Android junior ti verrà chiesto di spiegare Kotlin, lifecycle Android, stato in Compose, archiviazione locale, chiamate di rete e coroutine in modo pratico. Le risposte migliori collegano ogni concetto a una piccola app affidabile: stato UI nel posto giusto, main thread libero, dati salvati correttamente ed errori gestiti con chiarezza.
Usa questa guida per provare risposte brevi e collega ogni tema a un progetto nel tuo CV o portfolio. Un'app per task, meteo o una schermata basata su API rende la risposta più concreta e meno memorizzata.
Fondamenti di Kotlin (6 Domande)
1. Qual è la differenza tra val e var in Kotlin?
Risposta:
val: Dichiara una variabile immutabile (di sola lettura). Una volta assegnato, il suo valore non può essere modificato.var: Dichiara una variabile mutabile. Il suo valore può essere modificato dopo l'inizializzazione.- Best Practice: Utilizzare
valdi default per sicurezza. Utilizzarevarsolo quando è necessario riassegnare il valore.
Rarità: Molto Comune Difficoltà: Facile
2. Spiega i tipi Nullable e l'operatore Safe Call in Kotlin.
Risposta: Il sistema di tipi di Kotlin distingue tra tipi nullable e non-nullable per prevenire eccezioni di puntatore nullo.
- Tipo Nullable: Aggiungi
?dopo il tipo:String? - Safe Call (
?.): Chiama un metodo solo se l'oggetto non è null - Operatore Elvis (
?:): Fornisce un valore di default se null - Not-null Assertion (
!!): Lancia un'eccezione se null (usare con parsimonia)
Rarità: Molto Comune Difficoltà: Facile
3. Qual è la differenza tra una class e una data class in Kotlin?
Risposta:
- Regular Class: Definizione di classe standard
- Data Class: Genera automaticamente metodi utili per contenere dati
equals()ehashCode()toString()- Funzione
copy() - Funzioni
componentN()per il destructuring
Rarità: Molto Comune Difficoltà: Facile
4. Cosa sono le espressioni Lambda e le funzioni Higher-order in Kotlin?
Risposta:
- Lambda: Funzione anonima che può essere passata come valore
- Higher-order Function: Funzione che accetta funzioni come parametri o restituisce una funzione
Rarità: Molto Comune Difficoltà: Media
5. Spiega le Extension Functions in Kotlin.
Risposta: Le extension functions ti permettono di aggiungere nuove funzioni a classi esistenti senza modificarne il codice sorgente.
Rarità: Comune Difficoltà: Facile
6. Qual è la differenza tra == e === in Kotlin?
Risposta:
==: Uguaglianza strutturale (confronta i valori usandoequals())===: Uguaglianza referenziale (confronta i riferimenti in memoria)
Rarità: Comune Difficoltà: Facile
Componenti Android (5 Domande)
7. Cosa è una Activity e spiega il suo ciclo di vita.
Risposta: Una Activity rappresenta una singola schermata con un'interfaccia utente. Ha un ciclo di vita ben definito:
onCreate(): L'Activity viene creata. Inizializza l'interfaccia utente, imposta la content view.onStart(): L'Activity diventa visibile.onResume(): L'Activity è in primo piano e interattiva.onPause(): L'Activity perde il focus (un'altra activity passa in primo piano).onStop(): L'Activity non è più visibile.onDestroy(): L'Activity viene distrutta.
Rarità: Molto Comune Difficoltà: Facile
8. Qual è la differenza tra una Activity e un Fragment?
Risposta:
- Activity: Rappresenta una schermata intera. Punto di ingresso per l'interazione dell'utente. Ha il suo ciclo di vita.
- Fragment: Porzione riutilizzabile di interfaccia utente all'interno di una Activity. Possono esistere più fragment in una activity. Ha il suo ciclo di vita legato all'activity host.
- Vantaggi dei Fragment:
- Riutilizzabilità tra le activity
- Componenti UI modulari
- Supporto per tablet (layout multi-pannello)
- Integrazione con il Navigation Component
Rarità: Molto Comune Difficoltà: Facile
9. Cosa è un Intent e quali sono i suoi tipi?
Risposta: Intent è un oggetto di messaggistica utilizzato per richiedere un'azione da un altro componente dell'app.
- Explicit Intent: Specifica l'esatto componente da avviare (tramite il nome della classe)
- Implicit Intent: Dichiara un'azione generale e il sistema trova il componente appropriato
Rarità: Molto Comune Difficoltà: Facile
10. Cosa è un Service in Android?
Risposta: Un Service è un componente che viene eseguito in background per eseguire operazioni di lunga durata senza un'interfaccia utente.
- Tipi:
- Foreground Service: Esegue operazioni evidenti (lettore musicale). Mostra una notifica.
- Background Service: Esegue operazioni non direttamente notate dall'utente.
- Bound Service: Permette ai componenti di collegarsi ad esso e interagire.
Rarità: Comune Difficoltà: Media
11. Cosa è un BroadcastReceiver?
Risposta: BroadcastReceiver è un componente che risponde agli annunci broadcast a livello di sistema.
- Casi d'uso: Batteria scarica, cambiamenti di connettività di rete, SMS ricevuto, avvio completato
- Registrazione:
- Statica: In AndroidManifest.xml (limitata nelle versioni più recenti di Android)
- Dinamica: Nel codice (preferita)
Rarità: Comune Difficoltà: Facile
Sviluppo UI (4 Domande)
12. Qual è la differenza tra LinearLayout, RelativeLayout e ConstraintLayout?
Risposta:
- LinearLayout: Dispone i figli in una singola riga o colonna. Semplice ma può portare a layout annidati.
- RelativeLayout: Posiziona i figli rispetto agli altri o al genitore. Più flessibile ma complesso.
- ConstraintLayout: Layout moderno e flessibile. Gerarchia di view piatta. Raccomandato per UI complesse.
Rarità: Molto Comune Difficoltà: Facile
13. Cosa è RecyclerView e come funziona?
Risposta: RecyclerView è un widget efficiente per visualizzare grandi liste riciclando le view.
- Componenti:
- Adapter: Collega i dati alle view
- ViewHolder: Contiene i riferimenti alle view (evita le chiamate
findViewById) - LayoutManager: Posiziona gli elementi (Linear, Grid, Staggered)
Rarità: Molto Comune Difficoltà: Media
14. Cosa è Jetpack Compose?
Risposta: Jetpack Compose è il toolkit UI dichiarativo moderno di Android.
- Dichiarativo: Descrivi come dovrebbe apparire l'UI, non come costruirla
- Vantaggi: Meno codice, intuitivo, potente, accelera lo sviluppo
- Composable Functions: Blocchi di costruzione dell'UI di Compose
Rarità: Molto Comune Difficoltà: Facile
15. Qual è la differenza tra match_parent e wrap_content?
Risposta: Questi sono parametri di layout che definiscono le dimensioni della view:
match_parent: La view si espande per riempire le dimensioni del genitorewrap_content: La view si adatta alle dimensioni del suo contenuto- Fixed Size: Valore dp specifico (es.
100dp)
Rarità: Molto Comune Difficoltà: Facile
Dati & Networking (5 Domande)
16. Come si effettua una richiesta di rete in Android?
Risposta:
Utilizzare librerie come Retrofit o OkHttp per il networking. Evitare di utilizzare HttpURLConnection direttamente.
Rarità: Molto Comune Difficoltà: Media
17. Cosa è Room e come si usa?
Risposta: Room è un livello di astrazione sopra SQLite per un accesso al database più semplice.
- Componenti:
- Entity: Rappresenta una tabella
- DAO (Data Access Object): Definisce le operazioni del database
- Database: Contenitore del database
Rarità: Molto Comune Difficoltà: Media
18. Cosa è SharedPreferences?
Risposta: SharedPreferences memorizza piccole quantità di dati primitivi come coppie chiave-valore.
- Casi d'uso: Impostazioni utente, preferenze, flag semplici
- Non per: Grandi quantità di dati, oggetti complessi (utilizzare invece Room)
Rarità: Molto Comune Difficoltà: Facile
19. Qual è la differenza tra apply() e commit() in SharedPreferences?
Risposta: Entrambi salvano le modifiche in SharedPreferences, ma differiscono nel comportamento:
apply(): Asincrono. Restituisce immediatamente. Le modifiche vengono scritte su disco in background. Nessun valore di ritorno.commit(): Sincrono. Blocca fino a quando le modifiche non vengono scritte. Restituisce un booleano (successo/fallimento).- Best Practice: Utilizzare
apply()a meno che non sia necessario il valore di ritorno.
Rarità: Comune Difficoltà: Facile
20. Cosa sono le Coroutine in Kotlin?
Risposta: Le coroutine forniscono un modo per scrivere codice asincrono in modo sequenziale, rendendolo più facile da leggere e mantenere.
- Vantaggi: Leggere, concorrenza strutturata, gestione delle eccezioni
- Concetti chiave:
suspend: Funzione che può essere messa in pausa e ripresalaunch: Avvia una coroutine (fire and forget)async: Avvia una coroutine e restituisce un risultato- Dispatchers: Controlla su quale thread viene eseguita la coroutine
Rarità: Molto Comune Difficoltà: Media


