Библиотека собеса по Java | вопросы с собеседований
6.38K subscribers
360 photos
5 videos
217 links
Вопросы с собеседований по Java и ответы на них.

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

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

Для обратной связи: @proglibrary_feeedback_bot
加入频道
Как и где Spring ищет бины?

Spring ищет бины с помощью сканирования классов в указанных пакетах, используя аннотации (@Component, @Service, @Repository, @Controller и кастомные с @Component внутри).

Сканирование начинается с пакета, переданного в @ComponentScan или (по умолчанию) из того, где находится @SpringBootApplication (которая включает @ComponentScan).

Если бин не помечен аннотацией, его можно зарегистрировать вручную через @Bean в @Configuration-классе, BeanDefinitionRegistry или XML-конфиг.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Как бы вы оптимизировали запрос с JOIN?

Создание индексы на колонках, которые используются для соединений. Это ускорит поиск строк, особенно если соединяемые таблицы большие.

Если возможно, уменьшить размер данных, участвующих в соединении. Для этого можно использовать подзапросы или фильтровать данные до соединения.

Использование правильного типа JOIN.

EXPLAIN для анализа выполнения запроса и выявления узких мест. Это покажет, как именно СУБД обрабатывает запрос и на каких этапах происходят замедления.

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

Рассмотреть варианты изменения структуры БД (например, денормализация).

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
В чём разница между дизайном и архитектурой ПО?

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

Дизайн — это низкоуровневая детализация внутри этих модулей: какие классы, как устроены их зависимости, шаблоны проектирования (design patterns), структура методов и данных.

🐸 Библиотека собеса по 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
Чем ApplicationContext отличается от BeanFactory?

🔹 BeanFactory — минимальное ядро DI контейнера. Способен:

Загружать и управлять бинами.
Создавать их по мере необходимости (лениво).
Делать DI и обращаться по имени/типу.

🔹 ApplicationContext = BeanFactory + плюшки:

Поддержка i18n (MessageSource).
Поддержка событий (ApplicationEventPublisher).
Поддержка автоматической загрузки бинов (@ComponentScan, @Configuration, @Autowired, @Value и др.).
Чтение из аннотированных конфигураций (@Bean, @Component, и т.д.).
Интеграция с Spring AOP.
Расширенный SPI — Environment, ResourceLoader, ApplicationContextAware и пр.

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

В основе Spring Framework лежит принцип Inversion of Control (IoC), а конкретнее — его реализация через Dependency Injection (DI). Spring управляет созданием и связыванием объектов вместо того, чтобы код делал это вручную. Плюс — модульность, слабое зацепление компонентов, тестируемость.

Также в базу заложены Aspect-Oriented Programming (AOP) для управления сквозной логикой (например, логирование, безопасность) и контейнер для управления жизненным циклом бинов.

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

Паттерны проектирования — это проверенные временем шаблоны решений типовых задач в проектировании софта. Они помогают писать гибкий, расширяемый и поддерживаемый код.

Существует три группы паттернов:

Порождающие (как создавать объекты): Singleton, Factory Method, Builder.
Структурные (как устроить отношения между объектами): Adapter, Decorator, Composite.
Поведенческие (как объекты взаимодействуют): Observer, Strategy, Command.

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

1. Простое кеширование с использованием коллекций

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

2. LRU (Least Recently Used) кеширование

Этот метод используется, когда необходимо удалять из кеша давно используемые объекты. Это можно реализовать через LinkedHashMap, у которого есть встроенная поддержка порядка доступа. Подходит для кеширования, где важно ограничить размер кеша и удалять старые данные по мере заполнения.

3. Использование слабых и мягких ссылок


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

WeakReference — используется для более "легких" объектов, которые могут быть собраны сборщиком мусора сразу, как только на них не будет ссылок. Это подходит для краткоживущих данных.


4. Кеш с ограничением по времени (Time-based Caching)

Данные в таком кеше автоматически удаляются или обновляются после заданного времени. Это особенно полезно для данных, которые устаревают со временем, например, результаты запросов к базе данных или API.

5. Распределённое кеширование

Если приложение распределено, кеширование можно реализовать с использованием внешних инструментов, таких как Redis или Memcached, которые позволяют кешировать данные на уровне нескольких серверов и обеспечивать консистентность данных в распределённых системах.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выбрать для проекта — Gradle или Maven?

▪️ Maven — это инструмент с более статичной и декларативной конфигурацией. Maven хорош для стандартных проектов, где нет сложных кастомизаций. Его основное преимущество — это простота и "прозрачность".

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

Он также быстрее, благодаря своей системе инкрементальных сборок. Кроме того, Gradle поддерживает использование зависимостей и плагинов из Maven, что позволяет комбинировать два инструмента.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 IT Breaking Memes — 30 000 ₽ за самую смешную IT-новость

Библиотека программиста запускает конкурс, который взорвет вашу ленту: создайте самую смешную альтернативную версию реальной IT-новости!

👾 Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переписываете ее так, чтобы смеялись все.
3. Получаете деньги и славу.

🏆 Призы:
- 1 место: 30 000 ₽ + статус ведущего нового юмористического IT-канала
- 2 и 3 место: по 5 000 ₽ + вечный почет в IT-сообществе

Пример:
Реальная новость: «Гугл создала модель для общения с дельфинами».

Смешная альтернатива: «Нейросеть от Гугл обрабатывает видеопоток с камеры в свинарнике. ИИ следит, сколько свинья находится возле кормушки, не отталкивают ли ее собратья. Недокормленных докармливают, а переевшие пропускают следующую кормешку».

📅 Сроки: с 29 апреля по 11 мая включительно

Для участия отправьте свою смешную новость в гугл-форму: https://forms.gle/6YShjgfiycfJ53LX8

