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

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

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

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

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
Чем отличается ArrayList от LinkedList?

ArrayList — это динамический массив, а LinkedList — двусвязный список.

🔹 Структура данных

— ArrayList хранит элементы в массиве, доступ к элементу по индексу O(1).
— LinkedList хранит узлы, каждый из которых содержит ссылку на следующий и предыдущий, доступ O(n).

🔹 Операции вставки и удаления
— В ArrayList вставка/удаление в середине требует сдвига элементов (O(n)).
— В LinkedList вставка/удаление занимает O(1), если есть ссылка на нужный узел.

🔹 Использование памяти
— ArrayList хранит только данные.
— LinkedList требует памяти на ссылки между элементами.

💬 Вы хоть раз использовали LinkedList? Что это был за кейс?
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
💬 Обратная связь

Какое ощущение вызывают посты последний месяц?

😁 — Вопросы скучные и слишком простые
👍🏼 — Вопросы нормальные
🔥 — Много нового и интересного
Please open Telegram to view this post
VIEW IN TELEGRAM
Какие проблемы могут возникнуть при использовании synchronized, и как их решать?

1️⃣ Блокировки (Blocking)

— Потоки, ожидающие освобождения блокировки, простаивают, что снижает производительность.
Решение: использовать ReentrantLock, который позволяет гибко управлять блокировками, включая таймауты и прерывания.

2️⃣ Взаимная блокировка (Deadlock)

— Возникает, когда два потока блокируют друг друга, ожидая освобождения ресурсов.
— Решение: явный порядок блокировки, использование tryLock() с таймаутом

3️⃣ Отсутствие гибкости

— Synchronized не дает возможности проверки состояния блокировки.
— Решение: Использовать Lock, который позволяет проверить, занята ли блокировка (isLocked()) и настроить приоритет выполнения.

4️⃣ Проблема ложного пробуждения (Spurious Wakeup)

— Поток может быть пробужден без явного вызова notify().
— Решение: всегда использовать while, а не if при ожидании wait().
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое Serial Garbage Collector?

Serial GC — это однопоточный сборщик мусора, работающий по принципу "Stop-the-World". Он останавливает выполнение всех потоков во время сборки мусора и использует копирующий алгоритм для молодых поколений (Young Gen) и компактирующий алгоритм для старших (Old Gen).

🔹 Как работает

1️⃣ В молодом поколении (Minor GC) используется копирующая стратегия: выжившие объекты перемещаются из Eden в Survivor, а из Survivor в Old Gen.
2️⃣ В старом поколении (Major GC / Full GC) выполняется уплотнение памяти для уменьшения фрагментации.
3️⃣ Так как GC работает в одном потоке, во время сборки остановка приложения неизбежна.

🔹 Когда использовать

В одноядерных системах или при ограниченных ресурсах, где многопоточный GC создаст больше нагрузки.
В маленьких JVM (до 1-2 ГБ памяти), где G1 или Parallel GC будут избыточны.
В приложениях без жестких требований к паузам, например, в небольших утилитах или CLI-инструментах.
Please open Telegram to view this post
VIEW IN TELEGRAM
В чём разница между Comparator и Comparable?

▪️ Comparable используется для естественного порядка объектов. Класс, реализующий Comparable, должен переопределять метод compareTo(T o), который определяет порядок сортировки.

▪️ Comparator применяется, когда требуется несколько способов сортировки или невозможно изменить код сравниваемого класса. Он реализует метод compare(T o1, T o2).

📌 Главные отличия

— Comparable встраивается в сам класс, Comparator – это отдельный класс.
— Comparable задаёт естественный порядок, Comparator позволяет кастомизировать сортировку.
Please open Telegram to view this post
VIEW IN TELEGRAM
Что происходит, если в Spring Bean с @Scope("prototype") внедрить другой Bean с @Scope("singleton")?

В prototype-Bean будет всегда один и тот же экземпляр singleton-Bean, так как Singleton создаётся один раз при запуске контекста Spring и переиспользуется во всех зависимостях.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝 💼 IT-конференции: как сходить на мероприятие и извлечь из него максимум пользы

🚀 IT-конференции — это не только про кофе-брейки и бесплатные стикеры. Это шанс завести полезные знакомства, узнать инсайдерскую информацию и найти новые карьерные возможности. Но для этого нужно не просто прийти, а правильно подготовиться и ловить важные моменты.

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

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

🐸 Библиотека джависта
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉 Поздравляем с 8 марта

Сегодня отмечаем вклад девушек-разработчиков, аналитиков, тестировщиков, тимлидов и всех, кто влюблён в код. Без вас IT не было бы таким, каким мы его знаем. С праздником, коллеги 💐

Женщины оставили огромный след в истории IT. Если вам кажется, что программирование — это исключительно «мужская территория», взгляните, вот лишь несколько легендарных женщин:

🔹 Ада Лавлейс — автор первой компьютерной программы ещё в 19 веке.
🔹 Грейс Хоппер — создала первый компилятор и популяризировала термин «баг».
🔹 Барбара Лисков — её принцип Liskov Substitution является основой ООП, в том числе в Java.
🔹 Эдит Кларк — первая женщина-инженер, внесшая вклад в вычислительные методы в энергетике.
🔹 Маргарет Гамильтон — разработала софт для посадки «Аполлона-11» на Луну.

