Библиотека собеса по Java | вопросы с собеседований
Kanalga Telegram’da o‘tish
Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/08c603b6 Для обратной связи: @proglibrary_feeedback_bot
Ko'proq ko'rsatish6 487
Obunachilar
+524 soatlar
+147 kunlar
+1430 kunlar
Postlar arxiv
Spring — это хорошо, но AI — это будущее
Многие Java-разработчики хотят в ML, но спотыкаются о математику. Мы убираем этот барьер. Обновленный курс с живыми вебинарами поможет разобраться в основах.
Ваш план действий:
1. Понять базу: Векторы, матрицы, определители (лекция 2).
2. Построить модель: Линейная регрессия и МНК (лекция 3).
3. Углубиться: SVD-разложение и рекомендательные системы (лекция 4).
Практика на Python (это стандарт индустрии), но понимание алгоритмов останется с вами навсегда, на чем бы вы ни писали.
⚠️ Осталось 3 дня до закрытия набора.
Присоединиться:
https://clc.to/LojFzw
✔️ Security-тест: Настройка Spring Security конфига
Напишите конфигурацию для production-приложения 👇
📦 Задание
Есть REST API с эндпоинтами:
/api/public/** — публичные данные
/api/user/** — данные пользователя
/api/admin/** — админ-панель
/actuator/health — health check
/actuator/** — остальные actuator endpoints
Настройте SecurityFilterChain с правильными правами доступа и защитой от основных атак.
📋 Требования
— Доступы
/api/public/** — доступ всем (включая неавторизованных)
/api/user/** — только авторизованным с ролью USER или ADMIN
/api/admin/** — только ADMIN
/actuator/health — доступ всем
/actuator/** — только ADMIN
— Безопасность
→ Включить защиту от CSRF для state-changing операций
→ Настроить CORS: разрешить запросы только с https://example.com
→ Добавить security headers (XSS, clickjacking protection)
→ Использовать stateless сессии (JWT/token-based)
→ Настроить обработку ошибок 401/403
Ставьте → 🔥, если нравится формат. Если нет → 🤔
💬 Пишите решение в комментариях, главное прячьте под спойлер.
🐸 Библиотека собеса по Java
#practise💬 Обратная связь
Ежемесячный опрос по грейдам. Растём вместе 💪🏻
Ваш грейд:
🔥 — Senior
👍🏼 — Middle
❤️ — Junior
😁 — Ещё учусь
🐸 Библиотека собеса по Java
❓ В чём разница между throw и throws?
❌
→ throw — это когда один разработчик бросает исключение в другого
→ throws — это когда вся команда бросает код в прод без ревью.
Ключевое: чем больше 's' в конце, тем больше народу пострадает.
✔️
→ throw — это оператор, который непосредственно выбрасывает исключение в коде:
throw new IllegalArgumentException("Ошибка");
→ throws — это ключевое слово в сигнатуре метода, которое декларирует, что метод может выбросить исключение (перекладывает обработку на вызывающий код):
public void readFile() throws IOException {
// код
}
💬 Добавим немного юмора?
😁 → Да
🔥 → Нет
🐸 Библиотека собеса по Java
#core❓ В чём основное отличие Docker от виртуальной машины?
Основное отличие в уровне виртуализации.
Виртуальная машина виртуализирует железо целиком: у неё есть собственная ОС со всеми компонентами, гипервизор, ядро. Это тяжеловесно — VM может весить гигабайты и стартовать минутами.
Docker виртуализирует только уровень приложения. Контейнеры используют ядро хостовой ОС, изолируясь через namespaces и cgroups. Они легковесны — образ может весить десятки мегабайт, запускается за секунды.
🔹 На практике это означает
— Docker быстрее и экономнее по ресурсам.
— VM даёт полную изоляцию и может запускать разные ОС на одном хосте.
— Для микросервисов обычно выбирают Docker, для полной изоляции окружений — VM.
🐸 Библиотека собеса по Java
#core
❓ Расскажите о паттерне Flyweight
Flyweight — это структурный паттерн, который позволяет вместить большее количество объектов в отведённую оперативную память за счёт разделения общего состояния между объектами.
Простыми словами: вместо создания тысяч похожих объектов, вы создаёте несколько объектов-легковесов с общими данными и передаёте уникальные данные извне при использовании.
▪️ Пример
Текстовый редактор, где каждая буква — это объект. Если создавать отдельный объект для каждой буквы с полным набором свойств (шрифт, размер, цвет), миллион символов займут гигабайты памяти.
// Flyweight — легковес с общим состоянием class CharacterStyle { private final String font; // внутреннее состояние private final int size; // (intrinsic) private final String color; public CharacterStyle(String font, int size, String color) { this.font = font; this.size = size; this.color = color; } public void render(char character, int x, int y) { // внешнее состояние System.out.println("Рендер '" + character + "' в позиции (" + x + "," + y + ")"); } } // Фабрика для переиспользования flyweight-объектов class StyleFactory { private Map<String, CharacterStyle> styles = new HashMap<>(); public CharacterStyle getStyle(String font, int size, String color) { String key = font + size + color; return styles.computeIfAbsent(key, k -> new CharacterStyle(font, size, color)); } } // Использование StyleFactory factory = new StyleFactory(); // Миллион символов используют всего несколько объектов стилей CharacterStyle arial12 = factory.getStyle("Arial", 12, "black"); arial12.render('H', 0, 0); arial12.render('e', 10, 0); arial12.render('l', 20, 0); arial12.render('l', 30, 0); arial12.render('o', 40, 0);▪️ Когда использовать — Приложение создаёт огромное количество однотипных объектов — Объекты потребляют много памяти — Большую часть состояния можно вынести за пределы объекта — Приложение не зависит от идентичности объектов (можно переиспользовать) ▪️ Минусы — Усложнение кода из-за разделения состояния — Flyweight должен быть immutable для безопасного переиспользования 🐸 Библиотека собеса по Java #patterns
✔️ SQL-тест: Поиск дубликатов транзакций
Напишите запрос для production-базы 👇
📦 Задание
Есть таблица transactions с полями:
id — идентификатор
user_id — ID пользователя
amount — сумма транзакции
created_at — время создания
Найдите подозрительные дубликаты: транзакции одного пользователя с одинаковой суммой, созданные в течение 5 минут друг от друга.
📋 Требования
— Вывести: user_id, amount, количество дублей, временной диапазон
— Показать только группы с 2+ транзакциями
— Отсортировать по количеству дублей (DESC)
Ставьте → 🔥, если нравится формат. Если нет → 🤔
💬 Пишите решение в комментариях, главное прячьте под спойлер.
🐸 Библиотека собеса по Java
#practise
🤖 Раньше в AI мог попасть любой, кто осилил пару туториалов.
Теперь нужны те, кто может объяснить:
→ почему эта архитектура сработает, а та — нет;
→ что происходит внутри модели, когда она не сходится;
→ как найти решение, а не перебирать гиперпараметры наугад.
Все эти навыки требуют понимания того, как и почему работают модели. А это чистая математика.
🔥 Proglib Academy запускает курс «Математика для разработки AI-моделей». Ведут эксперты из SberAI, ВШЭ, Т-Банк, Wildberries.
📝 Что внутри?
→ 2 месяца живых занятий с возможностью задавать вопросы напрямую.
→ Практика на Python. Не теория в вакууме, а применение.
→ 3 домашних задания + финальный проект с детальным разбором.
⏰ Старт 4 декабря
⌛ Только до конца ноября:
→ Скидка 40%;
→ Курс «Школьная математика» в подарок;
→ Тест на определение уровня математики.
🎄 Сделай себе подарок на Новый год
❓ Расскажите о паттерне 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
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
