Java
Sprig
Rest
Microservizzi
Database
100

Qual è la differenza tra una variabile locale e una variabile di istanza?


    • Una variabile locale è dichiarata all'interno di un metodo e accessibile solo all'interno di quel metodo.

    • Una variabile di istanza è dichiarata all'interno di una classe ma al di fuori dei metodi e appartiene a un'istanza specifica della classe.


100

Cos'è l'Inversion of Control (IoC) in Spring?

L'Inversion of Control (IoC) è un principio secondo cui il controllo della creazione e gestione degli oggetti viene spostato dal programmatore a Spring.
Spring gestisce i bean all'interno di un IoC Container, che inietta le dipendenze automaticamente.

100

Qual è la differenza tra REST e SOAP?

  • REST è leggero, basato su HTTP e JSON, semplice da usare e scalabile.

  • SOAP (Simple Object Access Protocol) è più complesso, usa XML e richiede più overhead.
    REST è preferito per le API web moderne, mentre SOAP è usato in applicazioni aziendali con esigenze avanzate di sicurezza e transazioni.

100

Cosa sono i microservizi?


I microservizi sono un'architettura software in cui un'applicazione è suddivisa in piccoli servizi indipendenti, ognuno con una responsabilità specifica. Ogni servizio è autonomo, può essere sviluppato, distribuito e scalato separatamente dagli altri.

100

Cosa è un database e quali sono i tipi principali?

Un database è un sistema per archiviare, organizzare e gestire dati in modo strutturato. I principali tipi sono:

  • Relazionali (SQL) → Strutturati in tabelle con relazioni (es. MySQL, PostgreSQL).

  • Non Relazionali (NoSQL) → Dati memorizzati in documenti, chiave-valore o grafi (es. MongoDB, Redis, Cassandra).

200

Cosa sono i tipi primitivi in Java? Puoi elencarne alcuni? (almeno 5)

I tipi primitivi in Java sono tipi di dati di base che non sono oggetti e hanno una dimensione fissa in memoria. Esempi:

  • byte, short, int, long (numeri interi)

  • float, double (numeri decimali)

  • char (caratteri)

  • boolean (true/false)

200

Quali sono i principali moduli di Spring? (almeno 3)

Spring Framework è suddiviso in vari moduli, tra cui:

  • Spring Core → Gestisce IoC e DI

  • Spring MVC → Framework per applicazioni web

  • Spring Boot → Configurazione automatica per app Spring

  • Spring Data → Semplifica l’accesso ai database

  • Spring Security → Autenticazione e autorizzazione

  • Spring Cloud → Microservizi e architetture distribuite

200

Cos'è un endpoint REST?

Un endpoint REST è un URL che espone una risorsa o un insieme di risorse tramite HTTP.
Esempio di endpoint:

200

Quali sono i vantaggi dei microservizi rispetto a un'architettura monolitica?

