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

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

Kanalga Telegram’da o‘tish

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

Ko'proq ko'rsatish
6 495
Obunachilar
+124 soatlar
+137 kunlar
+1530 kunlar
Postlar arxiv
Что происходит, если в Spring Bean с @Scope("prototype") внедрить другой Bean с @Scope("singleton")? В prototype-Bean будет всегда один и тот же экземпляр singleton-Bean, так как Singleton создаётся один раз при запуске контекста Spring и переиспользуется во всех зависимостях.

В чём разница между Comparator и Comparable? ▪️ Comparable используется для естественного порядка объектов. Класс, реализующий Comparable, должен переопределять метод compareTo(T o), который определяет порядок сортировки. ▪️ Comparator применяется, когда требуется несколько способов сортировки или невозможно изменить код сравниваемого класса. Он реализует метод compare(T o1, T o2). 📌 Главные отличия — Comparable встраивается в сам класс, Comparator – это отдельный класс. — Comparable задаёт естественный порядок, Comparator позволяет кастомизировать сортировку.

Что такое Serial Garbage Collector? Serial GC — это однопоточный сборщик мусора, работающий по принципу "Stop-the-World". Он останавливает выполнение всех потоков во время сборки мусора и использует копирующий алгоритм для молодых поколений (Young Gen) и компактирующий алгоритм для старших (Old Gen). 🔹 Как работает 1️⃣ В молодом поколении (Minor GC) используется копирующая стратегия: выжившие объекты перемещаются из Eden в Survivor, а из Survivor в Old Gen. 2️⃣ В старом поколении (Major GC / Full GC) выполняется уплотнение памяти для уменьшения фрагментации. 3️⃣ Так как GC работает в одном потоке, во время сборки остановка приложения неизбежна. 🔹 Когда использоватьВ одноядерных системах или при ограниченных ресурсах, где многопоточный GC создаст больше нагрузки. — В маленьких JVM (до 1-2 ГБ памяти), где G1 или Parallel GC будут избыточны. — В приложениях без жестких требований к паузам, например, в небольших утилитах или CLI-инструментах.

Какие проблемы могут возникнуть при использовании synchronized, и как их решать? 1️⃣ Блокировки (Blocking) — Потоки, ожидающие освобождения блокировки, простаивают, что снижает производительность. Решение: использовать ReentrantLock, который позволяет гибко управлять блокировками, включая таймауты и прерывания. 2️⃣ Взаимная блокировка (Deadlock) — Возникает, когда два потока блокируют друг друга, ожидая освобождения ресурсов. — Решение: явный порядок блокировки, использование tryLock() с таймаутом 3️⃣ Отсутствие гибкости — Synchronized не дает возможности проверки состояния блокировки. — Решение: Использовать Lock, который позволяет проверить, занята ли блокировка (isLocked()) и настроить приоритет выполнения. 4️⃣ Проблема ложного пробуждения (Spurious Wakeup) — Поток может быть пробужден без явного вызова notify(). — Решение: всегда использовать while, а не if при ожидании wait().

👀 Задача: Разработка высоконагруженного сервиса кеширования (middle+) В компании возникла необходимость повысить производите
+1
👀 Задача: Разработка высоконагруженного сервиса кеширования (middle+) В компании возникла необходимость повысить производительность системы за счёт внедрения распределённого кеша. Ваша задача — спроектировать и реализовать высоконагруженный сервис кеширования, обеспечивающий быструю и надёжную работу в условиях интенсивного использования. ▪️ Условия: 1. Высокая доступность: сервис должен быть устойчив к сбоям и обеспечивать непрерывную работу. 2. Масштабируемость: возможность горизонтального масштабирования для обработки увеличивающегося объёма данных. 3. Консистентность данных: обеспечение согласованности данных между узлами кеша. 4. Управление устареванием: реализация механизма автоматического удаления устаревших данных из кеша. 💡 Ключевые моменты: — Выбор технологии: определение подходящего решения для распределённого кеширования (например, Redis, Memcached или собственная реализация). — Репликация и шардирование: обеспечение надёжности и производительности через распределение данных и их дублирование. — Алгоритмы замещения: выбор и реализация стратегий удаления устаревших или редко используемых данных (например, LRU, LFU). ✔️ Решение: Использовать Redis в режиме кластеризации для обеспечения распределённого хранения данных. Настроить репликацию для повышения отказоустойчивости и реализовать механизм шардирования для равномерного распределения нагрузки. Применить алгоритм LRU (Least Recently Used) для автоматического удаления устаревших данных. Внедрить системы мониторинга (например, Prometheus) и логирования для оперативного отслеживания состояния кеша и быстрого реагирования на возможные проблемы. Реализация на картинке 👆🏻

💬 Обратная связь Какое ощущение вызывают задачи последний месяц? 😁 — Вопросы скучные и слишком простые 👍🏼 — Вопросы нормальные 🔥 — Много нового и интересного

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

