Моделирайте прост банкова система: - Таблица `accounts`: - `id`, - `owner_id`, - `currency`, - `created_at`. - Таблица `transactions`: - `id`, - `account_id`, - `amount`, - `created_at`. **Изисквания:** 1. Напишете SQL за създаване на схемата с необходимите ограничения (NOT NULL, FK, CHECK за ненулев `amount`). 2. Напишете заявка: - получете текущия баланс на сметката по `account_id` (сума `amount`). 3. Усложнение: поддържайте дебит/кредит (двойно записване). Почистване
Golang
Общо впечатление от интервюто, ниво на кандидата, препоръки
Как работи garbage collector-ът в Go? Опишете фазите и алгоритъма.
Как да оптимизираме търсенето в база данни? Какво представляват индексите и каква е тяхната сложност?
Какви са предимствата на goroutines пред OS нишките?
Разкажете за планировчика на Go (scheduler). Как работи? Какво е hand-off?
Какви примитиви за синхронизация има в Go? Каква е разликата между Mutex и RWMutex? Кога да използваме атомики?
Как работи map в Go? Разкажете за вътрешната структура, buckets, колизии.
3. Трудност: поддръжка на дебит/кредит (двойна регистрация). Почистване CREATE TABLE сметки ( id BIGSERIAL PRIMARY KEY, owner_id BIGINT NOT NULL, currency VARCHAR(3) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT now() ); CREATE TABLE транзакции ( id BIGSERIAL PRIMARY KEY, account_id BIGINT NOT NULL REFERENCES сметки(id), amount NUMERIC(18,2) NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT now() ); CREATE INDEX idx_транзакции_account_id ON транзакции(account_id); SELECT COALESCE(sum(amount), 0) AS balance FROM транзакции WHERE account_id = :account_id; ALTER TABLE транзакции ADD COLUMN type VARCHAR(6) NOT NULL CHECK (type IN ('debit', 'credit')); ALTER TABLE транзакции DROP CONSTRAINT транзакции_amount_check, ADD CONSTRAINT транзакции_amount_check CHECK (amount > 0); SELECT COALESCE( SUM(CASE WHEN type = 'credit' THEN amount WHEN type = 'debit' THEN - amount ) AS balance FROM транзакции WHERE account_id = :account_id;
Моделирайте прост банкова система: - Таблица `accounts`: - `id`, - `owner_id`, - `currency`, - `created_at`. - Таблица `transactions`: - `id`, - `account_id`, - `amount`, - `created_at`. **Изисквания:** 1. Напишете SQL за създаване на схемата с необходимите ограничения (NOT NULL, FK, CHECK за ненулев `amount`). 2. Напишете заявка: - да получите текущия баланс на сметката по `account_id` (сумата `amount`). 3. Усложнение: поддържайте дебит/кредит (двойна запис). Почистване.