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

Примеры задач с лайвкодингом и вопросы по Java, которые задают на собеседовании.

Собеседование в 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. Этот интерфейс обычно используется для передачи коллекций и управления ими там, где требуется максимальная универсальность.

Чем 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 штуки.

Решение

Решение Java 1

Задача № 2

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

Решение

Решение Java 2

Объяснение

Сначала проверяем, является ли входная строка null или пустой. Если да, то возвращаем её без изменений.

Используем StringBuilder для построения результирующей строки и сохраняем первый символ входной строки в качестве нулевого символа.

Обход начинаем с 1-ого символа (поскольку нулевой уже добавлен) и проходим по всей строке. Если текущий символ не совпадает с предыдущим, мы добавляем его в StringBuilder и обновляем previousChar.

В конце преобразуем StringBuilder в строку и возвращаем её.

Задача № 3

Дан массив целых чисел, отсортированный по возрастанию, верните массив квадратов каждого числа, отсортированный по возрастанию.

Ввод: [-7,-3,2,3,11]

Вывод: [4,9,9,49,121]

Решение

Решение Java 3

Объяснение

Определим длину результирующего массива.

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

Один указатель (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

- Изучаем переменные в Java: типы данных и их использование

- ТОП-31 лучших бесплатных курсов по Java в 2024 году

Читать еще:

Сейчас – лучшее время, чтобы стать разработчиком

Сфера IT всегда была стабильной, комфортной средой. Ее в меньшей степени касались кризисы и какие-либо проблемы в мире. Так и в нынешней ситуации, на фоне нарастающего кризиса, выиграю те, кто работает в сфере технологий. Сейчас расскажем, почему.

Комментарии к коду — зачем нужны и как писать

Комментирование кода — важная часть разработки. Узнайте, как правильно писать комментарии (с примерами), в блоге Kata Academy.

Тенденции развития IT-индустрии в ближайшие годы

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

Изучаем переменные в Java: типы данных и их использование

Java — строго типизированный язык. Чтобы избежать ошибок, важно изучить типы данных и использовать их верно. В статье разберём, какие типы бывают.

Ни на что не намекаем

Но мы выпускаем много полезных материалов о Java, JavaScript, Golang, QA. Подпишись, и они будут у тебя на почте!