Библиотека собеса по Java | вопросы с собеседований
6.35K subscribers
395 photos
9 videos
455 links
Вопросы с собеседований по Java и ответы на них.

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Что такое Spring Profiles и зачем они нужны?

Spring Profiles — это механизм в Spring, который позволяет разделять конфигурации приложения по окружениям. Например: dev, test, prod.

С их помощью можно активировать нужные бины и настройки в зависимости от среды, не меняя код.
Типичный пример — разные параметры подключения к БД или API-ключи.

Профиль можно указать:

в application.properties (spring.profiles.active=dev);
через аргументы JVM (-Dspring.profiles.active=prod);
или переменные окружения.

Это обеспечивает чистое разделение конфигураций и снижает риск ошибок при деплое.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥1
💬 Обратная связь

Ежемесячный опрос по грейдам. Растём вместе 💪🏻
Ваш грейд:

🔥 — Senior
👍🏼 — Middle
❤️ — Junior
😁 — Ещё учусь

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34😁27🔥2319
В чём разница между @Transactional на уровне класса и на уровне метода?

@Transactional на классе задаёт поведение по умолчанию для всех его публичных методов.

Аннотация на методе переопределяет настройки класса и всегда имеет более высокий приоритет.

🐸 Библиотека собеса по Java

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72🔥1
✔️ Java-тест: Config edition

Представим задачу 👇

У вас есть Spring Boot-приложение с PostgreSQL. Нужно написать конфиг application.yml, который:

— настраивает подключение к БД;
— включает Hibernate DDL auto-update в dev-режиме;
— настраивает логирование SQL-запросов;
— устанавливает максимальный размер пула соединений = 10.

💬 Решения под спойлер.

🐸 Библиотека собеса по Java

#practise
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🔥1👏1🤔1
Гарантирует ли ExecutorService корректное завершение всех задач, если вызвать shutdown()?

Нет, shutdown() не гарантирует корректное завершение всех задач.

🔹 shutdown() делает следующее:

запрещает принимать новые задачи;
позволяет завершиться уже запущенным и ожидающим задачам;
возвращает управление сразу же, не дожидаясь завершения.

🐸 Библиотека собеса по Java

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3👏1
Расскажите про паттерн Strategy?

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

Когда использовать:

есть несколько способов выполнения одной операции;
нужно избежать множественных if-else или switch;
алгоритмы должны выбираться в runtime.

Преимущества: соблюдение Open/Closed Principle, устранение условных операторов, гибкость выбора алгоритма.

🐸 Библиотека собеса по Java

#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🤩21🔥1💯1
Media is too big
VIEW IN TELEGRAM
🔥 Закрой пробелы в математике за 8 недель

Валишься на вопросах про математику на собесах?

Proglib Academy запускает курс «Математика для Data Science», чтобы помочь тебе получить вакансию мечты!

🔎 Тебя ждут:

→ топовые эксперты, один из них на видео — Мария Тихонова. Мария — кандидат компьютерных наук, руководитель исследовательского направления SberAI, доцент факультета компьютерных наук и преподаватель НИУ ВШЭ;
→ живые вебинары, на которых можно задать вопросы спикерам;
→ доступ к материалам в записи, если не успели на лекцию и чат;
→ 3 задания с практикой на Python и финальный проект с подробной обратной связью от экспертов курса;
→ актуальные знания: программа разработана в ноябре 2025г;
→ программа без воды — 2 месяца только самого нужного для старта.

👉 Пройди короткий тест и узнай свой уровень математики.

Приятные бонусы:

🎁 скидка 40% до 30 ноября;
🎁 оплати до конца ноября → курс «Школьная математика» в подарок.

🔗 Подробнее о курсе
Расскажите про паттерн Singleton?

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

🔹 Основные характеристики:

приватный конструктор запрещает создание экземпляров извне;
статический метод getInstance() возвращает единственный экземпляр;
статическое поле для хранения экземпляра.

🔹 Когда использовать:

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

🐸 Библиотека собеса по Java

#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2💯1
Расскажите о паттерне Adapter

Adapter (Адаптер) — это структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе. Он выступает в роли "переходника" между двумя интерфейсами.

🔹 Когда использовать:

Когда нужно использовать существующий класс, но его интерфейс не соответствует требуемому. Например, при интеграции сторонних библиотек или работе с легаси-кодом.

🐸 Библиотека собеса по Java

#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1👏1
Расскажите о паттерне Factory Method

Factory Method — порождающий паттерн, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.

🔹 Когда использовать:

