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

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

Відкрити в Telegram

Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/08c603b6 Для обратной связи: @proglibrary_feeedback_bot

Показати більше
6 494
Підписники
+124 години
+137 днів
+1530 день
Архів дописів
ℹ️ Что такое method hiding? Method hiding — это механизм, при котором статический метод суперкласса "скрывается" статическим методом с той же сигнатурой в подклассе. Это не переопределение, а скрытие. 🔹 Как это работает: - Тип метода определяется на этапе компиляции, основываясь на типе ссылки. - Если ссылка относится к суперклассу, вызывается метод суперкласса. Если к подклассу — метод подкласса. 🔹 Пример:
class Parent {
    static void show() {
        System.out.println("Parent static method");
    }
}

class Child extends Parent {
    static void show() {
        System.out.println("Child static method");
    }
}

Parent parent = new Child();
parent.show(); // Выведет "Parent static method"
⚠️ Это не работает для нестатических методов — там всегда используется переопределение, а метод определяется во время выполнения (runtime).

Какие архитектурные паттерны проектирования есть и кратко опишите? Layered Pattern — деление системы на слои: представление, бизнес-логика, доступ к данным. Клиент-Сервер — разделение системы на клиентов, которые запрашивают услуги, и серверов, которые их предоставляют. Микросервисы — деление системы на независимые сервисы, которые можно разворачивать отдельно. Event-Driven Architecture (Событийно-ориентированная архитектура) — система реагирует на события и запускает процессы. MVC, MVP, MVVM — разделение данных, пользовательского интерфейса и логики обработки. SOA (Сервис-Ориентированная Архитектура) — приложения строятся из повторно используемых сервисов. P2P — каждый узел системы является и клиентом, и сервером. Брокер — использование посредника для управления коммуникациями между компонентами. Гексагональная архитектура — изоляция основной логики от внешних систем через адаптеры. CQRS — разделение операций на чтение и запись для оптимизации. Pipe-and-Filter — обработка данных через серию шагов, соединённых трубами. Cloud-Native — архитектура, оптимизированная для облака с микросервисами и контейнерами.

Какие преимущества и подводные камни могут возникнуть при использовании @Data из Lombok? 🔹 Преимущества: - Автоматически генерирует getter/setter, toString, equals, hashCode и constructor. - Меньше шаблонного кода, больше концентрации на бизнес-логике. 🔹 Подводные камни: - Потенциальная рекурсия в toString для связанных объектов. - Автоматическая генерация всех методов может включить ненужные поля, что негативно скажется на производительности или логике. - Небезопасно для JPA-сущностей: можно включить ленивые поля в equals или hashCode. Рекомендация: Используйте @Data для DTO или простых классов, а для сущностей JPA применяйте аннотации @Getter, @Setter и выборочные настройки вручную.

Можно ли все методы в классе пометить как synchronized? ❌ Неверно: Да, пометить весь класс как synchronized ✔️ Правильный ответ: Да, однако весь класс пометить как synchronized нельзя. Ключевое слово synchronized применяется только к методам или блокам кода внутри класса. Если необходимо синхронизировать доступ ко всем методам класса, это придется сделать вручную, добавляя synchronized к каждому методу.

👀 Задачи с собеседований: Числа от 0 до 1000, которые делятся на 3, но не на 5, и сумма цифр которых меньше десяти (jun+) —
👀 Задачи с собеседований: Числа от 0 до 1000, которые делятся на 3, но не на 5, и сумма цифр которых меньше десяти (jun+) — Как найти все числа от 0 до 1000, которые одновременно: Делятся на 3. Не делятся на 5. Сумма цифр числа меньше десяти. 💡 Ключевые моменты: - Чтобы число делилось на X, его нужно проверить на остаток от деления: number % Х == 0. - Для проверки суммы цифр числа можно пройтись по всем его цифрам и сложить их, затем проверить, что сумма меньше 10. - Как улучшить решение? Реализация на картинке 👆🏻

🖥 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. 👉 Не уверены, подойдет ли вам курс? Начните с бесплатных вводных занятий и познакомьтесь с преподавателями и форматом обучения – Ждем вас на обучении! 🙌