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

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Что такое 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🔥42👏1
Что такое микросервисы?

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

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

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

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

#patterns #лучшее2025
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥2👏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🔥2👏1
Что такое JIT-компилятор?

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

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

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍132🔥1
Как и где Spring ищет бины?

Spring ищет бины с помощью сканирования классов в указанных пакетах, используя аннотации (@Component, @Service, @Repository, @Controller и кастомные с @Component внутри).

Сканирование начинается с пакета, переданного в @ComponentScan или (по умолчанию) из того, где находится @SpringBootApplication (которая включает @ComponentScan).

Если бин не помечен аннотацией, его можно зарегистрировать вручную через @Bean в @Configuration-классе, BeanDefinitionRegistry или XML-конфиг.

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

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥4👏1
В чём разница между Comparable и Comparator?

Comparable — это интерфейс для естественной сортировки объекта. Реализуется самим классом через метод compareTo(). Определяет одну стандартную логику сравнения.

Comparator — это внешний интерфейс для кастомной сортировки. Можно создать множество разных компараторов для одного класса, не меняя его код.

Comparable используется, когда есть очевидный способ сортировки (например, числа по возрастанию). Comparator — когда нужны разные варианты (по имени, по дате, по цене).

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥21
Что такое Happens-Before отношение?

Happens-Before — это гарантия видимости изменений между потоками в Java Memory Model.

Если действие A happens-before действия B, то все изменения памяти, сделанные в A, будут видны в B.

Примеры правил:
разблокировка монитора happens-before следующей блокировки того же монитора.
запись в volatile поле happens-before чтения из него.
завершение потока happens-before join() на этом потоке.

Это фундаментальная концепция для понимания многопоточности в Java.

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

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2👏1
«Этот манёвр будет стоить нам 51 год...»

— или проваленный тех-скрининг из-за незнания паттернов проектирования. В Java энтерпрайзе архитектура — это всё. Не ждите, пока гравитация рынка прижмёт вас к зарплатному потолку, вкачивайте базу.

С понедельника цены в Proglib Academy станут выше. Забирайте профессиональное обучение сейчас:

— Разработка ИИ-агентов
— Математика для разработки AI-моделей
— ML для старта в Data Science
— Математика для Data Science
— Специалист по ИИ
— Алгоритмы и структуры данных
— Программирование на Python
— Основы IT для непрограммистов
— Архитектуры и шаблоны проектирования

Стать сильнее на интервью

⚠️ Цены вырастут 19 января
Можно ли переопределить статический метод?

Нет, статические методы не переопределяются (override), они скрываются (hide).

При вызове статического метода решение о том, какой метод выполнить, принимается на этапе компиляции по типу ссылки, а не по типу объекта.

class Parent {
static void test() { System.out.println("Parent"); }
}
class Child extends Parent {
static void test() { System.out.println("Child"); }
}

Parent obj = new Child();
obj.test(); // Выведет "Parent"


Статические методы принадлежат классу, а не объекту, поэтому полиморфизм на них не работает.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥2👏1
В чём разница между CopyOnWriteArrayList и Collections.synchronizedList()?

CopyOnWriteArrayList создаёт копию массива при каждой модификации. Чтение не блокируется вообще, подходит для случаев, когда чтений много, а записей мало.

Collections.synchronizedList() оборачивает обычный List и синхронизирует каждый метод через монитор. Все операции (и чтение, и запись) блокируются.

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

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14👏2🔥1
Чем отличается invokeAll() от submit() в ExecutorService?

→ submit() отправляет одну задачу и сразу возвращает Future. Задача выполняется асинхронно.

→ invokeAll() принимает коллекцию задач и блокирует поток до завершения всех задач. Возвращает список Future только когда все задачи выполнены или вышел таймаут.

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

#concurrency
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1😁1
Что такое паттерн Flyweight и где он используется в Java?

Flyweight — это паттерн для экономии памяти путём переиспользования объектов с одинаковым состоянием.

Объект разделяется на intrinsic state (неизменяемое, общее) и extrinsic state (изменяемое, уникальное). Общее состояние хранится в одном экземпляре.

🔹 Примеры:

String Pool (все одинаковые строки ссылаются на один объект)
Integer.valueOf() кеширует числа от -128 до 127
Boolean.TRUE и Boolean.FALSE

Паттерн эффективен, когда создаётся много объектов с повторяющимися данными.

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

#patterns
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1🤔1
В чём разница между @Component, @Service и @Repository?

Технически — никакой. Все три создают Spring bean и работают одинаково.

Разница семантическая:
@Componentобщий стереотип для любого компонента.
@Serviceдля бизнес-логики (service layer).
@Repositoryдля работы с данными (DAO layer).

@Repository имеет дополнительную функцию: перехватывает специфичные для persistence исключения и переводит их в DataAccessException.

Использование правильной аннотации улучшает читаемость и показывает роль класса в архитектуре.

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

#spring
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍71👏1
Что делает метод flatMap() в Stream API?

flatMap() преобразует каждый элемент в Stream и объединяет все Stream'ы в один плоский Stream. В отличие от map() возвращает Stream<T>.

Полезен для работы с вложенными коллекциями или когда операция возвращает Optional/Stream.

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

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