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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python11 079
  • Облачные технологии8 824
  • QA вакансии2 977
  • Android1 395
  • Инженер данных1 032
  • Продакт-менеджер351

Разработка

  • Backend вакансии1 342
  • iOS1 307
  • AI вакансии660
  • Fullstack вакансии524
  • Frontend вакансии465
  • Mobile вакансии28

По стеку

  • Go6 622
  • Java3 670
  • Kotlin1 199
  • Node.js1 190
  • Rust1 181
  • .NET780
  • PHP329
  • C++301
  • C#211

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

  • Kubernetes5 251
  • Linux-инфраструктура4 138
  • DevOps вакансии3 024
  • Terraform / IaC2 834
  • Мониторинг и Observability1 406
  • CI/CD917
  • SRE389
  • Кибербезопасность40

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

  • Аналитик данных586
  • Бизнес-аналитик487
  • Data Scientist458
  • Системный аналитик75

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

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

По регионам

  • Вакансии в США31 201
  • Вакансии в Европе11 507
  • Работа в России3 630
  • Вакансии в Канаде2 546

По формату

  • Удалённые вакансии47 761
  • Релокация в США31 201
  • Гибридная работа7 699
  • Офисная работа6 071

По уровню

  • Senior вакансии27 027
  • Middle вакансии12 284
  • Junior вакансии4 495

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

Все компании
  • Wise196 вакансий
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify38 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

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

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

Какие ошибки делают команды при внедрении Pydantic?

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

Частые ошибки: использование одной модели для input и output (утечка внутренних полей), бизнес-логика в field_validator вместо сервисного слоя, забытый model_rebuild() при circular references, игнорирование ValidationError в продакшне.

Ошибка 1: одна модель для input и output

Команды часто используют одну модель и для приёма запроса, и для ответа. В результате в API утекают внутренние поля (хэш пароля, внутренние флаги).

# Плохо: одна модель
class User(BaseModel):
    id: int
    email: str
    password_hash: str  # утечёт в ответе!

# Хорошо: разделить
class UserCreate(BaseModel):
    email: str
    password: str

class UserResponse(BaseModel):
    id: int
    email: str
    model_config = {"from_attributes": True}

Ошибка 2: бизнес-логика в field_validator

Проверка уникальности email, баланса счёта или наличия записи в БД не должна быть в @field_validator. Pydantic вызывает валидаторы в конструкторе — до того, как у вас есть сессия БД или контекст запроса.

# Плохо: запрос к БД в валидаторе
class UserCreate(BaseModel):
    email: str

    @field_validator("email")
    @classmethod
    def email_unique(cls, v: str) -> str:
        # НЕЛЬЗЯ: нет db session, нет async context
        if db.query(User).filter_by(email=v).first():
            raise ValueError("email already taken")
        return v

# Хорошо: проверка в сервисном слое
async def create_user(data: UserCreate, db: AsyncSession) -> User:
    existing = await db.scalar(select(User).where(User.email == data.email))
    if existing:
        raise HTTPException(status_code=409, detail="email already taken")
    ...

Ошибка 3: игнорирование ValidationError в продакшне

При парсинге внешних данных (Telegram, webhooks) ValidationError содержит точный путь к сломанному полю. Команды ловят его как Exception и теряют контекст.

from pydantic import ValidationError
import logging

logger = logging.getLogger(__name__)

try:
    job = JobCreate.model_validate(raw_data)
except ValidationError as e:
    # e.errors() — список с loc, msg, type
    logger.warning("invalid job payload", extra={"errors": e.errors()})
    raise

Ошибка 4: забытый model_rebuild() при forward references

При circular references между моделями Pydantic v2 требует явного вызова model_rebuild(). Без него — PydanticUserError: "Model is not fully defined" в runtime.

from __future__ import annotations
from pydantic import BaseModel

class Company(BaseModel):
    name: str
    jobs: list[Job] = []

class Job(BaseModel):
    title: str
    company: Company | None = None

# Обязательно после объявления обоих классов:
Company.model_rebuild()
Job.model_rebuild()

Ошибка 5: использование model_config без понимания влияния

Флаги вроде arbitrary_types_allowed=True или populate_by_name=True меняют поведение всей модели. Команды копируют их из SO без понимания последствий.

# arbitrary_types_allowed отключает проверку типов для кастомных классов
class Config(BaseModel):
    model_config = {"arbitrary_types_allowed": True}
    conn: SomeDatabaseConnection  # Pydantic не проверит этот тип

Ошибка 6: мутабельные модели как value objects

По умолчанию Pydantic-модели мутабельны. Для ключей кэша, идентификаторов и других value objects нужно frozen=True.

class JobID(BaseModel):
    model_config = {"frozen": True}
    value: int

# Теперь можно использовать как ключ словаря
cache: dict[JobID, str] = {}

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

  • Миграция v1 → v2: @validator без @classmethod не работает в v2 — ошибка тихая в некоторых версиях.
  • .dict() удалён в v2 — используйте .model_dump(). Старый код падает с AttributeError.
  • Алиасы через Field(alias="camelCase") ломают model_dump() без by_alias=True.
  • Тип list[BaseModel] в поле копирует объекты при валидации — неожиданное потребление памяти на больших списках.
  • model_validate с strict=True не приводит "123" к int — поведение отличается от дефолтного режима.
  • Вложенные модели сериализуются рекурсивно — глубокие структуры могут давать RecursionError.
  • Использование Optional[str] вместо str | None в v2 работает, но считается устаревшим стилем.
  • Pydantic не логирует предупреждения при игнорировании лишних полей (default) — используйте model_config = {"extra": "forbid"} на входных моделях.

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

  • В чём разница между Pydantic v1 и Pydantic v2 — каковы основные breaking changes?
  • Что такое Pydantic и какую проблему он решает в Python-приложениях?
  • Как Pydantic использует аннотации типов Python для валидации данных?
  • Как Pydantic обрабатывает приведение типов (type coercion) — в чём разница между strict mode и lax mode?

Что портит ответ

  • Перечислять ошибки без объяснения причин
  • Не отличать beginner mistakes от production failure modes
  • Не предлагать процесс, который предотвращает повторение ошибок

Что слушает интервьюер

  • Знает типичные ошибки при работе с Pydantic
  • Понимает причины ошибок
  • Предлагает практики prevention и early detection

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

Проверить себя по теме Pydantic →
←Предыдущий вопросЧто такое `model_config` в Pydantic v2 и как он заменяет внутренний класс `Config` из v1?Следующий вопрос→Какие архитектурные решения Pydantic навязывает команде?

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

Pydanticpydantictechnical-communicationtechnology-selectiontrade-off-analysis