Библиотека собеса по Java | вопросы с собеседований – Telegram
Библиотека собеса по Java | вопросы с собеседований
6.37K subscribers
401 photos
9 videos
490 links
Вопросы с собеседований по Java и ответы на них.

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Почему Spring по умолчанию создает бины как singleton?



На самом деле это исторический баг! Изначально Spring создавал новый бин для каждого запроса, но один из разработчиков забыл добавить new в цикле, и все бины стали синглтонами. Теперь это называют фичей для совместимости с легаси-кодом! 🎅

Праздничный факт: Если добавить @Scope("christmas"), Spring будет создавать новый бин только 31 декабря! Идеально для сезонных акций! 🎄

✔️

Почему singleton — это дефолт:

→ Производительность: создание объекта — дорогая операция (выделение памяти, вызов конструктора, DI). Создавать бин на каждый запрос — огромные издержки.

→ Управление системными ресурсами: многие бины инкапсулируют ресурсы операционной системы или сети, которые дорого создавать и должны быть общими.

→ Естественная модель для stateless компонентов: 90%+ бизнес-логики в Spring — stateless операции. Создавать новый объект для каждого вызова бессмысленно.

→ Экономия ресурсов: один EntityManager, один RestTemplate, один connection pool

→ Кэширование: бин может безопасно кэшировать данные (если они read-only)

→ Простота жизненного цикла: @PostConstruct выполнится один раз

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

@spring
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9👍5🔥1
🎄 С Новым Годом, будущие Java-разработчики!

Пусть в новом году все собеседования заканчиваются офферами, вопросы по многопоточности больше не пугают, а разница между HashMap и ConcurrentHashMap будет понятна на автомате 🎁

Готовьтесь к собесам вместе с нами — впереди много полезного контента! 🔥

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥14🎉85
👀 Задача: Разработка высоконагруженного сервиса кеширования (middle+)

В компании возникла необходимость повысить производительность системы за счёт внедрения распределённого кеша.

Ваша задача — спроектировать и реализовать высоконагруженный сервис кеширования, обеспечивающий быструю и надёжную работу в условиях интенсивного использования.

▪️ Условия:

1. Высокая доступность: сервис должен быть устойчив к сбоям и обеспечивать непрерывную работу.
2. Масштабируемость: возможность горизонтального масштабирования для обработки увеличивающегося объёма данных.
3. Консистентность данных: обеспечение согласованности данных между узлами кеша.
4. Управление устареванием: реализация механизма автоматического удаления устаревших данных из кеша.

💡 Ключевые моменты:

— Выбор технологии: определение подходящего решения для распределённого кеширования (например, Redis, Memcached или собственная реализация).
— Репликация и шардирование: обеспечение надёжности и производительности через распределение данных и их дублирование.
— Алгоритмы замещения: выбор и реализация стратегий удаления устаревших или редко используемых данных (например, LRU, LFU).

✔️ Решение:

Использовать Redis в режиме кластеризации для обеспечения распределённого хранения данных. Настроить репликацию для повышения отказоустойчивости и реализовать механизм шардирования для равномерного распределения нагрузки.

Применить алгоритм LRU (Least Recently Used) для автоматического удаления устаревших данных. Внедрить системы мониторинга (например, Prometheus) и логирования для оперативного отслеживания состояния кеша и быстрого реагирования на возможные проблемы.


Реализация на картинке 👆🏻

#лучшее2025
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83👏2🔥1
Какие бывают гарантии доставки сообщений в 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 #лучшее2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥21👏1
Что такое авторизация и аутентификация?

▪️ Аутентификация — процесс проверки подлинности субъекта (пользователя или системы) на основе предоставленных им учетных данных (например, пары логин/пароль, сертификата или токена). Она подтверждает, что субъект является тем, за кого себя выдаёт.

▪️Авторизация — процесс определения прав и привилегий аутентифицированного субъекта в рамках определённой системы или ресурса. Она определяет, какие действия или ресурсы доступны субъекту после успешной аутентификации.