Когда заранее неизвестны типы и зависимости объектов, или когда нужно делегировать создание объектов подклассам.

🔹 Как работает:

Создается абстрактный метод для создания объектов, а конкретные подклассы переопределяют его, возвращая нужные типы.

🔹 Плюсы:

избавляет от привязки к конкретным классам;
упрощает добавление новых типов продуктов;
следует Open/Closed Principle.

🐸 Библиотека собеса по Java

#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1👏1
💬 Обратная связь

Моё отношение к постам:

🔥 — Интересно, полезно
🤔 — Нейтрально
😁 — Не понравилось, напишу что

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥38🤔61
Расскажите о паттерне Abstract Factory

Abstract Factory — это порождающий паттерн, который создает семейства связанных объектов без привязки к конкретным классам.
Простыми словами: вы создаете не один объект, а целый набор совместимых между собой объектов.

▪️ Пример:

Система уведомлений, которая работает с разными провайдерами (AWS, Firebase). Для каждого провайдера нужны свои клиенты для отправки email, SMS и push-уведомлений.

// Абстрактные продукты
interface EmailSender {
void send(String to, String message);
}

interface SmsSender {
void send(String phone, String message);
}

// Абстрактная фабрика
interface NotificationFactory {
EmailSender createEmailSender();
SmsSender createSmsSender();
}

// AWS реализация
class AwsEmailSender implements EmailSender {
public void send(String to, String message) {
System.out.println("Отправка через AWS SES: " + to);
}
}

class AwsSmsSender implements SmsSender {
public void send(String phone, String message) {
System.out.println("Отправка через AWS SNS: " + phone);
}
}

class AwsNotificationFactory implements NotificationFactory {
public EmailSender createEmailSender() {
return new AwsEmailSender();
}

public SmsSender createSmsSender() {
return new AwsSmsSender();
}
}

// Аналогично FirebaseNotificationFactory...

// Использование
NotificationFactory factory = new AwsNotificationFactory();
EmailSender email = factory.createEmailSender();
SmsSender sms = factory.createSmsSender();
// Гарантия: оба сервиса работают через AWS


▪️ В чем отличие от Factory Method

— Factory Method создает один продукт
— Abstract Factory создает семейство продуктов (email + sms + push)

▪️ Когда использовать

Когда нужны наборы связанных объектов, которые должны работать вместе (клиенты для разных облаков, драйверы БД, парсеры форматов).

▪️ Минус

Сложно добавить новый тип продукта — придется менять все фабрики.

🐸 Библиотека собеса по Java

#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥32
Расскажите о паттерне Prototype

Prototype — это порождающий паттерн, который позволяет копировать объекты, не вдаваясь в подробности их реализации.

Простыми словами: вместо создания объекта с нуля через конструктор, вы клонируете уже существующий экземпляр.

▪️ Пример:

Система отчетов, где базовая конфигурация отчета сложная (подключение к БД, загрузка шаблонов, настройка форматирования). Вместо каждый раз создавать отчет заново, клонируем прототип.
// Прототип
abstract class Report implements Cloneable {
protected String template;
protected DatabaseConnection dbConnection;
protected Map<String, Object> settings;

// Сложная инициализация
public Report() {
this.dbConnection = new DatabaseConnection(); // затратная операция
this.settings = loadDefaultSettings(); // загрузка из файла
}

@Override
public Report clone() {
try {
Report cloned = (Report) super.clone();
// Глубокое копирование для изменяемых полей
cloned.settings = new HashMap<>(this.settings);
return cloned;
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}

abstract void generate();
}

class SalesReport extends Report {
void generate() {
System.out.println("Генерация отчета по продажам");
}
}

// Использование
Report prototype = new SalesReport(); // долгая инициализация

// Быстрое создание копий
Report report1 = prototype.clone();
Report report2 = prototype.clone();
report2.settings.put("period", "Q2"); // изменяем только нужные параметры


▪️ Когда использовать

Создание объекта затратно (сложная инициализация, обращение к БД, парсинг файлов)
Нужно избежать привязки к конкретным классам при создании копий
Объекты различаются только состоянием, а не поведением

▪️ Важно: Shallow vs Deep Copy

Shallow copy — копируются только примитивы, ссылки на объекты остаются теми же
Deep copy — создаются копии вложенных объектов

▪️ Альтернативы clone()

— Copy constructor: new Report(original)
— Статический метод: Report.copy(original)
— Сериализация: для очень сложных объектов

▪️ Минус

Клонирование объектов с циклическими ссылками может быть сложным.

🐸 Библиотека собеса по Java

#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1