Чем отличается ArrayList от LinkedList? ArrayList — это динамический массив, а LinkedList — двусвязный список. 🔹 Структура данных — ArrayList хранит элементы в массиве, доступ к элементу по индексу O(1). — LinkedList хранит узлы, каждый из которых содержит ссылку на следующий и предыдущий, доступ O(n). 🔹 Операции вставки и удаления — В ArrayList вставка/удаление в середине требует сдвига элементов (O(n)). — В LinkedList вставка/удаление занимает O(1), если есть ссылка на нужный узел. 🔹 Использование памяти — ArrayList хранит только данные. — LinkedList требует памяти на ссылки между элементами. 💬 Вы хоть раз использовали LinkedList? Что это был за кейс?

👀 Джуны, мидлы, сеньоры — кто есть кто
Proglib рассказывает базу в формате рилса

🤔 Основы математики в Machine Learning / Deep Learning 🗓 6 марта приглашаем вас на прямой эфир, где мы подробно разберем ря
🤔 Основы математики в Machine Learning / Deep Learning 🗓 6 марта приглашаем вас на прямой эфир, где мы подробно разберем ряд Тейлора, собственные векторы и другие ключевые понятия в ML. (ссылка) 🌟 Спикер: *Мария Горденко* – Старший преподаватель ФКН НИУ ВШЭ, НИТУ МИСИС, аспирант департамента анализа данных и искусственного интеллекта ФКН НИУ ВШЭ, а также преподаватель на курсе Алгоритмы и структуры данных в proglib academy. Место работы: Инженер-программист, ведущий эксперт НИУ ВШЭ, цифровой ассистент и цифровой консультант НИУ ВШЭ. 😮 На вебинаре вы узнаете: 🔵 Теорию вероятностей: обсудим случайные величины, вероятность, математическое ожидание и дисперсию. 🔵 Линейную алгебру: изучим векторы, матрицы, собственные векторы и собственные значения. 🔵 Математический анализ: разберем производные и разложение функций в ряд Тейлора. 🔵 Практику: применим полученные знания на реальных кейсах из области Machine Learning и Deep Learning. 🎯 Почему это важно? Понимание математических основ помогает глубже разобраться в работающих под капотом алгоритмах ML/DL и эффективно применять их на практике. 👉 Присоединяйтесь к нам и совершенствуйте свои навыки в машинном обучении! 📌 Регистрация по ссылке: https://proglib.io/w/38262362

Какие проблемы решает enum? 1️⃣ Безопасность и читаемость кода — заменяет строковые или числовые константы, делая код понятнее и исключая ошибки из-за опечаток. 2️⃣ Типобезопасность — исключает возможность присвоения некорректного значения. 3️⃣ Группировка связанных констант — позволяет логически объединять значения, относящиеся к одной категории. 4️⃣ Дополнительные возможности — может содержать методы и поля, расширяя функциональность. 5️⃣ Перформанс и память — использует внутреннюю кешированную таблицу значений, что ускоряет сравнение и доступ к значениям.

Что такое Docker? Docker — это платформа для контейнеризации, которая позволяет упаковывать приложение и его зависимости в изолированные контейнеры. ✔️ Основные преимущества ▪️ Позволяет запускать приложение в любом окружении без зависимости от хост-системы. ▪️ Облегчает развертывание и масштабирование сервисов. ▪️ Упрощает CI/CD за счёт предсказуемости окружения. ✔️ Ключевые концепции ▪️ Образ (Image) — шаблон для создания контейнера. ▪️ Контейнер (Container) — запущенный экземпляр образа. ▪️ Dockerfile — файл с инструкциями по сборке образа. ▪️ Docker Compose — инструмент для управления многоконтейнерными приложениями.

Найти работу теперь так же просто, как заказать такси 🚗 Представь, что поиск работы стал таким же удобным, как вызов такси.
Найти работу теперь так же просто, как заказать такси 🚗 Представь, что поиск работы стал таким же удобным, как вызов такси. 1️⃣ Регистрируешься за 2 минуты 2️⃣ Проходишь AI-интервью в любое время 3️⃣ Получаешь персональные вакансии и пре-офер от Сбера 💡 Без стресса, без ожидания, без звонков "через недельку" – просто бери и делай! 🔗 Попробуй прямо сейчас! 👉 https://clc.to/GkOTTA Реклама. ПАО СБЕРБАНК, ИНН 7707083893. Erid 2VtzqxUqFAv

Что такое база данных? База данных (БД) — это организованное хранилище данных, предназначенное для удобного доступа, управления и обработки информации. 🔹 Основные виды БД ▪️ Реляционные (SQL) — данные хранятся в таблицах, используются SQL-запросы (например, PostgreSQL, MySQL). ▪️ Нереляционные (NoSQL) — данные могут храниться в виде документов, графов, пар "ключ-значение" и т. д. (например, MongoDB, Redis).

