Общие вопросы
Смешанные вопросы по Java.
Открыть разделБаза Hintsage
Язык Java, JVM и экосистема серверной разработки.
Темы раздела
Смешанные вопросы по Java.
Открыть разделБазовая семантика языка, типы, методы, классы и ключевые конструкции.
Открыть разделНаследование, полиморфизм, интерфейсы, классы и разрешение методов.
Открыть разделJava Collections Framework, контракты, реализации и сложность операций.
Открыть разделJava Memory Model, потоки, синхронизация и java.util.concurrent.
Открыть разделЗагрузка классов, память JVM, GC, JIT и диагностика.
Открыть разделПараметризация типов, bounds, wildcards и стирание типов.
Открыть разделФункциональные интерфейсы, streams, collectors и параллельная обработка.
Открыть разделИерархия исключений, обработка ошибок и управление ресурсами.
Открыть разделПрактика
Почему wildcard нельзя указать как явный аргумент типа при вызове обобщённого метода?
При создании обобщённого объекта через diamond-оператор от чего зависит фактически выведенный аргумент типа?
Рассмотрите вызов обобщённого метода с лямбдой: откуда компилятор берёт тип параметра, который самой лямбдой явно не назван?
В чём различие между unchecked conversion и unchecked cast при работе с обобщёнными типами Java?
Как параметризация внешнего класса влияет на тип его нестатического внутреннего класса?
Может ли компилятор вывести для параметра обобщённого метода тип, которого нет отдельным именем в исходном коде?
При передаче аргументов разных подтипов в обобщённый метод с одним параметром T каким образом компилятор выбирает тип T?
В каком случае классу, реализующему два параметризованных интерфейса, приходится явно переопределять один и тот же default-метод, хотя после подстановки типов его сигнатуры совпадают?
В API параметр должен принимать коллекции списков строк, включая коллекции списков специализированных реализаций. Как верхний wildcard у внешней коллекции меняет возможность записи и чтения?
Какой порядок элементов гарантирован при обработке упорядоченного параллельного стрима через обычный forEach?
В сервисе собирают числа из параллельного стрима в строку. Определите, какой контракт нарушает этот код и почему результат может быть некорректным.
String result = IntStream.rangeClosed(1, 1000)
.parallel()
.boxed()
.reduce(
new StringBuilder(),
(builder, value) -> builder.append(value).append(','),
(left, right) -> left.append(right)
)
.toString();
Что произойдёт при повторном использовании одного объекта Stream после завершения терминальной операции?
Как компилятор определяет тип лямбда-выражения, переданного операции Stream API?
Какую проблему решает разделение типов промежуточного контейнера и итогового результата в Collector?
Разберите ошибку в объявлении Collector: почему параллельный сбор может повредить результат, несмотря на наличие combiner?
import java.util.*;
import java.util.stream.*;
Collector<Integer, List<Integer>, List<Integer>> bad = Collector.of(
ArrayList::new,
List::add,
(left, right) -> { left.addAll(right); return left; },
Collector.Characteristics.CONCURRENT
);
List<Integer> result = IntStream.range(0, 100_000)
.parallel().unordered().boxed().collect(bad);
От чего зависит эффективность параллельного стрима при разбиении его источника?
Представьте обработку коллекции стримом, где лямбда изменяет исходную коллекцию: какой контракт нарушен?
Нужно получить плоский список токенов из строк. Какую операцию следует применить вместо указанной, чтобы результат имел тип List<String> и содержал a, b, c?
import java.util.*;
import java.util.stream.*;
List<String> result = Stream.of("a,b", "c")
.map(s -> Arrays.stream(s.split(",")))
.toList();
Рассмотрите упорядоченный стрим, который собирают Collector с характеристикой UNORDERED: какие гарантии по порядку результата исчезают?
В параллельном стриме операция limit может запросить у источника больше элементов, чем вернёт. Каким механизмом объясняется такое поведение?
Показано 301–320 из 403