KATA ACADEMY

Задачи на собеседовании для Java-разработчика

Примеры задач с лайвкодингом и вопросы по Java, которые задают на собеседовании
Собеседование в IT не ограничивается привычными вопросами о карьерных планах. Есть вопросы по стеку и лайвкодинг. Хорошая новость: к этому можно подготовиться заранее. В статье мы собрали примеры задач и вопросов.
Хочешь освоить программирование и получить оффер, от которого невозможно отказаться? Начни прямо сейчас с Kata Academy! 
В мире около 9 миллионов java-программистов. И спрос на это направление только растёт. Практически каждая шестая вакансия для разработчиков связана с Java. Твой оффер ждёт тебя после обучения в Kata Academy. Сдай тестовое и начни карьеру в IT!

Вопросы по стеку

В нашей подборке сотни вопросов. Полный список с разбором каждого вопроса мы даём студентам при подготовке к собеседованиям. Ниже приведём перечень тем, в каждой может быть по несколько десятков вопросов, от общих, например, объяснить термин, рассказать о его составляющих до частных, например, привести пример применения конкретной функции.

Core 1
  • ООП
  • Java
  • ООП в Java
  • Исключения
  • Сериализация и копирование
Core 2
  • Дженерики
  • Коллекции
  • Функциональные интерфейсы
  • Stream API
  • Java 8 и более старшие версии

Другие блоки вопросов
  • Многопоточность в Java
  • SQL
  • Hibernate
  • Spring
  • Паттерны
  • Алгоритмы
  • Микросервисы
Примеры вопросов с ответами

Что такое JDK? Что в него входит?

JDK (Java Development Kit) — включает JRE (минимальная реализация JVM) и набор инструментов разработчика приложений на языке Java:
  • компилятор JAVAC или Just In Time компилятор,
  • стандартные библиотеки классов Java (library),
  • примеры,
  • документация,
  • различные утилиты (программы для выполнения специализированных типовых задач, связанных с работой оборудования и операционной системы (ОС)).

Какие нюансы у строк в Java?
String — это класс Java, предназначенный для работы со строками. Переменная ссылочного типа — это ячейка памяти, содержащая ссылку на участок памяти, представляющий собой объект.
Когда мы присваиваем значение s в другую переменную или передаём её в качестве параметра в метод, то выполняется копирование ссылки.
Если через вторую ссылку объект модифицируется, те же изменения будут видны через первую ссылку, так как объект один. Ссылка может быть пустой — значение null.
String — неизменяемый (Immutable), финализированный (final) класс в Java, поэтому все манипуляции со строкой будут создавать новую строку (ресурсоёмкость).
Как реализована неизменяемость строк? 1) final 2) private 3) нет сеттеров
Строки — объекты класса String, очень распространены, поэтому в некоторых случаях обрабатываются отлично от всех остальных объектов.
Строковые литералы записываются в двойных кавычках.

В чем проблема сериализации Singleton?
Проблема: после десериализации мы получим другой объект.
Так сериализация даёт возможность создать Singleton ещё раз, что не совсем нам нужно.
Решение: в классе определяется метод с сигнатурой "Object readResolve() throws ObjectStreamException"
Назначение этого метода: возвращать замещающий объект вместо объекта, на котором он вызван.

В чём разница между классами java.util.Collection и java.util.Collections?
java.util.CollectionS — это класс, набор статических методов для работы с коллекциями.
Этот класс состоит исключительно из статических методов, которые работают с коллекциями или возвращают их. Он содержит полиморфные алгоритмы, которые работают с коллекциями, «обёртки», которые возвращают новую коллекцию, поддерживаемую указанной коллекцией и несколько других случаев.
Все методы этого класса вызывают исключение NullPointerException, если предоставленные им коллекции или объекты класса имеют значение null.
java.util.Collection — один из основных интерфейсов Java Collections Framework.
public interface Collection<E> extends Iterable<E> — это корневой интерфейс в иерархии коллекций. JDK не предоставляет каких-либо прямых реализаций этого интерфейса: он предоставляет реализации более конкретных подинтерфейсов, таких как Set и List. Этот интерфейс обычно используется для передачи коллекций и управления ими там, где требуется максимальная универсальность.
Спойлер: ты можешь исправить это прямо сейчас. Скачивай чек-лист «Как выйти на доход 150к» и сделай свой первый шаг к зарплате мечты.
Чем TRUNCATE отличается от DELETE?
DELETE — оператор DML, удаляет записи из таблицы, которые удовлетворяют критерию WHERE при этом задействуются триггеры, ограничения и так далее.
TRUNCATE — DDL оператор, удаляет таблицу и создаёт её заново. Если на эту таблицу есть ссылки FOREIGN KEY или она используется в репликации, то пересоздать такую её не получится.
Ещё примеры вопросов по стеку

  • Расскажите про типизированные классы Generic Types?
  • Чем Set отличается от List?
  • Расскажи про операторы IN, BETWEEN, LIKE?
  • Что такое индексы, какие они бывают?
  • Как работают методы Object wait(), notify(), notifyAll()?
  • Что знаешь про CopyOnWriteArrayList?
  • Какие ключевые интерфейсы использует Hibernate?
  • Каким условиям должен удовлетворять класс, чтобы являться Entity?
  • Что такое IoC контейнер?
  • Расскажите про аннотацию @Lookup? (подставь любую аннотацию)
  • Назовите три основные группы паттернов?
  • Расскажите про паттерн Заместитель (proxy)? (подставь любой паттерн)
  • Что такое Big O?
  • Как происходит оценка асимптотической сложности алгоритмов?
