dicembre 21, 2025
9 min di lettura

Domande di colloquio per sviluppatori backend (Java): Guida completa

interview
career-advice
job-search
Domande di colloquio per sviluppatori backend (Java): Guida completa
MB

Milad Bonakdar

Autore

Padroneggia lo sviluppo backend Java con domande essenziali per il colloquio che riguardano Spring Boot, Microservizi, JPA e progettazione di sistemi. Preparazione perfetta per i colloqui da sviluppatore Java.


Introduzione

Java rimane una potenza nel mondo del backend enterprise, specialmente con il moderno ecosistema Spring Boot. La sua robustezza, scalabilità e vasto ecosistema lo rendono una scelta eccellente per la creazione di microservizi e applicazioni cloud-native.

Questa guida copre le domande essenziali per i colloqui per gli sviluppatori Backend specializzati in Java e Spring Boot. Esploreremo i concetti fondamentali del framework, l'architettura dei microservizi, le interazioni con il database tramite JPA/Hibernate e le migliori pratiche per aiutarti a prepararti per il tuo prossimo colloquio.


Concetti fondamentali di Spring Boot

1. Cos'è Spring Boot e in cosa differisce dal tradizionale Spring Framework?

Risposta:

  • Spring Framework: Un framework completo per lo sviluppo Java enterprise. Richiede una significativa configurazione manuale (basata su XML o Java) per l'installazione.
  • Spring Boot: Un'estensione dello Spring Framework che semplifica la configurazione e lo sviluppo di nuove applicazioni Spring.
    • Auto-Configurazione: Configura automaticamente i bean in base alle dipendenze del classpath.
    • Server incorporati: Include Tomcat, Jetty o Undertow, quindi non è necessario distribuire file WAR.
    • Starter: Dipendenze curate per semplificare la configurazione della build.
    • Impostazioni predefinite opinabili: Approccio "Convenzione sulla configurazione".

Rarità: Comune Difficoltà: Facile


2. Spiega l'annotazione @SpringBootApplication.

Risposta: È un'annotazione di convenienza che combina altre tre annotazioni:

  1. @Configuration: Contrassegna la classe come origine delle definizioni dei bean.
  2. @EnableAutoConfiguration: Indica a Spring Boot di iniziare ad aggiungere bean in base alle impostazioni del classpath, ad altri bean e a varie impostazioni delle proprietà.
  3. @ComponentScan: Indica a Spring di cercare altri componenti, configurazioni e servizi nel pacchetto corrente e nei sottopacchetti.

Rarità: Comune Difficoltà: Facile


3. Cosa sono l'Dependency Injection (DI) e l'Inversion of Control (IoC)?

Risposta:

  • IoC: Un principio in cui il controllo della creazione e della gestione degli oggetti viene trasferito dal programmatore a un contenitore (Spring IoC Container).
  • DI: Un modello di progettazione utilizzato per implementare IoC. Invece che un oggetto crei le sue dipendenze, queste vengono "iniettate" in esso (tramite Costruttore, Setter o Campo).
  • Vantaggio: Disaccoppiamento, test più semplici (dipendenze di mocking) e migliore manutenibilità.

Rarità: Molto comune Difficoltà: Media


4. Cosa sono gli Spring Boot Starter? Fai degli esempi.

Risposta: Gli Starter sono un insieme di descrittori di dipendenza convenienti che puoi includere nella tua applicazione. Contengono tutte le dipendenze necessarie per avviare rapidamente un progetto con un insieme coerente e supportato di dipendenze transitive gestite.

  • Esempi:
    • spring-boot-starter-web: Per la creazione di applicazioni web (include Tomcat e Spring MVC).
    • spring-boot-starter-data-jpa: Per l'utilizzo di Spring Data JPA con Hibernate.
    • spring-boot-starter-test: Per i test (include JUnit, Mockito).
    • spring-boot-starter-security: Per Spring Security.

Rarità: Comune Difficoltà: Facile


5. Cos'è Spring Actuator?

