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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python16 036
  • Облачные технологии12 746
  • QA вакансии3 431
  • Backend вакансии1 983
  • Инженер данных1 590
  • Продакт-менеджер1 097

Разработка

  • Android1 792
  • iOS1 660
  • AI вакансии924
  • Fullstack вакансии835
  • Frontend вакансии702
  • Mobile вакансии36

По стеку

  • Go8 538
  • Java5 808
  • Node.js1 826
  • Kotlin1 514
  • .NET1 433
  • Rust1 416
  • PHP591
  • C#500
  • C++449

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

  • Kubernetes7 088
  • DevOps вакансии5 341
  • Linux-инфраструктура5 148
  • Terraform / IaC3 908
  • CI/CD2 192
  • Мониторинг и Observability1 724
  • SRE539
  • Кибербезопасность367

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

  • Data Scientist977
  • Бизнес-аналитик828
  • Аналитик данных809
  • Системный аналитик111

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

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

По регионам

  • Вакансии в США44 024
  • Вакансии в Европе19 966
  • Вакансии в Канаде4 349
  • Работа в России3 875

По формату

  • Удалённые вакансии72 075
  • Релокация в США44 024
  • Гибридная работа10 789
  • Офисная работа6 889

По уровню

  • Senior вакансии39 966
  • Middle вакансии19 556
  • Junior вакансии6 496

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

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab136 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

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

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

Какие ошибки делают команды, когда прячут сложность базы данных за Hibernate?

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

Главные ошибки: игнорирование N+1 до нагрузочного теста, отсутствие индексов на FK-колонках, доверие hbm2ddl.auto=update в продакшне, массовые операции через ORM вместо bulk SQL, и LazyInitializationException из-за несовпадения границ транзакции и сессии.

Ошибка 1: Игнорирование N+1 до продакшна

Разработчики создают удобные связи через @OneToMany и получают объектный граф, не думая о SQL. В dev-среде с 10 записями всё работает. В продакшн с 10 000 — деградация под нагрузкой.

// Проблемный код: N+1 на каждую категорию
List<Category> categories = categoryRepo.findAll(); // 1 SELECT
for (Category cat : categories) {
    cat.getProducts().size(); // N SELECT — по одному на категорию
}

// Правильно: JOIN FETCH
List<Category> categories = em.createQuery(
    "SELECT c FROM Category c JOIN FETCH c.products",
    Category.class
).getResultList();

Ошибки при скрытии сложности базы данных за Hibernate

Hibernate позволяет работать с данными как с объектами, но это абстракция с утечками. Команды, которые воспринимают Hibernate как полную замену знаний о базе данных, регулярно сталкиваются с предсказуемыми проблемами.

Ошибка 2: Отсутствие знаний об индексах

Команды добавляют @Column, @ManyToOne и ожидают, что Hibernate создаст оптимальную схему. Но Hibernate не добавляет индексы автоматически на foreign key колонки (кроме некоторых диалектов). Запросы по user_id без индекса делают Seq Scan.

// Явно указываем индексы в аннотации
@Table(
    name = "orders",
    indexes = {
        @Index(name = "idx_orders_user_id", columnList = "user_id"),
        @Index(name = "idx_orders_created_at", columnList = "created_at")
    }
)
@Entity
public class Order { ... }

Ошибка 3: Доверие hbm2ddl.auto в продакшне

Настройка hbm2ddl.auto=update привлекательна — схема меняется автоматически при деплое. На практике это молчаливое переименование колонок (DROP + ADD = потеря данных), неконтролируемые ALTER TABLE в рабочей базе.

# Правильно для продакшна
spring:
  jpa:
    hibernate:
      ddl-auto: validate  # только проверка соответствия, без изменений
# Миграции через Liquibase или Flyway — явно и версионированно

Ошибка 4: Бизнес-логика в lazy-коллекциях

Когда метод сервиса возвращает entity с ленивыми коллекциями, а контроллер или DTO-маппер обращается к ним вне транзакции — LazyInitializationException. Это признак того, что граница транзакции и граница сессии не совпадают.

// Плохо: entity возвращается из @Transactional метода,
// сессия закрывается, контроллер обращается к lazy полю
@GetMapping("/users/{id}")
public UserDto getUser(@PathVariable Long id) {
    User user = userService.findById(id);
    user.getOrders().size(); // LazyInitializationException!
    ...
}

// Правильно: загружать всё нужное внутри транзакции или использовать DTO-проекцию

Ошибка 5: Массовые операции через ORM

Обновление 100 000 записей через findAll() + цикл — это загрузка всех объектов в память, dirty checking каждого, 100 000 отдельных UPDATE. Массовые операции должны идти напрямую через SQL.

// Плохо: 100k объектов в памяти
List<User> users = userRepo.findAll();
users.forEach(u -> u.setActive(false));
// flush: 100k UPDATE запросов

// Правильно: один UPDATE
@Modifying
@Query("UPDATE User u SET u.active = false WHERE u.createdAt < :date")
void deactivateOldUsers(@Param("date") LocalDate date);

Ошибка 6: Игнорирование connection pool

Hibernate работает поверх пула соединений (HikariCP по умолчанию). Длинные транзакции, Open Session in View, вызовы внешних API внутри транзакции — всё это держит соединения из пула, приводя к исчерпанию под нагрузкой.

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

  • FetchType.EAGER на @OneToMany — Hibernate делает JOIN при каждой загрузке сущности, даже когда коллекция не нужна
  • Каскадное удаление (CascadeType.REMOVE) на большой коллекции — загружает все дочерние объекты перед удалением вместо одного DELETE
  • orphanRemoval = true без понимания — удаление элемента из Java-коллекции удаляет запись из БД
  • Использование entity как DTO в REST API — изменения поля в JSON-ответе клиента могут стать managed-изменениями при десериализации
  • Отсутствие @Version при конкурентных обновлениях — потерянные обновления (lost update) без явных блокировок
  • Транзакции @Transactional на private методах — Spring AOP не перехватывает их, транзакция не создаётся
  • Hibernate кеш второго уровня без инвалидации при прямых SQL-операциях — кеш показывает устаревшие данные
  • Ленивые коллекции в многопоточном коде (async @Scheduled) — сессия не thread-safe, NPE или LazyInitializationException

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

  • Что такое проблема N+1 в Hibernate и как её решить?
  • Что такое lazy loading в Hibernate и когда возникает LazyInitializationException?
  • В чём разница между SessionFactory и Session в Hibernate?
  • Что такое Hibernate и что такое ORM (Object-Relational Mapping)?

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

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

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

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

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

Проверить себя по теме Hibernate →
←Предыдущий вопросКакая mental model Hibernate важнее всего: unit of work, change tracking, query generation, migrations или generated client?Следующий вопрос→Представьте, после изменения кода на Hibernate выросло число SQL-запросов и latency. Как вы будете это доказывать и чинить?

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

Hibernatetechnical-communicationtechnology-selectiontrade-off-analysis