❓ Вопрос
Объясните, как устанавливается TCP-соединение и какие основные этапы этого процесса.
✅ Ответ
Установка TCP-соединения происходит через процесс трехстороннего рукопожатия (three-way handshake). Сначала клиент отправляет серверу SYN-пакет для инициации соединения, сервер отвечает SYN-ACK пакетом, подтверждая получение и готовность, затем клиент отправляет ACK-пакет для подтверждения. Этот механизм обеспечивает согласование параметров соединения и синхронизацию номеров последовательности перед передачей данных.
#lexicon #собеседование #java #junior #backend #networking
Объясните, как устанавливается TCP-соединение и какие основные этапы этого процесса.
✅ Ответ
Установка TCP-соединения происходит через процесс трехстороннего рукопожатия (three-way handshake). Сначала клиент отправляет серверу SYN-пакет для инициации соединения, сервер отвечает SYN-ACK пакетом, подтверждая получение и готовность, затем клиент отправляет ACK-пакет для подтверждения. Этот механизм обеспечивает согласование параметров соединения и синхронизацию номеров последовательности перед передачей данных.
#lexicon #собеседование #java #junior #backend #networking
❓ Вопрос
Опишите пошагово, как внедрить в event-driven систему механизм дедлайнов (TTL) для сообщений, чтобы избежать обработки устаревших событий. Какие настройки используете в Kafka или RabbitMQ для этого?
✅ Ответ
Для реализации механизма TTL в event-driven системе необходимо ограничить время жизни сообщений, чтобы устаревшие события не обрабатывались. В RabbitMQ можно использовать свойство TTL на уровне очереди или отдельных сообщений, задавая параметр x-message-ttl или x-expires, после чего сообщения автоматически удаляются. В Kafka можно настроить retention.ms для топиков, что определит время хранения сообщений на брокере, после которого они становятся недоступны для потребителей. Важно также корректно обрабатывать время жизни сообщений на уровне потребителей, проверяя timestamp и игнорируя старые события при необходимости.
#lexicon #собеседование #java #middle #backend #messaging
Опишите пошагово, как внедрить в event-driven систему механизм дедлайнов (TTL) для сообщений, чтобы избежать обработки устаревших событий. Какие настройки используете в Kafka или RabbitMQ для этого?
✅ Ответ
Для реализации механизма TTL в event-driven системе необходимо ограничить время жизни сообщений, чтобы устаревшие события не обрабатывались. В RabbitMQ можно использовать свойство TTL на уровне очереди или отдельных сообщений, задавая параметр x-message-ttl или x-expires, после чего сообщения автоматически удаляются. В Kafka можно настроить retention.ms для топиков, что определит время хранения сообщений на брокере, после которого они становятся недоступны для потребителей. Важно также корректно обрабатывать время жизни сообщений на уровне потребителей, проверяя timestamp и игнорируя старые события при необходимости.
#lexicon #собеседование #java #middle #backend #messaging
❓ Вопрос
Какие проблемы могут возникнуть при переопределении equals() и hashCode() в классах с генериками и как вы их решаете на практике?
✅ Ответ
При переопределении equals() и hashCode() в классах с дженериками важно учитывать, что тип параметра во время выполнения подвергается стиранию, поэтому нельзя полагаться на конкретные типы. Также в реализации нужно применять меры для предотвращения ошибок при сравнении null и обеспечивать согласованность между equals() и hashCode(). Практически используют сравнение полей, значимых для идентичности объекта, с учетом возможных null, и включают все эти поля в формирование хэш-кода, часто с помощью встроенных утилит, таких как Objects.equals() и Objects.hash().
#lexicon #собеседование #java #senior #fundamentals
Какие проблемы могут возникнуть при переопределении equals() и hashCode() в классах с генериками и как вы их решаете на практике?
✅ Ответ
При переопределении equals() и hashCode() в классах с дженериками важно учитывать, что тип параметра во время выполнения подвергается стиранию, поэтому нельзя полагаться на конкретные типы. Также в реализации нужно применять меры для предотвращения ошибок при сравнении null и обеспечивать согласованность между equals() и hashCode(). Практически используют сравнение полей, значимых для идентичности объекта, с учетом возможных null, и включают все эти поля в формирование хэш-кода, часто с помощью встроенных утилит, таких как Objects.equals() и Objects.hash().
#lexicon #собеседование #java #senior #fundamentals
❓ Вопрос
Какие паттерны асинхронного программирования вы используете для эффективного управления потоками и как они помогают избежать проблем с блокировками и конкуренцией?
✅ Ответ
Для эффективного управления потоками применяются паттерны, такие как ExecutorService для управления пулом потоков, Future и CompletableFuture для обработки асинхронных задач с возможностью композиции, а также паттерн Producer-Consumer для разделения задач на производящие и потребляющие. Эти паттерны помогают избежать блокировок благодаря ограничению количества одновременно выполняемых потоков и асинхронному ожиданию результатов без удержания ресурсов. Использование неблокирующих структур данных и механизмов синхронизации снижает риск условий гонки и конкуренции.
#lexicon #собеседование #java #senior #asynchronous
Какие паттерны асинхронного программирования вы используете для эффективного управления потоками и как они помогают избежать проблем с блокировками и конкуренцией?
✅ Ответ
Для эффективного управления потоками применяются паттерны, такие как ExecutorService для управления пулом потоков, Future и CompletableFuture для обработки асинхронных задач с возможностью композиции, а также паттерн Producer-Consumer для разделения задач на производящие и потребляющие. Эти паттерны помогают избежать блокировок благодаря ограничению количества одновременно выполняемых потоков и асинхронному ожиданию результатов без удержания ресурсов. Использование неблокирующих структур данных и механизмов синхронизации снижает риск условий гонки и конкуренции.
#lexicon #собеседование #java #senior #asynchronous
❓ Вопрос
Какие HTTP-заголовки рекомендуете использовать для защиты API при аутентификации и авторизации, и как их правильно настраивать на сервере?
✅ Ответ
Для защиты API при аутентификации и авторизации обычно используются заголовки Authorization с токенами типа Bearer, содержащими JWT или другие схемы аутентификации. Важно правильно настроить CORS-заголовки (Access-Control-Allow-Origin, Access-Control-Allow-Headers) для контроля доступа из браузера. Также стоит применять заголовки безопасности, такие как Strict-Transport-Security для принудительного использования HTTPS и Content-Security-Policy для ограничения источников контента. На сервере необходимо валидировать и парсить заголовки, обеспечивая корректную проверку полномочий и защиту от подделки запросов.
#lexicon #собеседование #java #junior #backend #security
Какие HTTP-заголовки рекомендуете использовать для защиты API при аутентификации и авторизации, и как их правильно настраивать на сервере?
✅ Ответ
Для защиты API при аутентификации и авторизации обычно используются заголовки Authorization с токенами типа Bearer, содержащими JWT или другие схемы аутентификации. Важно правильно настроить CORS-заголовки (Access-Control-Allow-Origin, Access-Control-Allow-Headers) для контроля доступа из браузера. Также стоит применять заголовки безопасности, такие как Strict-Transport-Security для принудительного использования HTTPS и Content-Security-Policy для ограничения источников контента. На сервере необходимо валидировать и парсить заголовки, обеспечивая корректную проверку полномочий и защиту от подделки запросов.
#lexicon #собеседование #java #junior #backend #security
❓ Вопрос
Как организовать мониторинг и логирование в распределённой системе микросервисов? Какие конкретные технологии или подходы вы используете для обнаружения и локализации проблем?
✅ Ответ
Мониторинг в распределённой системе строится на сборе метрик, логов и трассировок с каждого микросервиса для контроля состояния и быстрого выявления аномалий. Применяется централизованное логирование с помощью систем, таких как ELK Stack или Loki, а для трассировки запросов через сервисы используются инструменты OpenTelemetry или Jaeger. Для оповещений на основе мониторинга метрик применяют Prometheus и Alertmanager. Важно обеспечить корреляцию логов и метрик по общим идентификаторам запросов для эффективной диагностики и локализации проблем.
#lexicon #собеседование #java #middle #backend #arch
Как организовать мониторинг и логирование в распределённой системе микросервисов? Какие конкретные технологии или подходы вы используете для обнаружения и локализации проблем?
✅ Ответ
Мониторинг в распределённой системе строится на сборе метрик, логов и трассировок с каждого микросервиса для контроля состояния и быстрого выявления аномалий. Применяется централизованное логирование с помощью систем, таких как ELK Stack или Loki, а для трассировки запросов через сервисы используются инструменты OpenTelemetry или Jaeger. Для оповещений на основе мониторинга метрик применяют Prometheus и Alertmanager. Важно обеспечить корреляцию логов и метрик по общим идентификаторам запросов для эффективной диагностики и локализации проблем.
#lexicon #собеседование #java #middle #backend #arch
❓ Вопрос
Какие есть стратегии маршрутизации сообщений в RabbitMQ? Приведите примеры использования различных типов обменников (exchange) для реализации этих стратегий.
✅ Ответ
Стратегии маршрутизации сообщений в RabbitMQ реализуются через различные типы обменников: direct, fanout, topic и headers. Direct обменник отправляет сообщение в очередь, совпадающую с точным routing key; fanout рассылает сообщение во все привязанные очереди, реализуя широковещательную рассылку. Topic обменник позволяет направлять сообщения согласно шаблонам routing key, что удобно для гибкой фильтрации, а headers маршрутизирует сообщения по значениям заголовков. Выбор типа обменника зависит от бизнес-логики: direct для точечных сообщений, fanout для уведомлений всем подписчикам, topic для тематической маршрутизации и headers для сложных условий.
#lexicon #собеседование #java #middle #backend #messaging
Какие есть стратегии маршрутизации сообщений в RabbitMQ? Приведите примеры использования различных типов обменников (exchange) для реализации этих стратегий.
✅ Ответ
Стратегии маршрутизации сообщений в RabbitMQ реализуются через различные типы обменников: direct, fanout, topic и headers. Direct обменник отправляет сообщение в очередь, совпадающую с точным routing key; fanout рассылает сообщение во все привязанные очереди, реализуя широковещательную рассылку. Topic обменник позволяет направлять сообщения согласно шаблонам routing key, что удобно для гибкой фильтрации, а headers маршрутизирует сообщения по значениям заголовков. Выбор типа обменника зависит от бизнес-логики: direct для точечных сообщений, fanout для уведомлений всем подписчикам, topic для тематической маршрутизации и headers для сложных условий.
#lexicon #собеседование #java #middle #backend #messaging
❓ Вопрос
Какие потенциальные проблемы могут возникнуть при использовании raw types в Java и как этого избежать с помощью generics? Приведите пример кода и объясните.
✅ Ответ
Использование raw types в Java приводит к потере типовой безопасности, что может вызвать ClassCastException во время выполнения. Generics позволяют определять типы параметров, обеспечивая проверку типов на этапе компиляции и исключая необходимость ручных кастов. Например, List<String> гарантирует, что список содержит только строки, тогда как List без параметров может содержать любые объекты, приводя к ошибкам. Чтобы избежать проблем с raw types, рекомендуется всегда использовать параметризованные типы и избегать необобщённых коллекций.
#lexicon #собеседование #java #senior #fundamentals
Какие потенциальные проблемы могут возникнуть при использовании raw types в Java и как этого избежать с помощью generics? Приведите пример кода и объясните.
✅ Ответ
Использование raw types в Java приводит к потере типовой безопасности, что может вызвать ClassCastException во время выполнения. Generics позволяют определять типы параметров, обеспечивая проверку типов на этапе компиляции и исключая необходимость ручных кастов. Например, List<String> гарантирует, что список содержит только строки, тогда как List без параметров может содержать любые объекты, приводя к ошибкам. Чтобы избежать проблем с raw types, рекомендуется всегда использовать параметризованные типы и избегать необобщённых коллекций.
#lexicon #собеседование #java #senior #fundamentals
❓ Вопрос
Какое поведение и жизненный цикл у Spring-бина с областью видимости singleton? Приведите пример, когда это предпочтительно.
✅ Ответ
Spring-бин с областью видимости singleton создаётся один раз при старте контейнера и существует в течение всего времени жизни приложения. Все запросы к такому бину возвращают одну и ту же инстанцию, что обеспечивает экономию ресурсов и состояние, если оно требуется. Такой scope подходит для безсостоянийных сервисов или компонентов, где общий доступ к ресурсам безопасен и желателен. Например, бины-сервисы, реализующие логику бизнес-процессов, часто объявляют singleton для повышения производительности.
#lexicon #собеседование #java #junior #spring #injection
Какое поведение и жизненный цикл у Spring-бина с областью видимости singleton? Приведите пример, когда это предпочтительно.
✅ Ответ
Spring-бин с областью видимости singleton создаётся один раз при старте контейнера и существует в течение всего времени жизни приложения. Все запросы к такому бину возвращают одну и ту же инстанцию, что обеспечивает экономию ресурсов и состояние, если оно требуется. Такой scope подходит для безсостоянийных сервисов или компонентов, где общий доступ к ресурсам безопасен и желателен. Например, бины-сервисы, реализующие логику бизнес-процессов, часто объявляют singleton для повышения производительности.
#lexicon #собеседование #java #junior #spring #injection
❓ Вопрос
Как в Spring Boot настроить профили, чтобы автоматически выбирать конфигурацию базы данных для разных окружений? Расскажите, какие файлы properties или yaml для этого используются и как их приоритет определяется.
✅ Ответ
Для настройки профилей в Spring Boot используют файлы application-{profile}.properties или application-{profile}.yaml, где {profile} — имя профиля, например, dev или prod. Профиль активируется через свойство spring.profiles.active, которое можно задавать в основном application.properties , переменных окружения или аргументах командной строки. Spring Boot загружает сначала основной application.properties , затем перекрывает его значениями из файла активного профиля, определяя приоритет конфигураций. Это позволяет удобно переключать настройки базы данных и другие параметры для разных окружений.
#lexicon #собеседование #java #middle #spring_boot #backend
Как в Spring Boot настроить профили, чтобы автоматически выбирать конфигурацию базы данных для разных окружений? Расскажите, какие файлы properties или yaml для этого используются и как их приоритет определяется.
✅ Ответ
#lexicon #собеседование #java #middle #spring_boot #backend
Lexicon | Java вопросы
#quiz #lexicon #собеседование #java #junior #backend_optimization
🧠 Анализ плана выполнения SQL-запроса
Anonymous Quiz
100%
План выполнения и операции СУБД
0%
Только время выполнения запроса
0%
Синтаксические ошибки в запросе
📘 Разбор опроса
Анализ плана выполнения SQL-запроса
Вопрос: Что показывает explain plan для анализа производительности запроса?
✅ Правильный ответ: План выполнения и операции СУБД
Explain plan показывает последовательность операций СУБД (сканирование, индексы, соединения) для оптимизации запроса.
Анализ плана выполнения SQL-запроса
Вопрос: Что показывает explain plan для анализа производительности запроса?
✅ Правильный ответ: План выполнения и операции СУБД
Explain plan показывает последовательность операций СУБД (сканирование, индексы, соединения) для оптимизации запроса.
👍1
❓ Вопрос
Как ты объяснишь основное различие между checked и unchecked исключениями в Java, и почему важно это различие при проектировании API?
✅ Ответ
Checked исключения требуют обязательной обработки или декларации с помощью throws, что обеспечивает явное управление ошибками на этапе компиляции. Unchecked исключения не требуют явного перехвата и обычно сигнализируют о проблемах, которые можно считать программными ошибками. При проектировании API важно различать эти типы исключений для балансировки контроля над ошибками и удобства использования, обеспечивая правильное информирование пользователей API о возможных ошибках.
#lexicon #собеседование #java #junior #java_errors #backend
Как ты объяснишь основное различие между checked и unchecked исключениями в Java, и почему важно это различие при проектировании API?
✅ Ответ
#lexicon #собеседование #java #junior #java_errors #backend
👍1
Lexicon | Java вопросы
#quiz #lexicon #собеседование #java #junior #backend_scalability
🧠 Эффективное кеширование в backend
Anonymous Quiz
100%
Регулярная инвалидация кеша
0%
Увеличение размера кеша
0%
Использование только одного уровня кеша
📘 Разбор опроса
Эффективное кеширование в backend
Вопрос: Какой подход помогает избежать устаревших данных в кеше?
✅ Правильный ответ: Регулярная инвалидация кеша
Инвалидация кеша при изменении данных предотвращает использование устаревших значений.
Эффективное кеширование в backend
Вопрос: Какой подход помогает избежать устаревших данных в кеше?
✅ Правильный ответ: Регулярная инвалидация кеша
Инвалидация кеша при изменении данных предотвращает использование устаревших значений.
❓ Вопрос
Как реализовать аутентификацию с помощью JWT в REST API? Опишите конкретные шаги и примеры использования.
✅ Ответ
Аутентификация с помощью JWT в REST API включает создание и подпись токена при успешной проверке учетных данных пользователя, обычно после логина. Токен содержит полезную нагрузку с идентификатором пользователя и временем истечения, защищен секретным ключом. При последующих запросах сервер проверяет подпись и валидность токена из заголовка Authorization, что позволяет обеспечивать доступ к защищенным ресурсам без сессий. Важно реализовать обновление токенов и обработку ошибок в случае истечения срока действия или подделки токена.
#lexicon #собеседование #java #middle #backend_security #backend #core
Как реализовать аутентификацию с помощью JWT в REST API? Опишите конкретные шаги и примеры использования.
✅ Ответ
#lexicon #собеседование #java #middle #backend_security #backend #core
Lexicon | Java вопросы
#quiz #lexicon #собеседование #java #junior #spring_security
🧠 Spring Security: UserDetailsService
Anonymous Quiz
0%
loadUserByUsername
50%
findUserByUsername
50%
getUserDetails