Аутентификация устанавливает личность субъекта, а авторизация — его полномочия в системе.

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

#core #лучшее2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13👏3🔥1
Как бы вы оптимизировали запрос с JOIN?

Создание индексы на колонках, которые используются для соединений. Это ускорит поиск строк, особенно если соединяемые таблицы большие.

Если возможно, уменьшить размер данных, участвующих в соединении. Для этого можно использовать подзапросы или фильтровать данные до соединения.

Использование правильного типа JOIN.

EXPLAIN для анализа выполнения запроса и выявления узких мест. Это покажет, как именно СУБД обрабатывает запрос и на каких этапах происходят замедления.

Если запросы с JOIN используются часто, создать материализованные представления для хранения результатов, что снизит нагрузку на базу данных при повторных обращениях.

Рассмотреть варианты изменения структуры БД (например, денормализация).

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

#core #лучшее2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥2👏1
💬 Обратная связь

Первый опрос по грейдам в этом году. Ваш грейд:

🔥 — Senior
👍🏼 — Middle
❤️ — Junior
😁 — Ещё учусь

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
👍36😁28🔥2416
Что такое Dependency Injection?

Dependency Injection (внедрение зависимостей) — это один из основных паттернов проектирования в программировании, который позволяет объектам получать свои зависимости извне, вместо того чтобы создавать их внутри себя.

DI способствует:

Слабой связанности между компонентами.
Легкости тестирования за счет использования mock-объектов.
Повторному использованию кода.

Основные способы внедрения зависимостей в Spring:

🔹 Constructor Injection

Зависимости передаются через конструктор.
public class Service {
private final Repository repository;

public Service(Repository repository) {
this.repository = repository;
}
}


🔹Setter Injection

Зависимости передаются через сеттеры.
public class Service {
private Repository repository;

public void setRepository(Repository repository) {
this.repository = repository;
}
}


🔹 Field Injection

Зависимости внедряются напрямую в поля класса (обычно с помощью фреймворков, например Spring).
@Component
public class Service {
@Autowired
private Repository repository;
}


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

#patterns #лучшее2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥31👏1
Что такое микросервисы?

Микросервисы — это архитектурный стиль, при котором приложение разбивается на небольшие, независимые сервисы. Каждый сервис отвечает за определённую бизнес-логику, имеет собственную базу данных (или логически обособленное хранилище) и взаимодействует с другими сервисами через API (обычно REST или gRPC).

🔹 Ключевые принципы

Можно обновлять и масштабировать отдельные сервисы без затрагивания всей системы.
Каждый сервис выполняет свою узкую задачу.
У сервиса свои изолированные данные, код и зависимости.
Сервисы общаются через HTTP, AMQP, Kafka и другие механизмы.

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

#patterns #лучшее2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥1👏1
Какие существуют состояния потока?

Thread может находиться в одном из следующих состояний (Thread.State):

1️⃣ NEW — поток создан, но еще не запущен.
2️⃣ RUNNABLE — поток готов к выполнению, но может ожидать процессорное время.
3️⃣ BLOCKED — поток ждет освобождения монитора для входа в synchronized блок.
4️⃣ WAITING — поток ожидает сигнал без тайм-аута.
5️⃣ TIMED_WAITING — поток ожидает, но с ограничением по времени.
6️⃣ TERMINATED — поток завершил выполнение.

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

#concurrency #лучшее2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥1👏1
Что такое JIT-компилятор?

JIT (Just-In-Time) компилятор — это компонент JVM, который компилирует байт-код в машинный код непосредственно во время выполнения программы, а не до старта приложения. Его задача — улучшить производительность, оптимизируя код, исходя из реальных условий работы программы.

JIT компилирует только те части кода, которые реально исполняются, и может применять различные оптимизации для ускорения работы приложения. Это позволяет сочетать гибкость интерпретируемого байт-кода и производительность нативного кода.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62🔥1