Библиотека собеса по Java | вопросы с собеседований
Open in Telegram
Вопросы с собеседований по Java и ответы на них. По рекламе: @tproger_sales_bot Учиться у нас: clc.to/3wECtA Для обратной связи: @proglibrary_feeedback_bot
Show more6 378
Subscribers
-324 hours
-237 days
-5530 days
Posts Archive
❓ Где хранятся объекты?
Объекты хранятся в heap (куче). Ссылки на объекты при этом могут жить в стеке (локальные переменные), в heap (поля других объектов) или в регистрах CPU (оптимизация JIT).
🐸 Библиотека собеса по Java
#core
❓ Чем unit-тесты отличаются от интеграционных?
Unit-тесты проверяют один изолированный компонент в отрыве от внешних зависимостей. Всё, что не тестируем, заменяем моками. Работают быстро, детерминировано, запускаются при каждом билде.
Интеграционные тесты проверяют взаимодействие нескольких компонентов, например, сервис + репозиторий + реальная БД. Здесь уже поднимается контекст, идут реальные вызовы. Работают медленнее, но ловят то, что unit-тесты пропустят: неправильный SQL, проблемы с транзакциями, несовместимость бинов.
🐸 Библиотека собеса по Java
#tests
❓ Что такое Spring Data JPA?
Spring Data JPA — это абстракция над JPA, упрощающая работу с базами данных.
Вместо написания DAO вручную, создаёте интерфейс, и Spring генерирует реализацию.
Поддерживает:
— автогенерацию методов по naming convention
— @Query для кастомных запросов
— Paging и Sorting из коробки
— Specification для динамических запросов
🐸 Библиотека собеса по Java
#spring
❓ Что такое Spring Boot Actuator?
Actuator предоставляет production-ready функции для мониторинга и управления приложением.
Эндпоинты:
→ /actuator/health — статус приложения
→ /actuator/metrics — метрики (память, потоки, HTTP запросы)
→ /actuator/env — переменные окружения
→ /actuator/loggers — управление уровнями логирования
Можно создавать кастомные эндпоинты. Важно: закрывайте чувствительные эндпоинты в production через Spring Security.
🐸 Библиотека собеса по Java
#spring
✔️ Spring-тест: @RateLimit аннотация для методов
Напишите production-ready Spring компонент 👇
📦 Задание
Реализуйте кастомную аннотацию @RateLimit, которая ограничивает количество вызовов метода с использованием Spring AOP.
🔹 Требования
— Использовать Spring AOP
— Потокобезопасность
— Кэш лимитов
— Учитывать имя метода + параметры
— Custom exception при превышении
Ставьте → 🔥, если нравится формат. Если нет → 🤔
💬 Решения под спойлер. Сравним, какое будет лучше.
🐸 Библиотека собеса по Java
#practise
❓ Что такое Fail-Safe итератор?
Fail-Safe итератор работает с копией коллекции и не бросает ConcurrentModificationException при модификации.
Примеры: CopyOnWriteArrayList, ConcurrentHashMap.
Особенности:
— не видят изменения, сделанные после создания итератора
— потребляют больше памяти (копия данных)
— подходят для сценариев с редкими изменениями
🐸 Библиотека собеса по Java
#core
❓ Что такое Autoboxing и Unboxing?
Autoboxing — автоматическое преобразование примитива в класс-обёртку (int → Integer).
Unboxing — обратное преобразование (Integer → int).
Удобно, но есть подводные камни
— возможен NullPointerException при unboxing null
— снижает производительность (создание объектов)
— проблемы с == (сравнивает ссылки, а не значения)
🐸 Библиотека собеса по Java
#core
❓ Для чего аннотация @Cacheable в Spring?
@Cacheable кеширует результат метода. При повторном вызове с теми же параметрами метод не выполняется, возвращается закешированное значение.
Требует @EnableCaching. По умолчанию использует ConcurrentHashMap, но можно подключить Redis, Ehcache, Caffeine.
🐸 Библиотека собеса по Java
#spring
🔴 Завтра тестовое собеседование с Java-разработчиком
11 февраля(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
📂 Сергей Чамкин, старший разработчик из Uzum, ex-WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Cергей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Сергею
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама.
О рекламодателе.
❓ Опишите поведение аннотации @Autowired
@Autowired — это аннотация Spring Framework для автоматического внедрения зависимостей. Она может применяться к конструкторам, сеттерам, полям и методам.
Spring ищет подходящий бин в контексте по типу. Если находит один бин нужного типа — внедряет его. Если бинов несколько — выбрасывает исключение, если не указан квалификатор через @Qualifier. Если бин не найден — тоже выбрасывает исключение, если только не установлен параметр required = false.
Начиная с Spring 4.3, если у класса один конструктор, @Autowired можно опустить — Spring автоматически использует его для внедрения. Это считается хорошей практикой, так как делает код менее зависимым от фреймворка.
Порядок разрешения зависимостей: сначала по типу, потом по имени бина, если имя поля совпадает с именем бина. Для явного указания используют @Qualifier.
🐸 Библиотека собеса по Java
#spring
❓ Зачем нужна аннотация @RestController?
@RestController — это специализированная версия @Controller для RESTful сервисов. Объединяет @Controller и @ResponseBody.
Без @RestController пришлось бы добавлять @ResponseBody к каждому методу. Результат методов автоматически конвертируется в JSON/XML через HttpMessageConverter.
🐸 Библиотека собеса по Java
#spring
💬 Обратная связь
Какие вопросы публиковать больше?
👍🏼 — Классика с собесов, чтобы точно набить руку на ближайший
🤔 — Вопросы, которые не встречаются в каждой статье вида "N вопросов для собеса"
🔥 — Больше практики, а то одна теория
🐸 Библиотека собеса по Java
✔️ SQL-тест: Фильтрация активных рекламных кампаний
Задача из реального интервью в Google 👇
📦 Задание
Вы аналитик Google Ads. Нужно найти все объявления, которые:
— Имеют статус 'active'
— Показов больше 500,000
— Обновлены в 2024 году
Таблица google_ads на картинке. Напишите SQL-запрос для фильтрации.
Ставьте → 🔥, если нравится формат. Если нет → 🤔
💬 Решения под спойлер. Сравним, какое будет лучше.
🐸 Библиотека собеса по Java
#practise
❓ Что такое Selector в NIO?
Selector позволяет одному потоку обрабатывать множество каналов (network connections).
Selector selector = Selector.open();
channel.register(selector, SelectionKey.OP_READ);
while (true) {
selector.select(); // блокируется до события
Set<SelectionKey> keys = selector.selectedKeys();
for (SelectionKey key : keys) {
if (key.isReadable()) {
// обработка чтения
}
}
}
Один поток может обслуживать тысячи соединений. Это основа high-performance серверов (Netty, Tomcat NIO).
🐸 Библиотека собеса по Java
#core❓ Что такое Lambda выражение?
Lambda — это анонимная функция, реализующая функциональный интерфейс.
Синтаксис: (параметры) -> { тело }
Под капотом компилятор создаёт анонимный класс или использует invokedynamic для оптимизации.
🐸 Библиотека собеса по Java
#core
❓ Равен ли Double.NaN сам себе?
Double.NaN == Double.NaN возвращает false в соответствии со спецификацией IEEE 754.
NaN (Not a Number) представляет недопустимый или неопределённый результат вычислений. По определению, NaN не равен ничему, включая себя.
Для корректной проверки используйте Double.isNaN(value).
🐸 Библиотека собеса по Java
#core
❓ Что такое пропагация в транзакции?
Propagation определяет, как транзакция ведёт себя при вызове из другой транзакции.
Основные типы
— REQUIRED (default): использует текущую или создаёт новую
— REQUIRES_NEW: всегда создаёт новую, приостанавливая текущую
— MANDATORY: требует существующую, иначе исключение
— NEVER: требует отсутствие транзакции
— SUPPORTS: использует если есть, иначе работает без транзакции
🐸 Библиотека собеса по Java
#spring
❓ Что такое WeakReference и когда её использовать?
WeakReference — это слабая ссылка на объект, которая не препятствует его удалению сборщиком мусора.
Если на объект есть только weak references, GC может удалить его при нехватке памяти.
WeakReference<Data> weak = new WeakReference<>(data);
data = null;
// GC может удалить объект
Data retrieved = weak.get(); // может вернуть null
Используется в кешах (WeakHashMap), где элементы могут быть удалены при нехватке памяти, или для предотвращения memory leaks в listeners.
🐸 Библиотека собеса по Java
#jvm❓ Что делает параметр readOnly = true у @Transactional?
readOnly = true — это подсказка для оптимизации, а не строгое ограничение.
Что происходит:
— Hibernate может пропустить flush (не синхронизировать изменения с БД)
— БД может оптимизировать запрос, не создавая блокировки
— некоторые драйверы могут использовать read-only соединения
Важно: это не запрещает изменения программно. Можно вызвать save(), но изменения не гарантированно применятся. Это именно hint для оптимизации.
🐸 Библиотека собеса по Java
#spring
💬 Обратная связь
Ваш текущий грейд:
🔥 — Senior
👍🏼 — Middle
❤️ — Junior
😁 — Ещё учусь
🐸 Библиотека собеса по Java
