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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 131
  • Облачные технологии14 071
  • QA вакансии3 448
  • Backend вакансии2 087
  • Инженер данных1 783
  • Продакт-менеджер1 221

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии976
  • AI вакансии943
  • Frontend вакансии738
  • Mobile вакансии44

По стеку

  • Go8 685
  • Java6 537
  • Node.js2 024
  • .NET1 723
  • Kotlin1 612
  • Rust1 462
  • C#710
  • PHP682
  • C++574

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

  • Kubernetes7 766
  • DevOps вакансии6 046
  • Linux-инфраструктура5 493
  • Terraform / IaC4 271
  • CI/CD3 241
  • Мониторинг и Observability1 790
  • SRE564
  • Кибербезопасность445

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

  • Data Scientist1 120
  • Бизнес-аналитик913
  • Аналитик данных834
  • Системный аналитик150

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

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

По регионам

  • Вакансии в США43 099
  • Вакансии в Европе23 432
  • Вакансии в Канаде4 376
  • Работа в России3 903

По формату

  • Удалённые вакансии72 764
  • Релокация в США43 097
  • Гибридная работа12 388
  • Офисная работа7 092

По уровню

  • Senior вакансии41 715
  • Middle вакансии20 188
  • Junior вакансии6 560

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

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

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

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

Как настроить кэш второго уровня в Hibernate? Назовите несколько провайдеров кэша.

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

Кэш второго уровня настраивается через hibernate.cache.use_second_level_cache=true и указание фабрики региона (JCacheRegionFactory для Ehcache, RedissonRegionFactory для Redis). Сущность маркируется @Cache с выбранной стратегией конкурентности.

Шаг 1: Подключение провайдера

Hibernate не включает провайдер кэша — нужно выбрать и подключить зависимость. Наиболее популярные варианты:

Ehcache 3 (через JCache/JSR-107):

<dependency>
  <groupId>org.hibernate.orm</groupId>
  <artifactId>hibernate-jcache</artifactId>
  <version>6.4.4.Final</version>
</dependency>
<dependency>
  <groupId>org.ehcache</groupId>
  <artifactId>ehcache</artifactId>
  <version>3.10.8</version>
</dependency>

Caffeine (in-memory, без TTL-конфигурации через XML):

<dependency>
  <groupId>com.github.ben-manes.caffeine</groupId>
  <artifactId>caffeine</artifactId>
  <version>3.1.8</version>
</dependency>

Redisson (Redis-based, для кластера):

<dependency>
  <groupId>org.redisson</groupId>
  <artifactId>redisson-hibernate-6</artifactId>
  <version>3.27.2</version>
</dependency>

Шаг 2: Конфигурация Hibernate (Spring Boot)

spring.jpa.properties.hibernate.cache.use_second_level_cache=true
spring.jpa.properties.hibernate.cache.use_query_cache=true
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.jcache.JCacheRegionFactory
spring.jpa.properties.hibernate.javax.cache.provider=org.ehcache.jsr107.EhcacheCachingProvider
spring.jpa.properties.hibernate.javax.cache.uri=classpath:ehcache.xml
spring.jpa.properties.hibernate.generate_statistics=true

Шаг 3: Конфигурация Ehcache (ehcache.xml)

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://www.ehcache.org/v3">

  <!-- Дефолтный шаблон для всех регионов -->
  <default-template id="default">
    <expiry>
      <ttl unit="minutes">10</ttl>
    </expiry>
    <heap unit="entries">1000</heap>
  </default-template>

  <!-- Регион для Product -->
  <cache alias="com.example.Product" uses-template="default">
    <expiry>
      <ttl unit="hours">1</ttl>
    </expiry>
    <heap unit="entries">5000</heap>
    <off-heap unit="MB">100</off-heap>
  </cache>

  <!-- Регион для кэша запросов -->
  <cache alias="default-query-results-region" uses-template="default"/>
  <cache alias="default-update-timestamps-region">
    <expiry><none/></expiry>
    <heap unit="entries">5000</heap>
  </cache>

</config>

Шаг 4: Маркировка сущностей

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "com.example.Product")
public class Product {
    @Id @GeneratedValue
    private Long id;
    private String name;
    private BigDecimal price;

    // Коллекции кэшируются отдельно!
    @OneToMany(mappedBy = "product")
    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
    private List<Review> reviews;
}

Провайдеры: сравнение

  • Ehcache 3 — зрелый, поддерживает off-heap и disk tiers, JCache-совместимый, хорошо документирован. Выбор для монолитов.
  • Caffeine — максимально быстрый in-memory кэш, минимальная конфигурация, но без TTL через XML и без persistence. Выбор для микросервисов без внешнего кэша.
  • Redisson (Redis) — распределённый кэш для кластеров. Конфигурируется через redisson.yaml, поддерживает репликацию. Добавляет сетевую задержку.
  • Infinispan — поддерживает TRANSACTIONAL стратегию, подходит для JBoss/WildFly стека.

Мониторинг через Statistics

Statistics stats = sessionFactory.unwrap(SessionFactory.class).getStatistics();
long hits = stats.getSecondLevelCacheHitCount();
long misses = stats.getSecondLevelCacheMissCount();
double hitRate = (double) hits / (hits + misses) * 100;
log.info("L2 cache hit rate: {}%", hitRate);

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

  • Регион default-update-timestamps-region для кэша запросов должен иметь expiry = none — иначе инвалидация кэша запросов сломается и вы будете получать устаревшие результаты.
  • Коллекции (@OneToMany, @ManyToMany) не кэшируются автоматически при наличии @Cache на сущности — каждая коллекция требует отдельной аннотации @Cache.
  • В кластере с несколькими JVM in-memory провайдеры (Ehcache без терракотты, Caffeine) будут иметь рассинхронизированные кэши — необходим Redis или Infinispan с репликацией.
  • Bulk JPQL UPDATE/DELETE не инвалидирует L2-кэш — после таких операций нужно вызвать em.getEntityManagerFactory().getCache().evictAll().
  • Размер heap в Ehcache задаётся в entries, а не в байтах по умолчанию — без off-heap tier большие объекты увеличивают давление на GC.
  • Включение hibernate.generate_statistics=true в production добавляет заметный overhead — используйте Micrometer-метрики через HibernateMetricsAutoConfiguration вместо Statistics API напрямую.
  • При использовании READ_WRITE стратегии и JTA-транзакций требуется XA-совместимый провайдер кэша, иначе возникают проблемы двухфазного коммита.

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

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

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

  • Путать термин «second level cache config» с соседним механизмом Hibernate.
  • Не называть границу lifecycle, transaction, thread или request для «second level cache config».
  • Игнорировать production-эффекты «second level cache config»: latency, SQL shape, memory, security или observability.

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

  • Попросить объяснить механизм «second level cache config» на минимальном примере.
  • Проверить, видит ли кандидат failure mode и диагностику для «second level cache config».
  • Уточнить, какие настройки или API меняют «second level cache config» в реальном сервисе.

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

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

Источники

  • https://docs.hibernate.org/orm/current/userguide/html_single/
←Предыдущий вопросЧто такое пессимистическая блокировка в Hibernate и когда её следует использовать?

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

Hibernatearchitecture-tradeoffsimplementationproduction-readiness