ch
Feedback
Библиотека собеса по Java | вопросы с собеседований

Библиотека собеса по Java | вопросы с собеседований

前往频道在 Telegram

Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: clc.to/3wECtA Для обратной связи: @proglibrary_feeedback_bot

显示更多
6 465
订阅者
+124 小时
-47
-1430
帖子存档
ℹ️ Что такое Dependency Injection? Dependency Injection (внедрение зависимостей) — это один из основных паттернов проектирования в программировании, который позволяет объектам получать свои зависимости извне, вместо того чтобы создавать их внутри себя. DI способствует: — Слабой связанности между компонентами. — Легкости тестирования за счет использования mock-объектов. — Повторному использованию кода. Основные способы внедрения зависимостей: 🔹 Constructor Injection Зависимости передаются через конструктор.
public class Service {
    private final Repository repository;

    public Service(Repository repository) {
        this.repository = repository;
    }
}
🔹Setter Injection Зависимости передаются через сеттеры.
public class Service {
    private Repository repository;

    public void setRepository(Repository repository) {
        this.repository = repository;
    }
}
🔹 Field Injection Зависимости внедряются напрямую в поля класса (обычно с помощью фреймворков, например Spring).
@Component
public class Service {
    @Autowired
    private Repository repository;
}

🎄 Что такое JDBC? JDBC (Java Database Connectivity) — это стандартный API для взаимодействия с реляционными базами данных. Он предоставляет набор интерфейсов и классов для выполнения следующих задач: 1️⃣ Подключение к базе данных с помощью драйверов, которые обеспечивают взаимодействие с конкретной СУБД. 2️⃣ Выполнение SQL-запросов, таких как SELECT, INSERT, UPDATE, DELETE. 3️⃣ Получение и обработка результатов, включая чтение данных из ResultSet. 4️⃣ Обработка транзакций, включая их коммит или откат. 5️⃣ Управление ресурсами, например, закрытие соединений, чтобы предотвратить утечки памяти.

🎄 Чем отличается абстрактный класс от интерфейса? Абстрактные классы и интерфейсы используются для обеспечения полиморфизма, но у них разные сценарии применения: - Наследование: Абстрактный класс поддерживает единичное наследование, интерфейс — множественное. - Реализация: Абстрактный класс может содержать поля и методы с реализацией. В то время как интерфейс (до Java 8) не мог иметь методы, после Java 8 в интерфейсах появились default методы. Поля в интерфейсах могут быть только public static final. - Когда выбирать: Абстрактный класс — для объектов с общим поведением, интерфейсы — для описания возможностей или контрактов. Абстрактные классы — это про кто я такой, интерфейсы — про что я могу делать.

🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи Напоминаем, что у нас есть бесплатный курс для всех, кто хо
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом. Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций. Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах. 👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.

🎄 Как работает String.intern() Метод String.intern() возвращает строку из пула строк (String Pool), если такая строка уже существует, либо добавляет строку в пул, если её там ещё нет. Это может быть полезно для оптимизации памяти, особенно при работе с большим количеством дублирующихся строк. 🔍 Как это работает: String Pool — это специальная область памяти в JVM, где хранятся уникальные строковые литералы. Когда мы вызываем intern(), JVM ищет строку в пуле: Если строка найдена, возвращается ссылка на неё. Если строка не найдена, она добавляется в пул, и возвращается новая ссылка. 🧨 Опасности использования: — Перегрузка пула строк: Если бездумно вызывать intern() на огромном количестве уникальных строк, можно исчерпать доступную память. — Скрытые проблемы многопоточности: Если несколько потоков одновременно вызывают intern() на строке, это может привести к задержкам или даже к дедлокам в JVM.

💬 Обратная связь 🎄 Всех с наступающими праздниками. Планируете ли Вы готовиться к собеседованиям на новогодних праздниках? 👍🏼 - Конечно, выкладывайте вопросы как раньше 🌚 - Буду отдыхать и веселиться. Выложите что-то ещё Поделитесь в комментариях, что на новогодние было бы интересно почитать, помимо постов по тематике канала?

