Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+694новые вакансии за сутки·52 494вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 662
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python6 244
  • Облачные технологии4 749
  • QA вакансии1 736
  • Android1 148
  • Инженер данных800
  • Продакт-менеджер321

Разработка

  • iOS1 092
  • Backend вакансии1 046
  • Fullstack вакансии453
  • AI вакансии391
  • Frontend вакансии376
  • Mobile вакансии27

По стеку

  • Go3 590
  • Java2 153
  • Kotlin942
  • Node.js767
  • Rust544
  • .NET496
  • PHP267
  • C++220
  • C#198

DevOps и инфраструктура

  • Kubernetes2 686
  • Linux-инфраструктура2 117
  • DevOps вакансии1 960
  • Terraform / IaC1 615
  • CI/CD871
  • Мониторинг и Observability742
  • SRE228
  • Кибербезопасность47

Аналитика и данные

  • Аналитик данных495
  • Data Scientist449
  • Бизнес-аналитик351
  • Системный аналитик54

Другие направления

  • Проджект-менеджер109
  • UI/UX дизайн70
  • Ручное тестирование14

По регионам

  • Вакансии в США23 835
  • Вакансии в Европе9 341
  • Работа в России3 283
  • Вакансии в Канаде2 140

По формату

  • Удалённые вакансии41 311
  • Релокация в США23 835
  • Гибридная работа4 058
  • Офисная работа2 949

По уровню

  • Senior вакансии20 396
  • Middle вакансии11 620
  • Junior вакансии3 665

Сейчас нанимают

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Wise139 вакансий
  • Grab134 вакансии
  • Infobip28 вакансий
  • Adyen23 вакансии
  • Darktrace17 вакансий
  • Spotify15 вакансий
  • Celonis11 вакансий
  • Razorpay9 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме PostgreSQLВсе вопросы
PostgreSQLMiddleТеория

Что такое ACID? Объясни каждую букву на конкретном примере с банковским переводом.

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

ACID: Atomicity — все операции выполняются или ни одна; Consistency — данные соответствуют ограничениям до и после; Isolation — параллельные транзакции не видят промежуточных состояний друг друга; Durability — зафиксированные данные переживают сбой.

A — Atomicity (Атомарность)

Транзакция — неделимая единица: либо все операции выполняются, либо ни одна. Если после списания с Алисы произойдёт сбой сервера, PostgreSQL при старте откатит незавершённую транзакцию по WAL-журналу, и баланс Алисы вернётся к исходному значению.

BEGIN;
  UPDATE accounts SET balance = balance - 1000 WHERE id = 1; -- Алиса
  -- Если здесь упадёт сервер — следующая строка не выполнится
  UPDATE accounts SET balance = balance + 1000 WHERE id = 2; -- Боб
COMMIT;
-- При ROLLBACK или сбое оба UPDATE отменяются

ACID: четыре свойства транзакций

Аббревиатура ACID описывает гарантии, которые СУБД предоставляет приложению при работе с транзакциями. Разберём каждое свойство на примере банковского перевода: Алиса переводит 1000 рублей Бобу.

C — Consistency (Согласованность)

До начала и после завершения транзакции данные должны удовлетворять всем ограничениям и инвариантам. В нашем примере сумма балансов всех счетов должна оставаться неизменной. PostgreSQL проверяет CHECK-ограничения, FOREIGN KEY и UNIQUE в момент фиксации (или немедленно, для NOT DEFERRABLE).

ALTER TABLE accounts ADD CONSTRAINT balance_non_negative CHECK (balance >= 0);
-- Попытка перевести больше, чем есть на счёте:
BEGIN;
  UPDATE accounts SET balance = balance - 5000 WHERE id = 1; -- нарушит CHECK
COMMIT;
-- ERROR: new row for relation "accounts" violates check constraint "balance_non_negative"
-- Транзакция автоматически откатится

I — Isolation (Изолированность)

Параллельные транзакции не должны мешать друг другу. PostgreSQL реализует изоляцию через MVCC (Multi-Version Concurrency Control): каждая транзакция видит снапшот данных на момент начала. Уровни изоляции регулируют, какие аномалии допустимы:

  • READ COMMITTED (по умолчанию) — каждый оператор видит уже зафиксированные данные; возможны non-repeatable reads.
  • REPEATABLE READ — снапшот фиксируется на начало транзакции; исключает non-repeatable reads, но допускает phantom reads (в PostgreSQL — нет, реализован строже стандарта).
  • SERIALIZABLE — полная эмуляция последовательного выполнения транзакций через SSI.
