Modelujte jednostavan bankarski sistem: - Tabela `accounts`: - `id`, - `owner_id`, - `currency`, - `created_at`. - Tabela `transactions`: - `id`, - `account_id`, - `amount`, - `created_at`. **Zahtevi:** 1. Napišite SQL za kreiranje šeme sa potrebnim ograničenjima (NOT NULL, FK, CHECK na nenull `amount`). 2. Napišite upit: - dobijte trenutni saldo računa po `account_id` (zbir `amount`). 3. Dodatna složenost: podrška za debet/kredit (dupli zapis). Čišćenje
Golang
Kako radi garbage collector u Go? Opisati faze i algoritam.
Општи утисак са интервјуа, ниво кандидата, препоруке
Koje primitive za sinhronizaciju postoje u Go? Koja je razlika između Mutex i RWMutex? Kada koristiti atomike?
Kako funkcioniše mapa u Go? Ispričajte o unutrašnjoj strukturi, buckets, kolizijama.
Koje su prednosti goroutines u odnosu na OS niti?
Kako optimizovati pretraživanje u bazi podataka? Šta su indeksi i koja je njihova složenost?
Ispričajte o planera Go (scheduler). Kako radi? Šta je hand-off?
Modelujte jednostavan bankarski sistem: - Tabela `accounts`: - `id`, - `owner_id`, - `currency`, - `created_at`. - Tabela `transactions`: - `id`, - `account_id`, - `amount`, - `created_at`. **Zahtevi:** 1. Napišite SQL za kreiranje šeme sa potrebnim ograničenjima (NOT NULL, FK, CHECK na nenultu `amount`). 2. Napišite upit: - da dobijete trenutni saldo računa po `account_id` (zbir `amount`). 3. Dodatno: podrška za debet/kredit (dupli zapis). Čišćenje.
3. Složenost: podrška za debit/kredit (duplo knjiženje). Čišćenje CREATE TABLE računi ( id BIGSERIAL PRIMARY KEY, owner_id BIGINT NOT NULL, currency VARCHAR(3) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT now() ); CREATE TABLE transakcije ( id BIGSERIAL PRIMARY KEY, account_id BIGINT NOT NULL REFERENCES računi(id), amount NUMERIC(18,2) NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT now() ); CREATE INDEX idx_transakcije_account_id ON transakcije(account_id); SELECT COALESCE(sum(amount), 0) AS balance FROM transakcije WHERE account_id = :account_id; ALTER TABLE transakcije ADD COLUMN type VARCHAR(6) NOT NULL CHECK (type IN ('debit', 'credit')); ALTER TABLE transakcije DROP CONSTRAINT transakcije_amount_check, ADD CONSTRAINT transakcije_amount_check CHECK (amount > 0); SELECT COALESCE( SUM(CASE WHEN type = 'credit' THEN amount WHEN type = 'debit' THEN - amount ) AS balance FROM transakcije WHERE account_id = :account_id;