en
Feedback

Don't get caught by a cheater! Telemetrio finds and tags such channels 👉 If you want to see the tag, subscribe

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

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

Open in Telegram

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

Show more
6 378
Subscribers
-324 hours
-237 days
-5530 days
Posts Archive
❓ Что такое Happens-Before отношение? Happens-Before — это гарантия видимости изменений между потоками в Java Memory Model. Если действие A happens-before действия B, то все изменения памяти, сделанные в A, будут видны в B. Примеры правил: — разблокировка монитора happens-before следующей блокировки того же монитора. — запись в volatile поле happens-before чтения из него. — завершение потока happens-before join() на этом потоке. Это фундаментальная концепция для понимания многопоточности в Java. 🐸 Библиотека собеса по Java #concurrency

❓ В чём разница между Comparable и Comparator? Comparable — это интерфейс для естественной сортировки объекта. Реализуется самим классом через метод compareTo(). Определяет одну стандартную логику сравнения. Comparator — это внешний интерфейс для кастомной сортировки. Можно создать множество разных компараторов для одного класса, не меняя его код. Comparable используется, когда есть очевидный способ сортировки (например, числа по возрастанию). Comparator — когда нужны разные варианты (по имени, по дате, по цене). 🐸 Библиотека собеса по Java #core

❓ Как и где Spring ищет бины? Spring ищет бины с помощью сканирования классов в указанных пакетах, используя аннотации (@Component, @Service, @Repository, @Controller и кастомные с @Component внутри). Сканирование начинается с пакета, переданного в @ComponentScan или (по умолчанию) из того, где находится @SpringBootApplication (которая включает @ComponentScan). Если бин не помечен аннотацией, его можно зарегистрировать вручную через @Bean в @Configuration-классе, BeanDefinitionRegistry или XML-конфиг. 🐸 Библиотека собеса по Java #spring

❓ Что такое JIT-компилятор? JIT (Just-In-Time) компилятор — это компонент JVM, который компилирует байт-код в машинный код непосредственно во время выполнения программы, а не до старта приложения. Его задача — улучшить производительность, оптимизируя код, исходя из реальных условий работы программы. JIT компилирует только те части кода, которые реально исполняются, и может применять различные оптимизации для ускорения работы приложения. Это позволяет сочетать гибкость интерпретируемого байт-кода и производительность нативного кода. 🐸 Библиотека собеса по Java #core

❓ Какие существуют состояния потока? Thread может находиться в одном из следующих состояний (Thread.State): 1️⃣ NEW — поток создан, но еще не запущен. 2️⃣ RUNNABLE — поток готов к выполнению, но может ожидать процессорное время. 3️⃣ BLOCKED — поток ждет освобождения монитора для входа в synchronized блок. 4️⃣ WAITING — поток ожидает сигнал без тайм-аута. 5️⃣ TIMED_WAITING — поток ожидает, но с ограничением по времени. 6️⃣ TERMINATED — поток завершил выполнение. 🐸 Библиотека собеса по Java #concurrency #лучшее2025

❓ Что такое микросервисы? Микросервисы — это архитектурный стиль, при котором приложение разбивается на небольшие, независимые сервисы. Каждый сервис отвечает за определённую бизнес-логику, имеет собственную базу данных (или логически обособленное хранилище) и взаимодействует с другими сервисами через API (обычно REST или gRPC). 🔹 Ключевые принципы — Можно обновлять и масштабировать отдельные сервисы без затрагивания всей системы. — Каждый сервис выполняет свою узкую задачу. — У сервиса свои изолированные данные, код и зависимости. — Сервисы общаются через HTTP, AMQP, Kafka и другие механизмы. 🐸 Библиотека собеса по Java #patterns #лучшее2025

❓ Что такое 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;
}
#patterns 🐸 Библиотека собеса по Java

💬 Обратная связь Первый опрос по грейдам в этом году. Ваш грейд: 🔥 — Senior 👍🏼 — Middle ❤️ — Junior 😁 — Ещё учусь 🐸 Библиотека собеса по Java

