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

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

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

Для обратной связи: @proglibrary_feeedback_bot
加入频道
💬 Обратная связь

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

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

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

String Pool — это специальная область памяти, предназначенная для хранения уникальных строковых литералов. Когда строка создается в программе, JVM сначала проверяет, существует ли уже такая строка в String Pool. Если существует, то возвращается ссылка на неё, иначе создается новый объект в пуле. Это позволяет экономить память, так как одинаковые строки используют один и тот же объект в памяти, а не создаются заново при каждом использовании.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое phantom reads в контексте работы с БД?

Ответ: Phantom reads — это явление, при котором транзакция читает данные, которые были добавлены или удалены другими транзакциями после начала выполнения её запроса.

В отличие от других аномалий, таких как dirty reads или non-repeatable reads, phantom reads возникают, когда результаты запроса изменяются в процессе его выполнения, например, при добавлении новых строк в таблицу, соответствующих условиям выборки.

Для предотвращения phantom reads используется уровень изоляции Serializable.

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

Функциональный интерфейс — это интерфейс с единственным абстрактным методом. Он нужен для определения целевого типа для лямбда-выражений и ссылок на методы. В Java для обозначения используется аннотация @FunctionalInterface, но она необязательна — это лишь гарантия на этапе компиляции.

Примеры: Runnable, Callable, Comparator, Function<T,R>.

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

Race condition (состояние гонки) — это ситуация, когда два или более потока или процесса одновременно пытаются получить доступ и изменить общий ресурс, и порядок их выполнения влияет на корректность программы. В результате, если доступ к ресурсу не синхронизирован, может возникнуть неконсистентное состояние, что приводит к ошибкам.

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

Как избежать:
Использование синхронизации, таких как блокировки (synchronized), атомарные операции или конструкции из библиотеки java.util.concurrent, может помочь избежать состояний гонки.

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

▪️ Абсолютный путь — это путь к файлу или каталогу от корневой директории файловой системы или диска. Он всегда однозначен и не зависит от текущего рабочего каталога программы.
▪️ Относительный путь — это путь к файлу или каталогу относительно текущего рабочего каталога. Он короче, но зависит от того, в какой директории запускается приложение.

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

В Stream API есть несколько основных категорий методов:

1. Создание потока:

stream() создаёт поток из коллекции.
of() создаёт поток из переданных элементов.
iterate() создаёт поток с элементами, вычисляемыми по определенному правилу.
generate() создаёт поток с элементами, генерируемыми функцией.

2. Промежуточные операции (возвращают новый поток):


map() преобразует элементы потока.
filter() фильтрует элементы потока.
distinct() удаляет дубликаты.
sorted() сортирует элементы.
peek() позволяет наблюдать за элементами в потоке.

3. Терминальные операции (возвращают результат, завершают поток):

collect() собирает элементы в коллекцию.
reduce() сводит элементы потока к одному значению.
forEach() выполняет действие для каждого элемента.
count() возвращает количество элементов.
anyMatch(), allMatch(), noneMatch() проверка условия для элементов.

4. Операции для работы с примитивными типами (IntStream, LongStream, DoubleStream):

mapToInt(), mapToLong(), mapToDouble() — преобразуют элементы в соответствующие типы.
sum(), average(), min(), max() — для статистики.

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

IO (Input/Output) — это традиционное блокирующее взаимодействие с вводом и выводом, где каждый запрос на чтение или запись блокирует поток до завершения операции. В IO используется модель потоков (Streams), и операции выполняются синхронно, что может привести к снижению производительности при работе с большим количеством соединений.

В свою очередь, NIO (New IO), введённый в Java 1.4, использует неблокирующий подход. Вместо потоков здесь используются каналы (Channels) и буферы (Buffers), а операции могут выполняться асинхронно. Это позволяет работать с несколькими каналами одновременно и эффективно использовать ресурсы при высоких нагрузках, так как операции не блокируют потоки. Также NIO поддерживает такие механизмы, как селекторы, которые позволяют обрабатывать несколько соединений с минимальными затратами времени.

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

Diamond Problem — это ситуация в ООП, когда класс наследуется от двух (или более) классов, которые имеют общий предок. Это приводит к неясности, какой из методов или свойств из общего предка должен быть использован в дочернем классе.

Например, класс D реализует интерфейсы B и C, которые оба наследуют от A. В случае наличия однотипных методов в B и C, возникает неясность, какой метод использовать.

Java не поддерживает множественное наследование классов, поэтому Diamond Problem возникает только в контексте интерфейсов. И решается путём явного переопределения реализации в дочернем классе.

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

Какие вопросы публиковать больше?

👍🏼 — Классика с собесов, чтобы точно набить руку на ближайший
🤔 — Вопросы, которые не встречаются в каждой статье вида "N вопросов для собеса"
🔥 — Больше практики, а то одна теория
Please open Telegram to view this post
VIEW IN TELEGRAM
Чем различаются Thread и Runnable в Java?

Thread — это класс, который представляет поток выполнения. Вы можете создать объект Thread, передав в его конструктор объект, реализующий интерфейс Runnable, или наследовать Thread и переопределить метод run().

Runnable — это интерфейс, который представляет задачу, которую можно выполнить в потоке. Он определяет единственный метод run(), который будет содержать код, выполняемый в потоке.

Thread является более "тяжелым" объектом, так как он сам управляет жизненным циклом потока, тогда как Runnable лишь описывает задачу, а поток (например, объект Thread) управляет её выполнением.

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

Propagation — это режимы управления транзакциями, которые определяют, как транзакции должны вести себя при вызове метода внутри другого метода, который уже находится в транзакции.

▪️ Основные режимы:

— REQUIRED (по умолчанию): если транзакция существует, то текущий метод будет работать в рамках этой транзакции. Если транзакция не существует, создается новая.

REQUIRES_NEW: создается новая транзакция, даже если уже существует текущая. Текущая транзакция будет приостановлена до завершения новой.

— NESTED: в рамках текущей транзакции создается вложенная транзакция. В случае отката внешней транзакции будет откатана и вложенная.

MANDATORY: метод должен быть вызван в рамках существующей транзакции. Если транзакции нет, выбрасывается исключение.

— NEVER: метод не должен выполняться в рамках транзакции. Если транзакция существует, выбрасывается исключение.

SUPPORTS: если транзакция существует, метод будет выполнен в ее рамках. Если транзакции нет, метод будет выполнен без транзакции.

— NOT_SUPPORTED: метод выполняется без транзакции. Если транзакция существует, она приостанавливается на время выполнения метода.

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