I principali vantaggi dei microservizi includono:
✅ Scalabilità indipendente (si scala solo il servizio necessario)
✅ Deploy autonomo (aggiornamenti senza impattare l’intera applicazione)
✅ Manutenibilità migliorata (codice più semplice e suddiviso)
✅ Flessibilità tecnologica (ogni microservizio può usare linguaggi e database diversi)
✅ Resilienza (un problema in un servizio non blocca l'intera applicazione)

200

Cosa sono SQL e NoSQL?

  • SQL (Structured Query Language): Usa tabelle, relazioni e schema fisso (es. MySQL, Oracle, PostgreSQL).

  • NoSQL (Not Only SQL): Flessibile, usato per grandi volumi di dati (es. MongoDB, DynamoDB, Redis).

300

Come si crea un oggetto in Java e qual è il ruolo del costruttore?

  • Un oggetto si crea utilizzando la parola chiave new, seguita dal costruttore della classe. Esempio:

    ClasseOggetto obj = new ClasseOggetto();


  • Il costruttore è un metodo speciale che ha lo stesso nome della classe e viene eseguito automaticamente alla creazione dell'oggetto per inizializzare i suoi attributi.

300

Cos'è un Controller in Spring MVC?

Un Controller in Spring MVC gestisce le richieste HTTP e restituisce le risposte.
Esempio di REST Controller:

javaCopiaModifica

@RestController
@RequestMapping("/api")
public class MioController {    @GetMapping("/ciao")    public String saluta() {        return "Ciao, mondo!";    } }


300

Come si inviano dati in una richiesta REST?

I dati possono essere inviati in diversi modi:

  • Query parameters (per filtri o parametri di ricerca):


    GET /users?name=John&age=30


  • Path parameters (identificano una risorsa specifica):


    GET /users/1


  • Body (per dati strutturati in POST/PUT/PATCH), solitamente in JSON:


    {    "name": "John Doe",    "email": "john@example.com"
    }


  • Headers (per metadati, come il tipo di contenuto o token di autenticazione):


    Content-Type: application/json Authorization: Bearer <token>


300

Come comunicano tra loro i microservizi?

I microservizi possono comunicare tramite:
🔹 REST API (HTTP/JSON) → semplice, ma introduce latenza
🔹 gRPC (Protocol Buffers) → più veloce e ottimizzato per le prestazioni
🔹 Messaggistica asincrona (RabbitMQ, Kafka) → migliore per eventi e resilienza

300

Cos’è una chiave primaria e una chiave esterna?

  • Chiave Primaria (Primary Key) → Identifica in modo univoco una riga in una tabella.

    CREATE TABLE utenti (    id INT PRIMARY KEY,    nome VARCHAR(50) );


  • Chiave Esterna (Foreign Key) → Collega una tabella a un’altra per mantenere relazioni.

    CREATE TABLE ordini (    id INT PRIMARY KEY,    utente_id INT,    FOREIGN KEY (utente_id) REFERENCES utenti(id) );


400

Qual è la differenza tra un'interfaccia e una classe astratta?

  • Interfaccia: contiene solo metodi astratti (default e static esclusi) e costanti. Una classe può implementare più interfacce.

  • Classe astratta: può avere sia metodi astratti che metodi concreti. Una classe può estendere solo una classe astratta.

400

Cos'è Spring JPA e come si usa?

Spring JPA (Java Persistence API) è un modulo che semplifica l'interazione con database relazionali.
Esempio di Entity + Repository con Spring Data JPA:

@Entity
public class Utente {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Long id;    private String nome; }


@Repository

public interface UtenteRepository extends JpaRepository<Utente, Long> {

    List<Utente> findByNome(String nome);

}



400

Cosa sono le CORS (Cross-Origin Resource Sharing) e perché sono importanti nelle API REST?

Le CORS (Cross-Origin Resource Sharing) sono una politica di sicurezza dei browser che impedisce a un sito web di fare richieste a un'API situata su un dominio diverso.
Per abilitare CORS in un'API Spring Boot, si può aggiungere:

@CrossOrigin(origins = "https://example.com")
@RestController
public class UserController {    // API methods here
}


Oppure configurare CORS globalmente:

@Bean
public WebMvcConfigurer corsConfigurer() {    return new WebMvcConfigurer() {        @Override        public void addCorsMappings(CorsRegistry registry) {            registry.addMapping("/**")                    .allowedOrigins("*")                    .allowedMethods("GET", "POST", "PUT", "DELETE");        }    }; }


400

Cos'è API Gateway e a cosa serve?

L'API Gateway è un punto di accesso unico per i client verso i microservizi.
🔹 Funzioni principali:
✔️ Instrada le richieste ai servizi giusti
✔️ Autenticazione e autorizzazione
✔️ Rate limiting (protezione da overload)
✔️ Logging e monitoraggio

Esempio con Spring Cloud Gateway:

@SpringBootApplication
public class ApiGatewayApplication {    public static void main(String[] args) {        SpringApplication.run(ApiGatewayApplication.class, args);    } }


400

Cos’è un’operazione CRUD nei database?

CRUD è l'acronimo delle operazioni fondamentali sui dati:

  • Create → Creazione di un nuovo record

  • Read → Lettura di dati esistenti

  • Update → Modifica di dati esistenti

  • Delete → Eliminazione di dati

500
Cosa sono le stream?

La stream  e una operazione sulle Collector essa puo contenere metodi intermedi e metodi terminali

500

 Qual è la differenza tra @Component, @Service e @Repository?

Risposta:

  • @Component: Generico, indica un bean gestito da Spring.

  • @Service: Usato per la logica di business di un'applicazione.

  • @Repository: Usato per la gestione della persistenza dei dati, con supporto aggiuntivo per la gestione delle eccezioni legate al database.

500

Cosa significa che REST è "stateless"?

Un'API REST è stateless perché ogni richiesta HTTP è indipendente e non mantiene lo stato tra una richiesta e l'altra. Tutte le informazioni necessarie per elaborare una richiesta devono essere incluse in essa (es. token di autenticazione).

500

Cos'è il Service Discovery e perché è importante nei microservizi?

Il Service Discovery permette ai microservizi di individuarsi dinamicamente senza conoscere gli indirizzi fissi.
🔹 Esempi di tool:
✔️ Eureka (Spring Cloud Netflix)
✔️ Consul
✔️ Zookeeper

Esempio di registrazione con Eureka:

eureka:  client:    registerWithEureka: true    fetchRegistry: true


500

Cos’è la replica nei database e perché è utile?

La replica copia i dati da un database a un altro per ridondanza e scalabilità.
✔️ Master-Slave → Un database principale (Master) replica i dati a uno o più secondari (Slave).
✔️ Master-Master → Due database si aggiornano a vicenda (più complesso ma utile per carichi elevati).

Esempio in MySQL:

CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_USER='replica_user', MASTER_PASSWORD='password';
START SLAVE;