Библиотека собеса по Java | вопросы с собеседований
6.38K subscribers
359 photos
4 videos
201 links
Вопросы с собеседований по Java и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/08c603b6

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Поддерживается ли в Java множественное наследование?

Ответ: Java не поддерживает множественное наследование классов, т.е. наследование от нескольких классов одновременно. Однако, можно использовать интерфейсы для реализации множественного наследования.
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Какие условия «благополучной» сериализации объекта?

Для успешной сериализации объекта должны выполняться следующие условия:

1. Класс объекта должен имплементировать интерфейс Serializable.

2. В классе должно быть определено serialVersionUID — идентификатор версии класса. Это нужно для совместимости версий класса при десериализации.

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

4. Если в классе есть поля, которые не нужно сериализовывать, они помечаются модификатором transient.

5. Методы класса сериализации не подлежат, сериализуются только данные объекта.

6. Класс должен иметь конструктор по умолчанию без параметров для корректной десериализации.
Как правильно сравнить значения строк двух различных объектов типа String и StringBuffer?

Чтобы сравнить значения строк из этих классов, нужно преобразовать их к одному типу, например String.
Для объекта StringBuffer можно вызвать метод toString(), который вернет строку типа String.

После этого значения уже можно сравнивать с помощью метода equals().

Или для простого сравнения значений можно использовать метод compareTo(), который вернет 0 если строки равны.
Что такое маркерный интерфейс?

Ответ: Маркерный интерфейс — это интерфейс без каких-либо методов. Обычно он реализуется классом или расширяется другим интерфейсом для обозначения определённого свойства.
Получаем наиболее распространенный элемент в списке

Сделать это можно с помощью следующего фрагмента кода, подробнее о котором можно почитать здесь.
🧠Чему вы бы хотели научиться?

Расскажите нам о ваших пожеланиях: какие навыки вы хотели бы прокачать в ближайшее время или какую профессию хотели бы приобрести?

За прохождение опроса вы получите промокод на скидку 15% на все наши курсы до конца 2024 года.

👉Опрос по ссылке👈
Расскажите о принципе работы алгоритма сортировки QuickSort. Напишите Java-код для реализации этого алгоритма и объясните его эффективность. Также, укажите, какие могут быть проблемы с производительностью в некоторых случаях и как можно их решить.

Алгоритм QuickSort относится к семейству алгоритмов быстрой сортировки. Он использует подход «разделяй и властвуй», разбивая массив на подмассивы, сортируя их и затем объединяя весь массив.
quickSort: Рекурсивная функция, которая разделяет массив и вызывает сама себя для подмассивов.
partition: Функция, которая определяет местоположение опорного элемента (pivot) и переставляет элементы так, чтобы элементы меньше pivot находились слева, а больше — справа.

QuickSort в среднем случае имеет сложность O(n log n), что делает его одним из самых эффективных алгоритмов сортировки. QuickSort может показывать плохую производительность в случае уже отсортированных или почти отсортированных данных.
Если вы хотите переопределить equals(), какие условия должны удовлетворяться для переопределенного метода?

— Метод должен удовлетворять условиям транзитивности, рефлексивности и симметричности.

— Метод должен быть согласованным — многократные вызовы с неизменными объектами должны возвращать один и тот же результат.

— Если x.equals(y) вернёт true, то x.hashCode() должен быть равен y.hashCode().

— Метод не должен выбрасывать исключения при сравнении допустимых значений.
Сколько создается новых объектов при добавлении нового элемента в HashMap?

Ответ: создается один новый объект статического вложенного класса Entry
Инвалидация итераторов

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

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

Чтобы избежать инвалидации итератора, вы можете использовать методы, предоставленные самой коллекцией, такие как Iterator.remove() или использовать итераторы из пакета java.util.concurrent, которые могут обрабатывать изменения коллекции в процессе итерации.
Как связан любой пользовательский класс с классом Object?

В Java все классы неявно наследуются от класса Object.
Это означает, что:

— Любой пользовательский класс получает методы класса Object, такие как equals, hashCode, toString и другие.
— Любой объект в Java является экземпляром класса Object.
— Можно приводить любой объект к типу Object без явного преобразования типов.
— Класс Object находится в root пакете java.lang, поэтому доступен без импортирования.
— Класс Object является предком иерархии всех классов, поэтому методы Object подходят для любого объекта.

Таким образом, наследование от Object делает полиморфизм в Java универсальным и избавляет от необходимости реализовывать базовые методы в каждом классе.
Какова иерархия коллекций?

В Java есть два основных интерфейса для коллекций — Collection и Map.

Interface Collection находится на верху иерархии и определяет общие методы для работы с коллекциями, такие как add(), remove(), size() и другие. От него наследуются конкретные реализации коллекций.

Наиболее часто используемые реализации Collection — это List, Set и Queue.

