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

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
В чем разница между StackOverflowError и OutOfMemoryError?

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

🔹 OutOfMemoryError возникает, если JVM исчерпывает память в куче или других областях (например, Metaspace). Это может происходить из-за утечек памяти, создания огромных объектов или нехватки ресурсов.
Please open Telegram to view this post
VIEW IN TELEGRAM
December 13, 2024
Что такое BeanPostProcessor?

BeanPostProcessorинтерфейс Spring, позволяющий вмешиваться в процесс инициализации бинов.

Он предоставляет два метода:
▪️ postProcessBeforeInitializationвызывается до инициализации бина.
▪️ postProcessAfterInitializationвызывается после инициализации бина.

Применяется для кастомизации бинов: логирование, валидация, проксирование (AOP, транзакции) и т.д.

Как работает?

1️⃣ Spring ищет все реализации BeanPostProcessor.
2️⃣ Методы применяются ко всем бинам в контексте.
Please open Telegram to view this post
VIEW IN TELEGRAM
December 14, 2024
Что такое Prototype Scope в Spring?

Prototype Scope — это один из типов областей видимости (scope) бинов в Spring. Если бин настроен как @Scope("prototype"), то каждый раз, когда вы запрашиваете этот бин у контейнера Spring, создается новый экземпляр объекта.

Зачем нужен?

▪️ Полезен, если у бина есть изменяемое состояние, которое не должно разделяться между потоками или пользователями.
▪️ Каждый запрос получает "чистый" объект, что упрощает работу с данными, привязанными к конкретному потоку, запросу или контексту.
Please open Telegram to view this post
VIEW IN TELEGRAM
December 16, 2024
Что такое ApplicationContext в Spring?

ApplicationContext — это центральный интерфейс контейнера Spring, который загружает метаданные конфигурации из XML-файлов, Java-классов или аннотаций, создаёт бины и управляет ими на протяжении всего жизненного цикла приложения, а также предоставляет расширенные функции для разработки приложений. Он является расширением BeanFactory и добавляет дополнительные возможности, такие как поддержка аннотаций, автоматическое связывание зависимостей, интернационализацию и публикацию событий.
Please open Telegram to view this post
VIEW IN TELEGRAM
December 17, 2024
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

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

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
December 17, 2024
👀 Задачи с собеседований: Поиск подмассива с максимальной суммой (middle)

— Дан массив целых чисел, необходимо найти подмассив с наибольшей суммой и вернуть эту сумму.

💡 Ключевые моменты:

- Подмассив — это непрерывная последовательность элементов исходного массива.
- Требуется определить такую последовательность, сумма элементов которой максимальна.
- Эффективное решение задачи достигается с помощью алгоритма Кадане, который позволяет найти максимальную сумму подмассива за линейное время O(n).

Реализация на картинке 👆🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
December 18, 2024
Вакансии «Библиотеки программиста» — ждем вас в команде!

Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов

Подробности тут

Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴

Ждем ваших откликов 👾
December 19, 2024
Какая разница между интерфейсами Runnable и Callable?

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

🔹 Runnableэто интерфейс, предназначенный для выполнения задачи, которая ничего не возвращает и не выбрасывает проверяемых исключений. Метод run() не имеет возвращаемого значения:

public interface Runnable {
void run();
}


🔹 Callableэто интерфейс, который используется для выполнения задачи, которая возвращает результат и может выбрасывать проверяемые исключения. Метод call() возвращает объект:

public interface Callable<V> {
V call() throws Exception;
}
Please open Telegram to view this post
VIEW IN TELEGRAM
December 19, 2024
Что такое Singleton Scope в Spring?

Singleton Scopeэто область видимости (scope) бина по умолчанию в Spring. Если бин настроен как @Scope("singleton") или не имеет явного указания области видимости, контейнер Spring создает только один экземпляр бина и возвращает его при каждом запросе.

Зачем нужен?

▪️ Экономия ресурсов: один экземпляр бина используется повторно, что снижает нагрузку на создание объектов.
▪️ Удобство управления состоянием: общие ресурсы или настройки можно легко разделить между всеми частями приложения.
▪️ Простота интеграции: Singleton-бин упрощает реализацию общесистемных сервисов, таких как кеширование, логирование, или подключения к базам данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
December 20, 2024
Новый год — время для новых начинаний!
Пока все строят планы на будущее, подумайте, что поможет вам двигаться вперёд в карьере. Мы знаем, что навыки в IT открывают огромные возможности — и мы готовы помочь вам начать!

🔹 Почему IT?

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

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

📚 Как это работает?

- Несколько программ по цене одной — выбирайте всё, что вам нужно.
- Бессрочный доступ — учитесь в своём ритме и когда удобно.
- Это выгодно — вы получаете навыки, которые помогут вам расти профессионально и зарабатывать больше.

А для тех, кто решит сделать шаг в будущее до конца года, у нас есть кое-что особенное… 🎁 Узнайте больше

Как выбрать свой путь?
Мы предлагаем несколько уникальных комбинаций курсов, которые помогут вам стать настоящим экспертом:

🔵 Математика для Data Science + Алгоритмы и структуры данных — для тех, кто хочет готовиться к собеседованиям в топовые компании.

🔵 Алгоритмы + ML — чтобы не просто решать задачи, а понимать, как работают современные технологии.

🔵 Frontend + ML — создавайте приложения и учитесь работать с нейросетями.

🔵 И другие комбинации для разных целей.

Новогодний подарок, который будет работать на вас весь год — это отличная идея! 🎁 Начните сейчас

Развивайтесь в IT — и будущее уже будет в ваших руках!
December 21, 2024
ℹ️ Что делает аннотация @Retention?

@Retention - это стандартная аннотация из пакета Java (java.lang.annotation.Retention). Аннотация задаёт политику удержания аннотаций, определяя, где и как долго аннотация будет доступна в процессе выполнения программы.

🔵 Политики удержания:

- RetentionPolicy.SOURCE - аннотация сохраняется только в исходном коде и отбрасывается компилятором. Она недоступна в байт-коде и во время выполнения.
- RetentionPolicy.CLASS - аннотация сохраняется в байт-коде, но недоступна в процессе выполнения через рефлексию. Это настройка по умолчанию, если @Retention не указана.
- RetentionPolicy.RUNTIME - аннотация сохраняется в байт-коде и доступна во время выполнения через рефлексию. Эта политика чаще всего используется в Spring для создания и обработки пользовательских аннотаций.

🔵 Пример:
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation {
String value();
}


В этом примере аннотация будет доступна для анализа во время выполнения, что позволяет Spring или другим библиотекам использовать её для настройки бинов, аспектов и других механизмов.
Please open Telegram to view this post
VIEW IN TELEGRAM
December 21, 2024
Что такое Propagation в Spring?

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

🔹 Ключевые типы:

- REQUIRED (по умолчанию): использует текущую транзакцию, или создаёт новую, если её нет.
- REQUIRES_NEW: всегда создаёт новую транзакцию, приостанавливая текущую.
- NESTED: вложенная транзакция, откат которой не влияет на основную.
- SUPPORTS: использует текущую транзакцию, но работает без неё, если её нет.
- NOT_SUPPORTED: приостанавливает текущую транзакцию.
- NEVER: вызывает ошибку, если транзакция уже существует.
- MANDATORY: требует существования транзакции, иначе выбрасывает исключение.
Please open Telegram to view this post
VIEW IN TELEGRAM
December 22, 2024
Что такое ForkJoinPool и где его применяют?

ForkJoinPool — это пул потоков в Java, который работает по принципу "разделяй и властвуй". Он позволяет разбивать задачи на мелкие подзадачи (fork), выполнять их параллельно, а затем объединять результаты (join).

Особенность ForkJoinPool — использование алгоритма work-stealing, где потоки, простаивающие без работы, забирают задачи из очередей других потоков, что повышает производительность.

Где применяется:


- Рекурсивные вычисления (например, сортировка или суммирование).
- Параллельная обработка больших данных.
- Задачи, которые можно разделить на независимые подзадачи.
Please open Telegram to view this post
VIEW IN TELEGRAM
December 23, 2024
Что такое transient поля?

transient — это модификатор, который исключает поле из процесса сериализации. Это означает, что значение такого поля не будет записано в поток и восстановлено при десериализации объекта.

Пример:

class User implements Serializable {
private String username;
private transient String password;
}


Когда использовать:
- Для чувствительных данных, таких как пароли.
- Для временных или несущественных данных, которые не нужно сохранять.
Please open Telegram to view this post
VIEW IN TELEGRAM
December 24, 2024
Что такое Reflection?

Reflection — это механизм в Java, который позволяет вашему коду исследовать и изменять поведение классов, методов и объектов во время выполнения, даже если их структуры неизвестны заранее.

