Библиотека собеса по Java | вопросы с собеседований
6.31K subscribers
371 photos
4 videos
287 links
Вопросы с собеседований по Java и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/08c603b6

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Что такое Propagation в Spring?

Propagation — это режимы управления транзакциями, которые определяют, как транзакции должны вести себя при вызове метода внутри другого метода, который уже находится в транзакции.

▪️ Основные режимы:

— REQUIRED (по умолчанию): если транзакция существует, то текущий метод будет работать в рамках этой транзакции. Если транзакция не существует, создается новая.

REQUIRES_NEW: создается новая транзакция, даже если уже существует текущая. Текущая транзакция будет приостановлена до завершения новой.

— NESTED: в рамках текущей транзакции создается вложенная транзакция. В случае отката внешней транзакции будет откатана и вложенная.

MANDATORY: метод должен быть вызван в рамках существующей транзакции. Если транзакции нет, выбрасывается исключение.

— NEVER: метод не должен выполняться в рамках транзакции. Если транзакция существует, выбрасывается исключение.

SUPPORTS: если транзакция существует, метод будет выполнен в ее рамках. Если транзакции нет, метод будет выполнен без транзакции.

— NOT_SUPPORTED: метод выполняется без транзакции. Если транзакция существует, она приостанавливается на время выполнения метода.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Опишите подход Test-Driven Development

Test-Driven Development (TDD) — это методология разработки программного обеспечения, при которой сначала пишутся тесты, а затем реализуется функциональность, чтобы эти тесты прошли.

Процесс включает три основных этапа:

▪️ Красный — пишем тест, который изначально не проходит (так как функциональность еще не реализована).
▪️ Зеленый — пишем минимально необходимый код для того, чтобы тест прошел.
▪️ Рефакторинг — улучшаем код, при этом тесты должны по-прежнему проходить.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое this?

this — это ссылочная переменная, доступная внутри нестатических методов и конструкторов, которая указывает на текущий экземпляр класса.

Она используется, чтобы:

Отличать поля класса от параметров метода
Вызывать другие конструкторы текущего класса через this(...)
Передавать текущий объект в качестве аргумента
Получить доступ к текущему объекту из вложенного класса.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое optimistic и pessimistic locking?

Optimistic locking — подход, при котором предполагается, что конфликты редки. Данные читаются без блокировки, а при обновлении проверяется, что никто не изменил их параллельно (обычно через version-поле). Если данные изменились — операция отклоняется, вызывается исключение, и клиент решает, что делать дальше.

Используется, например, с JPA (@Version) и хорошо работает при низкой конкуренции.

Pessimistic locking
— подход, при котором при чтении или обновлении данных сразу накладывается блокировка, чтобы другие потоки/транзакции не могли изменить их до окончания текущей операции. Это снижает риск конфликтов, но уменьшает параллелизм.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое bytecode в Java?

Bytecode — это промежуточный машинно-независимый код, в который компилируется Java-программа. Он создаётся компилятором и сохраняется в .class файлах. Этот код не исполняется напрямую процессором, а выполняется виртуальной машиной Java (JVM), которая интерпретирует или компилирует его в машинный код на лету (через JIT-компиляцию).

Bytecode позволяет Java оставаться кроссплатформенной: один и тот же .class файл можно запускать на любой платформе с установленной JVM.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
💬 Обратная связь

Ежемесячный опрос по грейдам. Проверим, сколько среди нас джедаев синьоров.
Ваш грейд:

🔥 — Senior
👍🏼 — Middle
❤️ — Junior
😁 — Ещё учусь

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое 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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Последняя неделя перед стартом курса по AI-агентам

Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место

На курсе:
разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах

📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями

И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»

👉 Курс здесь
🔍 Сегодня тестовое собеседование с Java-разработчиком

2 июля(уже сегодня!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.

Как это будет:
📂 Сергей Чамкин, старший разработчик из Uzum, ex-WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Cергей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Сергею

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot

Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqvFzMPV
Please open Telegram to view this post
VIEW IN TELEGRAM
В чем разница между == и .equals()?

== сравнивает ссылки на объекты, т.е. проверяет, указывают ли две переменные на один и тот же объект в памяти.

.equals() — это метод класса Object, который используется для проверки логического равенства объектов. По умолчанию метод работает как оператор ==, но многие классы (например, классы обёртки, коллекции), переопределяют его для сравнения значений объектов. В других случаях метод нужно переопределить вручную.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое денормализация в базах данных?

Денормализация — это процесс преднамеренного добавления избыточности в структуру базы данных для повышения производительности чтения. В отличие от нормализации, цель которой — устранить дублирование и обеспечить целостность, денормализация может включать дублирование данных, объединение таблиц или добавление агрегированных колонок.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Как устроена под капотом HashMap?

Это структура данных, основанная на хешировании, реализующая интерфейс Map. Она использует массив бакетов, где каждый элемент хранится в виде пары "ключ-значение".

Основные моменты:

🔹 Хеширование: для каждого ключа вычисляется хеш-код с помощью метода hashCode(). Этот код используется для определения индекса в массиве бакетов.

🔹 Коллизии: если два разных ключа имеют одинаковый хеш-код (коллизия), они помещаются в один бакет. До Java 8 коллизии обрабатывались с помощью связанного списка, начиная с Java 8 — с помощью сбалансированных деревьев.

🔹 Динамическое расширение: когда нагрузка достигает 75% от текущего размера массива (порог загрузки), HashMap увеличивает размер массива в два раза и перераспределяет элементы, чтобы уменьшить вероятность коллизий.

🔹 Балансировка дерева: если в бакете больше 8 элементов, то список преобразуется в сбалансированное дерево, что улучшает производительность при большом количестве коллизий.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM