Библиотека собеса по Java | вопросы с собеседований
Відкрити в Telegram
Вопросы с собеседований по Java и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/08c603b6 Для обратной связи: @proglibrary_feeedback_bot
Показати більше6 488
Підписники
+124 години
+137 днів
+1530 день
Архів дописів
❓ Что такое MVC?
MVC (Model-View-Controller) — это архитектурный шаблон, разделяющий приложение на три компонента:
▪️ Model (Модель) — содержит бизнес-логику
▪️ View (Представление) — отображает данные пользователю, получая их от модели
▪️ Controller (Контроллер) — обрабатывает входные данные (обычно от пользователя), вызывает нужные методы модели и обновляет представление
Этот подход упрощает сопровождение кода, позволяет разделить ответственность между слоями и облегчает тестирование.
🐸 Библиотека собеса по Java
❓ Какие есть методы в классе Object?
Класс Object — базовый для всех классов в Java. Он определяет поведение, доступное каждому объекту. Основные методы:
▪️ equals(Object obj) — сравнение объектов на логическое равенство
▪️ hashCode() — возвращает хеш-код объекта
▪️ toString() — строковое представление объекта
▪️ getClass() — возвращает объект Class, представляющий тип в рантайме
▪️ clone() — создает копию объекта (если поддерживает Cloneable)
▪️ finalize() — вызывается перед сборкой мусора (устарел и не рекомендуется)
▪️ wait(), notify(), notifyAll() — методы для межпоточной синхронизации
🐸 Библиотека собеса по Java
❓ Для чего нужен Garbage Collector?
Garbage Collector автоматически освобождает память, удаляя объекты, на которые больше нет ссылок. Это помогает избежать утечек памяти и ручного управления памятью.
Основные функции GC:
— Освобождение памяти.
— Предотвращение утечек памяти.
— Оптимизация работы приложения.
🐸 Библиотека собеса по Java
❓ Какие объекты стоит использовать в качестве ключей в HashMap?
Потенциальные ключи должны быть иммутабельными, а также правильно реализовывать методы equals() и hashCode().
🐸 Библиотека собеса по Java
❓ Что такое лямбда?
Лямбда — это краткий способ описания анонимной функции, которая может быть передана как аргумент или возвращена из метода. В Java лямбда-выражения реализуют функциональные интерфейсы (интерфейс с одним абстрактным методом).
Синтаксис:
(parameters) -> expressionИспользуются для упрощения работы с функциональными API (например, Stream API), сокращают бойлерплейт-код. 🐸 Библиотека собеса по Java
❓ Чем отличается ArrayList от LinkedList в Java?
ArrayList основан на массиве, LinkedList — на двусвязном списке. ArrayList быстрее при случайном доступе по индексу, но вставки и удаления в середину — дорогие, т.к. нужно сдвигать элементы.
LinkedList — наоборот: доступ по индексу медленный, но вставка и удаление в начале или середине — быстрые (при наличии ссылки на элемент).
Когда использовать:
🔹 ArrayList — если чаще нужен быстрый доступ по индексу и мало вставок/удалений.
🔹 LinkedList — если часто добавляешь/удаляешь элементы в начале или середине списка.
На практике ArrayList почти всегда предпочтительнее. LinkedList используется редко из-за своей громоздкости и плохой кэш-локальности.
🐸 Библиотека собеса по Java
❓ Как устроена под капотом HashMap?
Это структура данных, основанная на хешировании, реализующая интерфейс Map. Она использует массив бакетов, где каждый элемент хранится в виде пары "ключ-значение".
Основные моменты:
🔹 Хеширование: для каждого ключа вычисляется хеш-код с помощью метода hashCode(). Этот код используется для определения индекса в массиве бакетов.
🔹 Коллизии: если два разных ключа имеют одинаковый хеш-код (коллизия), они помещаются в один бакет. До Java 8 коллизии обрабатывались с помощью связанного списка, начиная с Java 8 — с помощью сбалансированных деревьев.
🔹 Динамическое расширение: когда нагрузка достигает 75% от текущего размера массива (порог загрузки), HashMap увеличивает размер массива в два раза и перераспределяет элементы, чтобы уменьшить вероятность коллизий.
🔹 Балансировка дерева: если в бакете больше 8 элементов, то список преобразуется в сбалансированное дерево, что улучшает производительность при большом количестве коллизий.
🐸 Библиотека собеса по Java
❓ Что такое денормализация в базах данных?
Денормализация — это процесс преднамеренного добавления избыточности в структуру базы данных для повышения производительности чтения. В отличие от нормализации, цель которой — устранить дублирование и обеспечить целостность, денормализация может включать дублирование данных, объединение таблиц или добавление агрегированных колонок.
🐸 Библиотека собеса по Java
❓ В чем разница между == и .equals()?
== сравнивает ссылки на объекты, т.е. проверяет, указывают ли две переменные на один и тот же объект в памяти.
.equals() — это метод класса Object, который используется для проверки логического равенства объектов. По умолчанию, он работает как ==, но многие классы (например, String, List и т.д.) переопределяют этот метод, чтобы сравнивать значения объектов.
🐸 Библиотека собеса по Java
🔍 Сегодня тестовое собеседование с Java-разработчиком
2 июля(уже сегодня!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
📂 Сергей Чамкин, старший разработчик из Uzum, ex-WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Cергей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Сергею
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqvFzMPV
🔥 Последняя неделя перед стартом курса по AI-агентам
Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место
На курсе:
— разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах
📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями
И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»
👉 Курс здесь
❓ Что такое SOLID?
SOLID — это аббревиатура из пяти принципов объектно-ориентированного проектирования, помогающих писать поддерживаемый и расширяемый код.
▪️ S — Single Responsibility Principle (SRP)
Каждый класс должен иметь одну и только одну причину для изменения.
▪️ O — Open/Closed Principle (OCP)
Сущности должны быть открыты для расширения, но закрыты для модификации.
▪️ L — Liskov Substitution Principle (LSP)
Объекты подклассов должны заменять объекты суперклассов без нарушения логики.
▪️ I — Interface Segregation Principle (ISP)
Лучше иметь несколько специализированных интерфейсов, чем один общий.
▪️ D — Dependency Inversion Principle (DIP)
Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба типа должны зависеть от абстракций.
🐸 Библиотека собеса по Java
💬 Обратная связь
Ежемесячный опрос по грейдам. Проверим, сколько среди нас джедаев синьоров.
Ваш грейд:
🔥 — Senior
👍🏼 — Middle
❤️ — Junior
😁 — Ещё учусь
🐸 Библиотека собеса по Java
❓ Что такое bytecode в Java?
Bytecode — это промежуточный машинно-независимый код, в который компилируется Java-программа. Он создаётся компилятором и сохраняется в .class файлах. Этот код не исполняется напрямую процессором, а выполняется виртуальной машиной Java (JVM), которая интерпретирует или компилирует его в машинный код на лету (через JIT-компиляцию).
Bytecode позволяет Java оставаться кроссплатформенной: один и тот же .class файл можно запускать на любой платформе с установленной JVM.
🐸 Библиотека собеса по Java
❓ Что такое optimistic и pessimistic locking?
Optimistic locking — подход, при котором предполагается, что конфликты редки. Данные читаются без блокировки, а при обновлении проверяется, что никто не изменил их параллельно (обычно через version-поле). Если данные изменились — операция отклоняется, вызывается исключение, и клиент решает, что делать дальше.
Используется, например, с JPA (@Version) и хорошо работает при низкой конкуренции.
Pessimistic locking — подход, при котором при чтении или обновлении данных сразу накладывается блокировка, чтобы другие потоки/транзакции не могли изменить их до окончания текущей операции. Это снижает риск конфликтов, но уменьшает параллелизм.
🐸 Библиотека собеса по Java
❓ Что такое this?
this — это ссылочная переменная, доступная внутри нестатических методов и конструкторов, которая указывает на текущий экземпляр класса.
Она используется, чтобы:
— Отличать поля класса от параметров метода
— Вызывать другие конструкторы текущего класса через this(...)
— Передавать текущий объект в качестве аргумента
— Получить доступ к текущему объекту из вложенного класса.
🐸 Библиотека собеса по Java
❓ Опишите подход Test-Driven Development
Test-Driven Development (TDD) — это методология разработки программного обеспечения, при которой сначала пишутся тесты, а затем реализуется функциональность, чтобы эти тесты прошли.
Процесс включает три основных этапа:
▪️ Красный — пишем тест, который изначально не проходит (так как функциональность еще не реализована).
▪️ Зеленый — пишем минимально необходимый код для того, чтобы тест прошел.
▪️ Рефакторинг — улучшаем код, при этом тесты должны по-прежнему проходить.
🐸 Библиотека собеса по Java
❓ Что такое Propagation в Spring?
Propagation — это режимы управления транзакциями, которые определяют, как транзакции должны вести себя при вызове метода внутри другого метода, который уже находится в транзакции.
▪️ Основные режимы:
— REQUIRED (по умолчанию): если транзакция существует, то текущий метод будет работать в рамках этой транзакции. Если транзакция не существует, создается новая.
— REQUIRES_NEW: создается новая транзакция, даже если уже существует текущая. Текущая транзакция будет приостановлена до завершения новой.
— NESTED: в рамках текущей транзакции создается вложенная транзакция. В случае отката внешней транзакции будет откатана и вложенная.
— MANDATORY: метод должен быть вызван в рамках существующей транзакции. Если транзакции нет, выбрасывается исключение.
— NEVER: метод не должен выполняться в рамках транзакции. Если транзакция существует, выбрасывается исключение.
— SUPPORTS: если транзакция существует, метод будет выполнен в ее рамках. Если транзакции нет, метод будет выполнен без транзакции.
— NOT_SUPPORTED: метод выполняется без транзакции. Если транзакция существует, она приостанавливается на время выполнения метода.
🐸 Библиотека собеса по Java
❓ Чем различаются Thread и Runnable в Java?
Thread — это класс, который представляет поток выполнения. Вы можете создать объект Thread, передав в его конструктор объект, реализующий интерфейс Runnable, или наследовать Thread и переопределить метод run().
Runnable — это интерфейс, который представляет задачу, которую можно выполнить в потоке. Он определяет единственный метод run(), который будет содержать код, выполняемый в потоке.
Thread является более "тяжелым" объектом, так как он сам управляет жизненным циклом потока, тогда как Runnable лишь описывает задачу, а поток (например, объект Thread) управляет её выполнением.
🐸 Библиотека собеса по Java
💬 Обратная связь
Какие вопросы публиковать больше?
👍🏼 — Классика с собесов, чтобы точно набить руку на ближайший
🤔 — Вопросы, которые не встречаются в каждой статье вида "N вопросов для собеса"
🔥 — Больше практики, а то одна теория
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
