dicembre 21, 2025
12 min di lettura

Domande per il Colloquio di Sviluppatore Backend Junior (Python): Guida Completa

interview
career-advice
job-search
entry-level
Domande per il Colloquio di Sviluppatore Backend Junior (Python): Guida Completa
MB

Milad Bonakdar

Autore

Padroneggia lo sviluppo backend in Python con domande essenziali per il colloquio, che coprono i fondamenti di Python, Django/Flask, database, API e altro ancora. Preparazione perfetta per i colloqui da sviluppatore backend junior.


Introduzione

Questa guida completa contiene 30 domande essenziali per il colloquio che coprono lo sviluppo backend in Python. Queste domande sono progettate per aiutare gli sviluppatori backend junior a prepararsi per i colloqui, trattando concetti chiave in Python, framework web (Django/Flask), database e architettura backend generale. Ogni domanda include una risposta dettagliata, una valutazione della rarità e un livello di difficoltà.

Che tu stia iniziando la tua carriera o stia cercando di passare allo sviluppo backend, questa guida ti aiuterà a costruire fiducia e a padroneggiare i fondamenti.


Fondamenti di Python (10 Domande)

1. Qual è la differenza tra list e tuple in Python?

Risposta:

  • list: Mutabile (può essere modificata), definita con parentesi quadre [], più lenta delle tuple.
  • tuple: Immutabile (non può essere modificata), definita con parentesi tonde (), più veloce delle liste, può essere usata come chiave di dizionario.

Esempio:

# Lista
my_list = [1, 2, 3]
my_list[0] = 10  # Consentito

# Tupla
my_tuple = (1, 2, 3)
# my_tuple[0] = 10  # TypeError: 'tuple' object does not support item assignment

Rarità: Comune Difficoltà: Facile


2. Spiega la differenza tra is e ==

Risposta:

  • ==: Verifica l'uguaglianza di valore (gli oggetti hanno lo stesso valore?).
  • is: Verifica l'uguaglianza di riferimento (le variabili puntano esattamente allo stesso oggetto in memoria?).

Esempio:

a = [1, 2, 3]
b = [1, 2, 3]

print(a == b)  # True (i valori sono uguali)
print(a is b)  # False (oggetti diversi in memoria)

c = a
print(a is c)  # True (stesso oggetto)

Rarità: Comune Difficoltà: Facile


3. Cosa sono i decoratori in Python e come funzionano?

Risposta: Un decoratore è un pattern di progettazione in Python che consente a un utente di aggiungere nuove funzionalità a un oggetto esistente senza modificarne la struttura. I decoratori vengono solitamente chiamati prima della definizione di una funzione che si desidera decorare.

Esempio:

def my_decorator(func):
    def wrapper():
        print("Qualcosa sta succedendo prima che la funzione venga chiamata.")
        func()
        print("Qualcosa sta succedendo dopo che la funzione è stata chiamata.")
    return wrapper

@my_decorator
def say_hello():
    print("Ciao!")

say_hello()
# Output:
# Qualcosa sta succedendo prima che la funzione venga chiamata.
# Ciao!
# Qualcosa sta succedendo dopo che la funzione è stata chiamata.

Rarità: Comune Difficoltà: Media


4. Qual è la differenza tra args e kwargs?

Risposta:

  • *args: Permette di passare un numero variabile di argomenti non-keyword a una funzione. Li raccoglie in una tupla.
  • **kwargs: Permette di passare un numero variabile di argomenti keyword a una funzione. Li raccoglie in un dizionario.

Esempio:

def example_function(*args, **kwargs):
    print("args:", args)
    print("kwargs:", kwargs)

example_function(1, 2, 3, name="Alice", age=30)
# Output:
# args: (1, 2, 3)
# kwargs: {'name': 'Alice', 'age': 30}

Rarità: Comune Difficoltà: Facile


5. Spiega le list comprehensions

Risposta: Le list comprehensions forniscono un modo conciso per creare liste. Le applicazioni comuni sono la creazione di nuove liste in cui ogni elemento è il risultato di alcune operazioni applicate a ciascun membro di un'altra sequenza o iterabile, oppure la creazione di una sottosequenza di quegli elementi che soddisfano una determinata condizione.

