ar
Feedback
Библиотека собеса по Java | вопросы с собеседований

Библиотека собеса по Java | вопросы с собеседований

الذهاب إلى القناة على Telegram

Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: clc.to/3wECtA Для обратной связи: @proglibrary_feeedback_bot

إظهار المزيد
6 465
المشتركون
+124 ساعات
-47 أيام
-1430 أيام
أرشيف المشاركات
🖥 t.me/javatg — авторский канал, посвященный Java разработке и созданию мобильных приложений на Kotlin. 📚 t.me/java_library — редкая Java литература, статьи, курсы и уникальные гайды для мл специалистов любого уровня. Читайте, развивайтесь, практикуйте. 🤖 t.me/android_its — канал-гайд по профессиональной разработке на android. ⚡t.me/ai_machinelearning_big_data - Научись использовать в соих проектах самые современные модели машинного обучения и ИИ.

🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи Напоминаем, что у нас есть бесплатный курс для всех, кто хо
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом. Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций. Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах. 👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.

ℹ️ Что такое "Проблема бриллианта" (Diamond Problem)? Проблема бриллианта (или Diamond Problem) — это ситуация, которая возникает в языках программирования с поддержкой множественного наследования. Она заключается в том, что если один класс наследует два или более класса, которые имеют общий предок, то возникает неопределенность, с какого родительского класса должны быть унаследованы члены (методы или поля). В Java множественное наследование классов не поддерживается, но проблема все равно может возникнуть при использовании интерфейсов.
interface A {
    void method();
}

interface B extends A {
    @Override
    default void method() {
        System.out.println("Method from B");
    }
}

interface C extends A {
    @Override
    default void method() {
        System.out.println("Method from C");
    }
}

class D implements B, C { }

public class Main {
    public static void main(String[] args) {
        D d = new D();
        d.method();  // Какая версия метода будет вызвана?
    }
}
📌 В чем суть проблемы? Когда класс D реализует оба интерфейса B и C, которые оба предоставляют дефолтные реализации метода method(), возникает неопределенность — какую версию метода должен использовать класс D? При компиляции будет выброшен error: class D inherits unrelated defaults for method() from types B and C. Это решается с помощью явного переопределения метода в классе D, что позволяет избежать конфликтов.
class D implements B, C {
    @Override
    public void method() {
        B.super.method();
        // или можно использовать C.super.method(), если хотите вызвать метод из C
    }
}

💬 Обратная связь По возможности вопросы выбираются с приближением к реальным собеседованиям или чему-то применимому в целом. А не вопросы вида "зачем мне это, что это вообще такое, никогда не задумывался об этом и не буду". Как вам кажется, удаётся это или нет? Поставьте реакцию — каждый отзыв очень важен. Также можете в комментариях поделиться своим мнением, что можно улучшить. Сделаем контент интереснее вместе. 🔥 - Всё супер, админ красавчик 👍🏼 - Хорошо, большинство вопросов интересны/полезны 🤔 - Удовлетворительно, не все вопросы полезны/интересны 😢 - Что-то не нравится, напишу в комментариях, что именно

Что такое optimistic и pessimistic locking? 🔹 Optimistic Locking использует версионный контроль. Каждый объект данных имеет поле версии (@Version в JPA), которое обновляется при изменении. При сохранении проверяется, что версия не изменилась. Если она изменилась (другая транзакция уже обновила объект), операция завершается с ошибкой. Это подход минимально блокирует ресурсы, но требует обработки конфликтов на уровне приложения. 🔹 Pessimistic Locking заключается в блокировке строк для предотвращения их изменения другими транзакциями. Существует три вида блокировок в JPA: PESSIMISTIC_READ – другие транзакции могут читать, но не изменять данные. PESSIMISTIC_WRITE – блокировка на запись, другие транзакции не могут читать и изменять данные. PESSIMISTIC_FORCE_INCREMENT – аналогично WRITE, но увеличивает версию даже без изменений. ❗️ Когда использовать? - Optimistic Locking подходит для систем с редкими конфликтами. - Pessimistic Locking лучше использовать в сценариях с высокой конкуренцией или при необходимости строго гарантировать целостность данных.