Map интерфейс реализует отдельную структуру данных. Он представляет отображение ключ-значение. Основные реализации — HashMap и TreeMap.
В чем разница между ошибкой 'StackOverflowError' и 'OutOfMemoryError' в Java и какие стратегии можно использовать для их предотвращения?

'StackOverflowError' возникает, когда стек вызовов программы превышает свой лимит, обычно из-за глубокой или бесконечной рекурсии. Для предотвращения этого, следует ограничивать глубину рекурсии и использовать итеративные алгоритмы, где это возможно.

'OutOfMemoryError', с другой стороны, возникает, когда JVM исчерпывает доступную ей память, часто из-за чрезмерного создания объектов или утечек памяти. Чтобы предотвратить это, следует оптимизировать использование памяти в приложении, правильно управлять жизненным циклом объектов, и рассмотреть возможность увеличения объема памяти, выделяемой для JVM.
Какими способами можно реализовать «внедрение зависимостей» в Java?

Ответ: Через конструктор, через getter/setter, с помощью механизмов рефлексии.
📌 Задача с LeetCode (Max Consecutive Ones)

Дан массив, состоящий только из ноликов и единиц. Необходимо вычислить максимальную длину подмассива, в котором присутствуют только единицы (1, 1, 0, 1, 1, 1 | Длина — 3).

⏺️ Переменные count и max равны 0. count используется для подсчета текущего количества последовательных единиц, а max — для хранения максимального значения.

⏺️ Внутри цикла for проверяется, является ли текущий элемент массива nums[i] равным 1. Если да, то увеличиваем значение count на 1. Если нет, то count присваивается значение 0, так как последовательность прерывается.

⏺️ Функция Math.max(count, max) находит максимальное значение между count и max. Значение count обновляется на каждой итерации цикла, поэтому теперь max будет содержать максимальное количество последовательных единиц на текущей итерации.

Описание и условие задачи на YouTube — КЛИК
Эта задача на LeetCode — КЛИК
Прокси-объект

Прокси-объект (Proxy Object) — это объект, который выступает в качестве заменителя другого объекта и контролирует доступ к нему. Прокси-объект может использоваться для передачи запросов к оригинальному объекту через промежуточный уровень, что позволяет выполнять дополнительную обработку или проверку перед выполнением запроса.

В Java прокси-объекты создаются с помощью интерфейсов. Если у нас есть интерфейс, который определяет методы, которые должны вызываться на оригинальном объекте, мы можем создать прокси-объект, который реализует этот интерфейс и перенаправляет вызовы методов к оригинальному объекту. При этом мы можем выполнять нужные операции до или после вызова методов на оригинальном объекте.

Примеры использования прокси-объектов в Java:

Кэширование данных: если мы хотим кэшировать результаты вызовов методов на объекте, мы можем создать прокси-объект, который будет хранить результаты предыдущих вызовов и возвращать их без вызова методов на оригинальном объекте.

Логирование: мы можем создать прокси-объект, который будет записывать информацию о вызовах методов на оригинальном объекте в лог-файл, чтобы отслеживать его работу.

Удаленный доступ: прокси-объекты могут использоваться для организации удаленного доступа к объектам через сеть. При этом прокси-объект на клиентской стороне будет передавать запросы на вызов методов на сервер, а прокси-объект на серверной стороне уже будет вызывать методы на реальном объекте и возвращать результат клиенту.
Please open Telegram to view this post
VIEW IN TELEGRAM
Нестатические блоки инициализации

Нестатические блоки инициализации — это блоки кода, которые исполняются при создании объекта класса перед вызовом конструктора.
Они используются для инициализации членов класса.

В примере определен нестатический блок инициализации, который устанавливает значения для переменных x и y.

При создании объекта Main срабатывает следующая последовательность:
- Вызывается нестатический блок инициализации, x и y получают значения 5 и 10.
- Вызывается конструктор, который выводит значения x и y.
Метод replaceFirst()

Метод replaceFirst() в Java используется для замены первого подстроки в строке на другую подстроку. Этот метод является частью класса java.lang.String и принимает два параметра: регулярное выражение (регулярное выражение) и замену.

Сигнатура метода:

public String replaceFirst(String regex, String replacement)

Где:
regex — это регулярное выражение, которое вы ищете в строке.
replacement — строка, которой вы заменяете первое найденное совпадение с regex.

#для_начинающих
-35% на курс по алгоритмам

🎄 Новый год начинается с подарков, а хороший подарок для себя — новые знания со скидкой 35%!

🌟«Алгоритмы и структуры данных» — 23 390 ₽ (вместо 35 990 ₽)

Полугодовая программа от преподавателей МФТИ и НИУ ВШЭ, которая включает в себя все необходимые знания по алгоритмам для работы.

Самое ценное — это развернутая обратная связь по всем вашим домашним заданиям, а также ссылки на полезные дополнительные материалы.

У вас не будет шансов не усвоить какие-то темы курса👌

🔥 Переходите и активируйте вводные занятия курсаhttps://proglib.io/w/ff97c30a