Esempio:

# Modo tradizionale
squares = []
for x in range(10):
    squares.append(x**2)

# List comprehension
squares = [x**2 for x in range(10)]

Rarità: Comune Difficoltà: Facile


6. Cosa sono i generatori e la keyword yield?

Risposta: I generatori sono un modo semplice per creare iteratori. Sono funzioni che restituiscono un oggetto (iteratore) su cui possiamo iterare (un valore alla volta). La keyword yield viene utilizzata come return, tranne per il fatto che la funzione restituirà un generatore.

Esempio:

def simple_generator():
    yield 1
    yield 2
    yield 3

for value in simple_generator():
    print(value)
# Output: 1, 2, 3

Vantaggi: Efficienza della memoria (valutazione lazy).

Rarità: Media Difficoltà: Media


7. Come funziona la gestione della memoria in Python?

Risposta: Python utilizza uno spazio heap privato per gestire la memoria. Tutti gli oggetti Python e le strutture dati si trovano in un heap privato. Il programmatore non ha accesso a questo heap privato. L'interprete si occupa di questo heap privato di Python. Python ha anche un garbage collector integrato, che ricicla tutta la memoria inutilizzata in modo che possa essere resa disponibile allo spazio heap.

Rarità: Media Difficoltà: Media


8. Cos'è il Global Interpreter Lock (GIL)?

Risposta: Il Global Interpreter Lock (GIL) è un mutex che protegge l'accesso agli oggetti Python, impedendo a più thread di eseguire bytecode Python contemporaneamente. Questo lock è necessario principalmente perché la gestione della memoria di CPython non è thread-safe.

Impatto: Limita l'esecuzione di programmi Python multi-thread su un singolo core della CPU, il che può rappresentare un collo di bottiglia per attività vincolate alla CPU.

Rarità: Media Difficoltà: Difficile


9. Spiega la differenza tra deep copy e shallow copy

Risposta:

  • Shallow Copy (Copia Superficiale): Crea un nuovo oggetto che memorizza il riferimento degli elementi originali. Quindi, una copia superficiale non crea una copia degli oggetti annidati, ma copia solo il riferimento degli oggetti annidati.
  • Deep Copy (Copia Profonda): Crea un nuovo oggetto e aggiunge ricorsivamente le copie degli oggetti annidati presenti negli elementi originali.

Esempio:

import copy

original = [[1, 2, 3], [4, 5, 6]]
shallow = copy.copy(original)
deep = copy.deepcopy(original)

original[0][0] = 'X'
print(shallow[0][0]) # 'X' (influenzato)
print(deep[0][0])    # 1 (non influenzato)

Rarità: Media Difficoltà: Media


10. Quali sono i tipi di dati built-in di Python?

Risposta:

  • Numerici: int, float, complex
  • Sequenza: list, tuple, range
  • Testo: str
  • Mapping: dict
  • Set: set, frozenset
  • Booleano: bool
  • Binari: bytes, bytearray, memoryview

Rarità: Comune Difficoltà: Facile


Framework Web (Django/Flask) (10 Domande)

11. Confronta Django e Flask

Risposta:

  • Django: Framework "batteries-included". Include ORM, autenticazione, pannello di amministrazione, ecc. Adatto per applicazioni grandi e complesse. Segue il pattern MVT (Model-View-Template).
  • Flask: Micro-framework. Minimalista, flessibile. Scegli gli strumenti che desideri (ORM, auth, ecc.). Adatto per app più piccole, microservizi o quando hai bisogno di un controllo preciso.

Rarità: Comune Difficoltà: Facile


12. Cos'è il pattern MVC (e MVT in Django)?

Risposta:

  • MVC (Model-View-Controller): Pattern architetturale che separa un'applicazione in tre componenti logici principali: il modello (dati), la vista (interfaccia utente) e il controller (elabora gli input).
  • MVT (Model-View-Template): Variazione di Django.
    • Model: Struttura dei dati (database).
    • View: Logica di business (simile al Controller in MVC).
    • Template: Livello di presentazione (simile alla View in MVC).

Rarità: Comune Difficoltà: Media


13. Spiega Django ORM

