Ключевые вопросы для собеседования по Spring Boot в 2023 году. Часть 2



Книга Ключевые вопросы для собеседования по Spring Boot в 2023 году. Часть 2

Первая часть статьи.


Что представляют собой HTTP-методы?


Вот наиболее часто используемые HTTP-методы.


1. GET: получает ресурс или данные с сервера.


2. POST: отправляет данные для обработки на сервер, что обычно приводит к созданию нового ресурса.


3. PUT: обновляет или заменяет существующий ресурс новыми данными.


4. DELETE: удаляет конкретный ресурс.


5. PATCH: частично обновляет существующий ресурс новыми данными.


6. HEAD: получает метаданные ресурса без извлечения его фактического содержимого.


7. OPTIONS: возвращает допустимые HTTP-методы и возможности сервера для данного ресурса.


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


Что такое идемпотентность? Назовите идемпотентные методы


В REST (Representational State Transfer, передача репрезентативного состояния) под идемпотентностью понимается свойство некоторых HTTP-методов, при котором повторные идентичные запросы имеют тот же эффект, что и один запрос. Другими словами, многократное выполнение идемпотентной операции приводит к тому же результату, что и однократное.


Идемпотентные методы в REST гарантируют, что даже при дублировании или повторении запроса из-за проблем в сети/поведения клиента, система останется в том же состоянии и не вызовет нежелательных побочных эффектов. Идемпотентные методы обеспечивают безопасность повторных запросов, не вызывая при этом несогласованности или неожиданного поведения.


В REST идемпотентными считаются следующие HTTP-методы.



  • GET: многократное получение ресурса не изменяет состояние сервера.

  • PUT: многократное обновление ресурса одними и теми же данными приводит к одному и тому же результату.

  • DELETE: многократное удаление ресурса приводит к одному и тому же результату.


Проектирование идемпотентных методов в RESTful API помогает обеспечить надежность, согласованность и отказоустойчивость распределенных систем, позволяя добиться надежного и предсказуемого поведения.


Что такое @Async в Spring Boot?


Аннотация @Async в Spring Boot используется для указания на то, что метод должен выполняться асинхронно. Метод, аннотированный @Async, выполняется в отдельном потоке. Это дает возможность вызывающему потоку продолжить выполнение, не дожидаясь завершения работы аннотированного метода.


Использование @Async позволяет переложить выполнение трудоемких или блокирующих операций на отдельные потоки, что повышает общую скорость реакции и производительность приложения. Данная аннотация обычно используется в сценариях, когда конкретные методы могут выполняться независимо, а их результаты не требуются вызывающему потоку немедленно.


Чтобы включить асинхронное выполнение в Spring Boot, необходимо сконфигурировать бин TaskExecutor (исполнитель задач) и аннотировать метод target с помощью @Async. Spring Boot автоматически обнаружит аннотацию @Async и выполнит аннотированный метод асинхронно с помощью указанного TaskExecutor.


В чем разница между CRUDRepository и JPARepository?


Основное различие между CrudRepository и JPARepository заключается в том, что JPARepository является расширением CRUDRepository, предоставляющим дополнительные возможности, специфичные для JPA.


Хотя оба интерфейса обеспечивают базовые операции CRUD (Create, Read, Update, Delete  —  создавать, читать, обновлять, удалять), JPARepository предлагает дополнительные возможности, такие как методы создания запросов, поддержка пагинации и возможность пересылки изменений в базу данных.


Таким образом, CRUDRepository подходит для выполнения общих CRUD-операций, а JPARepository является более функциональным и предназначен для приложений на базе JPA, предоставляя расширенные возможности по созданию запросов, помимо основных CRUD-операций.


Расскажите о starter-зависимостях Spring Boot


Starter-зависимости Spring Boot  —  это набор управляемых зависимостей, которые упрощают конфигурирование и настройку определенных функциональных возможностей или фреймворков в Spring Boot-приложении. Ниже приведены пояснения к часто используемым starter-зависимостям.


1. spring-boot-starter-web. Включает зависимости для создания веб-приложений с помощью Spring MVC, в том числе встроенный контейнер Tomcat или сервер Jetty, Spring Web и другие соответствующие компоненты.


2. spring-boot-starter-data-jpa. Предоставляет зависимости для работы с JPA (Java Persistence API  —  стандарт устойчивости Java-экосистемы), включая Hibernate, Spring Data JPA и коннекторы баз данных.


3. spring-boot-starter-security. Включает зависимости для добавления в приложение функций безопасности, таких как аутентификация, авторизация и шифрование. Интегрируется с Spring Security и предлагает дополнительные возможности (например, поддержку OAuth).


4. spring-boot-starter-test. Предоставляет зависимости для тестирования приложения, включая JUnit, Mockito и Spring Test. Это упрощает настройку модульных тестов, интеграционных тестов и других сценариев тестирования.


5. spring-boot-starter-cache. Включает зависимости для добавления возможностей кэширования в приложение. Интегрируется с такими популярными библиотеками кэширования, как Ehcache, Caffeine и Redis.


6. spring-boot-starter-amqp. Предоставляет зависимости для работы с протоколами обмена сообщениями и реализациями AMQP (Advanced Message Queuing Protocol  —  расширенный протокол организации очереди сообщений), такими как RabbitMQ.


7. spring-boot-starter-data-redis. Включает зависимости для использования Redis в качестве хранилища данных, предоставляя возможности кэширования, распределенных сессий и т. д.


Это лишь несколько примеров starter-зависимостей, доступных в Spring Boot. Каждая из них упрощает конфигурирование и настройку определенной функциональности или интеграции, позволяя разработчикам быстро включать и использовать необходимые функции в приложениях Spring Boot.


Что лучше  —  YAML-файл или Property-файл?


Это зависит от личных предпочтений и сложности конфигурации. Вот некоторые соображения.


1. Читабельность. YAML-файл обеспечивает более удобный для человека и хорошо структурированный формат, позволяющий использовать вложенные структуры данных и отступы. В Property-файлах используется простая структура пар ключ-значение.


2. Сложность. YAML-файл лучше подходит для сложных конфигураций с вложенными свойствами или массивами. Он поддерживает многострочные значения и иерархические структуры.


3. Простота. Property-файлы проще и привычнее для разработчиков, привыкших к конфигурациям типа “ключ-значение”.


4. Поддержка в Spring Boot. Spring Boot по умолчанию использует YAML-файлы для внешней конфигурации, но также поддерживает Property-файлы.


Назовите способы загрузки YAML-файла в Spring Boot


Для загрузки YAML-файла в Spring Boot можно применять следующие способы.


1. @ConfigurationProperties. Аннотируйте класс с помощью @ConfigurationProperties и укажите путь к YAML-файлу в атрибуте “value”. Spring Boot привяжет YAML-свойства к аннотированному классу.


2. @PropertySource. Используйте @PropertySource в сочетании с @Configuration для загрузки YAML-файла. Укажите местоположение YAML-файла с помощью атрибута “value”, и Spring Boot загрузит свойства в среду.


3. Файл “application.yml” или “application.yaml”. По умолчанию Spring Boot ищет в classpath файл “application.yml” или “application.yaml” и автоматически загружает его свойства в контекст приложения.


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


Заключение


В 2023 году прочный фундамент в виде базового языка Java уже не является достаточным для разработчиков. Значительная часть вопросов на собеседованиях теперь посвящена Spring Boot и микросервисам. Тщательно изучив эти вопросы, вы не только расширите свои знания, но и подготовитесь к изучению важнейших тем в современном технологическом ландшафте.



222   0  

Comments

    Ничего не найдено.