Библиотека собеса по Java | вопросы с собеседований
Kanalga Telegram’da o‘tish
Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/08c603b6 Для обратной связи: @proglibrary_feeedback_bot
Ko'proq ko'rsatish6 494
Obunachilar
+324 soatlar
+147 kunlar
+1930 kunlar
Postlar arxiv
Черные скидки на курсы в Академии!
-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 году
В мире разработки программного обеспечения искусственный интеллект становится незаменимым помощником, способным значительно повысить продуктивность и качество кода. Представьте себе инструменты, которые не только автоматически дополняют ваш код, но и генерируют целые фрагменты, преобразуют дизайн в готовый код и обеспечивают безопасность вашего приложения. Хотите узнать, какие ИИ-инструменты помогут вам быть на шаг впереди в 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 и выше предотвращают грязные чтения, делая транзакции более надёжными.
🔞 Java как секс!
Если зубрить ее только по книжкам, то кроме теории и деградации, ты ничему не научишься
В канале Java, полегче 🥵! ты найдешь лучшие практики написания кода. Действующий тимлид европейского финтеха, самобытно и с долей юмора, делится секретами 🤫:
➖ Гайд по Kafka(причем тут порноактриса Piper Perri)
➖ Roadmap java разработчика на 2025
➖ Самый кринжовый подарок, сделанный девушке, с помощью программирования
➖ Как java крадет твои деньги
➖ Топ 8 ошибок при составлении резюме
➖ Самые сложные алгоритмы на моей практике. Не трать на них время
➖ Chatgpt telegram bot с нуля на java
➖ Миллиард тенге. Самая сложная задача
И это только цветочки. Рекомендую!
В этом канале даже джуны становятся сеньорами 😏
🔈 Подписывайся, это самый простой способ прокачать свои хард-скиллы: @javezka
💡 Как избавиться от WebSockets и сэкономить $1 млн в год: неожиданные решения для оптимизации
Как снизить расходы на инфраструктуру и повысить эффективность? Оказывается, отказ от WebSockets может сэкономить миллионы. Вместо привычного подхода можно использовать решения, которые не только проще, но и лучше подходят для определённых задач, как, например, асинхронные очереди или SSE.
Знаете ли вы, как выбрать стратегию, которая одновременно сократит затраты и улучшит масштабируемость? Разберитесь в тонкостях оптимизации и найдите способ выжать максимум из вашей системы. 🚀
🔗 Читать статью
🔗 Зеркало
❓ Какие уровни изоляции транзакций существуют?
1️⃣ Read Uncommitted - транзакция может читать изменения, которые ещё не зафиксированы другой транзакцией.
❗️ Возможна проблема грязного чтения (dirty read).
2️⃣ Read Committed - транзакция видит только зафиксированные изменения.
❗️ Возможна проблема неповторяющегося чтения (non-repeatable read).
3️⃣ Repeatable Read - транзакция видит одни и те же данные при повторных чтениях.
❗️ Возможна проблема фантомных чтений (phantom reads), когда другая транзакция добавляет новые строки, влияющие на ваш запрос.
4️⃣ Serializable - транзакции выполняются последовательно, как если бы они шли одна за другой, что исключает фантомные чтения.
❗️ Самый медленный уровень.
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
🚀 Как ускорить распределенные системы: 8 стратегий снижения времени ожидания
Высокая latency — это скрытый враг, превращающий приложение в тормозящую телегу. Особенно в распределённых системах, где данные путешествуют между серверами и каждая задержка становится катастрофой. Знаете ли вы, какие 8 стратегий помогут превратить "задумчивое" приложение в настоящего чемпиона?
Что эффективнее: кэшировать, сжимать или оптимизировать запросы к базе? А что, если правильный ответ — балансировка нагрузки или вообще CDN?
💡 Найдите недостающий элемент в вашем стеке и максимально ускорьте свои приложения.
🔗 Читать статью
🔗 Зеркало
Уже завтра собеседование на Middle Java с разработчиком из МТС
20 ноября (уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
1. Мария Ядерцова ведущий Java-разработчик в МТС Диджитал и ex. Сбербанк-Технологии будет задавать реальные вопросы и задачи разработчику-добровольцу
2. Мария будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
3. В конце можно будет задать любой вопрос Марии
Что узнаешь на прямом эфире от ШОРТКАТ:
• Чего ждут от кандидатов на Middle позиции в Java-разработке
• Какие вопросы задают на интервью и зачем
• Как подготовиться к собесу, чтобы получить оффер
Это бесплатно? Бесплатно
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2Vtzqwdy7mp
❗Вакансии «Библиотеки программиста» — ждем вас в команде!
Мы постоянно растем и развиваемся, поэтому создали отдельную страницу, на которой будут размещены наши актуальные вакансии. Сейчас мы ищем:
👉контент-менеджеров для ведения телеграм-каналов
Подробности тут
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
Ждем ваших откликов 👾
Repost from Библиотека девопса | DevOps, SRE, Sysadmin
🔨🐳 Секреты стройности от многоэтапной сборки
Docker-образы тоже мечтают сбросить пару лишних мегабайтов и выглядеть подтянутыми. Если ваши контейнеры уже начали тяжело вздыхать на старте или требуют отдельного хранилища для своих «боков», самое время узнать, как их «подсушить».
В статье «Стройные контейнеры: как уменьшить Docker-образ с помощью многоэтапной сборки» раскрываются секреты того, как отправить ваш образ на диету и сделать его быстрее, легче и безопаснее.
📎 Читать статью
Repost from Библиотека девопса | DevOps, SRE, Sysadmin
🛠️ Свежий релиз Docker Desktop 4.35
🐳 Токены доступа для организаций (Beta) — Эта функция улучшает управление доступом на уровне организаций. Она позволяет централизовано управлять правами пользователей, обеспечивая лучшее управление и масштабируемость для бизнеса.
🐳 Docker Home (Beta) — Новый интерфейс Docker Home служит центральным «хабом» для доступа к продуктам Docker, управления подписками и настройками.
🐳 Интерфейс терминала в Docker Desktop — Эта функция позволяет интегрировать терминал в интерфейс Docker Desktop, упрощая работу разработчиков и снижая необходимость переключаться между CLI и GUI.
🐳 Резервное копирование томов — В Docker Desktop теперь доступна улучшенная функция резервного копирования томов, которая упрощает процесс создания бэкапов данных и делает его более удобным.
🐳 Улучшенная производительность на macOS — Введение Docker VMM для Apple Silicon улучшает производительность на Mac, ускоряя выполнение множества задач.
📎 Подробнее в блоге компании
ℹ️ Что такое нормализация базы данных, и какие существуют нормальные формы?
Нормализация — это процесс приведения структуры базы данных к оптимальному виду для устранения избыточности данных и обеспечения их целостности. Процесс состоит из последовательных этапов, соответствующих нормальным формам (НФ).
Основные нормальные формы (НФ):
1️⃣ Первая нормальная форма (1НФ):
Данные делятся на атомарные (неделимые) значения.
Пример: В одной ячейке таблицы не может быть списка телефонов, вместо этого создается отдельная строка для каждого телефона.
2️⃣ Вторая нормальная форма (2НФ):
Требует выполнения 1НФ и исключения зависимости от части составного первичного ключа. Это устраняет проблему дублирования данных.
Пример: Если таблица использует составной ключ (например, "Курс" и "Студент"), информация, относящаяся только к "Курсу", выносится в отдельную таблицу.
3️⃣ Третья нормальная форма (3НФ):
Выполняется 2НФ и устраняются транзитивные зависимости — неключевые атрибуты должны зависеть только от ключа.
Пример: Если в таблице есть "ID сотрудника", "Отдел" и "Название отдела", то "Название отдела" переносится в отдельную таблицу "Отделы".
Редко используемые нормальные формы:
- Нормальная форма Бойса-Кодда (BCNF): Уточнённая версия 3НФ, где каждое определяющее множество является суперключом. Используется для устранения более сложных аномалий.
- Четвёртая нормальная форма (4НФ): Устраняет многозначные зависимости, которые появляются при использовании нескольких связей между одними и теми же атрибутами.
- Пятая нормальная форма (5НФ): Делает базу данных устойчивой к разделению данных, устраняя зависимости соединений.
Эти формы применяются в сложных сценариях, например, при проектировании корпоративных систем с огромным количеством взаимосвязей. Для большинства приложений 3НФ оказывается достаточной.
👀 Задачи с собеседований: Проверка, является ли бинарное дерево деревом поиска (middle)
— Как определить, является ли заданное бинарное дерево деревом поиска (BST)?
💡 Ключевые моменты:
- Бинарное дерево поиска (BST) — это бинарное дерево, в котором для каждого узла все значения в левом поддереве меньше значения узла, а все значения в правом поддереве больше.
- Для проверки можно использовать рекурсивный подход с отслеживанием допустимых диапазонов значений для каждого узла.
- Как изменить реализацию для работы с любыми типами данных в узлах дерева?
Реализация с числами в узлах на картинке 👆🏻
❓ Какие есть методы в Stream API?
1️⃣ Промежуточные операции (Intermediate) - эти методы возвращают новый Stream, позволяя строить конвейеры:
- filter(Predicate<T> predicate) — фильтрация элементов.
- map(Function<T, R> mapper) — К каждому элементу применяется функция, возвращается одно значение.
- flatMap(Function<T, Stream<R>> mapper) — К каждому элементу применяется функция, возвращается поток для каждого значения. Затем все потоки объединяются в один общий поток.
- sorted(Comparator<T> comparator) — сортировка.
- distinct() — удаление дубликатов.
- limit(long maxSize) / skip(long n) — ограничение или пропуск элементов.
2️⃣ Терминальные операции (Terminal) - эти методы завершают поток и возвращают результат:
- forEach(Consumer<T> action) — выполнение действия для каждого элемента.
- collect(Collector<T, A, R>) — преобразование в коллекцию или другой объект.
- reduce(BinaryOperator<T> accumulator) — агрегация.
- count() — количество элементов.
- anyMatch, allMatch, noneMatch(Predicate<T>) — проверки условий.
- findFirst(), findAny() — поиск элементов.
3️⃣ Параллельные операции - для работы с большими данными:
- parallel() — перевод в параллельный поток.
- sequential() — возврат к последовательному выполнению.
4️⃣ Создание потоков:
- Stream.of(T... values) — из значений.
- Arrays.stream(T[] array) — из массива.
- Stream.generate(Supplier<T>) / Stream.iterate(T seed, UnaryOperator<T>) — создание бесконечных потоков.
❓ Что означает ключевое слово native?
Ключевое слово native обозначает, что метод реализован не на Java, а, как правило, на языке C или C++. Такие методы, называемые "native-методами", позволяют Java-классам взаимодействовать с кодом на уровне операционной системы или с другими программами, что полезно при работе с аппаратными ресурсами или для повышения производительности в специфичных задачах. Native-методы подключаются через JNI (Java Native Interface), который предоставляет мост между Java и низкоуровневым кодом.
Стань Java-разработчиком с нуля до middle за 6 месяцев с гарантией трудоустройства с зарплатой 140 000+
Образовательный проект EdMe открывает набор на курс Java-разработки для начинающих программистов и тех, кто хочет освоить Java с нуля.
EdMe специализируется на подготовке высококвалифицированных IT-специалистов с уникальной моделью оплаты – после трудоустройства, чтобы сделать качественное IT-образование доступным для каждого, независимо от финансовых возможностей.
▪️ От вас нужно лишь желание учиться и готовность уделять от 15 часов в неделю на занятия.
▪️ Программа охватывает Java Core, работу с базами данных (HIBERNATE), фреймворки Spring, GIT, и подготовку к техническим собеседованиям.
▪️Практический опыт – вы будете работать над реальным проектом, развивая практические навыки.
▪️Индивидуальное менторство – ментор проведёт вас по короткому пути, объясняя, что и как учить для быстрого освоения навыков, подготовит вас к успешному прохождению собеседований.
▪️Гарантия трудоустройства: 98,9% выпускников получают оффер за 34 дня.
▪️Высокая зарплата со старта от 140 000 ₽. Мы заинтересованы в вашем успехе и поможем получить наиболее конкурентный оффер.
▪️Оплата после трудоустройства, 20% от зарплаты в течение 18 месяцев.
🗓 Старт обучения: ноябрь 2024.
Чтобы начать учиться нужно оставить заявку на сайте EdMe.pro. Отбор включает несложное тестовое задание, которое под силу выполнить человеку без опыта, и собеседование.
Реклама. ООО "БАКСЭТ", ИНН 4345115602. Erid 2Vtzqv9jxyc
❓ Что такое дедлок, и как его избежать?
Дедлок (взаимная блокировка) — это ситуация, при которой два или более потока навсегда блокируют друг друга, ожидая освобождения ресурсов, которые каждый из них удерживает. Такой "замкнутый круг" возникает, если два потока пытаются получить доступ к ресурсам, уже занятым друг другом.
🎯 Пример: A захватил ресурс 1 и пытается получить доступ к ресурсу 2, а поток B в это же время захватил ресурс 2 и пытается получить доступ к ресурсу 1. Это приведёт к дедлоку, так как оба потока будут в бесконечном ожидании.
💻 Как избежать:
- Гарантировать, что все потоки запрашивают ресурсы в одинаковом порядке.
- Использование tryLock()
- Избегать слишком большого количества вложенных синхронизированных блоков, чтобы снизить вероятность взаимных блокировок.
Endi mavjud! Telegram Tadqiqoti 2025 — yilning asosiy insaytlari 
