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

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

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

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

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

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

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

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

1️⃣ Read Uncommitted - транзакция может читать изменения, которые ещё не зафиксированы другой транзакцией.
❗️ Возможна проблема грязного чтения (dirty read).

2️⃣ Read Committed - транзакция видит только зафиксированные изменения.
❗️ Возможна проблема неповторяющегося чтения (non-repeatable read).

3️⃣ Repeatable Read - транзакция видит одни и те же данные при повторных чтениях.
❗️ Возможна проблема фантомных чтений (phantom reads), когда другая транзакция добавляет новые строки, влияющие на ваш запрос.

4️⃣ Serializable - транзакции выполняются последовательно, как если бы они шли одна за другой, что исключает фантомные чтения.
❗️ Самый медленный уровень.
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Как избавиться от WebSockets и сэкономить $1 млн в год: неожиданные решения для оптимизации

Как снизить расходы на инфраструктуру и повысить эффективность? Оказывается, отказ от WebSockets может сэкономить миллионы. Вместо привычного подхода можно использовать решения, которые не только проще, но и лучше подходят для определённых задач, как, например, асинхронные очереди или SSE.

Знаете ли вы, как выбрать стратегию, которая одновременно сократит затраты и улучшит масштабируемость? Разберитесь в тонкостях оптимизации и найдите способ выжать максимум из вашей системы. 🚀

🔗 Читать статью
🔗 Зеркало
Что такое 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 и выше предотвращают грязные чтения, делая транзакции более надёжными.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤖🛠 11 лучших ИИ-инструментов для разработки в 2024 году

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

🔗 Читать статью
🔗 Зеркало
Что такое 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, который гарантирует неизменность данных, считанных транзакцией, до её завершения.
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое проблема 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)
Please open Telegram to view this post
VIEW IN TELEGRAM
Черные скидки на курсы в Академии!

-40% до конца ноября

🔥 В честь Черной пятницы до 30 ноября запускаем распродажу на все курсы proglib.academy и дарим промокод на сумму 10 000 на технику в магазине DigitalRazor (отправим вам по запросу)

🎁 Анонс новогоднего сюрприза!

🎄 Те, кто успеет приобрести курсы с 27 ноября по 27 декабря, получат шанс выиграть крутой новогодний подарок.
Что это будет, пока держим в секрете – следите за новостями на нашем канале!

Почему стоит выбрать нас?

⚫️ Опытные преподаватели
Вас будут обучать доценты ВМК МГУ по математике, а алгоритмы расскажет разработчик из Яндекса и преподаватель МФТИ и НИУ ВШЭ.

⚫️ Бессрочный доступ ко всем курсам
Проходите обучение в удобном для вас темпе, без давления жестких сроков.

⚫️ Поддержка преподавателей
Не останетесь одни — вам всегда помогут разобраться с трудными темами и ответят на любые вопросы через чат и платформу Coreapp.

👉 Не уверены, подойдет ли вам курс? Начните с бесплатных вводных занятий и познакомьтесь с преподавателями и форматом обучения –

Ждем вас на обучении! 🙌
Что такое Spring Bean?

Неверно: Весенняя фасоль

✔️ Правильный ответ: Spring Bean — это объект, управляемый контейнером Spring IoC (Inversion of Control). Бины представляют собой ключевые компоненты приложения, которые создаются, настраиваются и управляются Spring Framework.

🛠 Основные характеристики Spring Bean:

- Управление жизненным циклом:
Контейнер отвечает за создание, инициализацию и уничтожение бина.

- Конфигурация:
Бины можно определять с помощью аннотаций (
@Component, @Service, @Repository, @Bean) или XML-конфигурации.
- Инъекция зависимостей (DI):
Контейнер автоматически внедряет зависимости, требуемые для работы бина.
Please open Telegram to view this post
VIEW IN TELEGRAM
🎅 Какой подарок вы бы хотели на НГ? Пишите в комментариях👇

Админ на НГ не отказался бы от вашей активности. Реакции, комментарии, конструктивные предложения будем ждать под ёлкой 🎄
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Напоминаем: у нас можно (и нужно) купить рекламу

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

Для заказа пишите сюда: @proglib_adv
💡 Как избежать катастрофы при переходе на PostgreSQL: руководство по спасению базы данных

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

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