🖥 Java — топ язык программирования
Proglib рассказывает про любимый язык програмирования в формате рилса

Что такое JVM? JVM (Java Virtual Machine) — это виртуальная машина, которая выполняет Java-программы. Она предоставляет платформо-независимую среду для работы Java-кода, абстрагируя аппаратные и операционные особенности. ▪️ Как работает JVM? - Компиляция: Исходный код на Java компилируется в байт-код (.class), который понятен JVM. - Загрузка: Класс-загрузчики (Class Loaders) загружают байт-код в память. - Верификация: Верификатор проверяет байт-код на корректность и безопасность выполнения. - Исполнение: JVM интерпретирует байт-код или передаёт его JIT-компилятору для преобразования в машинный код, что улучшает производительность. ▪️ Ключевые особенности JVM: - Garbage Collection: Автоматическое управление памятью для предотвращения утечек. - Cross-Platform: "Write once, run anywhere" благодаря унифицированной спецификации JVM. - Виртуальная среда: Обеспечивает безопасность, изолируя выполнение Java-программ.

🗺 Привычка "срезать углы" при ходьбе – это интуитивное применение алгоритмов? Так работает жадный алгоритм: вы выбираете наи
🗺 Привычка "срезать углы" при ходьбе – это интуитивное применение алгоритмов? Так работает жадный алгоритм: вы выбираете наиболее выгодный шаг в каждый момент времени, чтобы минимизировать общий путь. То же самое применяют разработчики, создавая маршруты для такси или доставок. С нашим курсом «Алгоритмы и структуры данных» вы научитесь решать любые сложные задачи так же эффективно. 🎄Начните свой 2025 со скидкой 35% на все курсы. Это лучшее вложении уходящего года – https://proglib.io/w/014fe6d8

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

Чем отличаются интерфейсы 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());
Используется для различных критериев сравнения, например, сортировка по имени или другим атрибутам.

ℹ️ Какие типы ссылок существуют? Существует 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, когда сборщик мусора их удаляет.

Что такое 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 или работы с аннотациями.

Что такое transient поля? transient — это модификатор, который исключает поле из процесса сериализации. Это означает, что значение такого поля не будет записано в поток и восстановлено при десериализации объекта. Пример:
class User implements Serializable {
    private String username;
    private transient String password;
}
Когда использовать: - Для чувствительных данных, таких как пароли. - Для временных или несущественных данных, которые не нужно сохранять.

Что такое ForkJoinPool и где его применяют? ForkJoinPool — это пул потоков в Java, который работает по принципу "разделяй и властвуй". Он позволяет разбивать задачи на мелкие подзадачи (fork), выполнять их параллельно, а затем объединять результаты (join). Особенность ForkJoinPool — использование алгоритма work-stealing, где потоки, простаивающие без работы, забирают задачи из очередей других потоков, что повышает производительность. Где применяется: - Рекурсивные вычисления (например, сортировка или суммирование). - Параллельная обработка больших данных. - Задачи, которые можно разделить на независимые подзадачи.

Что такое Propagation в Spring? Propagation — это механизм, определяющий, как должна вести себя новая транзакция относительно уже существующей. Эта настройка управляет тем, будет ли новая транзакция создана, использована текущая или полностью проигнорирована. 🔹 Ключевые типы: - REQUIRED (по умолчанию): использует текущую транзакцию, или создаёт новую, если её нет. - REQUIRES_NEW: всегда создаёт новую транзакцию, приостанавливая текущую. - NESTED: вложенная транзакция, откат которой не влияет на основную. - SUPPORTS: использует текущую транзакцию, но работает без неё, если её нет. - NOT_SUPPORTED: приостанавливает текущую транзакцию. - NEVER: вызывает ошибку, если транзакция уже существует. - MANDATORY: требует существования транзакции, иначе выбрасывает исключение.