В чем разница между map() и flatMap()? Оба метода используются для трансформации данных в Stream, но с ключевыми отличиями: ▪️ map(Function<T, R>) применяет функцию к каждому элементу потока и возвращает поток с преобразованными элементами (Stream<R>). ▪️ flatMap(Function<T, Stream<R>>) делает то же самое, но ожидает, что функция вернет Stream<R>, а затем "выпрямляет" вложенные потоки в один Stream<R>. 📌 Пример:
List<String> words = List.of("Hello", "World");

// map(): превращает каждое слово в список символов
List<List<Character>> mapped = words.stream()
    .map(word -> word.chars()
                     .mapToObj(c -> (char) c)
                     .toList())
    .toList();

// flatMap(): превращает каждое слово в поток символов и "сплющивает" их в один поток
List<Character> flatMapped = words.stream()
    .flatMap(word -> word.chars()
                         .mapToObj(c -> (char) c))
    .toList();

System.out.println(mapped);      // [[H, e, l, l, o], [W, o, r, l, d]]
System.out.println(flatMapped);  // [H, e, l, l, o, W, o, r, l, d]

Документация PostgreSQL — лучший источник знаний о СУБД. Но она отличается огромным объемом: не каждый разработчик осилит 302
Документация PostgreSQL — лучший источник знаний о СУБД. Но она отличается огромным объемом: не каждый разработчик осилит 3024 страницы формата А4. Опытный бэкендер составил список самых важных сведений, которые ему самому хотелось бы знать перед началом работы с PostgreSQL. Эта подборка сэкономит вам несколько недель изучения документации, и скорее всего, пригодится для работы с другими СУБД. 👉 Список самого важного

📊 Как себя чувствует IT-рынок в 2025 году? Друзья, запускаем важное исследование рынка труда в IT! Нам очень важно понять: • Как изменились зарплаты • Что происходит с наймом • Есть ли сокращения или рост 🔐 Опрос полностью анонимный ⏱️ Займёт всего 3-5 минут 📈 Результаты опубликуем в подробной статье Ваши ответы помогут составить реальную картину происходящего в индустрии. 🔗 Пройти опрос

Совет на 2025-й — будьте осторожнее с выбором работы. IT-рынок штормит: массовые сокращения, заморозка найма, снижение зарпла
Совет на 2025-й — будьте осторожнее с выбором работы. IT-рынок штормит: массовые сокращения, заморозка найма, снижение зарплат. В такое время особенно важно отличать стоящие офферы от проходных. Знакомо? Открываешь вакансию, а там: «Ищем middle-разработчика с опытом 10 лет, знанием 15 языков и готовностью работать за печеньки. Офис в Челябинске, релокация за ваш счет» 🤦‍♂️ Чтобы не тратить время на сотни сомнительных предложений, подпишитесь на IT Job Hub. Там мы отфильтровываем весь мусор и публикуем только избранные вакансии в стабильных компаниях: — Зарплаты на уровне рынка, а не на уровне голодного студента — Никаких «мы молодая и дружная семья» — только адекватные условия — Проверенные работодатели, а не стартапы из сомнительных сфер Вакансии удобно разбиты по тегам: #python #java #go #data #devops и по другим направлениям. Без воды и лишнего спама — только проверенные вакансии в знакомых компаниях. Подписывайтесь, если не хотите упустить работу мечты → @proglib_jobs

Что такое переопределение методов? Переопределение метода (Method Overriding) — это процесс, при котором подкласс предоставляет свою реализацию метода, уже определённого в родительском классе. 🔹 Основные правила — Метод в подклассе должен иметь ту же сигнатуру. — Должен быть такой же или более широкий уровень доступа. — В подклассе можно ослабить ограничения исключений, но нельзя добавить новые. — Если метод в родительском классе объявлен как final, static или private, его нельзя переопределить.

👉 Интенсив «Архитектуры и шаблоны проектирования» для middle и senior-разработчиков Проверьте свои знания, ответив на 8 вопр
👉 Интенсив «Архитектуры и шаблоны проектирования» для middle и senior-разработчиков Проверьте свои знания, ответив на 8 вопросов – https://proglib.io/w/5f150300 🧐 Кому подойдет? Разработчикам, которые знают любой объектно-ориентированный язык программирования и хотят углубиться в архитектурные паттерны. 🎮 Как проходит обучение? В течение всего интенсива вы будете создавать игру «Звездные войны» и применять ключевые архитектурные паттерны. В процессе изучите: – Как строить гибкую архитектуру, которая не замедляет разработку – Как применять IoC-контейнеры и писать модульные тесты – Как использовать SOLID за пределами ООП – Как внедрять CI/CD и снижать технический долг 👉 Подробная программа обучения А по промокоду MIDDLE до 28 февраля вы получите дополнительную скидку на обучение