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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python9 224
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 322
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C#210
  • C++204

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

  • DevOps вакансии2 713
  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • Terraform / IaC1 406
  • CI/CD842
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

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

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

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

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

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

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

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

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

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

Представьте, endpoint на Quarkus иногда отвечает за секунды вместо миллисекунд. Как вы будете искать причину?

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

Intermittent spikes чаще всего вызваны исчерпанием connection/thread pool, блокировкой event loop (BlockedThreadChecker), GC паузами или медленным внешним вызовом. Диагностика: Micrometer метрики, OpenTelemetry трейсы, async-profiler wall-clock.

Шаг 1: Зафиксировать паттерн

Прежде чем что-то чинить — зафиксируйте, когда именно происходит spike:

# Смотрим на p99 latency в Prometheus
http_server_requests_seconds{uri="/api/endpoint", quantile="0.99"}

# Сколько запросов в очереди в момент spike
executor_queue_size{name="vert.x-worker-thread"}

# Активные соединения с БД
agroal_active_count
agroal_await_count

Если executor_queue_size резко растёт в момент spike — bottleneck в thread pool. Если agroal_await_count > 0 — bottleneck в DB connection pool.

Первичная классификация: intermittent vs постоянный

Endpoint иногда отвечает за секунды — ключевое слово «иногда». Это сразу сужает круг причин: постоянные проблемы (плохой алгоритм, N+1) дают стабильно высокую latency. Intermittent spikes указывают на:

  • исчерпание ресурса (connection pool, thread pool, GC pause);
  • внешнюю зависимость с нестабильным временем ответа (база, Redis, внешний API);
  • холодный старт (JVM JIT warm-up, lazy init CDI-бина);
  • contention на общем ресурсе (lock, synchronized блок).

Шаг 2: OpenTelemetry трейс конкретного медленного запроса

# application.properties
quarkus.otel.exporter.otlp.endpoint=http://tempo:4317
quarkus.otel.traces.sampler=parentbased_always_on

Откройте Jaeger/Grafana Tempo и найдите трейс с latency > 1s. Span breakdown покажет, где именно секунды — в SQL-запросе, HTTP-вызове к внешнему сервису или в самом handler-коде.

Шаг 3: Проверка BlockedThreadChecker

Quarkus Vert.x логирует предупреждение при блокировке I/O-потока:

# В логах ищем:
# WARN  [io.ver.cor.imp.BlockedThreadChecker] Thread Thread[vert.x-eventloop-thread-0,...]
# has been blocked for 2458 ms, time limit is 2000 ms
grep "BlockedThreadChecker" /var/log/app.log

Если такие строки есть — в handler выполняется блокирующий код (JDBC, синхронный HTTP-клиент) без @Blocking. Это блокирует event loop и все последующие запросы ждут освобождения потока.

Шаг 4: Анализ SQL через Hibernate statistics + slow query log

quarkus.hibernate-orm.statistics=true
quarkus.hibernate-orm.log.sql=true
quarkus.hibernate-orm.log.format-sql=true
# Логировать только медленные запросы (мс)
quarkus.hibernate-orm.log.queries-slower-than-ms=500

Также включите slow query log на уровне PostgreSQL:

-- В postgresql.conf или через ALTER SYSTEM
ALTER SYSTEM SET log_min_duration_statement = 500;  -- мс
SELECT pg_reload_conf();

Шаг 5: Профилирование с async-profiler

# Запустить 30-секундный CPU профиль
./asprof -d 30 -e cpu -f /tmp/cpu.html $(pgrep java)

# Или wall-clock (ловит waiting тоже)
./asprof -d 30 -e wall -t -f /tmp/wall.html $(pgrep java)

Wall-clock профиль особенно полезен для intermittent спайков — он показывает потоки в состоянии WAITING и TIMED_WAITING, что указывает на lock contention или ожидание пула.

Шаг 6: GC паузы

# Включить GC логи в JVM
JAVA_OPTS="-Xlog:gc*:file=/tmp/gc.log:time,uptime:filecount=5,filesize=10m"

# Смотрим паузы Stop-The-World
grep "Pause Full\|Pause Young" /tmp/gc.log | awk '{print $NF}'

Если паузы совпадают с моментами spike по времени — проблема в GC. Решение: увеличить heap (-Xmx), переключиться на ZGC (-XX:+UseZGC), или найти источник allocation pressure.

Шаг 7: Воспроизвести локально под нагрузкой

# k6 — нагрузочный тест для воспроизведения
k6 run --vus 50 --duration 60s - <<EOF
import http from 'k6/http';
export default function() {
  http.get('http://localhost:8080/api/endpoint');
}
EOF

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

  • JIT warm-up маскирует реальную проблему: первые несколько сотен запросов к JVM-приложению всегда медленнее из-за JIT-компиляции. Измеряйте latency после прогрева.
  • Connection pool по умолчанию мал: Agroal по умолчанию имеет max-size=20. При 50 concurrent запросах к БД 30 будут ждать в очереди.
  • Lazy initialization CDI-бинов: @ApplicationScoped создаёт proxy лениво — первый запрос к бину инициализирует его и может занять время (например, при инициализации HTTP-клиента с DNS lookup).
  • Трейсы с sampling пропускают медленные запросы: если используете rate-based sampling, редкие спайки могут не попасть в выборку — используйте tail-based sampling или временно включите always_on.
  • Wall-clock профиль влияет на производительность: async-profiler с -e wall имеет overhead ~5% — запускайте в production только на короткое время.
  • Медленный внешний API скрывается за таймаутом: если у HTTP-клиента нет таймаута, зависший внешний вызов держит worker thread до дефолтного таймаута ОС (минуты). Всегда устанавливайте connect-timeout и read-timeout явно.
  • Lock contention в бизнес-логике: synchronized-блоки или ReentrantLock в shared-сервисах под нагрузкой дают резкие спайки. Flamegraph покажет потоки в BLOCKED-состоянии.
  • Dev Services в тестах не равны production: Testcontainers-база в dev-mode работает иначе, чем production PostgreSQL с pgbouncer. Всегда воспроизводите проблему на staging с реальным трафиком.

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

  • Как Quarkus достигает быстрого времени запуска и низкого потребления памяти?
  • Что такое Quarkus и какие проблемы он решает по сравнению с традиционными Java-фреймворками?
  • Как Quarkus поддерживает разработку RESTful API с помощью RESTEasy Reactive?
  • В чём разница между JVM-режимом и native-режимом Quarkus?

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

  • Сразу обвинять Quarkus, не проверив соседние слои системы
  • Чинить симптом без минимального воспроизведения и evidence
  • Не учитывать версии, конфигурацию, окружение и recent changes

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

  • Умеет локализовать проблему вокруг Quarkus
  • Двигается от симптома к гипотезам и проверкам
  • Отличает баг инструмента от ошибки использования или окружения

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

Проверить себя по теме Quarkus →
←Предыдущий вопросКак понять, что проблема в сервисе связана с Quarkus, а не с базой, сетью, инфраструктурой или бизнес-логикой?Следующий вопрос→Как сравнить Quarkus с ближайшими backend-альтернативами по скорости разработки, производительности, экосистеме и эксплуатации?

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

QuarkusDebuggingtechnical-communicationtechnology-selectiontrade-off-analysis