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

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

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

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

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Что такое абстрактные классы?

Абстрактные классы — это классы, которые не могут быть инстанциированы напрямую, то есть нельзя создать объект абстрактного класса при помощи оператора new. Они предназначены для обеспечения базовой структуры и функциональности для других классов, которые наследуются от них. Абстрактные классы представляют собой в некотором роде «заготовки» для подклассов, указывая на общие атрибуты и методы, которые они должны реализовать.
💪🛠️ Прокачай свой бэкенд: 9 инструментов, которые стоит знать

От браузерной ИИ-песочницы PostgreSQL до суперскоростного валидатора email — обзор новейших инструментов, которые упростят вашу работу и повысят продуктивность.

Читать статью
Что делает метод Character.toString()?

Метод Character.toString() в Java используется для преобразования символа в строку. Он принимает в качестве аргумента символ типа char и возвращает строку, состоящую из одного символа.

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

public static String toString(char ch)

Аргумент:
ch — символ, который необходимо преобразовать в строку.

Возвращаемое значение:
Строка, состоящая из одного символа.
Возведение в степень

Возвести число в степень можно двумя способами:

1) простое умножение;
2) используя метод Math.pow().

Использование библиотечной функции рекомендуется только в случае крайней необходимости, например, в случае дробной или отрицательной степени.

Простое умножение в Java работает в 300-600 раз эффективнее, кроме того, его можно дополнительно оптимизировать.
Реализуйте в Java класс, представляющий стек (stack), который поддерживает операции push, pop и получение минимального элемента (getMin) — все операции должны выполняться за константное время (O(1)). Напишите код и объясните, как вы решите эту задачу.

Объяснение:
В этом коде используется два стека: stack для хранения элементов стека и minStack для хранения минимальных элементов.
В методе push, при добавлении нового элемента в стек проверяется, является ли он минимальным. Если да, то он также добавляется в minStack.
В методе pop, при извлечении элемента из стека проверяется, является ли этот элемент минимальным. Если да, то он также удаляется из minStack.
Методы top и getMin просто возвращают верхний элемент стека и минимальный элемент соответственно.

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

Пространственная сложность: O(n). Где n — количество элементов в стеке. Мы используем два стека, но их размер ограничен размером стека.
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

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

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Какие существуют unchecked exception?

Наиболее часто встречающиеся: ArithmeticException, ClassCastException, ConcurrentModificationException, IllegalArgumentException, IllegalStateException, IndexOutOfBoundsException, NoSuchElementException, NullPointerException, UnsupportedOperationException.
Что такое RecursiveTask?

RecursiveTask является частью фреймворка Fork/Join в Java, введенного в Java 7. Этот фреймворк предоставляет удобный способ распараллеливания выполнения задач.

RecursiveTask является подклассом ForkJoinTask. Он предназначен для использования вместе с пулом Fork/Join (ForkJoinPool) и предоставляет специальные методы для разделения задачи на подзадачи и объединения результатов.
Как получить IP адрес клиента на сервере?

IP адрес клиента можно получить вызвав request.getRemoteAddr().
Можно ли перегрузить static метод?

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

Например, можно создать статический метод sum, который будет складывать числа. Метод можно перегрузить, создав одну версию для сложения целых чисел (int), а другую — для сложения чисел с плавающей точкой (double).
При вызове метода компилятор будет выбирать нужную версию на основе типа аргументов.

Это делает класс с перегруженными методами более гибким и удобным для использования.
👾 -35% на курс по алгоритмам

На курсе вы на практике познакомитесь со сложными алгоритмами и научитесь писать более короткий и эффективный код – https://proglib.io/w/52359172

23 390 рублей 35 990 рублей

Что еще вас ждет на курсе:

▪️ 150 практических заданий и 47 видеолекций;

▪️ Бессрочный доступ ко всем материалам курса;

▪️ Развернутая обратная связь по всем домашним заданиям, а также ссылки на полезные дополнительные материалы.

🌚 Переходите на сайт, читайте подробности и заходите на обучение по самым выгодным условиям – https://proglib.io/w/52359172
Please open Telegram to view this post
VIEW IN TELEGRAM
💀 Как гарантированно провалить собеседование: 10 верных способов

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

Чтобы не завалить собеседование — забирайте наш курс:
🔵 Базовые модели ML и приложения

🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
Как реализовать immutable класс?

Чтобы реализовать immutable класс, необходимо сделать класс финальным, а его поля приватными и финальными. Значения полей устанавливаются через конструктор и не могут изменяться после создания объекта. Методы-сеттеры исключаются, а геттеры возвращают копии объектов, если поля содержат ссылки на изменяемые объекты. Такой подход гарантирует неизменяемость объектов, что повышает их безопасность и упрощает многопоточное программирование.
Please open Telegram to view this post
VIEW IN TELEGRAM
Объясните разницу между параллелизмом и многопоточностью?

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

