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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python14 930
  • Облачные технологии11 077
  • QA вакансии3 282
  • Backend вакансии1 791
  • Инженер данных1 379
  • Продакт-менеджер819

Разработка

  • Android1 731
  • iOS1 605
  • AI вакансии858
  • Fullstack вакансии725
  • Frontend вакансии617
  • Mobile вакансии31

По стеку

  • Go8 182
  • Java5 283
  • Node.js1 704
  • Kotlin1 419
  • Rust1 360
  • .NET1 290
  • PHP551
  • C++394
  • C#369

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

  • Kubernetes6 326
  • Linux-инфраструктура4 784
  • DevOps вакансии4 737
  • Terraform / IaC3 487
  • Мониторинг и Observability1 598
  • CI/CD1 541
  • SRE494
  • Кибербезопасность242

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

  • Data Scientist759
  • Аналитик данных739
  • Бизнес-аналитик680
  • Системный аналитик92

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

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

По регионам

  • Вакансии в США40 112
  • Вакансии в Европе16 478
  • Работа в России3 877
  • Вакансии в Канаде3 839

По формату

  • Удалённые вакансии64 386
  • Релокация в США40 296
  • Гибридная работа9 283
  • Офисная работа6 552

По уровню

  • Senior вакансии35 880
  • Middle вакансии17 118
  • Junior вакансии5 838

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

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

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

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

Какие особенности runtime, type system или memory model Java реально влияют на архитектуру приложения?

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

JVM GC-паузы, JMM happens-before, erasure generics и Virtual Threads (Java 21) напрямую определяют выбор архитектурных паттернов — от пулов потоков до off-heap буферов.

JVM runtime и архитектурные решения

Java-приложения работают на JVM, и это напрямую влияет на архитектуру. JIT-компилятор (C1/C2 в HotSpot, Graal в GraalVM) достигает пиковой производительности через 10–30 секунд прогрева — это означает, что stateless-микросервисы с частыми перезапусками теряют на cold start. Решение: Java 21+ с Virtual Threads (Project Loom) и GraalVM Native Image для мгновенного старта.

Garbage Collector определяет характер пауз. G1GC (default с Java 9) даёт pause goals около 200 мс. ZGC и Shenandoah дают паузы менее 1 мс при heap до 16 TB — это критично для low-latency trading или real-time API. Архитектурное следствие: не держите огромные объекты в heap; используйте off-heap буферы (DirectByteBuffer) или разбивайте обработку на chunks.

// Пример off-heap буфера для I/O-intensive кода
ByteBuffer direct = ByteBuffer.allocateDirect(64 * 1024 * 1024); // 64 MB вне heap
// GC не трогает этот буфер — нет пауз при чтении/записи больших файлов

Memory model (JMM) и многопоточность

Java Memory Model гарантирует happens-before отношения. Без volatile или synchronized изменения в одном потоке не гарантированно видны в другом. Это влияет на архитектуру: double-checked locking без volatile на поле сломан до Java 5. Правильный Singleton:

public class Config {
    private static volatile Config instance; // volatile обязателен

    public static Config getInstance() {
        if (instance == null) {
            synchronized (Config.class) {
                if (instance == null) {
                    instance = new Config();
                }
            }
        }
        return instance;
    }
}

Лучше использовать Initialization-on-demand holder pattern или enum singleton — они thread-safe без явной синхронизации.

Type system и стирание типов

Generics в Java реализованы через erasure: List<String> и List<Integer> в байткоде одно и то же — List. Это ограничивает рефлексию и влияет на сериализацию. Jackson использует TypeReference для обхода:

// Неверно — тип стёрт, Jackson вернёт List<LinkedHashMap>
List<User> users = objectMapper.readValue(json, List.class);

// Верно — TypeReference сохраняет параметрический тип
List<User> users = objectMapper.readValue(json,
    new TypeReference<List<User>>() {});

Sealed classes (Java 17+) и records (Java 16+) дают алгебраические типы данных, что упрощает моделирование предметной области без null-проверок:

sealed interface PaymentResult permits Success, Failure, Pending {}
record Success(String transactionId) implements PaymentResult {}
record Failure(String reason) implements PaymentResult {}

// Pattern matching в switch (Java 21+)
String message = switch (result) {
    case Success s -> "OK: " + s.transactionId();
    case Failure f -> "Error: " + f.reason();
    case Pending p -> "Wait";
};

Virtual Threads (Java 21)

Project Loom добавил виртуальные потоки — легковесные потоки, которые не блокируют OS-поток при I/O. Это меняет архитектуру: больше не нужен реактивный стек (Reactor, RxJava) для масштабирования I/O-heavy сервисов. Spring Boot 3.2+ включает Virtual Threads одним свойством:

# application.yml
spring:
  threads:
    virtual:
      enabled: true

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

  • PermGen/Metaspace: до Java 8 утечки ClassLoader приводили к OutOfMemoryError в PermGen. Сейчас Metaspace в native memory, но динамическая генерация классов (Cglib, Groovy) всё ещё может его исчерпать.
  • String interning: String.intern() кладёт строку в String Pool. Злоупотребление — утечка памяти в Metaspace.
  • Finalizers устарели: System.gc() не гарантирует вызов finalize(). Используйте Cleaner API или try-with-resources.
  • ThreadLocal утечки в пулах потоков: если не очищать ThreadLocal в конце задачи, данные предыдущей задачи попадают в следующую.
  • JIT warmup в тестах: microbenchmark без JMH (Java Microbenchmark Harness) измеряет интерпретируемый код, а не оптимизированный JIT.
  • Checked exceptions ломают функциональные интерфейсы: лямбды не могут бросать checked exceptions — нужны обёртки или sneaky throws через Lombok.
  • equals/hashCode и коллекции: если переопределить equals без hashCode (или наоборот), объекты теряются в HashMap.
  • Integer кэш: Integer.valueOf(127) == Integer.valueOf(127) — true (кэш -128..127), но Integer.valueOf(200) == Integer.valueOf(200) — false. Используйте .equals().

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

  • Знать термины Java, но не понимать связи между абстракциями
  • Объяснять поведение через отдельные примеры вместо причинной модели
  • Не связывать mental model с диагностикой ошибок

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

  • Понимает ключевые абстракции Java
  • Может предсказывать поведение системы через mental model
  • Связывает модель с debugging и production decisions

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

Проверить себя по теме Java →
←Предыдущий вопросПредставьте, сервис на Java стал медленнее или нестабильнее после релиза. Какие language/runtime-specific причины вы проверите?Следующий вопрос→Как сравнить Java с ближайшими альтернативами по производительности, поддерживаемости, найму и экосистеме?

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

Javasystems-thinkingtechnical-communicationtechnology-selectiontrade-off-analysis

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

  • Как работает сборка мусора в Java? Объясните G1GC, ZGC и Shenandoah.
  • Как работает модель памяти Java? В чём разница между heap и stack?
  • Объясните Java Memory Model (JMM) и концепцию happens-before.
  • Что такое virtual threads (Project Loom) и чем они отличаются от platform threads?