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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python6 033
  • Облачные технологии4 127
  • QA вакансии1 598
  • Android1 134
  • Инженер данных767
  • Продакт-менеджер295

Разработка

  • iOS1 084
  • Backend вакансии1 031
  • Fullstack вакансии444
  • AI вакансии385
  • Frontend вакансии371
  • Mobile вакансии27

По стеку

  • Go3 416
  • Java2 070
  • Kotlin926
  • Node.js731
  • Rust514
  • .NET462
  • PHP267
  • C++206
  • C#195

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

  • Kubernetes2 336
  • Linux-инфраструктура1 899
  • DevOps вакансии1 844
  • Terraform / IaC1 428
  • CI/CD848
  • Мониторинг и Observability650
  • SRE220
  • Кибербезопасность35

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

  • Аналитик данных464
  • Data Scientist434
  • Бизнес-аналитик337
  • Системный аналитик48

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

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

По регионам

  • Вакансии в США23 332
  • Вакансии в Европе9 074
  • Работа в России2 931
  • Вакансии в Канаде2 054

По формату

  • Удалённые вакансии40 752
  • Релокация в США23 332
  • Гибридная работа3 446
  • Офисная работа2 568

По уровню

  • Senior вакансии19 645
  • Middle вакансии11 602
  • Junior вакансии3 620

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

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise94 вакансии
  • Infobip28 вакансий
  • Spotify18 вакансий
  • Celonis17 вакансий
  • Darktrace17 вакансий
  • Adyen13 вакансий
  • UiPath13 вакансий

Вакансии из 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 вакансии
  • AI Enablement Lead (GenAI Value Lab) (#5686)
  • Senior Full Stack Mobile Developer (#5704)
  • Middle General QA Engineer (#5796)
  • Full-stack Technical Lead (Java+React) (#5710)
  • Senior Full Stack Engineer (Java, Python, React) (#5444)

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

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