❓ Как бы вы оптимизировали запрос с JOIN? — Создание индексы на колонках, которые используются для соединений. Это ускорит поиск строк, особенно если соединяемые таблицы большие. — Если возможно, уменьшить размер данных, участвующих в соединении. Для этого можно использовать подзапросы или фильтровать данные до соединения. — Использование правильного типа JOIN. — EXPLAIN для анализа выполнения запроса и выявления узких мест. Это покажет, как именно СУБД обрабатывает запрос и на каких этапах происходят замедления. — Если запросы с JOIN используются часто, создать материализованные представления для хранения результатов, что снизит нагрузку на базу данных при повторных обращениях. — Рассмотреть варианты изменения структуры БД (например, денормализация). 🐸 Библиотека собеса по Java #core #лучшее2025

❓ Что такое авторизация и аутентификация? ▪️ Аутентификация — процесс проверки подлинности субъекта (пользователя или системы) на основе предоставленных им учетных данных (например, пары логин/пароль, сертификата или токена). Она подтверждает, что субъект является тем, за кого себя выдаёт. ▪️Авторизация — процесс определения прав и привилегий аутентифицированного субъекта в рамках определённой системы или ресурса. Она определяет, какие действия или ресурсы доступны субъекту после успешной аутентификации. Аутентификация устанавливает личность субъекта, а авторизация — его полномочия в системе. 🐸 Библиотека собеса по Java #core #лучшее2025

❓ Какие бывают гарантии доставки сообщений в 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

👀 Задача: Разработка высоконагруженного сервиса кеширования (middle+) В компании возникла необходимость повысить производите
+1
👀 Задача: Разработка высоконагруженного сервиса кеширования (middle+) В компании возникла необходимость повысить производительность системы за счёт внедрения распределённого кеша. Ваша задача — спроектировать и реализовать высоконагруженный сервис кеширования, обеспечивающий быструю и надёжную работу в условиях интенсивного использования. ▪️ Условия: 1. Высокая доступность: сервис должен быть устойчив к сбоям и обеспечивать непрерывную работу. 2. Масштабируемость: возможность горизонтального масштабирования для обработки увеличивающегося объёма данных. 3. Консистентность данных: обеспечение согласованности данных между узлами кеша. 4. Управление устареванием: реализация механизма автоматического удаления устаревших данных из кеша. 💡 Ключевые моменты: — Выбор технологии: определение подходящего решения для распределённого кеширования (например, Redis, Memcached или собственная реализация). — Репликация и шардирование: обеспечение надёжности и производительности через распределение данных и их дублирование. — Алгоритмы замещения: выбор и реализация стратегий удаления устаревших или редко используемых данных (например, LRU, LFU). ✔️ Решение: Использовать Redis в режиме кластеризации для обеспечения распределённого хранения данных. Настроить репликацию для повышения отказоустойчивости и реализовать механизм шардирования для равномерного распределения нагрузки. Применить алгоритм LRU (Least Recently Used) для автоматического удаления устаревших данных. Внедрить системы мониторинга (например, Prometheus) и логирования для оперативного отслеживания состояния кеша и быстрого реагирования на возможные проблемы. Реализация на картинке 👆🏻 #лучшее2025

🎄 С Новым Годом, будущие Java-разработчики! Пусть в новом году все собеседования заканчиваются офферами, вопросы по многопоточности больше не пугают, а разница между HashMap и ConcurrentHashMap будет понятна на автомате 🎁 Готовьтесь к собесам вместе с нами — впереди много полезного контента! 🔥 🐸 Библиотека собеса по Java

❓ Почему Spring по умолчанию создает бины как singleton? ❌ На самом деле это исторический баг! Изначально Spring создавал новый бин для каждого запроса, но один из разработчиков забыл добавить new в цикле, и все бины стали синглтонами. Теперь это называют 'фичей' для совместимости с легаси-кодом! 🎅 Праздничный факт: Если добавить @Scope("christmas"), Spring будет создавать новый бин только 31 декабря! Идеально для сезонных акций! 🎄 ✔️ Почему singleton — это дефолт: → Производительность: создание объекта — дорогая операция (выделение памяти, вызов конструктора, DI). Создавать бин на каждый запрос — огромные издержки. → Управление системными ресурсами: многие бины инкапсулируют ресурсы операционной системы или сети, которые дорого создавать и должны быть общими. → Естественная модель для stateless компонентов: 90%+ бизнес-логики в Spring — stateless операции. Создавать новый объект для каждого вызова бессмысленно. → Экономия ресурсов: один EntityManager, один RestTemplate, один connection pool → Кэширование: бин может безопасно кэшировать данные (если они read-only) → Простота жизненного цикла: @PostConstruct выполнится один раз 🐸 Библиотека собеса по Java @spring

