Библиотека собеса по Java | вопросы с собеседований
6.35K 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: как объяснять и распространять значимые идеи

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

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

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

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

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

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

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

Реализация на картинке 👆🏻
Please open Telegram to view this post
VIEW IN TELEGRAM
Можно ли все методы в классе пометить как synchronized?

Неверно: Да, пометить весь класс как synchronized

✔️ Правильный ответ: Да, однако весь класс пометить как synchronized нельзя. Ключевое слово synchronized применяется только к методам или блокам кода внутри класса. Если необходимо синхронизировать доступ ко всем методам класса, это придется сделать вручную, добавляя synchronized к каждому методу.
Please open Telegram to view this post
VIEW IN TELEGRAM
Какие преимущества и подводные камни могут возникнуть при использовании @Data из Lombok?

🔹 Преимущества:

- Автоматически генерирует getter/setter, toString, equals, hashCode и constructor.
- Меньше шаблонного кода, больше концентрации на бизнес-логике.

🔹 Подводные камни:

- Потенциальная рекурсия в toString для связанных объектов.
- Автоматическая генерация всех методов может включить ненужные поля, что негативно скажется на производительности или логике.
- Небезопасно для JPA-сущностей: можно включить ленивые поля в equals или hashCode.

Рекомендация: Используйте @Data для DTO или простых классов, а для сущностей JPA применяйте аннотации @Getter, @Setter и выборочные настройки вручную.
Please open Telegram to view this post
VIEW IN TELEGRAM
Какие архитектурные паттерны проектирования есть и кратко опишите?

Layered Pattern — деление системы на слои: представление, бизнес-логика, доступ к данным.
Клиент-Сервер — разделение системы на клиентов, которые запрашивают услуги, и серверов, которые их предоставляют.
Микросервисы — деление системы на независимые сервисы, которые можно разворачивать отдельно.
Event-Driven Architecture (Событийно-ориентированная архитектура) — система реагирует на события и запускает процессы.
MVC, MVP, MVVM — разделение данных, пользовательского интерфейса и логики обработки.
SOA (Сервис-Ориентированная Архитектура) — приложения строятся из повторно используемых сервисов.
P2P — каждый узел системы является и клиентом, и сервером.
Брокер — использование посредника для управления коммуникациями между компонентами.
Гексагональная архитектура — изоляция основной логики от внешних систем через адаптеры.
CQRS — разделение операций на чтение и запись для оптимизации.
Pipe-and-Filter — обработка данных через серию шагов, соединённых трубами.
Cloud-Native — архитектура, оптимизированная для облака с микросервисами и контейнерами.
Please open Telegram to view this post
VIEW IN TELEGRAM
ℹ️ Что такое 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).
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое маркерный интерфейс?

Маркерный интерфейс — это интерфейс без методов и полей, служащий для передачи дополнительной метаинформации классу. Примеры в Java — Serializable и Cloneable. Они сигнализируют JVM или библиотекам о том, как работать с объектами этих классов. Например, Serializable указывает, что объект может быть сериализован.
Please open Telegram to view this post
VIEW IN TELEGRAM
ℹ️ Что такое динамическое связывание?

Динамическое связывание — это процесс, при котором вызов метода определяется во время выполнения программы, а не на этапе компиляции. Это возможно благодаря механизму полиморфизма.
Например, если метод переопределён в классе-наследнике, JVM решает, какую версию метода вызывать (из родительского или дочернего класса), только во время выполнения. Или когда объект создаётся на основе интерфейса, вызов метода также определяется динамически.

📌 Пример:

class Animal {
void sound() { System.out.println("Animal sound"); }
}

class Dog extends Animal {
@Override
void sound() { System.out.println("Bark"); }
}

Animal animal = new Dog();
animal.sound(); // Вывод: Bark


В этом коде тип переменной animal определён на этапе компиляции (Animal), но метод sound() вызывается из Dog, потому что объект определяется динамически во время выполнения.
Please open Telegram to view this post
VIEW IN TELEGRAM
Подготовься к собеседованию на позицию Data Scientist!

Профессия Data Scientist становится все более востребованной, и компании ищут специалистов, способных превращать данные в ценные инсайты. Но как успешно пройти техническое собеседование?

Мы собрали 10 типичных задач, которые могут встретиться на собеседовании, и эффективные подходы к их решению:

1. Внешнее и тензорное произведение

2. One-hot кодировка

3. Мониторинг осадков

4. Симуляция бросков кубиков в «Монополии»

5. Бурение скважин для добычи золота

6. Вычисление свертки

7. Бэктестинг торговой стратегии

8. Прогноз оттока клиентов с помощью логистической регрессии

9. Обнаружение спама с использованием дерева решений

10. Предсказание цен на квартиры с помощью линейной регрессии

