Библиотека собеса по 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
加入频道
Как избежать 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
Что означает ключевое слово native?

Ключевое слово native указывает, что метод реализован на языке, отличном от Java (обычно C или C++). Такие методы используются для работы с нативными библиотеками через JNI (Java Native Interface).

Вызов native-методов позволяет взаимодействовать с системными API, работать с железом и оптимизировать производительность, но несет риски, такие как потеря переносимости и потенциальные утечки памяти.
Please open Telegram to view this post
VIEW IN TELEGRAM