es
Feedback

¡No caigas en manos de tramposos! Telemetrio encuentra y marca estos canales 👉 Si quieres ver la etiqueta, suscríbete

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

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

Ir al canal en Telegram

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

Mostrar más
6 378
Suscriptores
-324 horas
-237 días
-5530 días
Archivo de publicaciones
❓ Расскажите о паттерне 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

❓ Расскажите о паттерне 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

💬 Обратная связь Моё отношение к постам: 🔥 — Интересно, полезно 🤔 — Нейтрально 😁 — Не понравилось, напишу что 🐸 Библиотека собеса по Java

❓ Расскажите о паттерне Factory Method Factory Method — порождающий паттерн, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов. 🔹 Когда использовать: Когда заранее неизвестны типы и зависимости объектов, или когда нужно делегировать создание объектов подклассам. 🔹 Как работает: Создается абстрактный метод для создания объектов, а конкретные подклассы переопределяют его, возвращая нужные типы. 🔹 Плюсы: — избавляет от привязки к конкретным классам; — упрощает добавление новых типов продуктов; — следует Open/Closed Principle. 🐸 Библиотека собеса по Java #core

❓ Расскажите о паттерне Adapter Adapter (Адаптер) — это структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе. Он выступает в роли "переходника" между двумя интерфейсами. 🔹 Когда использовать: Когда нужно использовать существующий класс, но его интерфейс не соответствует требуемому. Например, при интеграции сторонних библиотек или работе с легаси-кодом. 🐸 Библиотека собеса по Java #core

❓ Расскажите про паттерн Singleton? Singleton — это порождающий паттерн проектирования, который гарантирует, что у класса существует только один экземпляр, и предоставляет глобальную точку доступа к нему. 🔹 Основные характеристики: — приватный конструктор запрещает создание экземпляров извне; — статический метод getInstance() возвращает единственный экземпляр; — статическое поле для хранения экземпляра. 🔹 Когда использовать: — объект содержит глобальное состояние; — создание объекта ресурсозатратно; — нужен единый координатор действий; — логически должен быть один экземпляр. 🐸 Библиотека собеса по Java #core

🔥 Закрой пробелы в математике за 8 недель Валишься на вопросах про математику на собесах? Proglib Academy запускает курс «Математика для Data Science», чтобы помочь тебе получить вакансию мечты! 🔎 Тебя ждут: → топовые эксперты, один из них на видео — Мария Тихонова. Мария — кандидат компьютерных наук, руководитель исследовательского направления SberAI, доцент факультета компьютерных наук и преподаватель НИУ ВШЭ; → живые вебинары, на которых можно задать вопросы спикерам; → доступ к материалам в записи, если не успели на лекцию и чат; → 3 задания с практикой на Python и финальный проект с подробной обратной связью от экспертов курса; → актуальные знания: программа разработана в ноябре 2025г; → программа без воды — 2 месяца только самого нужного для старта. 👉 Пройди короткий тест и узнай свой уровень математики. Приятные бонусы: 🎁 скидка 40% до 30 ноября; 🎁 оплати до конца ноября → курс «Школьная математика» в подарок. 🔗 Подробнее о курсе

❓ Расскажите про паттерн Strategy? Strategy — это поведенческий паттерн, который позволяет определить семейство алгоритмов, инкапсулировать каждый из них и сделать их взаимозаменяемыми. Когда использовать: — есть несколько способов выполнения одной операции; — нужно избежать множественных if-else или switch; — алгоритмы должны выбираться в runtime. Преимущества: соблюдение Open/Closed Principle, устранение условных операторов, гибкость выбора алгоритма. 🐸 Библиотека собеса по Java #core

❓ Гарантирует ли ExecutorService корректное завершение всех задач, если вызвать shutdown()? Нет, shutdown() не гарантирует корректное завершение всех задач. 🔹 shutdown() делает следующее: — запрещает принимать новые задачи; — позволяет завершиться уже запущенным и ожидающим задачам; — возвращает управление сразу же, не дожидаясь завершения. 🐸 Библиотека собеса по Java #concurrency

✔️ Java-тест: Config edition Представим задачу 👇 У вас есть Spring Boot-приложение с PostgreSQL. Нужно написать конфиг application.yml, который: — настраивает подключение к БД (host: localhost, port: 5432, database: app_db); — включает Hibernate DDL auto-update в dev-режиме; — настраивает логирование SQL-запросов; — устанавливает максимальный размер пула соединений = 10. 💬 Решения под спойлер. Сравним, какое будет лучше. 🐸 Библиотека собеса по Java #practise

❓ В чём разница между @Transactional на уровне класса и на уровне метода? @Transactional на классе задаёт поведение по умолчанию для всех его публичных методов. Аннотация на методе переопределяет настройки класса и всегда имеет более высокий приоритет. 🐸 Библиотека собеса по Java #spring

💬 Обратная связь Ежемесячный опрос по грейдам. Растём вместе 💪🏻 Ваш грейд: 🔥 — Senior 👍🏼 — Middle ❤️ — Junior 😁 — Ещё учусь 🐸 Библиотека собеса по Java