Чтобы начать решать задачи, достаточно ответить на четыре простых вопроса по этой ссылке и получить доступ к вводным занятиям курса Математика для Data Science и 10 задачам.
Что такое Lazy Initialization?

Lazy Initialization (ленивая инициализация) — это подход, при котором объект, ресурс или данные создаются и инициализируются только при первом использовании. Это позволяет сократить затраты на память и процессорное время, особенно если ресурс может никогда не понадобиться в ходе выполнения программы.

Зачем это нужно?

▪️ Оптимизация производительности. Тяжёлые операции, такие как загрузка данных из базы или инициализация сложных объектов, выполняются только при необходимости.
▪️ Экономия ресурсов. Позволяет избежать выделения памяти или загрузки данных до их реального использования.
Please open Telegram to view this post
VIEW IN TELEGRAM
💾 CDC vs Outbox: как решить проблему двойной записи в распределенной системе

В распределённых системах согласованность данных часто становится настоящим вызовом. Особенно это касается сценариев, где требуется выполнить несколько операций в разных системах одновременно.

Как избежать проблем двойной записи? Современные подходы, такие как захват изменений данных (CDC) и паттерн Outbox, предлагают интересные решения. Эти методики позволяют поддерживать целостность данных, избегать сбоев и минимизировать риски.

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

🔗 Читать статью
🔗 Зеркало
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования

🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion

#️⃣C#

Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel

☁️DevOps

Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования

🐘PHP

Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты

Java

Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту

🦫Go

Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go

🧠C++

Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие каналы

Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *

* Организация Meta запрещена на территории РФ
🎨 Новый канал для вдохновения — UX in GIF

Мы запустили свежий канал, где делимся идеями для дизайна интерфейсов. Всё самое стильное, оригинальное и вдохновляющее теперь в одном месте.

📌 Чем полезен канал?

→ Идеи для дизайна интерфейсов.
→ Анимации, которые можно повторить или адаптировать.
→ Лёгкий способ искать вдохновение перед новым проектом.

👉 Подписывайтесь и вдохновляйтесь: UX in GIF
Please open Telegram to view this post
VIEW IN TELEGRAM
В чем разница между StackOverflowError и OutOfMemoryError?

🔹 StackOverflowError возникает при переполнении стека вызовов. Это связано с глубокой рекурсией или избыточной вложенностью методов. Стек — это ограниченный объем памяти, выделенный для хранения локальных переменных и контекста выполнения.

🔹 OutOfMemoryError возникает, если JVM исчерпывает память в куче или других областях (например, Metaspace). Это может происходить из-за утечек памяти, создания огромных объектов или нехватки ресурсов.
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое BeanPostProcessor?

BeanPostProcessorинтерфейс Spring, позволяющий вмешиваться в процесс инициализации бинов.

Он предоставляет два метода:
▪️ postProcessBeforeInitializationвызывается до инициализации бина.
▪️ postProcessAfterInitializationвызывается после инициализации бина.

Применяется для кастомизации бинов: логирование, валидация, проксирование (AOP, транзакции) и т.д.

Как работает?

1️⃣ Spring ищет все реализации BeanPostProcessor.
2️⃣ Методы применяются ко всем бинам в контексте.
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое Prototype Scope в Spring?

Prototype Scope — это один из типов областей видимости (scope) бинов в Spring. Если бин настроен как @Scope("prototype"), то каждый раз, когда вы запрашиваете этот бин у контейнера Spring, создается новый экземпляр объекта.

Зачем нужен?

▪️ Полезен, если у бина есть изменяемое состояние, которое не должно разделяться между потоками или пользователями.
▪️ Каждый запрос получает "чистый" объект, что упрощает работу с данными, привязанными к конкретному потоку, запросу или контексту.
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое ApplicationContext в Spring?

ApplicationContext — это центральный интерфейс контейнера Spring, который загружает метаданные конфигурации из XML-файлов, Java-классов или аннотаций, создаёт бины и управляет ими на протяжении всего жизненного цикла приложения, а также предоставляет расширенные функции для разработки приложений. Он является расширением BeanFactory и добавляет дополнительные возможности, такие как поддержка аннотаций, автоматическое связывание зависимостей, интернационализацию и публикацию событий.
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

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

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
👀 Задачи с собеседований: Поиск подмассива с максимальной суммой (middle)

— Дан массив целых чисел, необходимо найти подмассив с наибольшей суммой и вернуть эту сумму.

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

- Подмассив — это непрерывная последовательность элементов исходного массива.
- Требуется определить такую последовательность, сумма элементов которой максимальна.
- Эффективное решение задачи достигается с помощью алгоритма Кадане, который позволяет найти максимальную сумму подмассива за линейное время O(n).

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