-- Транзакция 1 читает баланс Алисы
BEGIN ISOLATION LEVEL REPEATABLE READ;
  SELECT balance FROM accounts WHERE id = 1; -- видит 5000
  -- В это время Транзакция 2 списывает 1000 и COMMIT
  SELECT balance FROM accounts WHERE id = 1; -- всё ещё видит 5000 (снапшот!)
COMMIT;

D — Durability (Долговечность)

После COMMIT данные сохранены даже при сбое питания или краше ОС. PostgreSQL использует WAL (Write-Ahead Log): сначала запись попадает в журнал на диске (fsync), затем в heap. При старте после краша база воспроизводит WAL и восстанавливает все зафиксированные транзакции.

-- Параметры, влияющие на Durability (не менять в production без понимания!)
SHOW synchronous_commit;   -- on (по умолчанию) — fsync WAL до ответа клиенту
SHOW fsync;                -- on (по умолчанию) — гарантирует сброс на диск

-- Для некритичных данных (логи) можно ослабить:
SET synchronous_commit = off;  -- риск потери последних ~200 мс транзакций при краше

Полный пример перевода с проверкой инвариантов

DO $$
DECLARE
  from_balance numeric;
BEGIN
  -- Блокируем строки в порядке id во избежание deadlock
  SELECT balance INTO from_balance
  FROM accounts
  WHERE id = 1
  FOR UPDATE;

  IF from_balance < 1000 THEN
    RAISE EXCEPTION 'Insufficient funds: balance is %', from_balance;
  END IF;

  UPDATE accounts SET balance = balance - 1000 WHERE id = 1;
  UPDATE accounts SET balance = balance + 1000 WHERE id = 2;

  COMMIT;
END;
$$;

Подводные камни

  • Согласованность — ответственность приложения, а не только СУБД: PostgreSQL не знает о бизнес-инварианте «сумма балансов должна быть равна X»; если не написать CHECK или не проверить в коде, инвариант нарушится.
  • READ COMMITTED допускает non-repeatable reads: два SELECT в одной транзакции могут дать разные результаты, если между ними кто-то зафиксировал изменение. Для финансовых расчётов используйте REPEATABLE READ или SERIALIZABLE.
  • SERIALIZABLE в PostgreSQL реализован через SSI и может вызывать serialization failures (ERROR 40001) — приложение должно уметь повторять транзакцию.
  • synchronous_commit = off ослабляет Durability: при краше могут быть потеряны последние ~200 мс зафиксированных транзакций — клиент получил COMMIT, но данные не выжили.
  • Долгие открытые транзакции блокируют VACUUM и накапливают мёртвые версии строк (bloat), что деградирует производительность всей БД.
  • Явный SELECT ... FOR UPDATE необходим для предотвращения race condition при проверке баланса: без блокировки строки два параллельных перевода могут оба «увидеть» достаточный баланс и оба списать деньги.
  • SAVEPOINT позволяет частично откатить транзакцию, но не нарушает Atomicity — внешний COMMIT всё равно фиксирует всё, что осталось после ROLLBACK TO SAVEPOINT.

Частые вопросы на собеседовании

  • Что делает VACUUM, VACUUM FULL, ANALYZE? Чем они отличаются и какой когда применять?
  • Какие уровни изоляции есть и чем отличаются (READ COMMITTED, REPEATABLE READ, SERIALIZABLE)? Какой по умолчанию в Postgres?
  • Что такое PITR и чем pg_dump отличается от base backup + WAL archive?
  • Каковы типы индексов в PostgreSQL (B-tree, Hash, GIN, GiST, BRIN)?

Типичные ошибки

  • Объяснять ACID только расшифровкой.
  • Думать, что ACID сам решает все race conditions.
  • Не связывать durability с WAL.

Что проверяет интервьюер

  • Просит пример rollback.
  • Проверяет isolation на конкурентном списании.
  • Уточняет роль WAL после commit.

Как вы знаете этот вопрос?

Проверить себя по теме PostgreSQL →

Источники

  • https://www.postgresql.org/docs/current/transaction-iso.html
  • https://www.postgresql.org/docs/current/wal-intro.html

Связанные темы

PostgreSQLdata-consistencytransaction-design

Вакансии с этим навыком

PostgreSQL вакансии
  • Vice Senior Manager/Group Manager - Database Section, Cloud Services Department (CLSD)
  • Infrastructure Architect, Corporate IT - Global Architecture Section, Global IT Strategy Office (GITSO)
  • Data Engineer - FMCG Customer Strategy Section, FMCG Customer Strategy Department (C&M)
  • Senior Manager - Database Section, Cloud Services Department (CLSD)
  • Infrastructure Engineer, Modernization Lead (Manager Candidate) - IT Division, Rakuten Securities, Inc.(Secondment)