🔗 Читать статью
🔗 Зеркало
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое 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 гарантирует полную консистентность, исключая фантомные чтения за счёт блокировки или иного способа предотвращения изменений в диапазонах данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉 Розыгрыш от Proglib Academy и DigitalRazor!

С 27 ноября по 27 декабря у вас есть шанс не только прокачать свои навыки, но и выиграть ПК при покупке любого курса Академии!

🎁 Призы для участников акции:

Игровой ПК DigitalRazor ProGaming
VIP-пакет курса Proglib Academy

💡 Как принять участие?
Купите любой курс Proglib Academy с 27 ноября по 27 декабря и получите шанс выиграть мощный ПК.

Приобретите технику DigitalRazor — участвуйте в розыгрыше VIP курса.

📅 Вместе с DigitalRazor мы создали спецпредложение -50% на курсы до 30 ноября, чтобы вы могли начать обучение на более выгодных условиях.

Выбрать курс
Что такое область видимости (scope) бина в Spring?

Область видимости в Spring определяет жизненный цикл и видимость бинов в контейнере IoC. Основные области видимости:

- Singleton (по умолчанию):
Один экземпляр бина создаётся на весь контекст Spring. Используется для общих объектов.

- Prototype:

Каждый запрос к контейнеру создаёт новый экземпляр бина.

- Request:
Бин создаётся для каждого HTTP-запроса (только в веб-приложениях).

- Session:
Один бин создаётся на одну HTTP-сессию.

- Application:
Один бин на весь жизненный цикл ServletContext.

- WebSocket:
Один бин на WebSocket-сессию.

Для указания области видимости используется аннотация @Scope.
Please open Telegram to view this post
VIEW IN TELEGRAM
🏢📊 Как сократить расходы на инфраструктуру в 20 раз: опыт внедрения мультитенантной архитектуры

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

Хотите узнать, как правильно её внедрить, избежать типичных ошибок и достичь впечатляющих результатов? Ознакомьтесь с реальным опытом, который вдохновит на изменения. 🍹

🔗 Читать статью
🔗 Зеркало
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое optimistic и pessimistic locking?

🔹 Optimistic Locking использует версионный контроль. Каждый объект данных имеет поле версии (@Version в JPA), которое обновляется при изменении. При сохранении проверяется, что версия не изменилась. Если она изменилась (другая транзакция уже обновила объект), операция завершается с ошибкой. Это подход минимально блокирует ресурсы, но требует обработки конфликтов на уровне приложения.

🔹 Pessimistic Locking заключается в блокировке строк для предотвращения их изменения другими транзакциями. Существует три вида блокировок в JPA:

PESSIMISTIC_READ – другие транзакции могут читать, но не изменять данные.
PESSIMISTIC_WRITE – блокировка на запись, другие транзакции не могут читать и изменять данные.
PESSIMISTIC_FORCE_INCREMENT – аналогично WRITE, но увеличивает версию даже без изменений.

❗️ Когда использовать?

- Optimistic Locking подходит для систем с редкими конфликтами.
- Pessimistic Locking лучше использовать в сценариях с высокой конкуренцией или при необходимости строго гарантировать целостность данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
💬 Обратная связь

По возможности вопросы выбираются с приближением к реальным собеседованиям или чему-то применимому в целом. А не вопросы вида "зачем мне это, что это вообще такое, никогда не задумывался об этом и не буду". Как вам кажется, удаётся это или нет?

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

🔥 - Всё супер, админ красавчик
👍🏼 - Хорошо, большинство вопросов интересны/полезны
🤔 - Удовлетворительно, не все вопросы полезны/интересны
😢 - Что-то не нравится, напишу в комментариях, что именно
Please open Telegram to view this post
VIEW IN TELEGRAM
ℹ️ Что такое "Проблема бриллианта" (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
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

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

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
👀 Задачи с собеседований: Числа от 0 до 1000, которые делятся на 3, но не на 5, и сумма цифр которых меньше десяти (jun+)

— Как найти все числа от 0 до 1000, которые одновременно:
Делятся на 3.
Не делятся на 5.
Сумма цифр числа меньше десяти.

💡 Ключевые моменты:

- Чтобы число делилось на X, его нужно проверить на остаток от деления: number % Х == 0.
- Для проверки суммы цифр числа можно пройтись по всем его цифрам и сложить их, затем проверить, что сумма меньше 10.
- Как улучшить решение?

Реализация на картинке 👆🏻
Please open Telegram to view this post
VIEW IN TELEGRAM