Modelar um sistema bancário simples: - Tabela `accounts`: - `id`, - `owner_id`, - `currency`, - `created_at`. - Tabela `transactions`: - `id`, - `account_id`, - `amount`, - `created_at`. **Requisitos:** 1. Escrever SQL para criar o esquema com as restrições necessárias (NOT NULL, FK, CHECK em `amount` não nulo). 2. Escrever uma consulta: - obter o saldo atual da conta por `account_id` (soma de `amount`). 3. Dificuldade adicional: suportar débito/crédito (registro duplo). Limpeza
Golang
Quais são as vantagens das goroutines em relação aos threads do sistema operativo?
Como funciona o garbage collector em Go? Descreva as fases e o algoritmo.
Impressão geral da entrevista, nível do candidato, recomendações
Quais primitivas de sincronização existem em Go? Qual é a diferença entre Mutex e RWMutex? Quando usar atomics?
Como é que a map em Go funciona? Fale sobre a estrutura interna, buckets, colisões.
Como otimizar a pesquisa numa base de dados? O que são índices e qual é a sua complexidade?
Fale sobre o agendador do Go (scheduler). Como ele funciona? O que é o hand-off?
3. Complexidade: suportar débito/crédito (dupla entrada). Limpeza CREATE TABLE contas ( id BIGSERIAL PRIMARY KEY, owner_id BIGINT NOT NULL, currency VARCHAR(3) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT now() ); CREATE TABLE transações ( id BIGSERIAL PRIMARY KEY, account_id BIGINT NOT NULL REFERENCES contas(id), amount NUMERIC(18,2) NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT now() ); CREATE INDEX idx_transações_account_id ON transações(account_id); SELECT COALESCE(sum(amount), 0) AS balance FROM transações WHERE account_id = :account_id; ALTER TABLE transações ADD COLUMN type VARCHAR(6) NOT NULL CHECK (type IN ('debit', 'credit')); ALTER TABLE transações DROP CONSTRAINT transações_amount_check, ADD CONSTRAINT transações_amount_check CHECK (amount > 0); SELECT COALESCE( SUM(CASE WHEN type = 'credit' THEN amount WHEN type = 'debit' THEN - amount ) AS balance FROM transações WHERE account_id = :account_id;
Modelar um sistema bancário simples: - Tabela `accounts`: - `id`, - `owner_id`, - `currency`, - `created_at`. - Tabela `transactions`: - `id`, - `account_id`, - `amount`, - `created_at`. **Requisitos:** 1. Escrever SQL para criar o esquema com as restrições necessárias (NOT NULL, FK, CHECK em `amount` não nulo). 2. Escrever uma consulta: - obter o saldo atual da conta por `account_id` (soma de `amount`). 3. Dificuldade adicional: suportar débito/crédito (registro duplo). Limpeza.