Библиотека собеса по Java | вопросы с собеседований
6.34K subscribers
395 photos
8 videos
443 links
Вопросы с собеседований по Java и ответы на них.

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Для чего используется ключевое слово this?

this — это ссылка на текущий объект внутри его метода или конструктора. Оно нужно для:

Разрешения конфликта имён (например, между полем класса и параметром метода).
Вызова других конструкторов этого же класса.
Передачи текущего объекта в качестве аргумента в методы или конструкторы других классов.
Возврата ссылки на текущий объект (часто используется в паттерне Builder или для чейнинга методов).

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍113🔥1
Что такое маркерный интерфейс?

Маркерный интерфейс — это интерфейс, который не содержит методов, но служит для маркировки классов с определённой целью. Его использование позволяет указывать, что объект принадлежит к определённому типу или должен иметь особое поведение, не реализуя дополнительные методы.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🔥1
В чем разница между == и .equals() в Java?

== сравнивает ссылки на объекты (т.е. проверяет, указывают ли две переменные на один и тот же объект в памяти).

.equals() — это метод, предназначенный для сравнения содержимого объектов. По умолчанию в классе Object он работает как ==, но многие классы (например, String, Integer, List) переопределяют его, чтобы сравнивать значения. Также можно самостоятельно переопределить его.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍135🔥1
В чём разница между Lambdas и Anonymous Classes?

И лямбды, и анонимные классы позволяют создавать "одноразовые" реализации, но лямбды — это более короткий и функциональный способ записать код, реализующий функциональный интерфейс (т.е. интерфейс с одним абстрактным методом).

Ключевые отличия:

🧩 Синтаксис: лямбда короче и читабельнее.

⚡️ Производительность: лямбды компилируются как invoke-dynamic и не создают новый класс → меньше накладных расходов.

🧠 this: внутри лямбды this указывает на внешний объект, а в анонимном классе — на экземпляр самого анонимного класса.

🎯 Назначение: анонимные классы подходят, если нужно переопределить несколько методов или иметь состояние. Лямбды — только для одного метода.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥2👏1
Как работают лямбды?

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

При компиляции лямбда не создает отдельный класс, как раньше анонимные классы. Вместо этого компилятор использует механизм invokedynamic, добавленный в Java 8, чтобы создать ссылку на реализацию метода — функциональный объект формируется динамически во время выполнения.

Кратко:

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

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102🔥1
Как между собой связаны Iterable, Iterator и цикл for-each?

Iterable — это интерфейс с единственным методом iterator(), который возвращает объект Iterator. Любой класс, реализующий Iterable, может использоваться в цикле for-each.

Iterator — это интерфейс для последовательного обхода элементов коллекции. Содержит методы hasNext(), next() и remove().

Цикл for-each — это синтаксический сахар. Компилятор автоматически преобразует его в вызов iterator() и работу с Iterator.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥5👏1
Что такое GraphQL?

GraphQL — это язык запросов для API и среда выполнения этих запросов, разработанный Facebook.

🔹 Ключевые особенности:

В отличие от REST, клиент запрашивает ровно те данные, которые ему нужны, в одном запросе. Это решает проблемы over-fetching (получение лишних данных) и under-fetching (когда нужно делать несколько запросов).

✔️ Плюсы

Гибкость на клиенте
Строгая типизация через схему
Один эндпоинт
Хорошая документация "из коробки"

Минусы

Сложность кеширования
Может быть оверхед для простых API
Требует дополнительных библиотек на бэкенде

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥21
Что означает ключевое слово native?

Ключевое слово native используется для объявления методов, реализация которых написана не на Java, а на других языках — обычно C или C++. Такие методы называются нативными.

Когда мы объявляем метод как native, мы указываем только его сигнатуру без тела метода. Реальная реализация находится в нативной библиотеке (.dll, .so), которая подключается через JNI (Java Native Interface).

Нативные методы используются для:

Работы с системными ресурсами и API операционной системы
Повышения производительности критичных участков кода
Использования существующих библиотек на C/C++

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥1
Что такое enum?

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

Кроме того, enum может содержать:


поля и методы, чтобы хранить доп. данные (например, код статуса);
конструктор (по умолчанию private);
переопределение методов (например, toString() или abstract-методы для каждого элемента).

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71🔥1
Что такое статическое и динамическое связывание?

🔹 Статическое связывание (или раннее связывание) — это связывание метода с его вызовом на этапе компиляции. Используется для:

static методов;
private методов;
final методов;
перегруженных методов (overloading).

Решение принимается на основе типа ссылки.

🔹 Динамическое связывание (или позднее связывание) — это связывание метода с его вызовом во время выполнения программы (runtime). Используется для:

переопределенных методов (overriding);
реализации полиморфизма.

Решение принимается на основе фактического типа объекта.

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

#core
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍32👏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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1👏1