Risposta: Django ORM (Object-Relational Mapping) ti consente di interagire con il tuo database, come SQLite, PostgreSQL e MySQL, utilizzando codice Python anziché SQL. Definisci i tuoi modelli di dati come classi Python e Django gestisce la creazione delle tabelle del database e le query.

Esempio:

# Modello
class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

# Query
Person.objects.filter(first_name="John")

Rarità: Comune Difficoltà: Media


14. Cos'è una migration in Django?

Risposta: Le migration sono il modo in cui Django propaga le modifiche apportate ai tuoi modelli (aggiunta di un campo, eliminazione di un modello, ecc.) nello schema del tuo database. Sono progettate per essere per lo più automatiche, ma dovrai sapere quando creare le migration, quando eseguirle e i problemi comuni in cui potresti imbatterti.

Comandi:

  • makemigrations: Crea nuove migration in base alle modifiche del modello.
  • migrate: Applica le migration al database.

Rarità: Comune Difficoltà: Facile


15. Come gestisce il routing Flask?

Risposta: Flask utilizza il decoratore @app.route() per associare una funzione a un URL.

Esempio:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Ciao, mondo!'

@app.route('/user/<username>')
def show_user_profile(username):
    return f'Utente {username}'

Rarità: Comune Difficoltà: Facile


16. Cosa sono i Flask Blueprints?

Risposta: I Blueprints sono un modo per organizzare la tua applicazione Flask in moduli. Ti consentono di raggruppare route, template e file statici correlati. Questo è essenziale per scalare le applicazioni Flask.

Rarità: Media Difficoltà: Media


17. Spiega il concetto di Middleware in Django

Risposta: Il middleware è un framework di hook nell'elaborazione request/response di Django. È un sistema "plugin" leggero e di basso livello per alterare globalmente l'input o l'output di Django. Ogni componente middleware è responsabile di svolgere una funzione specifica.

Esempi: AuthenticationMiddleware, SessionMiddleware, CsrfViewMiddleware.

Rarità: Media Difficoltà: Media


18. Come gestisci le sessioni in Flask?

Risposta: Flask utilizza un cookie firmato per memorizzare il contenuto della sessione. L'utente può visualizzare il contenuto del cookie, ma non può modificarlo, a meno che non conosca la secret key utilizzata per la firma.

Esempio:

from flask import session

@app.route('/login', methods=['POST'])
def login():
    session['username'] = request.form['username']
    return redirect(url_for('index'))

Rarità: Media Difficoltà: Media


19. Qual è lo scopo di settings.py in Django?

Risposta: settings.py è il file di configurazione principale per un progetto Django. Contiene tutta la configurazione per il progetto, incluse le impostazioni del database, le app installate, il middleware, le impostazioni dei template, i percorsi dei file statici e le chiavi di sicurezza.

Rarità: Comune Difficoltà: Facile


20. Come previeni gli attacchi CSRF in Django?

Risposta: Django ha una protezione integrata contro il Cross Site Request Forgery (CSRF). Utilizza un token CSRF che viene generato per ogni sessione utente. Questo token deve essere incluso in ogni richiesta POST (di solito come un campo nascosto del modulo). Il server verifica il token prima di elaborare la richiesta.

Rarità: Media Difficoltà: Media


Database e Backend Generale (10 Domande)

21. SQL vs NoSQL

Risposta:

  • SQL (Relazionale): Dati strutturati, schema predefinito, tabelle, righe, colonne. Adatto per query e transazioni complesse (ACID). Esempi: PostgreSQL, MySQL.
  • NoSQL (Non Relazionale): Dati non strutturati o semi-strutturati, schema dinamico, documenti, coppie chiave-valore. Adatto per scalabilità, prototipazione rapida e grandi set di dati. Esempi: MongoDB, Redis.

Rarità: Comune Difficoltà: Facile


22. Cos'è un'API?

Risposta: API sta per Application Programming Interface. È un insieme di regole e protocolli che consente a diverse applicazioni software di comunicare tra loro. Nello sviluppo backend, in genere creiamo API RESTful o API GraphQL per consentire ai frontend (web, mobile) di interagire con i dati e la logica del backend.

Rarità: Comune Difficoltà: Facile


23. Spiega i principi delle API RESTful

