Библиотека собеса по Java | вопросы с собеседований
الذهاب إلى القناة على Telegram
Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/08c603b6 Для обратной связи: @proglibrary_feeedback_bot
إظهار المزيد6 495
المشتركون
+124 ساعات
+137 أيام
+1530 أيام
أرشيف المشاركات
❓ В чём разница между 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().
+1
👀 Задача: Разработка высоконагруженного сервиса кеширования (middle+)
В компании возникла необходимость повысить производительность системы за счёт внедрения распределённого кеша. Ваша задача — спроектировать и реализовать высоконагруженный сервис кеширования, обеспечивающий быструю и надёжную работу в условиях интенсивного использования.
▪️ Условия:
1. Высокая доступность: сервис должен быть устойчив к сбоям и обеспечивать непрерывную работу.
2. Масштабируемость: возможность горизонтального масштабирования для обработки увеличивающегося объёма данных.
3. Консистентность данных: обеспечение согласованности данных между узлами кеша.
4. Управление устареванием: реализация механизма автоматического удаления устаревших данных из кеша.
💡 Ключевые моменты:
— Выбор технологии: определение подходящего решения для распределённого кеширования (например, Redis, Memcached или собственная реализация).
— Репликация и шардирование: обеспечение надёжности и производительности через распределение данных и их дублирование.
— Алгоритмы замещения: выбор и реализация стратегий удаления устаревших или редко используемых данных (например, LRU, LFU).
✔️ Решение:
Использовать Redis в режиме кластеризации для обеспечения распределённого хранения данных. Настроить репликацию для повышения отказоустойчивости и реализовать механизм шардирования для равномерного распределения нагрузки. Применить алгоритм LRU (Least Recently Used) для автоматического удаления устаревших данных. Внедрить системы мониторинга (например, Prometheus) и логирования для оперативного отслеживания состояния кеша и быстрого реагирования на возможные проблемы.
Реализация на картинке 👆🏻
💬 Обратная связь
Какое ощущение вызывают задачи последний месяц?
😁 — Вопросы скучные и слишком простые
👍🏼 — Вопросы нормальные
🔥 — Много нового и интересного
🧑💻 Статьи для 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 марта приглашаем вас на прямой эфир, где мы подробно разберем ряд Тейлора, собственные векторы и другие ключевые понятия в 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]Repost from Библиотека C/C++ разработчика | cpp, boost, qt
Документация PostgreSQL — лучший источник знаний о СУБД. Но она отличается огромным объемом: не каждый разработчик осилит 3024 страницы формата А4.
Опытный бэкендер составил список самых важных сведений, которые ему самому хотелось бы знать перед началом работы с PostgreSQL. Эта подборка сэкономит вам несколько недель изучения документации, и скорее всего, пригодится для работы с другими СУБД.
👉 Список самого важного
📊 Как себя чувствует IT-рынок в 2025 году?
Друзья, запускаем важное исследование рынка труда в IT!
Нам очень важно понять:
• Как изменились зарплаты
• Что происходит с наймом
• Есть ли сокращения или рост
🔐 Опрос полностью анонимный
⏱️ Займёт всего 3-5 минут
📈 Результаты опубликуем в подробной статье
Ваши ответы помогут составить реальную картину происходящего в индустрии.
🔗 Пройти опрос
Совет на 2025-й — будьте осторожнее с выбором работы.
IT-рынок штормит: массовые сокращения, заморозка найма, снижение зарплат. В такое время особенно важно отличать стоящие офферы от проходных.
Знакомо? Открываешь вакансию, а там: «Ищем middle-разработчика с опытом 10 лет, знанием 15 языков и готовностью работать за печеньки. Офис в Челябинске, релокация за ваш счет» 🤦♂️
Чтобы не тратить время на сотни сомнительных предложений, подпишитесь на IT Job Hub. Там мы отфильтровываем весь мусор и публикуем только избранные вакансии в стабильных компаниях:
— Зарплаты на уровне рынка, а не на уровне голодного студента
— Никаких «мы молодая и дружная семья» — только адекватные условия
— Проверенные работодатели, а не стартапы из сомнительных сфер
Вакансии удобно разбиты по тегам: #python #java #go #data #devops и по другим направлениям. Без воды и лишнего спама — только проверенные вакансии в знакомых компаниях.
Подписывайтесь, если не хотите упустить работу мечты → @proglib_jobs
❓ Что такое переопределение методов?
Переопределение метода (Method Overriding) — это процесс, при котором подкласс предоставляет свою реализацию метода, уже определённого в родительском классе.
🔹 Основные правила
— Метод в подклассе должен иметь ту же сигнатуру.
— Должен быть такой же или более широкий уровень доступа.
— В подклассе можно ослабить ограничения исключений, но нельзя добавить новые.
— Если метод в родительском классе объявлен как final, static или private, его нельзя переопределить.
👉 Интенсив «Архитектуры и шаблоны проектирования» для middle и senior-разработчиков
Проверьте свои знания, ответив на 8 вопросов – https://proglib.io/w/5f150300
🧐 Кому подойдет?
Разработчикам, которые знают любой объектно-ориентированный язык программирования и хотят углубиться в архитектурные паттерны.
🎮 Как проходит обучение?
В течение всего интенсива вы будете создавать игру «Звездные войны» и применять ключевые архитектурные паттерны. В процессе изучите:
– Как строить гибкую архитектуру, которая не замедляет разработку
– Как применять IoC-контейнеры и писать модульные тесты
– Как использовать SOLID за пределами ООП
– Как внедрять CI/CD и снижать технический долг
👉 Подробная программа обучения
А по промокоду MIDDLE до 28 февраля вы получите дополнительную скидку на обучение
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
