База Hintsage

Программирование Java

Язык Java, JVM и экосистема серверной разработки.

Темы раздела

Выберите подраздел

  • 50 вопросов

    Java Core

    Базовая семантика языка, типы, методы, классы и ключевые конструкции.

    Открыть раздел
  • 50 вопросов

    ООП и система типов

    Наследование, полиморфизм, интерфейсы, классы и разрешение методов.

    Открыть раздел
  • 50 вопросов

    Коллекции

    Java Collections Framework, контракты, реализации и сложность операций.

    Открыть раздел
  • 50 вопросов

    Многопоточность

    Java Memory Model, потоки, синхронизация и java.util.concurrent.

    Открыть раздел
  • 50 вопросов

    JVM и память

    Загрузка классов, память JVM, GC, JIT и диагностика.

    Открыть раздел
  • 50 вопросов

    Generics

    Параметризация типов, bounds, wildcards и стирание типов.

    Открыть раздел
  • 50 вопросов

    Stream API

    Функциональные интерфейсы, streams, collectors и параллельная обработка.

    Открыть раздел
  • 50 вопросов

    Исключения

    Иерархия исключений, обработка ошибок и управление ресурсами.

    Открыть раздел

Практика

Вопросы: Программирование Java

В сервисе собирают числа из параллельного стрима в строку. Определите, какой контракт нарушает этот код и почему результат может быть некорректным.

String result = IntStream.rangeClosed(1, 1000)
    .parallel()
    .boxed()
    .reduce(
        new StringBuilder(),
        (builder, value) -> builder.append(value).append(','),
        (left, right) -> left.append(right)
    )
    .toString();
Программирование JavaStream APIJava-разработчик серверных приложений

Разберите ошибку в объявлении 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);

Показано 301–320 из 403

Восстановление доступа