Библиотека собеса по 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
加入频道
Какие проблемы могут возникнуть при использовании 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
🏃‍♀️ 40+ каналов, которые должен читать каждый разработчик

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

IT Job Hub | Работа и вакансии в IT — избранные IT-вакансии

Библиотека программиста — новости из мира IT и технологий

Книги для программистов — самые годные книги по любым языкам и стекам

IT-мемы — мемы про жизу айтишника

Proglib Academy — обучение и курсы, чтобы стать топовым специалистом

Азбука айтишника — азы из мира разработки

Библиотека нейросетей — лайфхаки и промпты для разных задач, баттлы нейронок и новости из мира ИИ

Библиотека фронтендера — все о JS, React, Angular и не только

Библиотека мобильного разработчика — лайфхаки и новости из мира Swift и Kotlin

Библиотека хакера — уязвимости, атаки, бэкдоры и как от них защититься

Библиотека тестировщика — самое интересное о том, как крашить код

🦫 Go
Библиотека Go-разработчика
Библиотека задач по Go
Библиотека Go для собеса
Вакансии по Go

#️⃣ C#
Библиотека шарписта
Библиотека задач по C#
Библиотека собеса по C#
Вакансии по C#

🔧 DevOps
Библиотека devops’а
Библиотека задач по DevOps
Библиотека собеса по DevOps
Вакансии по DevOps & SRE

🐘 PHP
Библиотека пхпшника
Библиотека задач по PHP
Библиотека PHP для собеса
Вакансии по PHP, Symfony, Laravel

🐍 Python
Библиотека питониста
Библиотека Python для собеса
Библиотека задач по Python
Вакансии по питону, Django, Flask

☕️ Java
Библиотека джависта
Библиотека задач по Java
Библиотека Java для собеса
Вакансии по Java

📊 Data Science
Библиотека дата-сайентиста
Библиотека задач по Data Science
Библиотека Data Science для собеса
Вакансии по Data Science

🎮 C++
Библиотека C/C++ разработчика
Библиотека задач по C++
Библиотека C++ для собеса
Вакансии по C++

Подписывайтесь на интересные вам каналы и сохраняйте пост в закладки, чтобы не потерять 🔑
Please open Telegram to view this post
VIEW IN TELEGRAM
😧 58% IT-специалистов страдают: психология успеха и борьба с синдромом самозванца

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

➡️ Читайте в статье

Спойлер: дело не в навыках, а в психологии успеха

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

CORS-атака (Cross-Origin Resource Sharing attack) — это эксплуатация неправильных настроек CORS, позволяющая злоумышленнику получить доступ к защищённым данным с другого домена.

⚙️ Как это работает

Браузеры ограничивают выполнение запросов между разными источниками (same-origin policy). CORS (Cross-Origin Resource Sharing) позволяет ослабить эти ограничения. Если сервер неправильно настроен, злоумышленник может отправить вредоносный запрос от имени жертвы и похитить данные.

🔐 Как защититься

— Явно указывать доверенные источники в Access-Control-Allow-Origin
— Использовать строгую проверку Access-Control-Allow-Credentials
— Отключать небезопасные методы (PUT, DELETE, OPTIONS), если они не нужны
— Проверять Origin на сервере, а не только в заголовках CORS

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