В Kata Academy на подготовку к трудоустройству выделяется два месяца. В это время студенты повторяют весь пройденный материал, готовят ответы на возможные вопросы работодателей, составляют резюме, проходят тренировочные собеседования. После курса по Java мы гарантируем трудоустройство с зарплатой от 120 000 рублей. Оплата обучения только после выхода на работу. Узнай подробнее по ссылке.

Задачи на лайвкодинг

На собеседовании тебе могут предложить решить тест или задачу в реальном времени. В Kata Academy мы даём студентам сборку таких тестов и задач для тренировки. Делимся примерами ниже.

Что выведет данный тест?
@Test
public void test5() {
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
numbers.stream()
.map(x -> {
System.out.println(x);
return x;
})
.filter(x -> x > 2)
.map(x -> {
System.out.println(x);
return x;
})
.toList();
}
}
Вывод
1
2
3
3
4
4
5
5
Объяснение
Формируется коллекция numbers, в которой числа от 1 до 5. Каждое число выводится, потом сравнивается с 2 и выводится снова, если оно больше 2. Соответственно, 1 и 2 будет выведена в консоль 1 раз, а числа 3, 4, 5 по 2 раза.

Задача №1

Задан массив целых чисел от 1 до 100. В этом массиве есть дубликаты. Задача: найти все дубликаты и указать их количество. Например 1, 2, 3, 4, 4, 5, 6, 7, 7, 7 4 — 2 штуки, 7 — 3 штуки.
Решение

Задача № 2

Есть строка «Привет, Кккккатовццццы!», надо избавиться от дубликатов и вывести «Привет, Катовцы!».

Решение

Задача № 3

Дан массив целых чисел, отсортированный по возрастанию, верните массив квадратов каждого числа, отсортированный по возрастанию.
Ввод: [-7,-3,2,3,11]
Вывод: [4,9,9,49,121]

Решение
Объяснение
Сначала проверяем, является ли входная строка null или пустой. Если да, то возвращаем её без изменений.
Используем StringBuilder для построения результирующей строки и сохраняем первый символ входной строки в качестве нулевого символа.
Обход начинаем с 1-ого символа (поскольку нулевой уже добавлен) и проходим по всей строке. Если текущий символ не совпадает с предыдущим, мы добавляем его в StringBuilder и обновляем previousChar.
В конце преобразуем StringBuilder в строку и возвращаем её.
Объяснение
Определим длину результирующего массива.
Поскольку исходный массив уже отсортирован по возрастанию, наибольшие квадраты будут получаться либо от наименьших отрицательных чисел, либо от наибольших положительных чисел. Поэтому мы можем начать с двух концов массива и сравнивать квадраты, заполняя результирующий массив с конца.
Один указатель (left) начинается с начала массива, другой (right) — с конца.
На каждом шаге сравниваются квадраты элементов, на которые указывают left и right.
Наибольший квадрат помещается в текущую позицию с конца в результирующем массиве (index), после чего соответствующий указатель (left или right) сдвигается.
Процесс повторяется до тех пор, пока left не пересечёт right.

Ещё примеры тестов для лайвкодинга

Тест № 1. Что выведет данный тест?
@Test
public void test1() {
Integer i = Integer.valueOf(1);
inc(i);
System.out.println(i);
}
private static void inc(Integer i) {
i++;
}
Тест №2. Что выведет данный тест?
@Test
public void test1() {
String i = “1”;
inc(i);
System.out.println(i);
}
private static void inc(String s) {
s = s + “2”;
}
Тест №3. Что выведет данный тест?
@Test
public void test2() {
Integer i1 = Integer.valueOf(717);
Integer i2 = Integer.valueOf(717);
System.out.println(i1 == i2);
}
Ещё примеры задач для лайвкодинга

Пример задачи № 1
Из массива целых чисел, надо найти подмассив с наибольшей суммой и вернуть её сумму.
Например:
Ввод: [-2,1,-3,4,-1,2,1,-5,4]
Подмассив [4,-1,2,1] имеет наибольшую сумму 6.
Вывод: 6

Пример задачи №2
Дан массив целых чисел, отсортированный по возрастанию, верните массив квадратов каждого числа, отсортированный по возрастанию.
Ввод: [-7,-3,2,3,11]
Вывод: [4,9,9,49,121]

Пример задачи №3
На основании таблицы по продажам на уровне региона в каждой категории товара вывести топ-5 артикулов по сумме продаж в рублях.
Поля в результате: регион, категория, артикул, сумма продажи.
Желаем тебе удачи в подготовке к собеседованиям. А если нужна помощь, приглашаем на курс по Java-разработке с оплатой после трудоустройства. Ты пройдёшь полное обучение профессии: от основ до выхода на работу. Срок обучения — 9 месяцев. Все гарантии прописаны в договоре на обучение. Узнай подробнее по ссылке.

А если ты только начинаешь свой путь в IT, советуем ознакомиться со следующими статьями:
В мире около 9 миллионов java-программистов. И спрос на это направление только растёт. Практически каждая шестая вакансия для разработчиков связана с Java. Твой оффер ждёт тебя после обучения в Kata Academy. Сдай тестовое и начни карьеру в IT!
Стань тем, кто задаёт тон в IT!
Подпишись на нашу рассылку и первым получай статьи по Java, JavaScript, Golang и QA. Позволь себе быть экспертом!