Вопросы по Java
Java 21 от основ и коллекций изнутри до памяти JVM, JMM и виртуальных потоков. Закрывает теоретическую и практическую часть собеса на Java-бэкенд от junior до senior.
Проверьте себя: тест по Java
20 вопросов, 10 минут, уровень junior, middle или senior
Основы: типы, обёртки, static
Примитивы и обёртки, автоупаковка и кеш Integer, передача по значению, static, final и порядок инициализации.
Урок: Основы Java: типы, обёртки, static 7 мин- char плюс int
- Изменили константу в библиотеке
- Деньги в double
- Ключ Long и get(int)
- final ссылка на список
- Автоупаковка
- Порядок инициализации
- Примитивы Java
Ещё 16 вопросов и задач
- Ключевое слово static
- Что выведет: порядок static и конструкторов
- Переопределённый метод в конструкторе родителя
- Integer == для 127 и 128
- Что выведет: кеш Integer и equals
- Значения по умолчанию полей
- Порядок инициализации при new Child()
- Переполнение int
- Что выведет: перегрузка, расширение и упаковка
- Передача объекта в метод
- Что выведет: изменение параметров
- int и Integer: в чём разница
- Передача параметров в Java
- Что выведет: поля и статические методы при наследовании
- Статический метод и наследование
- Распаковка null
ООП и класс Object
Наследование, полиморфизм, перегрузка и переопределение, интерфейсы, контракт equals и hashCode.
Урок: ООП в Java и контракт equals/hashCode 7 мин- Почему Stack extends Vector плохо
- Что можно при переопределении
- Два default-метода с одной сигнатурой
- equals(Point) вместо equals(Object)
- equals и наследник с новым полем
- equals без hashCode
- Контракт equals и hashCode
- Методы класса Object
Ещё 13 вопросов и задач
- Принципы ООП
- Перегрузка и переопределение
- Одинаковый hashCode у разных объектов
- Что выведет: HashSet и класс без hashCode
- Интерфейс или абстрактный класс
- Принцип подстановки Лисков
- Правила переопределения
- Изменили поле ключа в HashSet
- Что выведет: перегрузка с null
- Перегрузка и объявленный тип
- Что выведет: полиморфизм и super
- Композиция или наследование
- equals и hashCode: зачем и как
String и пул строк
Неизменяемость, пул строк и intern, сравнение строк, StringBuilder и конкатенация.
Урок: String, пул строк и StringBuilder 6 мин- StringBuilder и StringBuffer
- Что выведет: char, int и строки
- Как String хранится в памяти
- Конкатенация в цикле
- Методы String из Java 11+
- final и константное выражение
- Сравнение строк
- Неизменяемость String
Ещё 20 вопросов и задач
- Пул строк
- Зачем String неизменяем
- Что выведет: методы String не меняют строку
- Что делает intern
- Частоты букв по убыванию
- Первый неповторяющийся символ
- Самая длинная подстрока без повторов
- Палиндром с пробелами и знаками
- Слова в обратном порядке
- Сжатие строки RLE
- Распаковка строки RLE
- Сравнение номеров версий
- length и эмодзи
- Литерал и new String
- Сколько объектов создаёт new String
- Что выведет: пул строк и intern
- Зачем нужен StringBuilder
- Пул строк и сравнение строк
- split по точке
- Логирование и конкатенация
Коллекции изнутри
Иерархия Collection и Map, ArrayList, LinkedList, HashMap, TreeMap, fail-fast итераторы и сложность операций.
Урок: Коллекции Java изнутри 8 мин- ArrayList или LinkedList
- Что выведет: Arrays.asList и исходный массив
- Удаление в foreach
- Что выведет: удаление в foreach без исключения
- EnumMap и IdentityHashMap
- Сложность операций коллекций
- Fail-fast итератор
- Как устроен HashMap
Ещё 25 вопросов и задач
- SequencedCollection в Java 21
- Как HashMap находит корзину
- HashMap из нескольких потоков
- Правильная скобочная последовательность
- Симуляция LRU-кеша
- Пересечение с учётом повторов
- Ближайшие значения в множестве
- Число пар с заданной суммой
- Очередь задач с приоритетом
- Максимум в скользящем окне
- Самые частые слова
- Уникальные числа в порядке появления
- List.of и Arrays.asList
- Когда HashMap расширяется
- LRU-кеш на стандартной коллекции
- Коллекция и её внутреннее устройство
- Шаги HashMap.put
- Начальная ёмкость HashMap
- Что выведет: remove по индексу и по значению
- remove на List<Integer>
- Как выбрать коллекцию
- Как работает HashMap
- Деревья в корзинах HashMap
- TreeSet и компаратор
- Что выведет: TreeSet с компаратором по длине
Дженерики и стирание
Параметризованные типы, wildcard, PECS, стирание типов и его последствия.
Урок: Дженерики, wildcard и стирание типов 7 минИсключения
Checked и unchecked, try-with-resources, finally, подавленные исключения и обработка ошибок.
Урок: Исключения в Java 6 минЛямбды и Stream API
Функциональные интерфейсы, ссылки на методы, ленивые стримы, коллекторы, Optional.
Урок: Лямбды и Stream API 8 мин- Переменная в лямбде
- Группировка с подсчётом
- Функциональный интерфейс
- Промежуточные и терминальные операции
- Виды ссылок на методы
- forEach и forEachOrdered в parallel
- Функциональный интерфейс
- Сумма покупок по клиентам
Ещё 18 вопросов и задач
- Статистика по отделам
- Сортировка по нескольким ключам
- Лучший сотрудник каждого отдела
- this в лямбде и анонимном классе
- Стрим без терминальной операции
- map и flatMap
- Функциональные интерфейсы и их методы
- orElse и orElseGet
- Что выведет: orElse и orElseGet
- Когда parallelStream вредит
- Что выведет: ленивость и короткое замыкание
- Что выведет: sorted собирает всё
- Optional: как правильно
- Как работает Stream API
- Повторное использование стрима
- Stream.toList и Collectors.toList
- toMap и дубли ключей
- Порядок обработки элементов
Современная Java: record, sealed
Что нового с Java 8 по 21: var, record, sealed, pattern matching, switch-выражения, текстовые блоки.
Урок: Современная Java: record, sealed, pattern matching 7 минJVM: память, GC, загрузка классов
Heap и стек, Metaspace, сборщики G1 и ZGC, загрузчики классов, JIT и утечки памяти.
Урок: JVM: память, сборка мусора, загрузка классов 8 минПотоки и Java Memory Model
Thread, synchronized, volatile, happens-before, wait/notify, дедлоки и гонки.
Урок: Потоки и Java Memory Model 8 минjava.util.concurrent и виртуальные потоки
Executors, CompletableFuture, ConcurrentHashMap, атомики, блокировки и виртуальные потоки Java 21.
Урок: java.util.concurrent и виртуальные потоки 8 мин- Что выведет: цепочка CompletableFuture
- В каком потоке выполнится thenApply
- Гонка на ConcurrentHashMap
- Рекурсия в computeIfAbsent
- null в ConcurrentHashMap
- CompletableFuture без executor
- Опасность newFixedThreadPool
- CountDownLatch и CyclicBarrier
Ещё 16 вопросов и задач
- Устройство ConcurrentHashMap
- ReentrantLock и synchronized
- Виртуальные потоки
- Work stealing в ForkJoinPool
- Что выведет: invokeAll и порядок результатов
- Задача и инструмент java.util.concurrent
- Что делает ThreadPoolExecutor с новой задачей
- Как настроить пул потоков
- Виртуальные потоки: как устроены и когда брать
- Исключение в submit
- thenApply и thenCompose
- Порядок действий ThreadPoolExecutor
- Что выведет: виртуальные потоки
- Pinning виртуальных потоков
- Пул виртуальных потоков
- Когда помогают виртуальные потоки
JDBC и транзакции
Connection, PreparedStatement, пул соединений, транзакции, уровни изоляции и SQL-инъекции.
Урок: JDBC, пул соединений и транзакции 6 минТестирование: JUnit 5 и Mockito
Структура тестов JUnit 5, параметризованные тесты, моки и стабы в Mockito, что и как тестировать.
Урок: Тестирование: JUnit 5 и Mockito 7 минЗадачи на Java
Алгоритмические задачи с автопроверкой: ввод-вывод, коллекции, строки и типичные приёмы live coding.
Урок: Задачи на Java: live coding и контест 7 мин- Компаратор через вычитание
- Выбор структуры по ограничениям
- Число островов
- Сколько чисел не больше x
- Кратчайший путь в графе дорог
- Связность сети: система непересекающихся множеств
- Расстояние Левенштейна
- Сумма цифр факториала
Ещё 31 вопрос или задача
- Быстрый ввод в Java
- Структуры JDK для алгоритмов
- Где переполняется int
- Шаблон решения на Java
- Число путей в сетке с препятствиями
- Кратчайший путь в лабиринте
- Что выведет: целочисленная арифметика Java
- Что выведет: сравнение значений из коллекций
- Рюкзак 0/1
- Длина наибольшей возрастающей подпоследовательности
- Ограничения и допустимая сложность
- Максимум встреч в одной комнате
- Максимальная сумма подотрезка
- Слияние отрезков
- Минимум переговорных
- Остаток от отрицательного числа
- Следующий больший элемент
- Порядок действий на live coding
- Переполнение при подсчёте пар
- Пары с суммой не больше S
- Куча максимумов
- Суммы на отрезках
- Рекурсивный DFS на большом графе
- Поворот матрицы на 90 градусов
- Вычисление выражения в обратной польской записи
- Arrays.sort для int[] и Integer[]
- Подводные камни Java в алгоритмических задачах
- Как вы решаете задачу на live coding
- Обход матрицы по спирали
- Разбить массив на k частей
- Порядок выполнения задач