Ждем ваших новостей!
В чем разница между композицией и агрегацией?

Композицией и агрегацией называют разные типы отношений между объектами в ООП.

🔵 Композиция — это более сильная форма связи, когда один объект является частью другого, и его существование не может быть независимым от контейнера. То есть, если объект-контейнер уничтожен, все его компоненты тоже уничтожаются. Пример: класс Дом и класс Комната. Комната не может существовать без дома, и если дом уничтожен, комнаты исчезнут.

🔵 Агрегация — это более слабая форма связи, когда один объект использует другой, но оба могут существовать независимо. То есть, если контейнер уничтожен, его компоненты могут продолжать существовать. Пример: класс Университет и класс Студент. Студент может быть связан с университетом, но его существование не зависит от того, существует ли университет.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Java-разработчик в команду MAX в VK, Москва

Ребята разрабатывают крупнейший мессенджер в России, который будет включать в себя денежный сервис, звонки, искусственный интеллект, мини-приложения и много чего ещё. Сейчас они ищут Java-инженера с опытом в масштабировании сервисов, архитектуре высоконагруженных систем и проектировании надёжных решений.

Нужен опыт в Java от 3-х лет, уверенное знание алгоритмов, опыт многопоточного программирования и понимание распределённых систем.

Если хотите расти вместе с проектом — откликайтесь!
Почему микросервис виснет?

Q: В микросервисе на Spring Boot с REST API начали замечать зависания и таймауты при обращении к стороннему API. Подключение через RestTemplate. Как можно диагностировать и устранить проблему?

A: Проблема, скорее всего, в отсутствии или неправильной настройке таймаутов у RestTemplate. По умолчанию они не выставлены, и поток может висеть бесконечно, дожидаясь ответа от внешнего сервиса.

Что делать:

Проверить и настроить таймауты (.setConnectTimeout(Duration.ofSeconds(Х)) и .setReadTimeout(Duration.ofSeconds(Х)) )
Добавить Circuit Breaker (например, через Resilience4j) — чтобы сервис не падал, если внешнее API умирает.
Логировать время ответа, чтобы видеть деградацию раньше.

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

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

На практике встречаются такие антипаттерны:

▪️ God Object / God Class – класс, берущий на себя слишком много ответственности, нарушая принцип единственной ответственности (SRP).
▪️ Spaghetti Code – код без чёткой структуры и связей, сложно читаемый и сопровождаемый.
▪️ Golden Hammer – использование одного известного подхода (или технологии) для всех задач, независимо от уместности.
▪️ Lava Flow – фрагменты устаревшего кода, которые остались в системе без ясного понимания их назначения, но продолжают использоваться.
▪️ Copy-Paste Programming – дублирование кода вместо выделения повторяющейся логики.
▪️ Premature Optimization – оптимизация до выявления реальных узких мест, часто усложняющая систему без ощутимой пользы.
▪️ Magic Numbers / Strings – использование "жёстко забитых" значений вместо констант с понятными именами.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
В чём смысл CAP-теоремы?

CAP-теорема утверждает, что распределённая система не может одновременно гарантировать все три свойства:

▪️ Consistency (согласованность) — все узлы видят одинаковые данные в одно и то же время
▪️ Availability (доступность) — каждый запрос получает ответ, даже если часть системы вышла из строя
▪️ Partition Tolerance (устойчивость к разделению) — система продолжает работать, несмотря на сетевые сбои, нарушающие связь между узлами.

Согласно теореме, в условиях сетового разделения, система должна выбирать между доступностью и согласованностью.

Пример:

▪️ CP-система жертвует доступностью ради согласованности.
▪️ AP-система жертвует согласованностью ради доступности.

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

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

🔥 — Удобно, из контекста можно понять, какие части спрятаны
🌚 — Неудобно, и так всё понятно, лучше прятать всё
😁 — Есть предложения по улучшению (в комменты)

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

ACID — это набор принципов, которые обеспечивают надежность и целостность базы данных при обработке транзакций:

▪️ Atomicity (Атомарность) — транзакция выполняется полностью или не выполняется вовсе. Если часть транзакции не может быть выполнена, все изменения откатываются, как если бы транзакция не была запущена.

▪️ Consistency (Согласованность) — транзакция переводит базу данных из одного согласованного состояния в другое. Все правила целостности данных должны соблюдаться.

▪️ Isolation (Изолированность) — изменения, сделанные одной транзакцией, недоступны другим транзакциям до тех пор, пока текущая транзакция не завершится. Это предотвращает конфликты при параллельной работе с базой данных.

▪️ Durability (Долговечность) — после завершения транзакции все изменения фиксируются и сохраняются в базе данных, даже если система выйдет из строя.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Конкурс: 30 000 ₽ за самую смешную IT-новость

Напоминаем о конкурсе «Библиотеки программиста»: напишите самую смешную версию реальной новости про технологии.

👾 Правила просты:
1. Берете настоящую новость из мира технологий.
2. Переписываете ее так, чтобы смеялись все.
3. Получаете деньги и славу.

🎁 Призы:
- 1 место: 30 000 ₽ + статус ведущего нового юмористического IT-канала
- 2 и 3 место: по 5 000 ₽ + вечный почет в IT-сообществе

🏆 Как будем оценивать:
Мы выложим новости всех участников в одном из наших телеграм-каналов. Те новости, которые наберут больше всего охвата, войдут в шорт-лист. Из шорт-листа подписчики и жюри выберут победителя.

📅 Сроки: прием новостей до 11 мая включительно

Для участия отправьте свою смешную новость в гугл-форму: https://forms.gle/6YShjgfiycfJ53LX8

Осталась неделя — ждем ваших новостей!