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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python5 437
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 093
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • iOS1 047
  • Backend вакансии996
  • Fullstack вакансии441
  • Frontend вакансии355
  • AI вакансии354
  • Mobile вакансии27

По стеку

  • Go2 987
  • Java1 810
  • Kotlin868
  • Node.js675
  • Rust436
  • .NET434
  • PHP248
  • C++204
  • C#190

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

  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • DevOps вакансии1 678
  • Terraform / IaC1 406
  • CI/CD842
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

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

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

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

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

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

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

Все компании
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise71 вакансия
  • Infobip28 вакансий
  • Darktrace17 вакансий
  • Spotify14 вакансий
  • Celonis11 вакансий
  • Razorpay9 вакансий
  • Adyen8 вакансий

Вакансии из 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 компилятора — нужно явно указывать тип лямбды.

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

  • Как работает сборка мусора в 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