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

+1 199новых вакансий за сутки·93 838вакансий открыто сейчас·Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

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

Что такое functional interface? Назовите несколько встроенных functional interfaces в Java.

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

Functional interface содержит ровно один абстрактный метод (SAM). Встроенные: Predicate (boolean test), Function (R apply), Consumer (void accept), Supplier (T get). Аннотация @FunctionalInterface добавляет compile-time проверку контракта.

Что такое functional interface

Functional interface — интерфейс, содержащий ровно один абстрактный метод (SAM — Single Abstract Method). Он может содержать любое количество default и static методов — они не нарушают контракт SAM. Functional interface можно присваивать лямбда-выражениям и method references.

@FunctionalInterface
public interface Transformer<T, R> {
    R transform(T input);

    // default метод — не нарушает SAM
    default Transformer<T, R> withLogging() {
        return input -> {
            R result = transform(input);
            System.out.println(input + " -> " + result);
            return result;
        };
    }
}

Transformer<String, Integer> lengthOf = String::length;  // method reference
Transformer<String, Integer> withLog = lengthOf.withLogging();
withLog.transform("hello");  // выведет: hello -> 5

Аннотация @FunctionalInterface

Аннотация опциональная, но настоятельно рекомендуется: компилятор проверяет SAM-контракт и выдаёт ошибку при добавлении второго абстрактного метода. Без неё интерфейс всё равно может использоваться как functional, но нет compile-time защиты от случайного нарушения контракта.

Встроенные functional interfaces (java.util.function)

  • Predicate<T> — boolean test(T t). Фильтрация, проверки условий. Методы: and(), or(), negate().
  • Function<T, R> — R apply(T t). Преобразование одного типа в другой. Методы: andThen(), compose().
  • Consumer<T> — void accept(T t). Действие без возвращаемого значения (логирование, запись). Метод: andThen().
  • Supplier<T> — T get(). Фабрика без аргументов (lazy инициализация).
  • BiFunction<T, U, R> — R apply(T t, U u). Функция двух аргументов.
  • UnaryOperator<T> — специализация Function<T, T>. String::toUpperCase — пример.
  • BinaryOperator<T> — специализация BiFunction<T, T, T>. Используется в Stream.reduce().
  • Примитивные специализации: IntPredicate, LongFunction<R>, ToIntFunction<T> — избегают autoboxing.
import java.util.function.*;
import java.util.List;
import java.util.stream.Collectors;

record User(String name, String email, boolean active) {}

List<User> users = List.of(
    new User("Alice", "alice@example.com", true),
    new User("Bob",   "bob@example.com",   false),
    new User("Carol", "carol@example.com", true)
);

Predicate<User>      isActive   = User::active;
Function<User, String> getEmail = User::email;
Consumer<String>     logger     = email -> System.out.println("Sending to: " + email);

// Цепочка через Stream API
users.stream()
     .filter(isActive)          // Predicate
     .map(getEmail)             // Function
     .peek(logger)              // Consumer
     .collect(Collectors.toList());

// Supplier для lazy инициализации
Supplier<List<User>> fetchUsers = () -> List.of(new User("Dave", "d@x.com", true));
List<User> loaded = fetchUsers.get();

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

  • Лямбда захватывает переменные из внешнего scope: они должны быть effectively final — компилятор откажет при изменении захваченной переменной.
  • Checked exceptions в лямбдах не поддерживаются без обёртки — Function<T, R> не объявляет throws, поэтому нужно либо оборачивать, либо создавать собственный интерфейс с checked exception.
  • Примитивные специализации (IntFunction, ToIntFunction) важны в высоконагруженных путях — использование Function<Integer, R> создаёт autoboxing на каждом вызове.
  • Comparator<T> — тоже functional interface, несмотря на то что содержит много default методов; его часто упускают в ответе.
  • Method reference на instance метод (str::contains) привязывается к конкретному объекту в момент создания — это отличается от лямбды s -> str.contains(s) только синтаксически, но может вызвать путаницу с this-захватом.
  • Два разных functional interface с одинаковой сигнатурой не взаимозаменяемы без явного приведения: Runnable и Callable<Void> — разные типы.
  • Перегруженные методы с несколькими functional interface параметрами могут вызвать ambiguity error компилятора — нужно явно указывать тип лямбды.

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

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

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

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

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

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

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

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

Источники

  • https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/FunctionalInterface.html
←Предыдущий вопросКакие ошибки делают разработчики, переходящие на Java с другого языка или стека?Следующий вопрос→В чём разница между `==` и `.equals()` в Java?

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

Javabackend-designtechnical-communication

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

Java вакансии
  • Summer 2027 Quality Engineering Internship
  • Senior Back-End Engineer (Java, AI-Native) Ukraine Poland Romania Spain Remote
  • Sr Software Engineer - Remote
  •  QA Specialist
  •  Sr. Software QA Engineer

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 222
  • Облачные технологии14 171
  • QA вакансии3 463
  • Backend вакансии2 114
  • Инженер данных1 801
  • Продакт-менеджер1 248

Разработка

  • Android1 858
  • iOS1 698
  • Fullstack вакансии997
  • AI вакансии955
  • Frontend вакансии755
  • Mobile вакансии44

По стеку

  • Go8 752
  • Java6 593
  • Node.js2 036
  • .NET1 739
  • Kotlin1 618
  • Rust1 472
  • C#717
  • PHP690
  • C++579

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

  • Kubernetes7 787
  • DevOps вакансии6 095
  • Linux-инфраструктура5 508
  • Terraform / IaC4 287
  • CI/CD3 272
  • Мониторинг и Observability1 792
  • SRE566
  • Кибербезопасность454

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

  • Data Scientist1 138
  • Бизнес-аналитик921
  • Аналитик данных858
  • Системный аналитик154

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

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

По регионам

  • Вакансии в США44 166
  • Вакансии в Европе24 014
  • Вакансии в Канаде4 535
  • Работа в России3 867

По формату

  • Удалённые вакансии75 005
  • Релокация в США44 166
  • Гибридная работа12 485
  • Офисная работа7 090

По уровню

  • Senior вакансии42 643
  • Middle вакансии20 963
  • Junior вакансии6 708

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis38 вакансий
  • Spotify37 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

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

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