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

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

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

Для обратной связи: @proglibrary_feeedback_bot
加入频道
В чем разница между композицией и агрегацией?

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

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

🔵 Агрегация — это более слабая форма связи, когда один объект использует другой, но оба могут существовать независимо. То есть, если контейнер уничтожен, его компоненты могут продолжать существовать. Пример: класс Университет и класс Студент. Студент может быть связан с университетом, но его существование не зависит от того, существует ли университет.
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

Осталась неделя — ждем ваших новостей!
Что значит ключевое слово var в Java?

Ключевое слово var (начиная с Java 10) позволяет компилятору самостоятельно выводить тип переменной на основе инициализатора. Это синтаксический сахар, упрощающий запись, но тип переменной по-прежнему строго статичен.

Использовать var стоит там, где тип очевиден, чтобы не терять читаемость.

⚠️ Ограничения:

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

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

Сервлет — это Java-класс, который обрабатывает HTTP-запросы и формирует HTTP-ответы в веб-приложениях. Он работает на стороне сервера в контейнере сервлетов (например, Tomcat), реализуя интерфейс javax.servlet.Servlet (чаще — через абстрактный класс HttpServlet).

Основная задача сервлета — выступать в роли контроллера в архитектуре MVC: принимать запросы от клиента, обрабатывать данные (либо делегировать бизнес-логике), и передавать результат обратно клиенту (обычно через HTML или JSON).

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
В чём разница между аннотациями @Controller и @RestController в Spring?

@RestController — это сокращение для @Controller + @ResponseBody.
Она используется, когда контроллер возвращает данные (JSON/XML), а не представления (JSP/HTML).

Кратко:

@Controller используется для возврата HTML через шаблонизаторы (например, Thymeleaf).
@RestController — для API, где ответ — это тело (body) с данными, а не страница.

🐸 Библиотека собеса по Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Назовите инструменты для версионирования СУБД.

Среди популярных инструментов для версионирования базы данных чаще всего используются:

▪️ Flyway — простой в настройке инструмент, основанный на SQL- или Java-скриптах, подходит для большинства проектов.

▪️ Liquibase — более гибкий, поддерживает формат XML, YAML, JSON и SQL, имеет возможность откатов, работы с changelog'ами и генерацией диффов.

▪️ Liquibase + Hibernate — можно использовать вместе для генерации changelog'ов из JPA-сущностей.

▪️ Sqitch — мощный, но менее популярный инструмент, ориентирован на работу через VCS и требует ручного управления зависимостями.

💬 Что используете на проекте?

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

Аутентификация — это процесс проверки личности пользователя (кто он есть). Обычно реализуется через логин и пароль, токены или биометрию. Аутентификация отвечает на вопрос "Кто ты?"

Авторизация — это процесс проверки, имеет ли пользователь доступ к определённым ресурсам или операциям (что он может делать). Авторизация — "Что тебе разрешено?"

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

Какие темы в этом месяце использовать для постов чаще:

🔥 — Java core
👍🏼 — Spring
👾 — Паттерны
😁 — Напишу в комменты свой вариант

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