🏢📊 Как сократить расходы на инфраструктуру в 20 раз: опыт внедрения мультитенантной архитектуры Снизить затраты на инфрастр
🏢📊 Как сократить расходы на инфраструктуру в 20 раз: опыт внедрения мультитенантной архитектуры Снизить затраты на инфраструктуру в десятки раз — не фантастика, а реальность. Мультитенантная архитектура помогает не только экономить деньги, но и упрощает подключение новых клиентов, масштабирование и обслуживание системы. Такой подход значительно облегчает работу и открывает новые возможности для роста. Хотите узнать, как правильно её внедрить, избежать типичных ошибок и достичь впечатляющих результатов? Ознакомьтесь с реальным опытом, который вдохновит на изменения. 🍹 🔗 Читать статью 🔗 Зеркало

Что такое область видимости (scope) бина в Spring? Область видимости в Spring определяет жизненный цикл и видимость бинов в контейнере IoC. Основные области видимости: - Singleton (по умолчанию): Один экземпляр бина создаётся на весь контекст Spring. Используется для общих объектов. - Prototype: Каждый запрос к контейнеру создаёт новый экземпляр бина. - Request: Бин создаётся для каждого HTTP-запроса (только в веб-приложениях). - Session: Один бин создаётся на одну HTTP-сессию. - Application: Один бин на весь жизненный цикл ServletContext. - WebSocket: Один бин на WebSocket-сессию. Для указания области видимости используется аннотация @Scope.

🎉 Розыгрыш от Proglib Academy и DigitalRazor! С 27 ноября по 27 декабря у вас есть шанс не только прокачать свои навыки, но
🎉 Розыгрыш от Proglib Academy и DigitalRazor! С 27 ноября по 27 декабря у вас есть шанс не только прокачать свои навыки, но и выиграть ПК при покупке любого курса Академии! 🎁 Призы для участников акции: – Игровой ПК DigitalRazor ProGamingVIP-пакет курса Proglib Academy 💡 Как принять участие? Купите любой курс Proglib Academy с 27 ноября по 27 декабря и получите шанс выиграть мощный ПК. Приобретите технику DigitalRazor — участвуйте в розыгрыше VIP курса. 📅 Вместе с DigitalRazor мы создали спецпредложение -50% на курсы до 30 ноября, чтобы вы могли начать обучение на более выгодных условиях. Выбрать курс

Что такое phantom reads в контексте работы с БД? Phantom reads (фантомные чтения) — это ситуация, когда одна транзакция повторно выполняет запрос, возвращающий множество строк, и видит новые строки, которые были добавлены другой транзакцией за время выполнения первой. Такие изменения могут влиять на результаты выборки, вызывая несогласованность данных. 📌 Пример: - Транзакция A выполняет запрос: SELECT * FROM orders WHERE amount > 100; - В это время транзакция B добавляет новую запись: INSERT INTO orders (id, amount) VALUES (10, 150); и фиксирует изменения (COMMIT). - Транзакция A повторяет свой запрос: SELECT * FROM orders WHERE amount > 100; - Теперь в результате запроса появляется новая запись с id = 10, которая не была видна в первой выборке. Фантомные чтения возможны на уровнях изоляции ниже SERIALIZABLE. Уровень REPEATABLE READ защищает от dirty и non-repeatable reads, но не от фантомных. Только уровень SERIALIZABLE гарантирует полную консистентность, исключая фантомные чтения за счёт блокировки или иного способа предотвращения изменений в диапазонах данных.

💡 Как избежать катастрофы при переходе на PostgreSQL: руководство по спасению базы данных Переход на PostgreSQL — это не про
💡 Как избежать катастрофы при переходе на PostgreSQL: руководство по спасению базы данных Переход на PostgreSQL — это не просто замена одного инструмента другим. Неправильный подход может привести к потере данных, снижению производительности и длительным простоям. Особенно это касается хранимых процедур: различия между PL/pgSQL и языками, такими как PL/SQL или T-SQL, могут вызывать ошибки, которые сложно обнаружить заранее. Если вы хотите узнать, как избежать этих проблем, правильно спланировать переход и не потерять производительность, ознакомьтесь с важными советами и готовыми решениями, которые сделают миграцию безопасной и эффективной. 🚀 🔗 Читать статью 🔗 Зеркало

⚡️ Напоминаем: у нас можно (и нужно) купить рекламу → Более 60 телеграм-каналов по всем направлениям IT → Почти 1,2 миллиона аудитории → Собственное медиа и сайт с DAU 25 000 — можем усилить продвижение → Классные email-рассылки → И, конечно же, крутые контент-менеджеры, которые сделают нативную интеграцию/придумают виральный пост/реализуют любые контентные предпочтения Для заказа пишите сюда: @proglib_adv

