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

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

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

Для обратной связи: @proglibrary_feeedback_bot
加入频道
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
В чем плюсы Spring Boot относительно чистого Spring?

— Spring Boot предлагает механизм автоматической настройки, который автоматически подбирает параметры конфигурации для вашего приложения в зависимости от добавленных зависимостей, снижая количество необходимого для настройки кода.

— В Spring Boot не нужно писать boilerplate-код для настройки приложения.

— Spring Boot поставляется с встраиваемыми серверами, такими как Tomcat, Jetty или Undertow, что позволяет запускать приложение как standalone Java-программу без необходимости развертывать его на внешнем сервере.

— Spring Boot облегчает настройку тестов, предоставляя встроенные механизмы для тестирования различных аспектов приложения.

— Spring Boot предлагает стандартную структуру каталогов и конфигурационных файлов, что ускоряет запуск и упрощает поддержку проекта.

— Инструменты, такие как Spring Boot CLI и Maven/Gradle плагины, позволяют легко собирать, тестировать и деплоить приложения.

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

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

Elasticsearch — это распределённая поисковая система, построенная на основе Apache Lucene, предназначенная для хранения, поиска и анализа больших объемов данных в реальном времени. Она поддерживает текстовый поиск, аналитические запросы и хранение структурированных данных.

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