━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. CODICE & LOGICA GENERALE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Abstraction
Nascondere i dettagli implementativi e mostrare solo
l'interfaccia necessaria. "Non ti interessa come funziona
dentro, solo cosa fa."
Encapsulation
Raggruppare dati e funzioni correlate in un unico oggetto,
nascondendo lo stato interno.
Inheritance (Ereditarietà)
Una classe eredita proprietà e metodi da un'altra.
Figlio eredita dal genitore.
Polymorphism
Stesso metodo si comporta diversamente a seconda
dell'oggetto che lo esegue.
Interface
Contratto che definisce quali metodi una classe DEVE
implementare, senza specificare come.
Singleton
Pattern che garantisce che esista una sola istanza
di una classe in tutta l'applicazione.
Factory
Pattern che crea oggetti senza specificare la classe
esatta. "Dammi un oggetto di tipo X" → la factory
decide quale classe usare.
Observer
Pattern dove un oggetto notifica automaticamente
tutti i "subscriber" quando cambia stato.
Dependency Injection
Passare le dipendenze a una classe dall'esterno
invece di crearle dentro. Rende il codice testabile.
Inversion of Control (IoC)
Principio per cui il controllo del flusso viene
delegato a un framework esterno invece che al tuo codice.
Duck Typing
"Se cammina come un'anatra e starnazza come un'anatra,
è un'anatra." → non importa il tipo, importa il comportamento.
Type Coercion
Conversione automatica di tipo. Es: "5" + 3 = "53" in JS
(stringa + numero → stringa).
Truthy / Falsy
Valori che vengono trattati come true/false in un
contesto booleano. Es: 0, "", null, undefined = falsy.
Short-circuit Evaluation
In A && B, se A è falso B non viene valutato.
In A || B, se A è vero B non viene valutato.
Guard Clause
Condizione all'inizio di una funzione che esce subito
se i prerequisiti non sono soddisfatti. Evita annidamenti.
Early Return
Uscire da una funzione prima della fine quando
una condizione è già soddisfatta. Rende il codice piatto.
Recursion
Funzione che chiama sé stessa. Richiede sempre un caso
base per fermarsi (altrimenti stack overflow).
Immutability
Un valore non può essere modificato dopo la creazione.
Si crea una nuova copia con le modifiche.
Side Effect
Quando una funzione modifica qualcosa fuori dal suo
scope (variabili globali, DB, file system, ecc.).
Pure Function
Funzione senza side effects: dati gli stessi input,
restituisce sempre lo stesso output.
Higher-order Function
Funzione che accetta altre funzioni come parametri
o ne restituisce una. Es: map(), filter(), reduce().
Closure
Funzione che "ricorda" le variabili del contesto dove
è stata creata anche dopo che quel contesto è terminato.
Callback
Funzione passata come argomento, da eseguire
successivamente o su un evento.
Generator
Funzione speciale che può essere "messa in pausa"
e ripresa. Produce valori uno alla volta con yield.
Spread Operator
Espande un array/oggetto nei suoi elementi.
Es: [...array1, ...array2] unisce due array.
Destructuring
Estrarre valori da array/oggetti in variabili separate.
Es: const { nome, eta } = utente;
Regex (Regular Expression)
Sequenza di caratteri che definisce un pattern di ricerca.
Es: /^\d{4}-\d{2}-\d{2}$/ valida una data YYYY-MM-DD.
Glob Pattern
Pattern per cercare file con wildcards.
Es: **/*.php = tutti i file PHP in tutte le sottocartelle.
Bitmasking
Usare operazioni bit-a-bit per memorizzare più flag
booleani in un singolo intero.
Namespace
Raggruppare codice sotto un nome per evitare
conflitti tra classi/funzioni con lo stesso nome.
Trait
In PHP: blocco di codice riutilizzabile che può
essere incluso in più classi (no ereditarietà multipla).
Magic Methods
In PHP: metodi speciali con __ che si attivano
automaticamente. Es: __construct(), __get(), __toString().
Match Expression
In PHP 8+: alternativa a switch, più precisa
(confronto stretto, restituisce valore).
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2. PATTERN & ARCHITETTURA
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MVC (Model-View-Controller)
Separazione in tre layer: Model (dati), View (HTML),
Controller (logica). Ogni parte ha una responsabilità.
Repository Pattern
Layer tra la logica di business e il database.
Il codice non scrive query direttamente, le delega
al repository.
Service Layer
Strato che contiene la logica di business pura,
separata da controller e DB.
ORM (Object-Relational Mapping)
Libreria che mappa tabelle DB in oggetti del codice.
Es: invece di scrivere SQL scrivi $user->save().
Middleware
Strato tra richiesta e risposta che applica logica
trasversale: autenticazione, logging, rate limit, CORS.
Webhook
Il tuo server riceve una notifica HTTP da un servizio
esterno quando succede qualcosa. Es: pagamento ricevuto.
Message Queue
Sistema dove i messaggi/task vengono messi in coda
ed elaborati in modo asincrono da worker separati.
Pub/Sub (Publish/Subscribe)
Pattern dove un publisher invia messaggi senza sapere
chi li riceve. I subscriber ascoltano ciò che gli interessa.
Event-driven Architecture
Il sistema reagisce a eventi invece di eseguire
flussi sequenziali fissi.
Monolith
Applicazione dove tutto il codice è in un unico
progetto/processo deployato insieme.
Microservices
Architettura dove l'applicazione è divisa in servizi
piccoli e indipendenti che comunicano via API/eventi.
API Gateway
Punto di ingresso unico per tutte le API, che gestisce
autenticazione, routing, rate limiting.
WebSocket
Connessione bidirezionale persistente tra client e server.
Usata per chat, notifiche real-time.
SSE (Server-Sent Events)
Il server invia aggiornamenti al client in modo
unidirezionale su una connessione HTTP tenuta aperta.
Long Polling
Il client fa una richiesta HTTP e il server la
tiene aperta finché non ha dati da inviare.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
3. PERFORMANCE & OTTIMIZZAZIONE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Bottleneck
Il punto del sistema più lento che limita le
performance dell'intero flusso.
Profiling
Analizzare il codice in esecuzione per capire dove
viene speso il tempo e la memoria.
Benchmarking
Misurare le performance in condizioni controllate
per confrontare soluzioni diverse.
Throughput
Quante richieste/operazioni il sistema riesce a
elaborare per unità di tempo.
Latency
Tempo che passa tra l'invio di una richiesta e
la ricezione della risposta.
TTFB (Time to First Byte)
Tempo che il browser aspetta prima di ricevere
il primo byte di risposta dal server.
LCP (Largest Contentful Paint)
Metrica che misura quando il contenuto principale
della pagina diventa visibile. Core Web Vital.
CLS (Cumulative Layout Shift)
Misura quanto la pagina "salta" visivamente durante
il caricamento. Core Web Vital.
FID (First Input Delay)
Tempo tra la prima interazione dell'utente e la
risposta del browser. Core Web Vital.
Critical Rendering Path
Sequenza di passi che il browser esegue per convertire
HTML/CSS/JS in pixel sullo schermo.
Above the Fold
Contenuto visibile senza scorrere. Va ottimizzato
per caricamento immediato.
Preload
Dire al browser di scaricare una risorsa in anticipo
perché servirà presto.
Prefetch
Scaricare in background risorse che probabilmente
serviranno nella prossima navigazione.
Debounce
Eseguire una funzione solo dopo che smette di essere
chiamata per N ms. Es: ricerca live dopo 300ms
dall'ultima digitazione.
Throttle
Eseguire una funzione al massimo una volta ogni N ms
anche se chiamata più spesso. Es: scroll events.
Memoization
Cachare i risultati di una funzione: stessi parametri
→ stesso risultato senza ricalcolare.
Lazy Loading
Caricare una risorsa solo quando serve, non subito.
Es: immagini caricate solo quando entrano nel viewport.
Eager Loading
Caricare tutto subito in anticipo. Opposto di lazy.
Tree Shaking
Eliminare dal bundle JS/CSS il codice non usato
durante la compilazione.
Minification
Ridurre dimensione di JS/CSS rimuovendo spazi,
commenti, accorciando nomi variabili.
Bundling
Unire più file in uno solo per ridurre richieste HTTP.
Transpilazione
Convertire codice da un linguaggio/versione a un altro.
Es: TypeScript→JS, SCSS→CSS, PHP8→PHP7.
Sourcemap
File che collega codice minificato al sorgente originale,
per debug leggibile in produzione.
FOUC (Flash of Unstyled Content)
La pagina appare brevemente senza stili prima che
il CSS venga applicato.
Reflow
Il browser ricalcola posizioni e dimensioni di tutti
gli elementi. Operazione costosa, da evitare in loop.
Repaint
Il browser ridisegna un elemento senza ricalcolarne
il layout. Meno costoso del reflow.
GPU Compositing Layer
Elemento spostato su un layer gestito dalla GPU
(tramite transform/opacity). Migliora animazioni
ma può causare problemi con backdrop-filter.
Stacking Context
Contesto CSS che determina l'ordine di sovrapposizione
(z-index). Creato da opacity, transform, filter,
isolation, position+z-index, ecc.
Service Worker
Script JS che gira in background nel browser,
intercetta richieste di rete, abilita offline/PWA.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
4. DATABASE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Upsert
INSERT + UPDATE combinati: se esiste aggiorna,
altrimenti inserisce. SQL: INSERT ... ON DUPLICATE KEY UPDATE.
Backfill
Popolare retroattivamente dati mancanti su record
già esistenti. Es: aggiungere colonna e riempirla.
Migration
Script versionato che modifica lo schema del DB
in modo controllato e reversibile.
Schema
Struttura del DB: tabelle, colonne, tipi, relazioni,
vincoli.
Index (Indice)
Struttura che velocizza query su una colonna. Senza
indice → full table scan su tutta la tabella.
Full Table Scan
Il DB legge ogni riga della tabella per trovare
i risultati. Lento su tabelle grandi.
Query Plan / Explain
Analisi di come il DB esegue una query. EXPLAIN in
MySQL mostra se usa indici o fa table scan.
N+1 Problem
1 query per la lista + N query per i dettagli di
ogni elemento. Risolto con JOIN o eager loading.
Transaction
Gruppo di operazioni che vengono eseguite tutte
o nessuna (atomicità).
Rollback
Annullare le modifiche di una transaction fallita,
riportando il DB allo stato precedente.
Commit
Confermare definitivamente le modifiche di una
transaction nel database.
ACID
Proprietà di una transaction: Atomicity (tutto o niente),
Consistency (dati sempre validi), Isolation (transazioni
separate), Durability (i dati salvati rimangono).
Prepared Statement
Query SQL con parametri separati dal codice.
Previene SQL injection, migliora performance.
Foreign Key
Vincolo che garantisce che un valore esista nella
tabella referenziata. Garantisce integrità referenziale.
JOIN
Unire righe di più tabelle in base a una condizione.
INNER: solo corrispondenze. LEFT: tutti della sinistra.
Normalizzazione
Organizzare il DB per eliminare ridondanze dividendo
i dati in tabelle correlate.
Denormalizzazione
Aggiungere ridondanza intenzionale per velocizzare
le letture, a scapito della complessità di scrittura.
Deadlock
Due transazioni si bloccano a vicenda aspettando
che l'altra rilasci una risorsa.
Connection Pool
Insieme di connessioni DB pre-aperte e riutilizzabili,
per evitare il costo di aprirne una per ogni richiesta.
Sharding
Dividere il DB orizzontalmente: dati diversi su
server diversi, per scalare.
Replication
Copiare i dati su più server. Master scrive,
Slave/Replica legge. Per scalabilità e backup.
Stored Procedure
Blocco di SQL salvato nel DB ed eseguito sul server
DB, non nell'applicazione.
Trigger
Procedura automatica che si esegue prima/dopo
INSERT/UPDATE/DELETE su una tabella.
View
Query salvata come "tabella virtuale". Semplifica
query complesse, non salva dati fisicamente.
Cursor
Meccanismo per scorrere i risultati di una query
riga per riga invece di caricarli tutti in memoria.
Soft Delete
Invece di cancellare fisicamente, si imposta un flag
(deleted_at). Il record rimane nel DB ma è "nascosto".
Optimistic Locking
Si assume che non ci siano conflitti. Si verifica
solo al salvataggio con un campo version/timestamp.
Pessimistic Locking
Si blocca il record durante la lettura per impedire
modifiche concorrenti. SELECT ... FOR UPDATE.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
5. SICUREZZA
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SQL Injection
Inserire SQL malevolo nell'input utente per manipolare
il database. Prevenuto con prepared statements.
XSS (Cross-Site Scripting)
Iniettare JS malevolo nella pagina, eseguito nel browser
delle vittime. Prevenuto con escaping dell'output.
CSRF (Cross-Site Request Forgery)
Ingannare un utente autenticato a eseguire azioni
non volute. Prevenuto con token CSRF.
CSP (Content Security Policy)
Header HTTP che specifica quali risorse il browser
può caricare. Limita XSS e injection.
Nonce
Stringa casuale unica per ogni richiesta. Nel CSP
autorizza script specifici senza aprire tutto.
Salt
Stringa casuale aggiunta alla password prima dell'hash,
per rendere inutili le rainbow tables.
Hash
Funzione one-way che trasforma dati in una stringa
di lunghezza fissa. Non reversibile. Es: bcrypt, SHA-256.
Rainbow Table
Dizionario pre-calcolato di hash → password originali.
Il salt lo rende inutile.
Brute Force Attack
Provare tutte le combinazioni possibili finché
si trova la password giusta.
Dictionary Attack
Attacco che usa un elenco di password comuni invece
di provarle tutte.
Session Hijacking
Rubare il token di sessione di un utente per
impersonarlo.
Clickjacking
Ingannare l'utente a cliccare su qualcosa di diverso
da ciò che vede, tramite iframe invisibili.
CORS (Cross-Origin Resource Sharing)
Meccanismo che controlla quali domini possono fare
richieste alla tua API da JavaScript.
JWT (JSON Web Token)
Token firmato che contiene dati dell'utente.
Stateless: non serve sessione server-side.
OAuth
Protocollo che permette accesso a risorse senza
condividere credenziali. "Login con Google" usa OAuth.
SSO (Single Sign-On)
Un solo login per accedere a più servizi/applicazioni.
Rate Limiting
Limitare richieste per IP in un periodo di tempo.
Previene brute force e scraping.
WAF (Web Application Firewall)
Firewall applicativo che filtra traffico malevolo
prima che raggiunga l'app. Es: Cloudflare WAF.
Whitelist
Lista di ciò che è PERMESSO. Tutto il resto è bloccato.
Più sicuro della blacklist.
Blacklist
Lista di ciò che è BLOCCATO. Tutto il resto passa.
Principle of Least Privilege
Ogni componente/utente ha solo i permessi strettamente
necessari, niente di più.
Defense in Depth
Più layer di sicurezza sovrapposti: se uno fallisce
gli altri proteggono ancora.
Zero-day
Vulnerabilità scoperta ma non ancora patchata
dal vendor. "Zero giorni" di protezione.
CVE (Common Vulnerabilities and Exposures)
Database pubblico di vulnerabilità di sicurezza
note, ognuna con un codice univoco. Es: CVE-2024-1234.
Penetration Testing (Pentest)
Test di sicurezza dove si simula un attacco reale
per trovare vulnerabilità prima degli hacker.
Timing Attack
Misurare il tempo di risposta per dedurre informazioni
segrete. Es: confronto password non costante nel tempo.
Sanitizzazione
Pulire l'input utente rimuovendo/neutralizzando
caratteri pericolosi prima di usarlo.
Escaping
Convertire caratteri speciali in entità sicure.
Es: < → < per HTML, ' → \' per SQL.
Encoding
Rappresentare dati in un formato diverso.
URL encoding, Base64, HTML entities, ecc.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
6. JAVASCRIPT & BROWSER
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Event Loop
Meccanismo JS che gestisce l'esecuzione asincrona.
Controlla call stack e code di messaggi in loop.
Call Stack
Pila delle funzioni in esecuzione. Quando chiami
una funzione viene "impilata", quando finisce viene
"rimossa".
Microtask Queue
Coda ad alta priorità per Promise e MutationObserver.
Eseguita prima della macrotask queue.
Macrotask Queue
Coda per setTimeout, setInterval, eventi DOM.
Eseguita dopo che lo stack è vuoto.
Promise
Oggetto che rappresenta il risultato futuro di
un'operazione asincrona. Stati: pending, fulfilled, rejected.
async/await
Sintassi per scrivere codice asincrono come se fosse
sincrono. Dietro le quinte usa Promise.
Fetch API
API moderna del browser per fare richieste HTTP.
Sostituisce XMLHttpRequest (XHR).
DOM Manipulation
Modificare la struttura HTML della pagina via JS:
creare, modificare, spostare, eliminare elementi.
Event Bubbling
Un evento su un elemento figlio "sale" verso i
genitori. onClick su button → attiva anche onClick div.
Event Delegation
Invece di attaccare listener a ogni elemento figlio,
ne metti uno solo sul genitore e sfrutti il bubbling.
IntersectionObserver
API browser che notifica quando un elemento entra/esce
dal viewport. Usato per lazy load e animazioni scroll.
MutationObserver
API che osserva modifiche al DOM e notifica quando
elementi vengono aggiunti/rimossi/modificati.
RequestAnimationFrame (rAF)
Esegue una funzione prima del prossimo repaint del
browser. Usato per animazioni fluide (60fps).
Web Worker
Script JS che gira in un thread separato, senza
bloccare l'interfaccia utente.
LocalStorage
Storage nel browser persistente (rimane dopo chiusura).
Max ~5MB. Sincrono, bloccante.
SessionStorage
Come LocalStorage ma dura solo per la sessione
corrente del browser.
IndexedDB
Database nel browser per grandi quantità di dati
strutturati. Asincrono.
Polyfill
Codice che implementa funzionalità moderne su browser
vecchi che non le supportano.
Shim
Strato di compatibilità tra due interfacce diverse.
Più generico del polyfill.
Progressive Enhancement
Prima si costruisce la versione base (funziona sempre),
poi si aggiungono miglioramenti per browser moderni.
Graceful Degradation
Si costruisce per browser moderni, poi ci si assicura
che funzioni anche senza le feature avanzate.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
7. CSS & UI
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Specificity (Specificità CSS)
Peso di un selettore CSS. Determina quale regola
"vince" in caso di conflitto. ID > class > tag.
Cascade
L'ordine in cui le regole CSS vengono applicate.
Specificità + ordine di dichiarazione + !important.
Box Model
Ogni elemento HTML è una scatola: content + padding
+ border + margin.
Flexbox
Sistema CSS per layout monodimensionale (riga o colonna)
con allineamento flessibile degli elementi.
CSS Grid
Sistema CSS per layout bidimensionale (righe E colonne).
Più potente di Flexbox per layout complessi.
Media Query
Regola CSS che applica stili diversi in base alle
caratteristiche del dispositivo (larghezza, ecc.).
Breakpoint
Larghezza a cui il layout cambia. Es: 640px (sm),
768px (md), 1024px (lg) in Tailwind.
Responsive Design
Sito che si adatta automaticamente a qualsiasi
dimensione di schermo.
Mobile-first
Si progettano prima gli stili per mobile, poi si
aggiungono per schermi più grandi con min-width.
Critical CSS
CSS necessario per renderizzare il contenuto
above the fold, da inline nella pagina per velocità.
Utility-first (es. Tailwind)
Approccio dove si compone il design usando classi
piccole e specifiche invece di scrivere CSS custom.
BEM (Block Element Modifier)
Convenzione naming CSS: .blocco__elemento--modificatore.
Evita conflitti e rende la struttura esplicita.
CSS Custom Properties (variabili)
Variabili native CSS dichiarate con --nome: valore
e usate con var(--nome).
Isolation: isolate
Proprietà CSS che crea un nuovo stacking context
senza altri effetti collaterali.
Viewport Units
Unità CSS relative al viewport: vw (larghezza),
vh (altezza), vmin, vmax, dvh (dynamic).
calc()
Funzione CSS per calcoli con unità miste.
Es: calc(100% - 2rem).
clamp()
Funzione CSS per valori responsive senza media query.
clamp(min, preferito, max).
Aspect Ratio
Proporzione width/height di un elemento.
aspect-ratio: 16/9 mantiene le proporzioni.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
8. RETE & SERVER
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DNS (Domain Name System)
Traduce nomi dominio in indirizzi IP.
trgtkls.it → 1.2.3.4
TTL DNS
Quanto tempo i resolver cachano una risposta DNS
prima di richiederla di nuovo.
SSL/TLS
Protocollo di cifratura per HTTPS. TLS è la versione
moderna e sicura di SSL.
Handshake TLS
Scambio iniziale per stabilire una connessione cifrata:
negoziazione algoritmi, scambio certificati, chiavi.
Reverse Proxy
Server davanti all'applicazione che gestisce SSL,
redirect, cache, compressione. Es: Nginx davanti a PHP.
Load Balancer
Distribuisce le richieste su più server backend.
Sticky Session
Il load balancer manda sempre lo stesso utente
allo stesso server (per sessioni non condivise).
CDN (Content Delivery Network)
File statici serviti dal server geograficamente
più vicino all'utente.
Cache-Control
Header HTTP che dice al browser/proxy come cachare
la risposta e per quanto tempo.
ETag
Hash del contenuto della risposta. Il browser lo
manda nella richiesta successiva per verificare
se il contenuto è cambiato.
HTTP/2
Versione HTTP con multiplexing: più richieste
sulla stessa connessione in parallelo.
HTTP/3 / QUIC
Versione HTTP su UDP invece di TCP. Più veloce
su connessioni instabili (mobile).
Status Code HTTP
200 OK, 301 Redirect permanente, 302 Temporaneo,
304 Not Modified, 400 Bad Request, 401 Non autenticato,
403 Forbidden, 404 Not Found, 429 Too Many Requests,
500 Server Error, 503 Service Unavailable.
CORS (Cross-Origin Resource Sharing)
Header che controlla quali domini possono fare
richieste cross-origin via JS.
Payload
I dati effettivi trasmessi in una richiesta/risposta,
esclusi gli header.
Endpoint
URL specifico di un'API che risponde a un certo tipo
di richiesta. Es: POST /api/commenti.
REST
Stile architetturale per API: URL = risorsa,
metodo HTTP = azione (GET leggi, POST crea, ecc.).
CRUD
Create, Read, Update, Delete — le quattro operazioni
base su qualsiasi risorsa.
Idempotente
Stessa operazione eseguita N volte = stesso risultato
di eseguirla una volta. GET e DELETE sono idempotenti.
Webhook
Il tuo server riceve chiamate HTTP automatiche da
servizi esterni su eventi. Es: notifica pagamento.
Keep-Alive
La connessione TCP rimane aperta per più richieste
invece di riaprirla ogni volta.
gzip / Brotli
Algoritmi di compressione per ridurre dimensione
delle risposte HTTP prima di inviarle.
VPS (Virtual Private Server)
Server virtuale dedicato su hardware condiviso.
Hai root access completo.
SSH (Secure Shell)
Protocollo per connettersi a server remoti in modo
sicuro via terminale.
SFTP
FTP sicuro su SSH per trasferire file al server.
Rsync
Tool per sincronizzare file tra locale e remoto
trasferendo solo le differenze.
Port Forwarding
Redirigere traffico da una porta a un'altra o
a un altro host.
Daemon
Processo che gira in background sul server,
senza interfaccia utente. Es: nginx, mysql, php-fpm.
Systemd
Sistema di init Linux che gestisce l'avvio dei
servizi (daemon) e li riavvia se crashano.
Cron Job
Task programmato che si esegue automaticamente
a orari/intervalli definiti. Es: ogni giorno alle 3:00.
PHP-FPM (FastCGI Process Manager)
Gestore di processi PHP. Nginx passa le richieste
a PHP-FPM che le esegue e restituisce la risposta.
Process Manager
Software che gestisce processi: li avvia, riavvia
in caso di crash, monitora memoria/CPU. Es: PM2, supervisord.
Log Rotation
Rotazione automatica dei file di log per evitare
che crescano infinitamente. Il vecchio viene compresso.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
9. GIT & VERSIONING
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Commit
Snapshot del codice in un momento specifico con
un messaggio che descrive cosa è cambiato.
Branch
Linea di sviluppo separata dal main. Permette di
lavorare su feature senza toccare il codice stabile.
Merge
Unire i cambiamenti di un branch in un altro.
Rebase
Riscrivere i commit di un branch spostandoli su
un punto di partenza diverso. Storia più lineare.
Cherry-pick
Prendere un singolo commit da un branch e applicarlo
su un altro senza fare merge completo.
Squash
Unire più commit in uno solo. Usato per pulire
la storia prima del merge.
Stash
"Mettere da parte" modifiche non ancora committate
per lavorare su altro, da riprendere dopo.
Tag
Etichetta su un commit specifico. Usato per marcare
release (v1.0, v2.3.1).
Hotfix
Correzione urgente di un bug in produzione,
fatta direttamente sul branch di release.
Gitflow
Strategia di branching con branch dedicati per
feature, release, hotfix, develop, main.
Trunk-based Development
Tutti lavorano sul main branch con feature piccole
e frequenti. Alternativa a Gitflow.
Diff
Differenze tra due versioni di un file o due commit.
Patch
File che descrive le differenze applicabili altrove.
Conflict
Quando due branch modificano la stessa parte di
un file in modo incompatibile. Va risolto manualmente.
.gitignore
File che elenca cosa Git deve ignorare (non tracciare).
Es: node_modules/, .env, *.log.
Shallow Clone
Clonare solo gli ultimi N commit invece di tutta
la storia. Più veloce per grandi repository.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
10. CI/CD & DEPLOY
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CI (Continuous Integration)
Integrare il codice frequentemente con test automatici
ad ogni push. Trova i bug subito.
CD (Continuous Delivery/Deployment)
Automatizzare il deploy in produzione dopo i test.
Delivery = manuale, Deployment = automatico.
Pipeline
Sequenza automatica di step: test → build → deploy.
Si blocca se uno step fallisce.
Environment
Ambienti separati: development (locale), staging
(pre-produzione), production (live).
.env file
File con variabili d'ambiente (credenziali DB, API keys).
Non va mai committato nel repository.
Feature Flag
Interruttore nel codice per abilitare/disabilitare
funzionalità senza deploy. Per rollout graduali.
Canary Deploy
Rilasciare la nuova versione a una piccola % di utenti
per testare prima del rollout completo.
Blue-Green Deploy
Due ambienti identici (blue=attivo, green=nuovo).
Si switcha il traffico istantaneamente.
Rollback
Tornare alla versione precedente quando un deploy
introduce problemi.
Artifact
File prodotto da una build (zip, docker image, bundle).
Archiviato e usato per il deploy.
Container (Docker)
Pacchetto isolato con tutto il necessario per eseguire
un'applicazione: codice, runtime, dipendenze.
Image Docker
Template immutabile da cui si creano container.
Come un blueprint.
Orchestration (Kubernetes)
Gestione automatica di molti container: avvio,
scaling, restart, load balancing.
Zero-downtime Deploy
Deploy senza interruzione del servizio. Gli utenti
non notano nulla durante l'aggiornamento.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
11. TESTING & QUALITÀ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Unit Test
Testare una singola funzione/componente in isolamento.
Veloce, deterministico.
Integration Test
Testare come più componenti lavorano insieme.
Più lento ma più realistico.
E2E Test (End-to-End)
Simulare un utente reale che usa il sito completo.
Es: Playwright, Cypress.
TDD (Test-Driven Development)
Prima scrivi il test (fallisce), poi scrivi il codice
per farlo passare. Ciclo: Red → Green → Refactor.
Mock
Oggetto finto che simula il comportamento di uno reale
durante i test. Controllabile e prevedibile.
Stub
Versione semplificata di un oggetto che restituisce
valori fissi. Meno intelligente del mock.
Fixture
Dati di test predefiniti per mettere il sistema
in uno stato noto prima di un test.
Code Coverage
Percentuale di codice eseguita durante i test.
100% coverage non significa zero bug.
Regression Test
Test che verifica che una modifica non abbia rotto
qualcosa che funzionava già.
Smoke Test
Test rapido di base: "il sistema si avvia e risponde?"
Prima di test più approfonditi.
Load Test
Simulare molti utenti contemporanei per misurare
le performance sotto carico.
Stress Test
Spingere il sistema oltre i limiti per trovare
il punto di rottura.
Flaky Test
Test che a volte passa e a volte fallisce senza
cambiamenti al codice. Problema di timing o stato.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
12. DEBUG & ANALISI
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Stack Trace
Sequenza di chiamate a funzioni che ha portato a un
errore. Mostra esattamente dove è esploso il codice.
Breakpoint
Punto dove il debugger si ferma per ispezionare
variabili e stato del programma.
Memory Leak
Memoria allocata ma mai rilasciata. Nel tempo
esaurisce le risorse e crasha il sistema.
Garbage Collection
Processo automatico che recupera memoria non più
usata. In PHP avviene automaticamente.
Core Dump
Istantanea della memoria al momento del crash,
per analisi post-mortem.
Edge Case
Caso limite o insolito che raramente si verifica
ma che può causare bug se non gestito.
Race Condition
Due processi accedono alla stessa risorsa in
contemporanea causando risultati imprevedibili.
Off-by-one Error
Bug classico: iterare uno in più o uno in meno.
Es: array con 5 elementi iterato 4 o 6 volte.
Null Pointer / NullPointerException
Tentare di usare una variabile che è null.
In PHP: "Call to member function su null".
Heisenbug
Bug che scompare o cambia comportamento quando
si tenta di osservarlo/debuggarlo.
Regression
Bug introdotto da una modifica che rompe qualcosa
che funzionava già.
Fallback
Comportamento alternativo quando quello principale
non funziona o non è disponibile.
Defensive Programming
Scrivere codice che gestisce casi imprevisti e
non si fida dell'input. Valida sempre.
Assert
Verificare che una condizione sia vera durante
l'esecuzione. Se falsa → errore immediato.
Logging
Registrare eventi, errori e informazioni durante
l'esecuzione per analisi successiva.
Observability
Capacità di capire lo stato interno del sistema
da log, metriche e trace.
Tracing
Seguire il percorso di una richiesta attraverso
tutti i componenti del sistema.
Post-mortem
Analisi di un incidente/bug dopo che è stato risolto,
per capire causa radice e prevenire recidive.
Root Cause Analysis
Identificare la causa originale di un problema,
non solo i sintomi superficiali.
Hotfix
Correzione urgente e rapida di un bug critico
in produzione.
Patch
Correzione specifica per un problema noto.
Più piccola e mirata di un aggiornamento.
Workaround
Soluzione temporanea che aggira un problema senza
risolverlo alla radice. "Pezza" provvisoria.
Technical Debt
Scelte di sviluppo rapide/scorciatoie che creano
problemi futuri. Va ripagato con refactoring.
Refactoring
Ristrutturare il codice senza cambiarne il comportamento
esterno. Migliora leggibilità e manutenibilità.
Dead Code
Codice che non viene mai eseguito. Va rimosso per
evitare confusione.
Code Smell
Indicatore che qualcosa nel codice potrebbe essere
migliorato. Non è un bug ma un segnale di problema.
Spaghetti Code
Codice disorganizzato, difficile da leggere e
mantenere, con flusso intrecciato e confuso.
Magic Number / Magic String
Valori hardcoded nel codice senza spiegazione.
Es: if (status === 3) → 3 non dice nulla.
Hardcoded
Valore scritto direttamente nel codice invece di
leggerlo da configurazione o database.
DRY (Don't Repeat Yourself)
Non duplicare la stessa logica in più posti.
Una modifica non deve richiedere cambiamenti in N file.
KISS (Keep It Simple, Stupid)
La soluzione più semplice che funziona è la migliore.
Evitare complessità inutile.
YAGNI (You Aren't Gonna Need It)
Non implementare funzionalità "per il futuro" se
non servono ora. Non ottimizzare prematuramente.
SOLID
Cinque principi di design OOP: Single responsibility,
Open/closed, Liskov substitution, Interface segregation,
Dependency inversion.
Commenti (0)
Nessun commento ancora.
Segnala contenuto
Elimina commento
Eliminare definitivamente questo commento?
L'azione non si può annullare.