ℹ️ Что делает аннотация @Retention? @Retention - это стандартная аннотация из пакета Java (java.lang.annotation.Retention). Аннотация задаёт политику удержания аннотаций, определяя, где и как долго аннотация будет доступна в процессе выполнения программы. 🔵 Политики удержания: - RetentionPolicy.SOURCE - аннотация сохраняется только в исходном коде и отбрасывается компилятором. Она недоступна в байт-коде и во время выполнения. - RetentionPolicy.CLASS - аннотация сохраняется в байт-коде, но недоступна в процессе выполнения через рефлексию. Это настройка по умолчанию, если @Retention не указана. - RetentionPolicy.RUNTIME - аннотация сохраняется в байт-коде и доступна во время выполнения через рефлексию. Эта политика чаще всего используется в Spring для создания и обработки пользовательских аннотаций. 🔵 Пример:
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation {
    String value();
}
В этом примере аннотация будет доступна для анализа во время выполнения, что позволяет Spring или другим библиотекам использовать её для настройки бинов, аспектов и других механизмов.

Новый год — время для новых начинаний! Пока все строят планы на будущее, подумайте, что поможет вам двигаться вперёд в карьер
Новый год — время для новых начинаний! Пока все строят планы на будущее, подумайте, что поможет вам двигаться вперёд в карьере. Мы знаем, что навыки в IT открывают огромные возможности — и мы готовы помочь вам начать! 🔹 Почему IT? - Большинство компаний активно ищут специалистов. - Вы можете работать из любой точки мира — с гибким графиком и интересными задачами. - А ещё IT — это высокий доход и стремительный карьерный рост. Возможно, именно сейчас тот момент, когда стоит инвестировать в себя и развить востребованные навыки. У нас есть конструктор курсов, с помощью которого вы сможете составить свой идеальный план обучения — под свои цели и интересы. 📚 Как это работает? - Несколько программ по цене одной — выбирайте всё, что вам нужно. - Бессрочный доступ — учитесь в своём ритме и когда удобно. - Это выгодно — вы получаете навыки, которые помогут вам расти профессионально и зарабатывать больше. А для тех, кто решит сделать шаг в будущее до конца года, у нас есть кое-что особенное… 🎁 Узнайте больше Как выбрать свой путь? Мы предлагаем несколько уникальных комбинаций курсов, которые помогут вам стать настоящим экспертом: 🔵 Математика для Data Science + Алгоритмы и структуры данных — для тех, кто хочет готовиться к собеседованиям в топовые компании. 🔵 Алгоритмы + ML — чтобы не просто решать задачи, а понимать, как работают современные технологии. 🔵 Frontend + ML — создавайте приложения и учитесь работать с нейросетями. 🔵 И другие комбинации для разных целей. Новогодний подарок, который будет работать на вас весь год — это отличная идея! 🎁 Начните сейчас Развивайтесь в IT — и будущее уже будет в ваших руках!

Что такое Singleton Scope в Spring? Singleton Scopeэто область видимости (scope) бина по умолчанию в Spring. Если бин настроен как @Scope("singleton") или не имеет явного указания области видимости, контейнер Spring создает только один экземпляр бина и возвращает его при каждом запросе. Зачем нужен? ▪️ Экономия ресурсов: один экземпляр бина используется повторно, что снижает нагрузку на создание объектов. ▪️ Удобство управления состоянием: общие ресурсы или настройки можно легко разделить между всеми частями приложения. ▪️ Простота интеграции: Singleton-бин упрощает реализацию общесистемных сервисов, таких как кеширование, логирование, или подключения к базам данных.

Какая разница между интерфейсами Runnable и Callable? Оба интерфейса используются для описания задач, которые можно выполнять в потоках. 🔹 Runnableэто интерфейс, предназначенный для выполнения задачи, которая ничего не возвращает и не выбрасывает проверяемых исключений. Метод run() не имеет возвращаемого значения:
public interface Runnable {
    void run();
}
🔹 Callableэто интерфейс, который используется для выполнения задачи, которая возвращает результат и может выбрасывать проверяемые исключения. Метод call() возвращает объект:
public interface Callable<V> {
    V call() throws Exception;
}