Что представляют собой 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 и микросервисам. Тщательно изучив эти вопросы, вы не только расширите свои знания, но и подготовитесь к изучению важнейших тем в современном технологическом ландшафте.
Читайте также:
- Как интегрировать Kafka со Spring Boot
- Как создать эффективную систему логирования с использованием Aspect и Spring Cloud Sleuth
- JWT-аутентификация в Spring Boot Webflux
Читайте нас в Telegram, VK и Дзен
Перевод статьи Ajay Rathod: 50+ Key Spring Boot Interview Questions for Programmers and Software Engineers in 2023