🎅 Какой подарок вы бы хотели на НГ? Пишите в комментариях👇 Админ на НГ не отказался бы от вашей активности. Реакции, коммен
🎅 Какой подарок вы бы хотели на НГ? Пишите в комментариях👇 Админ на НГ не отказался бы от вашей активности. Реакции, комментарии, конструктивные предложения будем ждать под ёлкой 🎄

Что такое Spring Bean? ❌ Неверно: Весенняя фасоль ✔️ Правильный ответ: Spring Bean — это объект, управляемый контейнером Spring IoC (Inversion of Control). Бины представляют собой ключевые компоненты приложения, которые создаются, настраиваются и управляются Spring Framework. 🛠 Основные характеристики Spring Bean: - Управление жизненным циклом: Контейнер отвечает за создание, инициализацию и уничтожение бина. - Конфигурация: Бины можно определять с помощью аннотаций (@Component, @Service, @Repository, @Bean) или XML-конфигурации. - Инъекция зависимостей (DI): Контейнер автоматически внедряет зависимости, требуемые для работы бина.

Систематизируете и углубите знания разработки на Java на курсе Яндекс Практикума. За 6 месяцев научитесь тому, что отличает о
Систематизируете и углубите знания разработки на Java на курсе Яндекс Практикума. За 6 месяцев научитесь тому, что отличает опытного разработчика от новичка: — Напишете своё приложение‑блог с использованием наиболее популярного на сегодняшний день фреймворка Spring Boot, а также научитесь правильно писать тесты с кешированием контекстов; — Используя реактивный стек на Spring Boot, напишете веб‑приложение, которое состоит из нескольких сервисов, использует данные из СУБД и Redis в качестве кеша, производит аутентификацию и авторизацию пользователей. Сервисы будут развёрнуты при помощи средств Docker; — Создадите инфраструктуру банка для совершения трансакции с аудитом операций при помощи микросервисной архитектуры, которая поддерживается экосистемой Spring. Часть микросервисов будут сообщаться между собой через RESTful API, а часть — через стриминговую платформу Apache Kafka. Также будет задействован ELK‑стек для мониторинга и логирования. И самое главное никаких давно снятых видео и длинных лекций. Вся теория и практика проходят в интерактивном учебнике, а также воркшопы с опытными разработчиками, которые разбирают сложные кейсы и отвечают на ваши вопросы. И всё это в удобном для вас темпе без жёстких дедлайнов. Начать можно бесплатно!

Черные скидки на курсы в Академии! -40% до конца ноября 🔥 В честь Черной пятницы до 30 ноября запускаем распродажу на все ку
Черные скидки на курсы в Академии! -40% до конца ноября 🔥 В честь Черной пятницы до 30 ноября запускаем распродажу на все курсы proglib.academy и дарим промокод на сумму 10 000 на технику в магазине DigitalRazor (отправим вам по запросу) 🎁 Анонс новогоднего сюрприза! 🎄 Те, кто успеет приобрести курсы с 27 ноября по 27 декабря, получат шанс выиграть крутой новогодний подарок. Что это будет, пока держим в секрете – следите за новостями на нашем канале! Почему стоит выбрать нас? ⚫️ Опытные преподаватели Вас будут обучать доценты ВМК МГУ по математике, а алгоритмы расскажет разработчик из Яндекса и преподаватель МФТИ и НИУ ВШЭ. ⚫️ Бессрочный доступ ко всем курсам Проходите обучение в удобном для вас темпе, без давления жестких сроков. ⚫️ Поддержка преподавателей Не останетесь одни — вам всегда помогут разобраться с трудными темами и ответят на любые вопросы через чат и платформу Coreapp. 👉 Не уверены, подойдет ли вам курс? Начните с бесплатных вводных занятий и познакомьтесь с преподавателями и форматом обучения – Ждем вас на обучении! 🙌

