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

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
✔️ 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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥132👍2
Spring — это хорошо, но AI — это будущее

Многие Java-разработчики хотят в ML, но спотыкаются о математику. Мы убираем этот барьер. Обновленный курс с живыми вебинарами поможет разобраться в основах.

Ваш план действий:

1. Понять базу: Векторы, матрицы, определители (лекция 2).

2. Построить модель: Линейная регрессия и МНК (лекция 3).

3. Углубиться: SVD-разложение и рекомендательные системы (лекция 4).

Практика на Python (это стандарт индустрии), но понимание алгоритмов останется с вами навсегда, на чем бы вы ни писали.

⚠️ Осталось 3 дня до закрытия набора.

Присоединиться:
https://clc.to/LojFzw
😁5🥱3
Может ли интерфейс быть final?



Конечно может! Более того, в Java 21 появился секретный модификатор ultra-final, после которого IDE будет ругаться на него еще до компиляции!

✔️

Интерфейс не может быть объявлен как final. Это противоречит самой природе интерфейсов — они созданы для того, чтобы их реализовывали другие классы. Модификатор final запрещает наследование/реализацию, что делает интерфейс бесполезным.

Интерфейсы по умолчанию являются abstract, что концептуально противоположно final.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
😁13👍4🔥2
Что такое false sharing в многопоточности Java и как его избежать?

False sharing возникает, когда разные потоки обновляют разные переменные, находящиеся в одной кэш-линии CPU.
Несмотря на отсутствие логической связи, процессор вынужден постоянно инвалидировать кэш, создавая задержки.


Последствия: высокая латентность, падение пропускной способности, резкое ухудшение производительности в hot-paths.

Как избежать:

Разнести горячие поля по разным кэш-линиям → использовать @Contended (JDK 8+, требует -XX:-RestrictContended).
Заполнять структуру “паддингом” вручную.
Перепроектировать алгоритм, чтобы снизить частоту записи.

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

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3🔥1
Почему String неизменяемый (immutable)?



Потому что StringBuilder — это String для продакшена, а String — только для учебы!

✔️

Основные причины:

1️⃣ String Pool — переиспользование объектов экономит память

2️⃣ Безопасность — используется в критичных местах

3️⃣ Потокобезопасность — можно свободно шарить между потоками без синхронизации

4️⃣ Хеш-код кешируется — ускоряет работу HashMap/HashSet

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5😁4🔥1
✔️ 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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍21