uz
Feedback

Firibgarlarga uchmang! Telemetrio bunday kanallarni topadi va belgilaydi 👉 Belgini ko‘rmoqchi bo‘lsangiz, obuna bo‘ling

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

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

Kanalga Telegram’da o‘tish

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

Ko'proq ko'rsatish
6 378
Obunachilar
-324 soatlar
-237 kun
-5530 kun
Postlar arxiv
✔️ Collections Challenge: Реализация Custom HashMap Напишите упрощённую версию HashMap с нуля 👇 📦 Задание Реализуйте SimpleHashMap<K, V> — собственную реализацию хеш-таблицы без использования готовых Map. 📋 Требования 1. Основная функциональность → put() — добавить/обновить пару ключ-значение → get() — получить значение по ключу (null если нет) → remove() — удалить элемент, вернуть старое значение → containsKey() — проверка наличия ключа → size() — текущее количество элементов → keySet() — множество всех ключей 2. Внутренняя структура → Использовать массив buckets (корзин) → Collision resolution через связный список (chaining) → Начальная ёмкость — 16 элементов → Load factor — 0.75 3. Обязательные фичи → Автоматическое расширение (resize) при превышении load factor → Корректная работа с null ключами → Правильный расчёт hashCode (учитывать equals/hashCode contract) → Обработка коллизий Ставьте → 🔥, если нравится формат. Если нет → 🤔 💬 Пишите решение в комментариях, главное прячьте под спойлер. 🐸 Библиотека собеса по Java #practise

❓ Где лучше хранить пароль: в строке или в массиве символов? Пароль лучше хранить в массиве символов. — Строки в Java неизменяемы, и их нельзя явно удалить из памяти. Они остаются там до сборки мусора, что может привести к утечке пароля. — Массив можно очистить вручную после использования (путём перезаписи значения), что даёт больший контроль над временем хранения данных. 🐸 Библиотека собеса по Java #core

❓ В чем разница между fail-fast и fail-safe итераторами? ❌ Fail-fast итераторы — это те, которые быстро падают при первой же ошибке, потому что написаны на скорострельном C++. А fail-safe итераторы работают медленно, зато безопасно, потому что каждый элемент проверяется антивирусом перед возвратом. ✔️ 🔹 Fail-fast итераторы: → Бросают ConcurrentModificationException при структурном изменении коллекции во время итерации. → Проверяют modCount (счетчик модификаций) при каждом вызове next(). → Используются в большинстве коллекций из java.util (ArrayList, HashMap, HashSet). → Работают на оригинальной коллекции. 🔹 Fail-safe итераторы: → Работают на копии/снимке коллекции, поэтому не бросают исключений. → Используются в java.util.concurrent коллекциях (CopyOnWriteArrayList, ConcurrentHashMap). → Могут не отражать актуальное состояние коллекции (weakly consistent). → Потребляют больше памяти из-за копирования. 🐸 Библиотека собеса по Java #core

❓ Почему нельзя использовать LocalDateTime для работы с временными метками в распределенных системах? ❌ Потому что LocalDateTime — это местное время, а в распределенных системах все серверы находятся в разных городах! Если один сервер в Москве показывает 15:00, а другой в Владивостоке — 22:00, то база данных не знает, как решить противоречия. ✔️ LocalDateTime не хранит информацию о часовом поясе и смещении относительно UTC, что делает его непригодным для распределенных систем 🐸 Библиотека собеса по Java #core

❓ Для чего нужна HashMap? ❌ HashMap нужна исключительно для того, чтобы было что спросить на собеседовании. Без неё интервьюеры бы не знали, как отсеивать кандидатов. ✔️ HashMap — это реализация структуры данных hash table, которая обеспечивает быстрый доступ, вставку и удаление элементов по ключу в среднем за O(1). Основные сценарии использования: 1️⃣ Кеширование и мемоизация — когда нужен быстрый доступ к часто используемым данным. 2️⃣ Подсчет частоты элементов — классическая задача с O(n) сложностью. 3️⃣ Индексация для быстрого поиска — когда нужно избежать линейного перебора. 🐸 Библиотека собеса по Java #core