Risposta: Spring Boot Actuator fornisce funzionalità pronte per la produzione per aiutarti a monitorare e gestire la tua applicazione.

  • Endpoint: Espone endpoint come /health (stato dell'app), /metrics (memoria, utilizzo della CPU), /info (informazioni sull'app), /env (proprietà dell'ambiente).
  • Utilizzo: Fondamentale per i team operativi per controllare lo stato di salute dei microservizi in produzione.

Rarità: Comune Difficoltà: Media


Microservizi e architettura

6. Quali sono i vantaggi dei microservizi rispetto all'architettura monolitica?

Risposta:

  • Scalabilità: I singoli servizi possono essere scalati indipendentemente in base alla domanda.
  • Agnosticismo tecnologico: Servizi diversi possono utilizzare tecnologie diverse (Java, Go, Python) più adatte all'attività.
  • Isolamento dei guasti: Un guasto in un servizio non comporta necessariamente l'arresto dell'intero sistema.
  • Distribuzione indipendente: I team possono distribuire i servizi in modo indipendente, consentendo cicli di rilascio più rapidi (CI/CD).

Rarità: Comune Difficoltà: Media


7. Cos'è un API Gateway? Perché usarlo?

Risposta: Un API Gateway è un server che funge da singolo punto di ingresso nel sistema. Prende tutte le chiamate API dai client, quindi le indirizza al microservizio appropriato.

  • Funzioni: Routing delle richieste, composizione e traduzione del protocollo.
  • Preoccupazioni trasversali: Autenticazione, terminazione SSL, limitazione della velocità, memorizzazione nella cache, registrazione.
  • Esempi: Spring Cloud Gateway, Netflix Zuul, Kong.

Rarità: Molto comune Difficoltà: Media


8. Spiega Service Discovery (Eureka).

Risposta: In un ambiente di microservizi, le istanze di servizio hanno indirizzi IP dinamici. Service Discovery è un meccanismo per i servizi per trovarsi l'un l'altro.

  • Eureka Server: Funge da registro dei servizi.
  • Eureka Client: I microservizi si registrano con Eureka Server all'avvio e inviano heartbeat.
  • Discovery: Quando il Servizio A deve chiamare il Servizio B, chiede a Eureka l'indirizzo del Servizio B.

Rarità: Comune Difficoltà: Media


9. Cos'è il Circuit Breaker Pattern?

Risposta: Il modello Circuit Breaker impedisce a un'applicazione di provare ripetutamente a eseguire un'operazione che probabilmente fallirà (ad esempio, chiamare un servizio inattivo).

  • Stati:
    • Closed: Le richieste fluiscono normalmente.
    • Open: Le richieste vengono bloccate immediatamente (fail fast) per consentire al servizio in errore di riprendersi.
    • Half-Open: Un numero limitato di richieste viene consentito per verificare se il servizio è stato ripristinato.
  • Strumenti: Resilience4j (consigliato), Hystrix (deprecato).

Rarità: Molto comune Difficoltà: Difficile


Database e JPA

10. Cosa sono JPA e Hibernate?

Risposta:

  • JPA (Java Persistence API): Una specifica per l'accesso, la persistenza e la gestione dei dati tra oggetti Java e un database relazionale. È solo un'interfaccia.
  • Hibernate: L'implementazione più popolare della specifica JPA. È uno strumento ORM (Object-Relational Mapping).

Rarità: Comune Difficoltà: Facile


11. Spiega il problema N+1 Select in Hibernate.

Risposta: Il problema N+1 si verifica quando il framework di accesso ai dati esegue N istruzioni SQL aggiuntive per recuperare gli stessi dati che avrebbero potuto essere recuperati durante l'esecuzione della query SQL principale.

  • Scenario: Recupero di un elenco di Author (1 query). Iterazione e accesso a author.getBooks() (N query, una per ogni autore).
  • Soluzione: Utilizzare Join Fetch in JPQL (SELECT a FROM Author a JOIN FETCH a.books) o Entity Graphs per caricare le entità correlate eager in una singola query.

Rarità: Molto comune Difficoltà: Media


12. Qual è la differenza tra @Entity, @Table e @Column?

Risposta:

  • @Entity: Specifica che la classe è un'entità ed è mappata a una tabella di database.
  • @Table: Opzionale. Specifica il nome della tabella di database da utilizzare per la mappatura. Se omesso, viene utilizzato il nome della classe.
  • @Column: Opzionale. Specifica i dettagli della colonna a cui verrà mappato un campo o una proprietà. Se omesso, viene utilizzato il nome del campo.

Rarità: Comune Difficoltà: Facile


Sicurezza e test

13. Come proteggere un'applicazione Spring Boot?

Risposta: Utilizzando Spring Security.

  • Autenticazione: Verifica chi è l'utente (ad esempio, Basic Auth, Form Login, OAuth2/OIDC).
  • Autorizzazione: Verifica cosa è consentito all'utente (ad esempio, controllo degli accessi basato sui ruoli utilizzando @PreAuthorize).
  • JWT: Per i microservizi stateless, i JSON Web Token vengono comunemente utilizzati per trasmettere l'identità tra i servizi.

Rarità: Comune Difficoltà: Media


14. Qual è la differenza tra @Mock e @InjectMocks in Mockito?

Risposta:

  • @Mock: Crea un oggetto mock della classe/interfaccia. Non ha alcun comportamento reale; si definisce il suo comportamento usando when(...).thenReturn(...).
  • @InjectMocks: Crea un'istanza della classe e inietta in questa istanza i mock creati con le annotazioni @Mock (o @Spy). Utilizzato per la classe in fase di test.

Rarità: Comune Difficoltà: Media


15. Come gestire le transazioni in Spring Boot?

Risposta: Utilizzando l'annotazione @Transactional.

  • Meccanismo: Spring crea un proxy attorno alla classe/metodo. Avvia una transazione prima dell'esecuzione del metodo e la esegue dopo che il metodo restituisce. Se viene generata una RuntimeException, esegue il rollback della transazione.
  • Propagation: È possibile configurare come la transazione si relaziona alle transazioni esistenti (ad esempio, REQUIRED, REQUIRES_NEW).

Rarità: Comune Difficoltà: Media


Argomenti avanzati

16. Cos'è Spring Cloud Config?

Risposta: Spring Cloud Config fornisce supporto lato server e lato client per la configurazione esterna in un sistema distribuito.

  • Config Server: Luogo centrale per gestire le proprietà esterne per le applicazioni in tutti gli ambienti. Può essere supportato da Git, SVN o Vault.
  • Vantaggio: È possibile modificare la configurazione senza ridistribuire l'applicazione (utilizzando @RefreshScope).

Rarità: Non comune Difficoltà: Media


17. Spiega la differenza tra scope Singleton e Prototype in Spring Beans.

Risposta:

  • Singleton (Predefinito): Viene creata una sola istanza del bean per ogni contenitore Spring IoC. Viene memorizzato nella cache e riutilizzato.
  • Prototype: Viene creata una nuova istanza ogni volta che viene richiesto il bean.
  • Altri: Request, Session (scope web-aware).

Rarità: Comune Difficoltà: Facile


18. Qual è la differenza tra eccezioni Checked e Unchecked in Java?

Risposta:

  • Eccezioni checked: Ereditano da Exception (ma non da RuntimeException). Il compilatore ti obbliga a gestirle (try-catch) o a dichiararle (throws). Esempio: IOException, SQLException. Rappresentano condizioni recuperabili.
  • Eccezioni unchecked: Ereditano da RuntimeException. Il compilatore non ti obbliga a gestirle. Esempio: NullPointerException, IllegalArgumentException. Rappresentano errori di programmazione. L'annotazione @Transactional di Spring esegue il rollback solo in caso di eccezioni non controllate per impostazione predefinita.

Rarità: Comune Difficoltà: Facile


19. Come funziona il Garbage Collection in Java?

Risposta: Il Garbage Collection (GC) è il processo di recupero automatico della memoria occupata da oggetti che non sono più raggiungibili.

  • Ipotesi generazionale: La maggior parte degli oggetti muore giovane.
  • Struttura dell'Heap: Young Generation (Eden, Survivor spaces) e Old Generation.
  • Minor GC: Pulisce Young Gen. Veloce.
  • Major/Full GC: Pulisce Old Gen. Più lento, può causare pause "Stop-the-world".
  • Algoritmi: G1GC (predefinito in Java moderno), ZGC, Shenandoah (bassa latenza).

Rarità: Comune Difficoltà: Difficile


20. Cosa sono gli Java Stream?

Risposta: Introdotti in Java 8, gli Stream forniscono un approccio funzionale all'elaborazione di raccolte di oggetti.

  • Caratteristiche: Dichiarativo, Pipelining, Iterazione interna.
  • Operazioni:
    • Intermedie: filter, map, sorted (lazy).
    • Terminali: collect, forEach, reduce (attivano l'elaborazione).
  • Parallel Streams: Possono elaborare i dati in parallelo utilizzando più thread (.parallelStream()).

Rarità: Comune Difficoltà: Media

Newsletter subscription

Consigli di carriera settimanali che funzionano davvero

Ricevi le ultime idee direttamente nella tua casella di posta

Decorative doodle

Crea un Curriculum che Ti Faccia Assumere il 60% Più Velocemente

In pochi minuti, crea un curriculum personalizzato e compatibile con ATS che ha dimostrato di ottenere 6 volte più colloqui.

Crea un curriculum migliore

Condividi questo post

Raddoppia le Tue Chiamate per Colloqui

I candidati che personalizzano il loro curriculum in base alla descrizione del lavoro ottengono 2,5 volte più colloqui. Usa la nostra IA per personalizzare automaticamente il tuo CV per ogni singola candidatura istantaneamente.