Modellare un sistema bancario semplice: - Tabella `accounts`: - `id`, - `owner_id`, - `currency`, - `created_at`. - Tabella `transactions`: - `id`, - `account_id`, - `amount`, - `created_at`. **Requisiti:** 1. Scrivere SQL per creare lo schema con le restrizioni necessarie (NOT NULL, FK, CHECK su `amount` non nullo). 2. Scrivere una query: - ottenere il saldo attuale del conto per `account_id` (somma di `amount`). 3. Difficoltà aggiuntiva: supportare addebito/credito (registrazione doppia). Pulizia
Golang
Come funziona il garbage collector in Go? Descrivi le fasi e l'algoritmo.
Impressione generale del colloquio, livello del candidato, raccomandazioni
Quali sono i vantaggi delle goroutine rispetto ai thread del sistema operativo?
Come ottimizzare la ricerca in un database? Cosa sono gli indici e qual è la loro complessità?
Parli del pianificatore di Go (scheduler). Come funziona? Cos'è il hand-off?
Quali primitive di sincronizzazione ci sono in Go? Qual è la differenza tra Mutex e RWMutex? Quando usare gli atomici?
Come funziona una mappa in Go? Racconta della struttura interna, buckets, collisioni.
3. Complessità: supportare addebito/credito (registrazione doppia). Pulizia CREATE TABLE conti ( id BIGSERIAL PRIMARY KEY, owner_id BIGINT NOT NULL, currency VARCHAR(3) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT now() ); CREATE TABLE transazioni ( id BIGSERIAL PRIMARY KEY, account_id BIGINT NOT NULL REFERENCES conti(id), amount NUMERIC(18,2) NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT now() ); CREATE INDEX idx_transazioni ON transazioni(account_id); SELECT COALESCE(sum(amount), 0) AS balance FROM transazioni WHERE account_id = :account_id; ALTER TABLE transazioni ADD COLUMN type VARCHAR(6) NOT NULL CHECK (type IN ('debit', 'credit')); ALTER TABLE transazioni DROP CONSTRAINT transazioni_amount_check, ADD CONSTRAINT transazioni_amount_check CHECK (amount > 0); SELECT COALESCE( SUM(CASE WHEN type = 'credit' THEN amount WHEN type = 'debit' THEN - amount ) AS balance FROM transazioni WHERE account_id = :account_id;
Modellare un sistema bancario semplice: - Tabella `accounts`: - `id`, - `owner_id`, - `currency`, - `created_at`. - Tabella `transactions`: - `id`, - `account_id`, - `amount`, - `created_at`. **Requisiti:** 1. Scrivere SQL per creare lo schema con le restrizioni necessarie (NOT NULL, FK, CHECK su `amount` non nullo). 2. Scrivere una query: - ottenere il saldo attuale del conto per `account_id` (somma di `amount`). 3. Difficoltà aggiuntiva: supportare debito/credito (registrazione doppia). Pulizia.