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

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

Ir al canal en Telegram

Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/08c603b6 Для обратной связи: @proglibrary_feeedback_bot

Mostrar más
6 487
Suscriptores
+524 horas
+147 días
+1430 días
Archivo de publicaciones
Spring — это хорошо, но AI — это будущее Многие Java-разработчики хотят в ML, но спотыкаются о математику. Мы убираем этот ба
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 мог попасть любой, кто осилил пару туториалов. Теперь нужны те, кто может объяснить: → почему эта архитектура
🤖 Раньше в 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