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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python8 728
  • Облачные технологии6 606
  • QA вакансии2 165
  • Android1 317
  • Инженер данных878
  • Продакт-менеджер314

Разработка

  • iOS1 229
  • Backend вакансии1 210
  • AI вакансии545
  • Fullstack вакансии500
  • Frontend вакансии422
  • Mobile вакансии28

По стеку

  • Go5 192
  • Java3 112
  • Kotlin1 085
  • Node.js992
  • Rust846
  • .NET660
  • PHP319
  • C++266
  • C#208

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

  • Kubernetes3 904
  • Linux-инфраструктура2 843
  • DevOps вакансии2 684
  • Terraform / IaC2 162
  • Мониторинг и Observability1 062
  • CI/CD921
  • SRE303
  • Кибербезопасность31

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

  • Аналитик данных537
  • Data Scientist445
  • Бизнес-аналитик402
  • Системный аналитик68

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

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

По регионам

  • Вакансии в США26 186
  • Вакансии в Европе10 369
  • Работа в России3 628
  • Вакансии в Канаде2 306

По формату

  • Удалённые вакансии43 484
  • Релокация в США26 186
  • Гибридная работа5 597
  • Офисная работа4 383

По уровню

  • Senior вакансии22 724
  • Middle вакансии11 726
  • Junior вакансии3 874

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

Все компании
  • Rakuten189 вакансий
  • Wise186 вакансий
  • ASML164 вакансии
  • Grab135 вакансий
  • Celonis45 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen26 вакансий
  • Monzo19 вакансий
  • Darktrace16 вакансий

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

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

Объясните различия между абстрактными классами и интерфейсами в Java 17+.

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

Абстрактный класс даёт частичную реализацию и состояние; интерфейс — контракт без состояния. Класс может реализовывать много интерфейсов, но наследовать только один класс. С Java 8+ интерфейсы поддерживают default/static-методы.

Пример: abstract class

// Общее состояние и шаблонный метод
public abstract class HttpHandler {
    private final String basePath;          // поле экземпляра

    protected HttpHandler(String basePath) {
        this.basePath = basePath;
    }

    // Шаблонный метод — общий алгоритм
    public final Response handle(Request req) {
        validate(req);                       // общий шаг
        return process(req);                 // делегируем подклассу
    }

    protected abstract Response process(Request req);

    private void validate(Request req) {
        if (!req.path().startsWith(basePath))
            throw new IllegalArgumentException("Wrong path: " + req.path());
    }
}

// Конкретная реализация
public class UserHandler extends HttpHandler {
    public UserHandler() { super("/api/users"); }

    @Override
    protected Response process(Request req) {
        return Response.ok("user data");
    }
}

Ключевое отличие

Абстрактный класс предназначен для is-a-иерархии с общим состоянием и частичной реализацией. Интерфейс описывает роль или способность — контракт без полей экземпляра. Класс наследует ровно один абстрактный класс, но реализует произвольное число интерфейсов.

Что разрешено где

Abstract classInterface (Java 8+)
Поля экземпляраданет (только static final)
Конструкторданет
default-методы—да
static-методыдада (Java 8+)
private-методыдада (Java 9+)
sealed-иерархиида (Java 17)да (Java 17)

Пример: interface + default-метод

// Роль — объект умеет логировать себя
public interface Auditable {
    String auditId();

    // default-метод — поведение по умолчанию без реализации в классе
    default String auditEntry() {
        return "[AUDIT] " + auditId() + " at " + Instant.now();
    }
}

// Один класс может носить несколько ролей
public class Order implements Auditable, Serializable {
    private final UUID id;
    public Order(UUID id) { this.id = id; }

    @Override
    public String auditId() { return id.toString(); }
}

// Использование
Order o = new Order(UUID.randomUUID());
System.out.println(o.auditEntry());  // [AUDIT] 3fa8… at 2026-05-19T…

Sealed-иерархии (Java 17)

// Закрытая иерархия — и abstract class, и interface могут быть sealed
public sealed interface Shape permits Circle, Rectangle, Triangle {}

public record Circle(double radius) implements Shape {}
public record Rectangle(double w, double h) implements Shape {}
public record Triangle(double base, double height) implements Shape {}

// Компилятор гарантирует полноту switch
double area = switch (shape) {
    case Circle c    -> Math.PI * c.radius() * c.radius();
    case Rectangle r -> r.w() * r.h();
    case Triangle t  -> 0.5 * t.base() * t.height();
};

Когда выбирать что

  • Есть общее состояние или шаблонный метод — abstract class.
  • Нужна множественная «роль» без состояния — interface.
  • Хотите закрытую иерархию для pattern matching — sealed interface + records.
  • Ретрофит в существующую иерархию (добавить поведение без breaking change) — default-метод интерфейса.

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

  • Diamond problem с default-методами. Если два интерфейса объявляют одноимённый default-метод, класс обязан явно переопределить его, иначе компиляция упадёт с ошибкой.
  • Нарушение контракта equals/hashCode. Абстрактный класс с полями может неявно менять контракт equals; подкласс, добавивший поля, сломает симметрию.
  • Злоупотребление abstract class вместо composition. Глубокая иерархия (3+ уровней) трудно тестируется; часто лучше делегировать через поле.
  • Интерфейс с единственным методом — не всегда @FunctionalInterface. Добавление второго абстрактного метода ломает все лямбды-реализации во всём коде без предупреждения (разве что аннотация есть).
  • sealed + non-sealed в одной иерархии. Разрешение non-sealed открывает «дыру» в замкнутой иерархии — компилятор больше не гарантирует полноту switch.
  • private-методы интерфейса (Java 9) не наследуются. Их нельзя вызвать из реализующего класса — только из default/static-методов того же интерфейса.
  • Абстрактный класс без абстрактных методов. Это легально, но сбивает с толку: выглядит как обычный класс, но его нельзя инстанциировать напрямую.
  • Смешивание ролей через интерфейсы без меры. Класс, реализующий 10 интерфейсов — God Object; каждый интерфейс должен нести единственную ответственность (ISP).

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

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

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

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

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

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

Источники

  • https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/FunctionalInterface.html
←Предыдущий вопросКак работает `CompletableFuture` и чем он отличается от `Future`?Следующий вопрос→В чём разница между `Comparable` и `Comparator`?

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

Javabackend-designtechnical-communication

Вакансии с этим навыком

Java вакансии
  • Full-stack Technical Lead (Java+React) (#5710)
  • Senior Full Stack Engineer (Java, Python, React) (#5444)
  • Middle Mobile QA Engineer (#5596)
  • AI Enablement Lead (GenAI Value Lab) (#5686)
  • Senior Full Stack Mobile Developer (#5704)

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

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