Spring — это не вся Java На собеседованиях любят гонять по «кишкам» языка, конкурентности и алгоритмам. Если ты знаешь только
Spring — это не вся Java На собеседованиях любят гонять по «кишкам» языка, конкурентности и алгоритмам. Если ты знаешь только фреймворк, шаг влево-вправо грозит провалом. Новогодняя акция 1 + 2: Покупаешь один курс, получаешь три. Оплачивается только позиция с максимальным чеком. Java-набор: — Алгоритмы и структуры данных (база Enterprise); — Архитектуры и шаблоны проектирования. Подготовиться к офферу Актуально до 31 декабря. Нужен совет? @manager_proglib

💬 Обратная связь Добавили немного юмора к постам. Мнение: 😁 — Забавно, пусть будет 👍🏼 — Нейтрально 🤔 — Неудобно, только отвлекает от сути 🐸 Библиотека собеса по Java

✔️ Concurrency-тест: Реализация Thread-Safe Cache Напишите потокобезопасный кеш с TTL и размером 👇 📦 Задание Реализуйте ExpiringCache<K, V> — thread-safe кеш с автоматическим удалением устаревших записей.
public class ExpiringCache<K, V> {
    public void put(K key, V value, Duration ttl) { }
    public Optional<V> get(K key) { }
    public void remove(K key) { }
    public int size() { }
}
📋 Требования 1. Функциональность put() — добавить элемент с TTL (time-to-live) get() — получить элемент, вернуть Optional.empty() если истёк remove() — удалить элемент size() — количество валидных (не истёкших) элементов 2. Потокобезопасность → Все операции должны быть thread-safe → Минимизировать блокировки (не использовать synchronized на весь объект) → Одновременное чтение не должно блокироваться — Производительность → get() должен быть O(1) в среднем случае → Автоматическая очистка истёкших записей (passive + active eviction) → Не создавать отдельный поток для каждого элемента 3. Ограничения → Максимальный размер кеша — 1000 элементов → При превышении удалять самые старые записи (LRU) → Graceful shutdown при закрытии кеша Бонус: Добавить метрики (cache hits/misses) Ставьте → 🔥, если нравится формат. Если нет → 🤔 💬 Пишите решение в комментариях, главное прячьте под спойлер. 🐸 Библиотека собеса по Java #practise

❓ Почему String неизменяемый (immutable)? ❌ Потому что StringBuilder — это String для продакшена, а String — только для учебы! ✔️ Основные причины: 1️⃣ String Pool — переиспользование объектов экономит память 2️⃣ Безопасность — используется в критичных местах 3️⃣ Потокобезопасность — можно свободно шарить между потоками без синхронизации 4️⃣ Хеш-код кешируется — ускоряет работу HashMap/HashSet 🐸 Библиотека собеса по Java #core

❓ Что такое false sharing в многопоточности Java и как его избежать? False sharing возникает, когда разные потоки обновляют разные переменные, находящиеся в одной кэш-линии CPU. Несмотря на отсутствие логической связи, процессор вынужден постоянно инвалидировать кэш, создавая задержки. Последствия: высокая латентность, падение пропускной способности, резкое ухудшение производительности в hot-paths. Как избежать: • Разнести горячие поля по разным кэш-линиям → использовать @Contended (JDK 8+, требует -XX:-RestrictContended). • Заполнять структуру “паддингом” вручную. • Перепроектировать алгоритм, чтобы снизить частоту записи. 🐸 Библиотека собеса по Java #concurrency

❓ Может ли интерфейс быть final? ❌ Конечно может! Более того, в Java 21 появился секретный модификатор ultra-final, после которого IDE будет ругаться на него еще до компиляции! ✔️ Интерфейс не может быть объявлен как final. Это противоречит самой природе интерфейсов — они созданы для того, чтобы их реализовывали другие классы. Модификатор final запрещает наследование/реализацию, что делает интерфейс бесполезным. Интерфейсы по умолчанию являются abstract, что концептуально противоположно final. 🐸 Библиотека собеса по Java #core

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