❓ Что такое Spring Profiles и зачем они нужны? Spring Profiles — это механизм в Spring, который позволяет разделять конфигурации приложения по окружениям. Например: dev, test, prod. С их помощью можно активировать нужные бины и настройки в зависимости от среды, не меняя код. Типичный пример — разные параметры подключения к БД или API-ключи. Профиль можно указать: — в application.properties (spring.profiles.active=dev); — через аргументы JVM (-Dspring.profiles.active=prod); — или переменные окружения. Это обеспечивает чистое разделение конфигураций и снижает риск ошибок при деплое. 🐸 Библиотека собеса по Java #spring

❓ Какие бывают гарантии доставки сообщений в Kafka? В Kafka существует три уровня гарантий доставки сообщений: 1️⃣ At most once (максимум один раз) Сообщение может быть потеряно, но никогда не будет обработано дважды. Producer отправляет сообщение и не ждет подтверждения (acks=0). Самый быстрый, но ненадежный вариант. 2️⃣ At least once (минимум один раз) Сообщение гарантированно доставлено, но может быть обработано несколько раз. Producer ждет подтверждения от лидера (acks=1) или всех реплик (acks=all). При повторной отправке возможны дубликаты. Используется чаще всего. 3️⃣ Exactly once (ровно один раз) Сообщение доставляется и обрабатывается строго один раз. Достигается через idempotent producer (enable.idempotence=true) и транзакции. Самый надежный, но с небольшим оверхедом по производительности. Выбор зависит от задачи: для логов подойдет at most once, для финансовых операций — exactly once, для большинства случаев — at least once с идемпотентной обработкой. 🐸 Библиотека собеса по Java #core

🖤 ЧЕРНАЯ ПЯТНИЦА: СКИДКА 40% Что общего между Black Friday и подготовкой к собесам? Оба случаются раз в год, и оба нельзя пр
🖤 ЧЕРНАЯ ПЯТНИЦА: СКИДКА 40% Что общего между Black Friday и подготовкой к собесам? Оба случаются раз в год, и оба нельзя пропустить! 😎 🔥 Курсы со скидкой 40% до конца ноября: 🐍 Python 📐 Математика 🤖 AI 🔢 Алгоритмы и структуры Пока другие покупают кофемашины и телевизоры, инвестируй в себя📈

❓ Что такое статическое и динамическое связывание? 🔹 Статическое связывание (или раннее связывание) — это связывание метода с его вызовом на этапе компиляции. Используется для: — static методов; — private методов; — final методов; — перегруженных методов (overloading). Решение принимается на основе типа ссылки. 🔹 Динамическое связывание (или позднее связывание) — это связывание метода с его вызовом во время выполнения программы (runtime). Используется для: — переопределенных методов (overriding); — реализации полиморфизма. Решение принимается на основе фактического типа объекта. 🐸 Библиотека собеса по Java #core

✔️ Java-тест: Безопасное извлечение значений из Map Напишите метод для production-кода 👇 📦 Задание Реализуйте метод для безопасного получения значения из вложенной Map с default-значением:
public class MapUtils {
    
    public static <T> T getNestedValue(Map<String, Object> map, 
                                        String path, 
                                        T defaultValue) {
        // Ваша реализация
    }
}
Требования — Путь задается через точку: "user.address.city" — Если любой уровень вложенности null или отсутствует → вернуть defaultValue — Обработать пустой путь → вернуть defaultValue — Обработать null в параметрах → вернуть defaultValue Примеры использования
Map<String, Object> data = Map.of( "user", Map.of( "name", "John", "age", 30, "address", Map.of( "city", "Moscow" ) ) ); String city = getNestedValue(data, "user.address.city", "Unknown"); // → "Moscow" Integer age = getNestedValue(data, "user.age", 0); // → 30 String country = getNestedValue(data, "user.address.country", "Russia"); // → "Russia" (не найдено)
Ставьте → 🔥, если нравится формат. Если нет → 🤔 💬 Решения под спойлер. Сравним, какое будет лучше. 🐸 Библиотека собеса по Java #practise

❓ Что такое нагрузочное тестирование? Нагрузочное тестирование — это проверка поведения системы под различными уровнями нагрузки. Цель — понять, как приложение работает при большом количестве одновременных пользователей или запросов. Обычно проверяем: — время отклика при росте нагрузки — максимальное количество пользователей, которое система выдерживает — точку деградации производительности — стабильность при длительной работе Используем инструменты типа JMeter, Gatling или K6. 🐸 Библиотека собеса по Java #tests

💬 Обратная связь Хештег с темой вопроса: 🔥 — Супер, удобно 😁 — Неудобно, верните как было 🐸 Библиотека собеса по Java

❓ Почему метод с @Transactional, вызванный из другого метода того же класса, не открывает транзакцию? Spring использует proxy-объекты для обработки @Transactional. Когда вы вызываете метод извне класса, вызов идет через proxy, который оборачивает метод в транзакцию. Но при вызове метода внутри того же класса (this.method()), вы обращаетесь напрямую к реальному объекту, минуя proxy. 🐸 Библиотека собеса по Java #spring