Библиотека собеса по Java | вопросы с собеседований
6.38K subscribers
358 photos
4 videos
198 links
Вопросы с собеседований по Java и ответы на них.

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

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

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
💬 Обратная связь

Ежемесячный опрос по грейдам. Проверим, стало ли среди нас больше милордов синьоров.
Ваш грейд:

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

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое JIT-компилятор?

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

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

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
В чём разница между IO и NIO?

🔹 IO (Input/Output)


Потоково-ориентированный подход (stream-oriented).
Блокирующий ввод-вывод (thread блокируется, пока операция не завершится).
Не поддерживает неблокирующие операции.
Нет встроенных средств буферизации, требует ручной реализации.
Подходит для простых задач, небольших файлов и данных.

🔹 NIO (New Input/Output)

Буферно-ориентированный подход (buffer-oriented).
Поддерживает неблокирующий ввод-вывод (non-blocking).
Позволяет работать с каналами (channels), буферами (buffers), селекторами (selectors).
Эффективен при работе с большим количеством одновременных подключений и крупными данными.
Производительность выше за счёт асинхронности и сокращения потоков.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
В чём разница между @Component, @Service и @Repository в Spring?

Все три аннотации делают класс Spring-бином, но различаются по семантике:

@Component: базовая аннотация, универсальный бин без конкретной роли.
@Service: указывает, что класс содержит бизнес-логику. Используется для читаемости и логической группировки.
@Repository: помечает DAO-слой (доступ к данным). Плюс Spring автоматически оборачивает методы в блок try-catch для DataAccessException.

⚠️ Разница не в функциональности, а в намерении разработчика. Spring их обрабатывает по-разному только для @Repository (например, при работе с базой данных).

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Чем отличается @RequestParam от @PathVariable?

▪️ @RequestParamизвлекает значение из query-параметров URL, например: /users?id=5
▪️ @PathVariableизвлекает из части пути, например: /users/5

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Как работает @Transactional и какие подводные камни?

@Transactional говорит Spring обернуть метод в транзакцию. Если всё прошло — делается commit, иначе rollback.

🔹 Особенности:

— Работает только при вызове метода извне, т.к. Spring создаёт прокси.
— Не откатывает по checked exceptions по умолчанию.
— Не работает на private и final методах.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
В чём разница между методами submit() и execute() в ExecutorService?

И submit(), и execute() используются для запуска задач в пуле потоков, но между ними есть важные отличия:

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

— submit(Runnable/Callable) также запускает задачу асинхронно, но возвращает объект типа Future. С помощью этого объекта можно получить результат задачи (future.get()), проверить статус её выполнения (future.isDone()), явно обработать исключение, если оно произошло во время выполнения задачи.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Можно ли переопределить статический метод?

Статические методы нельзя переопределить, они подвергаются скрытию (hiding). Если в подклассе объявлен статический метод с той же сигнатурой, что и в суперклассе, то метод из суперкласса не переопределяется, а скрывается.

Вызов скрытого метода зависит от типа ссылки, а не от типа реального объекта (полиморфизм не работает со статическими методами).

Это может привести к неожиданному поведению, так как разработчик может ошибочно рассчитывать на переопределение метода, а на самом деле будет вызван метод из класса ссылки, а не объекта.

⚠️ В целом, скрытие статических методов считается плохой практикой из-за того, что это усложняет понимание кода и может вызвать путаницу.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
💬 Обратная связь

Ваше мнение по контенту:

🔥 — Всё супер
👍🏼 — Нормально
😁 — Есть предложения по улучшению (в комменты)

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое лямбда?

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

Лямбда выражения появились в Java 8 и работают только с функциональными интерфейсами (интерфейсы с одним абстрактным методом).

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое Java Memory Model (JMM)?

Java Memory Model (JMM) — это набор правил и спецификаций, описывающих, как потоки в Java взаимодействуют друг с другом через общую память. JMM определяет, когда изменения, сделанные одним потоком, становятся видимыми другим потокам, и как обеспечить предсказуемость поведения многопоточных программ.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое функциональные интерфейсы?

Функциональный интерфейс — это интерфейс с единственным абстрактным методом. Он используется как целевой тип для лямбда-выражений и ссылок на методы. Обозначается аннотацией @FunctionalInterface, но это не обязательно — главное, чтобы был один абстрактный метод. Примеры: Runnable, Callable, Comparator, Function<T, R>.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
📦 Главные проблемы распределенных систем (и способы их решения)

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

➡️ В этой статье мы рассмотрим четыре ключевых вызова в разработке таких систем и эффективные методы их преодоления.

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
Что делает оператор default?

Оператор default используется в интерфейсах для объявления метода с реализацией по умолчанию. Это позволяет интерфейсам эволюционировать, не нарушая совместимость с уже существующими реализациями.

В switch-операторах default определяет блок кода, который выполняется, если не совпал ни один case.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
💼⌛️ ТОП-5 причин, почему программист не может долго найти работу

Почему некоторые разработчики остаются "между работами" месяцы?

Не всегда дело в нехватке вакансий или «рынок просел». Часто дело в подходе к поиску проекта. Вроде бы есть опыт, стек, даже pet-проекты, но офферов всё нет.

Часто корень проблемы — неумение продать себя правильно. Отказ выполнять тестовые задания, считая их ненужными или обидными. Кроме того, нежелание рассматривать стажировки как стартовую площадку для получения опыта и расширения профессиональных связей также может замедлить процесс трудоустройства. И это далеко не все возможные причины.

🔗 Подробнее в статье

🐸 Библиотека джависта
Please open Telegram to view this post
VIEW IN TELEGRAM
💬 Обратная связь

Какие темы в этом месяце использовать для постов чаще:

🔥 — Java core
👍🏼 — Spring
👾 — Паттерны
😁 — Напишу в комменты свой вариант

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Гарантирует ли ConcurrentHashMap видимость между потоками? Нужно ли дополнительно синхронизировать put() и get() для корректной работы?

ConcurrentHashMap уже обеспечивает необходимую памятную видимость (happens-before) между put() и get() — дополнительная синхронизация не нужна.

Если put() завершился до начала get(), то get() обязательно увидит вставленное значение. Это гарантируется внутренней реализацией: через volatile поля, CAS-операции и memory barriers.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Гарантирует ли ExecutorService корректное завершение всех задач, если вызвать shutdown()?

Нет, вызов shutdown() не гарантирует завершение всех задач. Это только инициирует процесс корректного завершения, но не блокирует выполнение текущих задач. После вызова shutdown():

— Уже выполняющиеся задачи продолжат работать.
— Новые задачи приниматься не будут.

Чтобы убедиться, что все задачи завершены, нужно дополнительно использовать метод awaitTermination(). Он блокирует выполнение потока до тех пор, пока все задачи не завершатся или пока не истечет тайм-аут.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое денормализация?

Денормализация — это процесс преднамеренного введения избыточных данных в базу данных для улучшения производительности.

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

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
☕️ Java-челлендж: 10 вопросов, которые заставят мозг кипеть

Уверены, что знаете Java на отлично? Проверьте себя на этих 10 каверзных вопросах, которые могут встретиться на собеседовании или просто сломать код.

Пройдите тест и узнайте, насколько знаете тонкости языка.

🔗 Пройти тест
Please open Telegram to view this post
VIEW IN TELEGRAM