Черные скидки на курсы в Академии! -40% до конца ноября 🔥 В честь Черной пятницы до 30 ноября запускаем распродажу на все ку
Черные скидки на курсы в Академии! -40% до конца ноября 🔥 В честь Черной пятницы до 30 ноября запускаем распродажу на все курсы proglib.academy и дарим промокод на сумму 10 000 на технику в магазине DigitalRazor (отправим вам по запросу) 🎁 Анонс новогоднего сюрприза! 🎄 Те, кто успеет приобрести курсы с 27 ноября по 27 декабря, получат шанс выиграть крутой новогодний подарок. Что это будет, пока держим в секрете – следите за новостями на нашем канале! Почему стоит выбрать нас? ⚫️ Опытные преподаватели Вас будут обучать доценты ВМК МГУ по математике, а алгоритмы расскажет разработчик из Яндекса и преподаватель МФТИ и НИУ ВШЭ. ⚫️ Бессрочный доступ ко всем курсам Проходите обучение в удобном для вас темпе, без давления жестких сроков. ⚫️ Поддержка преподавателей Не останетесь одни — вам всегда помогут разобраться с трудными темами и ответят на любые вопросы через чат и платформу Coreapp. 👉 Не уверены, подойдет ли вам курс? Начните с бесплатных вводных занятий и познакомьтесь с преподавателями и форматом обучения – Ждем вас на обучении! 🙌

Что такое проблема N+1 в JPA и как её избежать? Проблема N+1 возникает, когда для выборки данных из базы выполняется 1 основной запрос и N дополнительных запросов для каждой сущности, связанной с основной. Это происходит из-за ленивой загрузки (LAZY) связанных данных, когда каждая связанная сущность запрашивается отдельно. 📌 Пример:
List<Department> departments = departmentRepository.findAll();
for (Department department : departments) {
    System.out.println(department.getEmployees().size());
}
- Выполняется запрос для получения всех Department (1 запрос). - Для каждого департамента выполняется отдельный запрос для загрузки employees (N запросов). - Итого: 1 + N запросов вместо оптимального 1-2. 💡 Как избежать? ▪️ Использовать JOIN FETCH ▪️ Использовать EntityGraph ▪️ Настроить @Fetch(FetchMode.SUBSELECT) (Hibernate)

Что такое non-repeatable read в контексте работы с БД? Non-repeatable read (неповторяемое чтение) — это ситуация, когда одна транзакция считывает одни и те же данные дважды в рамках одной транзакции, но получает разные результаты из-за изменений, внесённых другой транзакцией между этими чтениями. 📌 Пример: - Транзакция A считывает данные: SELECT balance FROM accounts WHERE id = 1; Результат: balance = 1000. - Транзакция B обновляет те же данные и фиксирует изменения: UPDATE accounts SET balance = 1500 WHERE id = 1; COMMIT;. - Транзакция A снова считывает данные в рамках той же транзакции: SELECT balance FROM accounts WHERE id = 1; Результат: balance = 1500. В результате данные, полученные Транзакцией A, отличаются в первом и втором чтении. Non-repeatable read возможен на уровне изоляции READ COMMITTED. Чтобы предотвратить такие ситуации, используется уровень REPEATABLE READ, который гарантирует неизменность данных, считанных транзакцией, до её завершения.

🤖🛠 11 лучших ИИ-инструментов для разработки в 2024 году В мире разработки программного обеспечения искусственный интеллект
🤖🛠 11 лучших ИИ-инструментов для разработки в 2024 году В мире разработки программного обеспечения искусственный интеллект становится незаменимым помощником, способным значительно повысить продуктивность и качество кода. Представьте себе инструменты, которые не только автоматически дополняют ваш код, но и генерируют целые фрагменты, преобразуют дизайн в готовый код и обеспечивают безопасность вашего приложения. Хотите узнать, какие ИИ-инструменты помогут вам быть на шаг впереди в 2024 году? Откройте для себя решения, которые сделают ваш рабочий процесс более эффективным и инновационным. 🔗 Читать статью 🔗 Зеркало

Что такое dirty read в контексте работы с БД? Dirty read (грязное чтение) — это ситуация, когда одна транзакция считывает данные, которые были изменены другой транзакцией, но ещё не зафиксированы. Если вторая транзакция откатится, то данные, которые считала первая транзакция, окажутся недействительными. 📌 Пример: - Транзакция A обновляет баланс счета: UPDATE accounts SET balance = 1000 WHERE id = 1; - Транзакция A не фиксирует изменения (COMMIT), а баланс временно обновлён. - Транзакция B считывает баланс: SELECT balance FROM accounts WHERE id = 1; - Если транзакция A откатится (ROLLBACK), то данные, которые считала транзакция B, окажутся некорректными. Dirty read возможен только при уровне изоляции READ UNCOMMITTED. На практике этот уровень редко используется, так как приводит к нестабильности данных. Уровни изоляции вроде READ COMMITTED и выше предотвращают грязные чтения, делая транзакции более надёжными.