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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python8 800
  • Облачные технологии6 651
  • QA вакансии2 171
  • Android1 317
  • Инженер данных867
  • Продакт-менеджер313

Разработка

  • iOS1 229
  • Backend вакансии1 199
  • AI вакансии548
  • Fullstack вакансии495
  • Frontend вакансии424
  • Mobile вакансии28

По стеку

  • Go5 236
  • Java3 132
  • Kotlin1 120
  • Node.js1 005
  • Rust852
  • .NET659
  • PHP319
  • C++268
  • C#207

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

  • Kubernetes3 912
  • Linux-инфраструктура2 845
  • DevOps вакансии2 675
  • Terraform / IaC2 177
  • Мониторинг и Observability1 072
  • CI/CD915
  • SRE307
  • Кибербезопасность34

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

  • Аналитик данных528
  • Data Scientist433
  • Бизнес-аналитик399
  • Системный аналитик67

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

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

По регионам

  • Вакансии в США25 774
  • Вакансии в Европе10 284
  • Работа в России3 616
  • Вакансии в Канаде2 260

По формату

  • Удалённые вакансии42 533
  • Релокация в США25 774
  • Гибридная работа5 661
  • Офисная работа4 440

По уровню

  • Senior вакансии22 599
  • Middle вакансии11 490
  • Junior вакансии3 852

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

Все компании
  • Rakuten189 вакансий
  • Wise187 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis47 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen27 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

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

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К подготовке по вакансии←К теме 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 компилятора — нужно явно указывать тип лямбды.

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

  • Путать термин «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 вакансии
  • 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)
  • Lead Application Security Engineer

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

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