А это только малая часть. В статье собраны ещё больше вдохновляющих историй.

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

🐸 Библиотека джависта
Please open Telegram to view this post
VIEW IN TELEGRAM
Как избежать Memory Leak?

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

Также стоит следить за ресурсами вроде файлов, соединений с БД и потоков, гарантируя их закрытие через try-with-resources. Отладить проблему помогают профилировщики памяти, такие как VisualVM или Eclipse MAT, анализирующие heap dump и выявляющие утечки.

💬 С какой незаметной утечкой вы сталкивались?

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

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

🔹 Реализации

1. Оркестровая — централизованный координатор управляет шагами
2. Хореографическая — шаги взаимодействуют напрямую, реагируя на события друг друга

🔹 Использование


1. Разработка микросервисов
2. Разработка распределенных систем
3. Разработка приложения с бизнес-процессами с долгоживущими транзакциями

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

Сигнатура метода — это его уникальная идентификация в рамках класса, включающая имя метода и список параметров (их порядок и типы).

Возвращаемый тип и модификаторы доступа не входят в сигнатуру. Именно благодаря сигнатуре JVM определяет, какие методы можно перегружать (overloading).

⚠️ Два метода с одинаковой сигнатурой в одном классе не могут существовать.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Какие существуют состояния потока?

Thread может находиться в одном из следующих состояний (Thread.State):

1️⃣ NEW — поток создан, но еще не запущен.
2️⃣ RUNNABLE — поток готов к выполнению, но может ожидать процессорное время.
3️⃣ BLOCKED — поток ждет освобождения монитора для входа в synchronized блок.
4️⃣ WAITING — поток ожидает сигнал без тайм-аута.
5️⃣ TIMED_WAITING — поток ожидает, но с ограничением по времени.
6️⃣ TERMINATED — поток завершил выполнение.

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

CopyOnWriteArrayList — это потокобезопасная реализация List, в которой изменения происходят на копии массива.

🔹 Чтение (get, contains) выполняется без блокировок, т.к. работает с неизменяемым массивом.
🔹 Запись (add, set, remove) создает новую копию массива, где применяются изменения, а затем заменяет старый массив.

✔️ Плюсы

— Отлично подходит для сценариев, где чтение преобладает над записью.
— Не требует внешней синхронизации.

Минусы

— При больших объемах данных запись дорогая по памяти и производительности.
— Итераторы работают с старой версией массива, поэтому изменения после их создания не видны (fail-safe).

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

Стек-трейс (stack trace) — это последовательность вызовов методов в стеке выполнения программы на момент возникновения ошибки. Он показывает путь, по которому код дошел до исключения, и помогает отлаживать программы.

🔹 Что даёт стек-трейс


— Помогает быстро найти причину ошибки
— Показывает путь выполнения программы
— Позволяет глубже понимать код и его логику

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

Абстрактный класс может содержать как абстрактные, так и конкретные методы, а интерфейс до Java 8 мог содержать только абстрактные методы (с Java 8 появились default и static методы).

🔹 Наследование: класс может наследоваться только от одного абстрактного класса, но реализовать несколько интерфейсов.
🔹 Модификаторы: методы интерфейса по умолчанию public, а в абстрактном классе можно использовать разные модификаторы доступа.
🔹 Поля: интерфейс содержит только public static final (константы), а абстрактный класс может иметь обычные поля.

🔹 Когда использовать


Абстрактный класс — если есть частичная реализация или состояние.
Интерфейс — если нужна контрактная функциональность без реализации.

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

Проверяемые исключения (Checked Exceptions) — это исключения, которые компилятор требует обработать (try-catch или throws). Они наследуются от Exception, но не от RuntimeException. Примеры: IOException, SQLException. Нужны для предупреждения ошибок, которые предсказуемы, но неизбежны.

Непроверяемые исключения (Unchecked Exceptions) — это исключения, которые не требуют явной обработки, компилятор их не проверяет. Они наследуются от RuntimeException и могут возникать в любом месте программы. Примеры: NullPointerException, ArrayIndexOutOfBoundsException. Возникают из-за ошибок разработчика, как правило, а не связаны с внешними условиями.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Расскажите о паттерне Proxy?

Proxy (Заместитель) — это структурный паттерн, который подставляет объект-заместитель вместо реального объекта для управления доступом к нему.

🔹 Когда использовать

— Нужно контролировать доступ к объекту (например, кеширование, логирование, контроль прав).
— Создание объекта дорогое, и его инициализацию стоит отложить (Lazy Initialization).
— Требуется добавление дополнительной логики перед/после вызова методов объекта.

🔹 Типы Proxy


1. Virtual Proxy — ленивое создание объекта (например, подгрузка больших данных).
2. Protection Proxy — контроль доступа (например, права пользователей).
3. Remote Proxy — доступ к удалённому объекту (RMI, REST).
4. Logging Proxy — логирование вызовов.

⚠️ Proxy не меняет интерфейс объекта, а просто управляет доступом к нему.

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