Risposta:

  • Client-Server: Separazione delle preoccupazioni.
  • Stateless (Senza Stato): Nessun contesto del client memorizzato sul server tra le richieste.
  • Cacheable (Memorizzabile nella cache): Le risposte devono definirsi come memorizzabili nella cache o meno.
  • Uniform Interface (Interfaccia uniforme): Modo standardizzato di comunicare (metodi HTTP: GET, POST, PUT, DELETE).
  • Layered System (Sistema a livelli): Il client non può normalmente sapere se è connesso direttamente al server finale o a un intermediario lungo il percorso.

Rarità: Comune Difficoltà: Media


24. Cosa sono i codici di stato HTTP? Fornisci esempi.

Risposta: Codici di risposta standard forniti dai server web su Internet.

  • 2xx Successo: 200 OK, 201 Created.
  • 3xx Reindirizzamento: 301 Moved Permanently, 304 Not Modified.
  • 4xx Errore del Client: 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found.
  • 5xx Errore del Server: 500 Internal Server Error, 502 Bad Gateway.

Rarità: Comune Difficoltà: Facile


25. Cos'è l'indicizzazione del database?

Risposta: L'indicizzazione è una tecnica di struttura dati utilizzata per individuare e accedere rapidamente ai dati in un database. Gli indici vengono creati utilizzando alcune colonne del database. Migliora la velocità delle operazioni di recupero dei dati su una tabella di database al costo di scritture aggiuntive e spazio di archiviazione per mantenere la struttura dati dell'indice.

Rarità: Media Difficoltà: Media


26. Spiega il concetto di proprietà ACID nei database

Risposta:

  • Atomicity (Atomicità): Tutte le operazioni in una transazione hanno successo o ogni operazione viene annullata.
  • Consistency (Coerenza): Il database cambia correttamente stato a seguito di una transazione committed con successo.
  • Isolation (Isolamento): Consente alle transazioni di operare in modo indipendente e trasparente l'una dall'altra.
  • Durability (Durabilità): Garantisce che il risultato o l'effetto di una transazione committed persista in caso di guasto del sistema.

Rarità: Media Difficoltà: Media


27. Cos'è Docker e perché viene utilizzato?

Risposta: Docker è una piattaforma per sviluppare, spedire ed eseguire applicazioni in container. I container sono unità leggere, portabili e autosufficienti che includono tutto il necessario per eseguire un'applicazione (codice, runtime, strumenti di sistema, librerie). Risolve il problema "funziona sulla mia macchina" e garantisce la coerenza tra diversi ambienti (dev, staging, prod).

Rarità: Comune Difficoltà: Media


28. Cos'è lo Unit Testing?

Risposta: Lo unit testing è un metodo di test del software in cui vengono testate singole unità o componenti di un software. Lo scopo è convalidare che ogni unità del codice software funzioni come previsto. In Python, vengono comunemente utilizzati il framework unittest o pytest.

Rarità: Comune Difficoltà: Facile


29. Cos'è Git e perché è importante?

Risposta: Git è un sistema di controllo della versione distribuito. Traccia le modifiche nel codice sorgente durante lo sviluppo del software. Consente a più sviluppatori di lavorare contemporaneamente sullo stesso progetto, gestire diverse versioni del codice (branch) e ripristinare gli stati precedenti se necessario.

Rarità: Comune Difficoltà: Facile


30. Come proteggi un'API backend?

Risposta:

  • Authentication (Autenticazione): Verifica chi è l'utente (JWT, OAuth).
  • Authorization (Autorizzazione): Verifica cosa è autorizzato a fare l'utente (Ruoli/Permessi).
  • HTTPS: Crittografa i dati in transito.
  • Input Validation (Validazione dell'input): Sanitizza tutti gli input per prevenire SQL injection e XSS.
  • Rate Limiting (Limitazione della frequenza): Previene abusi/DDoS.
  • CORS: Limita quali domini possono accedere alla tua API.

Rarità: Media 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

Riduci il Tempo di Scrittura del Curriculum del 90%

La persona in cerca di lavoro media impiega più di 3 ore per formattare un curriculum. La nostra IA lo fa in meno di 15 minuti, portandoti alla fase di candidatura 12 volte più velocemente.