Библиотека собеса по Java | вопросы с собеседований
Открыть в Telegram
Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: clc.to/3wECtA Для обратной связи: @proglibrary_feeedback_bot
Больше6 463
Подписчики
Нет данных24 часа
-37 дней
-1430 день
Архив постов
❓ В чем заключается контракт между методами equals() и hashCode()?
- Если два объекта равны согласно методу equals(), то их хэш-коды должны быть одинаковыми.
- Если два объекта имеют одинаковый хэш-код, это не гарантирует, что они равны по equals(). Однако это ускоряет поиск в коллекциях на основе хэширования.
🔹 Если нарушить этот контракт, возникают такие проблемы:
- Проблемы с коллекциями: Например, в HashMap и HashSet объекты могут "потеряться", их поиск будет некорректен, и даже возможно дублирование объектов, которые считаются равными.
- Некорректная работа методов: Методы, такие как contains(), remove(), или put() в коллекциях на основе хэширования, могут работать с ошибками, что приведет к потере данных или их некорректной обработке.
❓ Что означает буква "I" в SOLID?
"I" — это принцип Interface Segregation Principle (Принцип разделения интерфейсов). Клиенты не должны зависеть от интерфейсов, которые они не используют. Лучше создавать несколько узкоспециализированных интерфейсов, чем один общий интерфейс с множеством методов.
🧑💻 Пример:
Вместо одного интерфейса Machine, который включает методы print(), scan(), и fax(), лучше создать три отдельных интерфейса для каждого действия, чтобы класс, который реализует только функцию печати, не был вынужден реализовывать ненужные ему методы.
❓ В каком случае блок finally не выполнится?
Блок finally почти всегда выполняется, но есть несколько исключений, когда его выполнение будет пропущено:
🔹 Выход из программы с помощью System.exit(int) — если программа завершится через вызов этого метода до выполнения блока finally, то код в этом блоке выполнен не будет, так как JVM завершит работу немедленно.
🔹 Физическое завершение работы JVM — если произойдет сбой системы, отключение питания, завершение работы JVM или фатальная ошибка, блок finally не будет выполнен.
🔹 Бесконечный цикл в блоке try или catch — если в этих блоках находится бесконечный цикл, который никогда не завершится, блок finally не сможет быть выполнен.
В нормальных условиях блок finally всегда выполняется, даже если в блоках try или catch произошла ошибка.
Вы Java разработчик и хотите делиться знаниями с другими?
Станьте автором курса в Яндекс Практикуме — создавайте и улучшайте образовательный контент и влияйте на формирование индустрии.
Что делать?
Помимо теории нужно будет придумывать квизы, тесты, практические задания, дополняя это примерами из вашей профессиональной жизни.
Почему вам стоит стать автором курса?
- Помощь тысячам людей получить востребованную IT-профессию.
- Прокачка себя и подтверждение своей экспертности.
- Дополнительный доход на удалёнке с гибким графиком.
Посмотреть детали и откликнуться
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Тестовое собеседование на Middle Java-разработчика в среду
Заходи завтра, 9 октября в 19:00 по мск на открытое онлайн-собеседование от ШОРТКАТ, чтобы узнать:
Чего ждут от кандидатов на Middle позиции в Java-разработке
Какие вопросы задают на интервью и зачем
Как подготовиться к собесу,
чтобы получить оффер
Интервью проведёт Роман Половинцев, ex. TeamLead в Сбере.
Чтобы записаться на эфир, переходи в бот → @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqwHKZfG
❓ Что такое сигнатура метода?
❌ Неверно: это его имя, возвращаемый тип, модификаторы доступа и список параметров.
✔️ Правильный ответ: Сигнатура метода — это комбинация его имени и списка параметров (типов и порядка). Она используется для уникальной идентификации методов в классе. Важно, что возвращаемый тип и модификаторы доступа не являются частью сигнатуры.
👋🏭 От Hello World до Enterprise: 15 Java-проектов для начинающих и профессионалов
Ищете интересные идеи для Java-проектов? Можно начать с простых вещей, вроде создания чат-бота или текстового редактора, а затем усложнить задачи, взяв на себя разработку маркетплейса или системы онлайн-обучения. Эти идеи охватывают различные технологии, от баз данных и многопоточности до веб-сервисов и микросервисов. Воплощая их, вы сможете существенно улучшить свои навыки и добавить в портфолио проекты, которые привлекут внимание работодателей.
🔗 Ссылка на статью
ℹ️ Как устроен под капотом TreeSet?
TreeSet — это коллекция, которая хранит уникальные элементы и автоматически сортирует их в натуральном порядке или по заданному Comparator. Под капотом используется самобалансирующееся красно-черное дерево, которое гарантирует, что добавление, удаление и поиск элементов будут происходить за логарифмическое время. В отличие от HashSet, TreeSet не только предотвращает дублирование элементов, но и поддерживает их упорядоченность.
🔹 Структура TreeSet
В основе TreeSet лежит красно-черное дерево — структура данных, которая поддерживает балансировку после каждой операции вставки или удаления. Т.е. дерево автоматически регулирует свою форму при каждом добавлении или удалении элемента, чтобы предотвратить чрезмерное «перерастание» дерева в одну сторону.
Элементы в TreeSet хранятся в виде узлов дерева:
▪️ Каждый узел содержит ключ и ссылки на дочерние узлы
▪️ Дерево автоматически сбалансировано — максимальная глубина любого пути от корня к листу в два раза меньше самой длинной возможной
▪️ Элементы располагаются в отсортированном порядке по мере добавления, что гарантирует логарифмическую сложность поиска и вставки
🔹 Производительность
▪️ Добавление: При добавлении элемента дерево балансируется, чтобы соблюсти свойства красно-черного дерева. Это обеспечивает сложность добавления O(log n).
▪️ Удаление: Работает схожим образом — дерево ребалансируется, а ссылки между узлами корректируются. Удаление также выполняется за O(log n).
▪️ Поиск: Благодаря сбалансированной структуре, поиск элемента в TreeSet занимает O(log n), что делает его быстрее, чем линейный поиск в несбалансированных структурах.
🔹 Использование памяти
Каждый узел в TreeSet хранит не только ключ, но и ссылки на дочерние узлы (левый и правый). Это создает определенные накладные расходы по памяти, ведь для каждого элемента требуется больше памяти, чем, например, в HashSet, где хранятся лишь сами элементы.
🔹 Преимущества и недостатки
▪️ Преимущества:
- Гарантированный порядок элементов: В отличие от HashSet, TreeSet хранит элементы в отсортированном виде. Это важно, если нужно быстро получать минимальные, максимальные или средние значения без дополнительной сортировки. Также можно извлекать диапазоны значений с помощью методов вроде subSet().
- Навигационные методы: TreeSet предоставляет мощные инструменты для навигации по набору, такие как методы для поиска ближайших элементов (floor(), ceiling()), что делает его удобным для задач с диапазонами данных.
▪️ Недостатки:
- Производительность: Операции в TreeSet медленнее, чем в HashSet.
- Большие накладные расходы по памяти: Для каждого элемента TreeSet требуется хранить дополнительные ссылки на дочерние узлы, что увеличивает потребление памяти.
❓ Что означает буква "S" в SOLID?
"S" — это Single Responsibility Principle (Принцип единственной ответственности). Каждый класс или модуль должен иметь одну и только одну причину для изменения, то есть отвечать только за одну задачу.
🧑💻 Пример:
Класс, который отвечает за обработку данных, не должен также отвечать за их отображение или сохранение. Нарушение этого принципа может привести к усложнению кода и трудностям с поддержкой.
❓ Что такое инкапсуляция?
❌ Неверно: Это когда все поля класса объявляются приватными и создаются геттеры и сеттеры.
✔️ Правильный ответ: Инкапсуляция — это принцип ООП, при котором детали реализации скрываются от внешнего мира, предоставляя доступ к данным только через публичные методы (геттеры/сеттеры или другие). Она позволяет защитить данные от некорректных изменений и обеспечить контролируемый доступ к ним.
❓ Можно ли наследоваться от класса String?
Нет, наследоваться от класса String нельзя. Это связано с тем, что класс String объявлен как final, а это значит, что он не может быть расширен или изменен посредством наследования.
❓ Какой код компилируется быстрее: код с комментариями или без?
Комментарии никак не влияют на скорость компиляции. Компилятор игнорирует комментарии при сборке программы, так как они предназначены только для разработчиков. В процессе компиляции комментарии удаляются, и на итоговое скомпилированное приложение они не оказывают никакого влияния.
Документация.
❓ Чем отличается переопределение от перегрузки?
И переопределение (override), и перегрузка (overload) — это формы полиморфизма в Java, но они работают по-разному.
🔹 Переопределение происходит, когда подкласс изменяет реализацию метода, унаследованного от родительского класса. Метод должен иметь ту же сигнатуру (имя, параметры и возвращаемый тип). Это форма динамического полиморфизма, потому что выбор метода происходит во время выполнения.
🔹 Перегрузка — это создание нескольких методов с одинаковым именем, но с разными параметрами (их типами, количеством или порядком). Это форма статического полиморфизма, так как выбор метода происходит на этапе компиляции.
⚠️ Смена только возвращаемого типа метода не считается перегрузкой. Если у методов совпадают имя и параметры, но различаются только возвращаемые типы, это вызовет ошибку компиляции.
❓ С помощью чего создаётся новый объект?
❌ Неверно: Конструктор.
✔️ Правильный ответ: Объекты создаются с помощью оператора new, конструктор лишь инициализирует объект после его создания.
Новые форматы (можно выбрать несколько):
Привет, друзья!
Какие форматы кроме обычных вопросов вам бы ещё было интересно увидеть? Пишите в комментариях. 💬
Также ниже предлагаю несколько вариантов готовых форматов. Можем обсудить: какие лучше, какие хуже и как интересно реализовать их.
Сделаем контент ещё интереснее вместе🔼
ℹ️ Как устроен под капотом LinkedList?
LinkedList — это двусвязный список, который реализует интерфейсы List, Deque и Queue, обеспечивая гибкость в работе с элементами на обоих концах структуры.
🔹 Структура LinkedList
LinkedList хранит свои элементы в виде узлов (Nodes), каждый из которых содержит три части:
▪️ Ссылку на предыдущий узел
▪️ Ссылку на следующий узел
▪️ Само значение элемента
Каждый узел существует разрозненно в памяти, в отличие от массивов, где все элементы хранятся последовательно. Это позволяет LinkedList динамически изменять размер и не требует перераспределения памяти при добавлении новых элементов.
🔹 Производительность
▪️ Добавление: При добавлении нового элемента создается новый узел, который вставляется между двумя существующими узлами, изменяя у них ссылки. Если добавление происходит в начало или конец, обновляются только ссылки на предыдущий или следующий узел. Операции на концах занимают O(1), тогда как добавление в середину требует прохождения списка до нужного узла, что занимает O(n).
▪️ Удаление: Удаление элемента работает аналогично добавлению — обновляются ссылки соседних узлов. Удаление на концах списка занимает O(1), в середине — O(n).
▪️ Поиск: Поскольку узлы хранятся в памяти разрозненно, LinkedList не поддерживает эффективный случайный доступ. Чтобы найти элемент, нужно последовательно проходить список от начала или конца, из-за чело сложность поиска O(n).
🔹 Использование памяти
LinkedList требует дополнительной памяти для хранения двух ссылок (на предыдущий и следующий узел) для каждого элемента, что делает его более затратным по памяти по сравнению с массивами или ArrayList.
🔹 Преимущества и недостатки
▪️ Преимущества: Эффективные операции добавления и удаления в начале и конце списка, отсутствие необходимости в перераспределении памяти. Полезен для реализации очередей и стеков.
▪️ Недостатки: Медленный доступ к элементам (O(n)), высокий расход памяти из-за хранения ссылок, элементы хранятся разрозненно в памяти, что может приводить к фрагментации.
❓ Какие есть методы в классе Object?
public boolean equals(Object obj) — служит для сравнения объектов по значению;
int hashCode() — возвращает hash код для объекта;
String toString() — возвращает строковое представление объекта;
Class getClass() — возвращает класс объекта во время выполнения;
protected Object clone() — создает и возвращает копию объекта;
void notify() — возобновляет поток, ожидающий монитор;
void notifyAll() — возобновляет все потоки, ожидающие монитор;
void wait() — остановка вызвавшего метод потока до момента пока другой поток не вызовет метод notify() или notifyAll() для этого объекта;
protected void finalize() — может вызываться сборщиком мусора в момент удаления объекта при сборке мусора.