WANTED: JAVA-ЭКСПЕРТ Разыскивается мастер JVM, способный разложить по полочкам всё: от Garbage Collector до тонкостей Spring.
WANTED: JAVA-ЭКСПЕРТ Разыскивается мастер JVM, способный разложить по полочкам всё: от Garbage Collector до тонкостей Spring. Хватит скрывать знания за корпоративными стенами. Приметы: — в совершенстве знает Java (знание Go или Python будет плюсом); — понимает, что на самом деле спрашивают на интервью в топовых компаниях; — обладает талантом объяснять сложные темы доступным языком; — готов качать своё медийное имя. Условия: — гонорар за подготовку материалов для собеседований; — статус лидера мнений в Java-сообществе; — методическая поддержка от команды Proglib Academy. Явка с повинной P.S. Знаешь Java-гуру, который засиделся в тени? Сдай его нам.

💬 Обратная связь Какие планы на новогодние праздники? 🎉 — Ем салатики и отдыхаю 🤔 — Какие праздники, буду работать ⚡️ — Буду учиться и писать пет проектики 😁 — Просто ответ, если ничего другого не подошло)) 🐸 Библиотека собеса по Java

❓ Как выбрать между монолитом, модульным монолитом и микросервисами при проектировании системы? Выбор зависит от нескольких факторов: размера команды, требований к масштабированию и сложности бизнес-логики. 🔹 Монолит подходит для MVP, стартапов и небольших команд. Все в одном приложении — проще разрабатывать, тестировать и деплоить. Минус — со временем становится сложно поддерживать из-за связанности компонентов. 🔹 Модульный монолит — это компромисс. Архитектура разбита на модули с четкими границами, но все еще в одном деплойменте. Отличный вариант, когда нужна структура микросервисов без их операционной сложности. Позволяет в будущем безболезненно выделить модули в отдельные сервисы. 🔹Микросервисы выбираем, когда есть реальная необходимость: разные части системы масштабируются по-разному, работают большие независимые команды, нужна изоляция отказов. Но это дорого — требуется инфраструктура для мониторинга, трейсинга, service discovery, обработки распределенных транзакций. #patterns 🐸 Библиотека собеса по Java

❓ Почему нельзя использовать ArrayList в многопоточной среде? ❌ Если два потока одновременно добавят элементы, они создадут ситуацию, где список существует в двух состояниях одновременно (квантовая суперпозиция данных). ✔️ ArrayList не thread-safe, потому что все операции не синхронизированы. При concurrent доступе возникают три основные проблемы: 1. Race condition при модификации. 2. ConcurrentModificationException. 3. Нарушение инвариантов (самое опасное). 🐸 Библиотека собеса по Java #concurrency

❓ Чем отличается процесс от потока? Процесс — это отдельная программа, выполняющаяся в своей выделенной области памяти. У каждого процесса есть собственное адресное пространство, и он изолирован от других процессов. Взаимодействие между процессами требует механизмов межпроцессного взаимодействия (IPC), таких как сокеты, каналы или общая память. Это делает процессы более независимыми, но обмен данными между ними — более сложным и ресурсозатратным. Поток — это "легковесная" единица выполнения, которая работает в рамках одного процесса и использует общую память этого процесса. В Java потоки одного процесса могут совместно использовать объекты и переменные, что значительно упрощает взаимодействие между ними по сравнению с процессами. Однако такая общая память влечет за собой риски, такие как состояния гонок и необходимость синхронизации, чтобы избежать конфликтов при одновременном доступе к ресурсам. 🐸 Библиотека собеса по Java #concurrency

💬 Обратная связь Какие вопросы публиковать больше? 👍🏼 — Классика с собесов, чтобы точно набить руку на ближайший 🤔 — Вопросы, которые не встречаются в каждой статье вида "N вопросов для собеса" 🔥 — Больше практики, а то одна теория 🐸 Библиотека собеса по Java