С помощью Reflection можно:

▪️ Узнавать информацию о классе (методы, поля, конструкторы, модификаторы).
▪️ Вызывать методы и обращаться к полям объекта, даже если они private.
▪️ Создавать новые объекты динамически (без явного указания конструктора).

Пример:


import java.lang.reflect.Method;

public class ReflectionExample {
public static void main(String[] args) throws Exception {
// Класс, который будем исследовать
Class<?> clazz = Class.forName("java.lang.String");

Method[] methods = clazz.getDeclaredMethods();

for (Method method : methods) {
System.out.println("Метод: " + method.getName());
}
}
}


⚠️ Важно:

- Reflection делает код менее безопасным и сложным для понимания.
- Это может снижать производительность программы. Используйте его только при необходимости.
- В современных приложениях, например, с Spring, Reflection часто используется для Dependency Injection или работы с аннотациями.
Please open Telegram to view this post
VIEW IN TELEGRAM
December 25, 2024
ℹ️ Какие типы ссылок существуют?

Существует 4 типа ссылок, которые определяют, как объект будет обрабатываться сборщиком мусора (Garbage Collector).

1️⃣ Strong Reference

Это ссылки, которые используются по умолчанию.
String strongRef = new String("Strong Reference");


Объект, на который указывает сильная ссылка, никогда не будет удален сборщиком мусора, пока существует эта ссылка.
Используйте, когда объект нужен в течение всего времени выполнения.

2️⃣ Soft Reference

Создаются с помощью класса SoftReference. Soft ссылка удерживает объект в памяти, пока в JVM достаточно свободной памяти. Если памяти не хватает, объект будет удален.
SoftReference<String> softRef = new SoftReference<>(new String("Soft Reference"));
String softObj = softRef.get();


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

3️⃣ Weak Reference

Создаются с помощью класса WeakReference. Объект, на который ссылается слабая ссылка, удаляется сборщиком мусора, как только на него больше нет сильных или мягких ссылок.
WeakReference<String> weakRef = new WeakReference<>(new String("Weak Reference"));
String weakObj = weakRef.get();


Часто используются в структурах данных, таких как WeakHashMap, для предотвращения удержания ненужных объектов.
Удобны для создания ссылок на временные объекты.

4️⃣ Phantom Reference

Создаются с помощью класса PhantomReference. Эти ссылки используются исключительно для отслеживания, когда объект будет удален сборщиком мусора.
PhantomReference<String> phantomRef = new PhantomReference<>(new String("Phantom Reference"), new ReferenceQueue<>());


Метод get() у фантомной ссылки всегда возвращает null.
Объекты, на которые ссылаются фантомные ссылки, добавляются в ReferenceQueue, когда сборщик мусора их удаляет.
Please open Telegram to view this post
VIEW IN TELEGRAM
December 26, 2024
Чем отличаются интерфейсы Comparable и Comparator?

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

🔹 Comparable определяет естественный порядок объектов. Реализуется самим классом, который нужно сравнивать.

Единственный метод – compareTo(T o):
@Override
public int compareTo(Person other) {
return Integer.compare(this.age, other.age);
}


Удобно, когда у объекта есть однозначный критерий сравнения. Например, сортировка по возрасту

🔹 Comparator позволяет создавать кастомные способы сравнения, не изменяя класс.

Основной метод – compare(T o1, T o2):
Comparator<Person> byName = (p1, p2) -> p1.getName().compareTo(p2.getName());


Используется для различных критериев сравнения, например, сортировка по имени или другим атрибутам.
Please open Telegram to view this post
VIEW IN TELEGRAM
December 27, 2024
Что такое JRE?

JRE (Java Runtime Environment) — это компонент платформы Java, который обеспечивает выполнение Java-программ.

▪️ JRE включает:

- JVM (Java Virtual Machine): Отвечает за интерпретацию и выполнение байт-кода.
- Библиотеки и классы: Набор стандартных библиотек (например, java.lang, java.util), которые нужны для работы приложений.
- Файлы и ресурсы: Вспомогательные файлы, такие как конфигурации и системные библиотеки.

JRE используется для запуска уже скомпилированных Java-программ. Это значит, что JRE не включает компилятор и другие инструменты разработки (они есть в JDK).
Please open Telegram to view this post
VIEW IN TELEGRAM
December 28, 2024
December 29, 2024