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

+1 210новых вакансий за сутки·93 612вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 126
  • Облачные технологии14 083
  • QA вакансии3 456
  • Backend вакансии2 115
  • Инженер данных1 809
  • Продакт-менеджер1 261

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии986
  • AI вакансии950
  • Frontend вакансии744
  • Mobile вакансии44

По стеку

  • Go8 688
  • Java6 537
  • Node.js2 026
  • .NET1 722
  • Kotlin1 611
  • Rust1 458
  • C#710
  • PHP682
  • C++571

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

  • Kubernetes7 772
  • DevOps вакансии6 054
  • Linux-инфраструктура5 493
  • Terraform / IaC4 275
  • CI/CD3 239
  • Мониторинг и Observability1 790
  • SRE568
  • Кибербезопасность458

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

  • Data Scientist1 143
  • Бизнес-аналитик923
  • Аналитик данных857
  • Системный аналитик152

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

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

По регионам

  • Вакансии в США44 276
  • Вакансии в Европе23 819
  • Вакансии в Канаде4 471
  • Работа в России3 904

По формату

  • Удалённые вакансии74 928
  • Релокация в США44 273
  • Гибридная работа12 388
  • Офисная работа7 083

По уровню

  • Senior вакансии42 625
  • Middle вакансии20 854
  • Junior вакансии6 721

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

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

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

Что такое numeric vs float8/real? Почему в финансах берут numeric?

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

numeric хранит точные десятичные цифры и используется для денег, потому что float8/real — двоичное приближение, при котором 0.1+0.2 ≠ 0.3 и ошибки накапливаются в финансовых операциях.

Демонстрация проблемы

-- Проблема float в финансах
SELECT 0.1::float8 + 0.2::float8 = 0.3::float8;  -- false!
SELECT 0.1::float8 + 0.2::float8;  -- 0.30000000000000004

-- numeric работает точно
SELECT 0.1::numeric + 0.2::numeric = 0.3::numeric;  -- true
SELECT 0.1::numeric + 0.2::numeric;  -- 0.3

-- Накопительная ошибка в финансах
SELECT SUM(amount::float8)
FROM (VALUES (0.1), (0.1), (0.1), (0.1), (0.1),
             (0.1), (0.1), (0.1), (0.1), (0.1)) AS t(amount);
-- Результат: 0.9999999999999999, а не 1.0

Как хранятся числа: двоичная vs десятичная арифметика

real (float4) и double precision / float8 используют IEEE 754 — двоичное представление с плавающей точкой. Большинство десятичных дробей (0.1, 0.15, 1.005) не представимы точно в двоичной системе и хранятся приближённо.

numeric(precision, scale) хранит число как строку десятичных цифр с явной точностью. Вычисления точные, но медленнее из-за программной арифметики.

Правильная схема для финансовых данных

CREATE TABLE payments (
    payment_id   bigint          PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
    user_id      bigint          NOT NULL REFERENCES users(user_id),
    amount       numeric(19, 4)  NOT NULL CHECK (amount > 0),
    fee          numeric(19, 4)  NOT NULL DEFAULT 0,
    currency     char(3)         NOT NULL DEFAULT 'RUB',
    created_at   timestamptz     NOT NULL DEFAULT now()
);

-- Для аналитики и ML — float подходит
CREATE TABLE product_recommendations (
    product_id   bigint          PRIMARY KEY,
    score        double precision NOT NULL,  -- приближённая метрика, точность не критична
    click_rate   real            NOT NULL
);

Когда что использовать

  • numeric(p, s) — деньги, налоги, ставки, лимиты, баланс, любые значения где точность и воспроизводимость обязательны.
  • double precision / float8 — координаты GPS, научные измерения, ML-скоры, статистика, метрики производительности.
  • real / float4 — то же, что float8, но с меньшей точностью (7 значащих цифр); экономит место в таблицах с миллиардами строк.
  • money — избегать: зависит от lc_monetary, неудобен при обмене данными, не поддерживает параметризацию precision.

Хранение в приложении

В Python используйте Decimal для работы с numeric-колонками:

from decimal import Decimal
import asyncpg

# asyncpg автоматически конвертирует numeric в Decimal
async def get_balance(conn: asyncpg.Connection, user_id: int) -> Decimal:
    row = await conn.fetchrow(
        "SELECT balance FROM wallets WHERE user_id = $1", user_id
    )
    return row["balance"]  # Decimal, не float

# Никогда не делайте:
balance = float(row["balance"])  # теряем точность!

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

  • Незаметные копеечные расхождения: float-ошибки в 0.000001 накапливаются при тысячах операций и ломают финансовые сверки.
  • ORM-конвертации: SQLAlchemy по умолчанию может смапить Python float в double precision; явно указывайте Numeric(19, 4) в Column.
  • numeric без precision: numeric без (p, s) хранит до 131072 цифр до запятой — огромный overhead; всегда задавайте precision и scale.
  • Производительность: numeric в 3–10 раз медленнее float в агрегатах на больших таблицах; на тяжёлой OLAP-аналитике это ощутимо.
  • Сравнение с литералами: WHERE price = 1.99 для float-колонки непредсказуемо; для numeric работает корректно.
  • Тип money и локаль: SELECT '1,234.56'::money зависит от lc_monetary сервера; при смене локали данные ломаются.
  • Индексы на numeric: работают нормально, но размер индекса больше, чем для bigint; для колонок с целыми суммами лучше хранить в копейках как bigint.

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

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

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

  • Сравнивать float на точное равенство.
  • Брать numeric без нужной scale.
  • Использовать money как универсальный тип денег.

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

  • Просит пример ошибки округления.
  • Проверяет выбор для amount и score.
  • Уточняет precision/scale.

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

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

Источники

  • https://www.postgresql.org/docs/current/datatype-numeric.html

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

PostgreSQLdata-modelingprecision-handling

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

PostgreSQL вакансии
  • Senior Software Engineer - Java/React
  • Principal Software Engineer
  • Software Engineer II (Backend)
  • Engineering Manager, Bots & Fraud
  • Fullstack-разработчик (Middle+ / Senior)