Параллелизм, с другой стороны, означает выполнение нескольких задач одновременно на разных ядрах процессора. В контексте параллелизма, задачи действительно выполняются одновременно, что может ускорить выполнение программы, если задачи могут быть разбиты на независимые части.
Please open Telegram to view this post
VIEW IN TELEGRAM
В чем разница между final, finally и finalize() в Java?

Эти три термина часто путают, но они имеют принципиально разные значения:

🔹 final — это ключевое слово, используемое для ограничения:
▪️ Переменная: значение не может быть изменено после инициализации.
▪️ Метод: не может быть переопределён в подклассе.
▪️ Класс: запрещает наследование.

🔹 finally — это блок кода, который всегда выполняется после блока try-catch, независимо от того, было ли исключение выброшено или нет. Часто используется для освобождения ресурсов (например, закрытия файлов или потоков).

🔹 finalize() — это метод, который вызывается сборщиком мусора перед уничтожением объекта. Использовался для освобождения ресурсов, но сейчас его использование не рекомендуется из-за непредсказуемости момента вызова.
Please open Telegram to view this post
VIEW IN TELEGRAM
Разница между «Lambdas» и «Anonymous Classes»

— Лямбда-выражения имеют лаконичный синтаксис по сравнению с анонимными классами. Лямбды проще читать и писать, так как они не требуют явного объявления метода, тогда как анонимные классы содержат больше «лишнего» кода.

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

— Лямбды могут быть более эффективными, так как они компилируются в байт-код, который может быть оптимизирован. Анонимные классы обычно компилируются как отдельные классы, что может требовать больше ресурсов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое Heap и Stack?

🔹 Heap (Куча):
Это область памяти, где хранятся объекты и динамически создаваемые данные. Всё, что создаётся с помощью оператора new, помещается в кучу. Управление памятью здесь осуществляется автоматически через сборщик мусора (Garbage Collector). Память на куче выделяется динамически, и она имеет больший объём, чем стек.

🔹 Stack (Стек):
Это область памяти, где хранятся примитивные типы данных (int, float и т.д.) и ссылки на объекты, которые находятся в куче. Стек работает по принципу LIFO (последним пришёл — первым ушёл), и память выделяется под локальные переменные методов. Память на стеке освобождается автоматически, когда метод завершает выполнение.
Please open Telegram to view this post
VIEW IN TELEGRAM
В чем разница между sleep() и wait()?

🔹 sleep():

▪️ Приостанавливает выполнение текущего потока на заданное количество времени.
▪️ Не освобождает монитор (блокировку) объекта.
▪️ Вызывается как статический метод Thread.sleep(millis).

🔹 wait():

▪️ Приостанавливает текущий поток до тех пор, пока другой поток не вызовет метод notify() или notifyAll() на том же объекте.
▪️ Освобождает монитор объекта, позволяя другим потокам его использовать.
▪️ Вызывается на любом объекте, внутри синхронизированного блока synchronized.

Используйте sleep() для временной паузы, а wait() для синхронизации между потоками.
Please open Telegram to view this post
VIEW IN TELEGRAM
В чем разница между LinkedHashMap и TreeMap в Java?

🔹 Порядок хранения элементов:

▪️ LinkedHashMap сохраняет порядок вставки элементов. То есть, когда вы итерируете по коллекции, элементы будут возвращаться в том порядке, в котором они были добавлены.
▪️ TreeMap, с другой стороны, сортирует элементы по ключу. Это означает, что порядок следования элементов при итерации определяется натуральным порядком ключей (если ключи реализуют Comparable) или компаратором, который вы передадите.

🔹 Время доступа к элементам:

▪️ LinkedHashMap использует хеш-таблицу, и поэтому в среднем имеет более быстрый доступ к элементам — поиск, вставка и удаление выполняются в среднем за время, близкое к O(1).
▪️ TreeMap реализована на основе красно-чёрного дерева, что делает операции поиска, вставки и удаления в среднем более медленными — за время O(log n), так как элементы поддерживаются в отсортированном виде.

🔹 Использование в различных задачах:

▪️ LinkedHashMap подходит для задач, где важен порядок вставки элементов, например, при реализации кэша с ограниченным количеством элементов.
▪️ TreeMap полезна, когда необходимо хранить элементы в отсортированном порядке или когда важен быстрый поиск минимального/максимального ключа.
Please open Telegram to view this post
VIEW IN TELEGRAM
В чем разница между перегрузкой метода и переопределением метода?

🔵 Перегрузка метода (Overloading):

▪️ Параметры метода должны отличаться — это могут быть разные типы, количество или порядок параметров.
▪️ Наследование не требуется. Все происходит внутри одного класса.


public void Print(int number) {  }
public void Print(string text) { }


🔵 Переопределение метода (Overriding):


▪️ Параметры метода должны быть идентичны (тип, количество и порядок).
▪️ Наследование обязательно. Метод переопределяется в классе-наследнике для изменения поведения базового метода.


class Animal {
public void sound() { System.out.println("Animal sound"); }
}

class Dog extends Animal {
@Override
public void sound() { System.out.println("Dog barks"); }
}
Please open Telegram to view this post
VIEW IN TELEGRAM