22 запитання та відповіді на інтерв’ю Spring Boot

Ви – розробник Java Spring Boot і готуєтесь до майбутньої співбесіди, але не впевнені, які питання можуть вам поставити? Не хвилюйтесь, ми готові допомогти!

У цій статті ми розглянемо поширені питання, які можуть виникнути на співбесіді, а також запропонуємо варіанти відповідей, щоб ви могли належним чином підготуватися до зустрічі з інтерв’юером.

Інтерв’юери використовують стратегічні запитання, пов’язані з Java Spring Boot, щоб оцінити рівень ваших знань і навичок, необхідних для конкретної посади. Тому важливо бути готовим до різноманітних питань і вміти давати чіткі та впевнені відповіді.

Перш ніж перейти безпосередньо до питань і відповідей, давайте коротко розглянемо, що таке Spring Boot і чому він є таким важливим для розробників Java.

Що собою представляє Java Spring Boot?

Spring Boot, створений командою розробників у 2014 році, є фреймворком з відкритим кодом, призначеним для швидкої розробки незалежних додатків рівня виробництва. Ці додатки можуть працювати в середовищі віртуальної машини Java (JVM).

Розробники Java часто використовують Spring Boot для створення веб-додатків і мікросервісів через його швидкість, простоту налаштування та безпеку. Цей фреймворк спрощує процес розробки, дозволяючи зосередитись на бізнес-логіці.

Spring Boot полегшує встановлення та конфігурацію додатків, що базуються на Spring, завдяки трьом ключовим функціям:

  • Автоконфігурація: Spring Boot автоматично налаштовує додаток, зменшуючи необхідність ручного конфігурування.
  • Стартовий набір залежностей: Spring Boot надає набір готових до використання залежностей, які спрощують встановлення та налаштування проектів, прискорюючи процес розробки.
  • Вбудований сервер: Spring Boot дозволяє запускати додаток безпосередньо, без потреби зовнішнього веб-сервера.

Яку користь Spring Boot приносить розробникам Java?

Spring Boot значно полегшує роботу розробників Java, автоматизуючи налаштування всіх необхідних компонентів для створення готового до продакшну Spring-додатку. Це значно скорочує час розробки, підвищуючи ефективність роботи.

Spring Boot легко інтегрується з різними інструментами та бібліотеками екосистеми Spring, такими як Spring JDBC, Spring Data, Spring Security та Spring ORM. Це дозволяє розробникам використовувати вже знайомі інструменти.

Крім того, Spring Boot підтримує підключення до різних баз даних, наприклад, Oracle, MySQL, PostgreSQL та MongoDB. Це дає можливість вибирати найбільш підходящу базу даних для конкретного проекту.

Гнучкість конфігурацій, підтримка XML, Java Beans і транзакції бази даних є додатковими корисними функціями, які роблять Spring Boot незамінним інструментом.

Отже, тепер, коли ви маєте уявлення про Spring Boot, давайте розглянемо питання, які найчастіше ставлять на співбесідах, і підготуємось до них.

Питання та відповіді на співбесіді з Spring Boot

Які ключові особливості Spring Boot?

Серед основних функцій можна виділити:

  • Spring Boot CLI: надає можливість використовувати Groovy для написання коду Spring Boot, уникаючи повторюваного коду.
  • Безпека та логування: Spring Boot забезпечує вбудовані функції безпеки та журналювання, що дозволяє захистити додаток від потенційних загроз.
  • Автоматична конфігурація: Spring Boot автоматично налаштовує компоненти проекту, зменшуючи необхідність ручного конфігурування та уникаючи створення непотрібних WAR-файлів.
  • Ініціалізатор: Створює стандартну внутрішню структуру проекту, що позбавляє від необхідності ручного налаштування структури.
  • Actuator: Надає доступ до важливої інформації та показників під час роботи програми.
  • Starter Dependency: Спрощує управління залежностями, об’єднуючи часто використовувані залежності для конкретної функціональності.

Що таке Spring Boot Starters?

Spring Boot Starters – це описи залежностей, що містять набір постачальників управління залежностями, які необхідні для роботи програми. Вони забезпечують готову структуру з автоматичним вирішенням залежностей, що спрощує та прискорює процес розробки.

Що таке Actuator у Spring Boot та які його переваги?

Actuator – це функція Spring Boot, яка дозволяє відстежувати стан програми під час її виконання. Це корисний інструмент для моніторингу та діагностики.

Наприклад, при налагодженні ви можете використовувати Actuator для перегляду журналів, аналізу використання процесора та визначення компонентів програми. Actuator надає готові REST-кінцеві точки для отримання та управління інформацією, а також отримання даних з інтернету.

Що таке Thymeleaf і як його використовувати?

Thymeleaf – це шаблонізатор на стороні сервера для Java, що створює природний макет шаблону для веб-додатків Java Spring та HTML5. Spring Boot автоматично налаштовує Thymeleaf за допомогою залежності `spring-boot-starter-thymeleaf` у файлі `pom.xml` для обслуговування динамічного веб-контенту.

Для того, щоб Spring Boot міг зчитувати та відображати шаблони Thymeleaf або HTML-файли, їх необхідно розмістити у директорії `src/main/resources/templates`. Thymeleaf аналізує `index.html` файл і використовує фактичні значення, передані з класу контролера, замість динамічних значень, доступних у файлі індексу. Після цього повідомлення буде відображено у веб-браузері після запуску програми Spring Boot.

org.springframework.boot spring-boot-starter-thymeleaf

Опишіть процес створення проекту Spring Boot за допомогою Spring Initializer.

Spring Initializr – це веб-інструмент, що дозволяє створити проект Spring Boot за кілька кроків, вводячи основні дані про проект.

  1. Відкрийте Spring Initializr та заповніть необхідні поля.
  2. Натискання кнопки “Створити” ініціює завантаження проекту.
  3. Розпакуйте завантажений проект із zip-архіву та відкрийте його у IDE. У IDE перейдіть до `File->New->Project from existing sources->Spring-boot-app` та виберіть файл `pom.xml`. Підтвердіть імпорт змін, щоб проект синхронізувався. Змініть номер `server.port` у файлі `application.properties` на `server.port=7000`.
  4. Запустіть програму з `src->main->java->com.gfg.Spring.boot.app`.

Що таке JPA в Spring Boot?

JPA (Java Persistence API) – це специфікація Java, яка використовує Object-Relational Mapping (ORM) для управління реляційними даними. Вона забезпечує доступ до даних між Java-об’єктами або класами Java та реляційною базою даних. JPA використовує Java Persistent Query Language (JPQL), об’єктно-орієнтовану мову запитів, яка є незалежною від платформи. JPA дозволяє обробляти запити та транзакції з базою даних через API Entity Manager.

Що таке автоматична конфігурація у Spring Boot?

Автоматична конфігурація спрощує процес налаштування додатків Spring Boot, автоматично налаштовуючи компоненти на основі залежностей, які ви додаєте до програми. Залежно від доступних залежностей у classpath, Spring Boot автоматично оголошує вбудовані об’єкти, включаючи JPA та безпеку Spring.

Що таке анотації Spring?

Анотації Spring – це метадані, що надають інформацію про фрагменти програми, додаючи додаткові дані до неї. Анотації зазвичай використовуються для класів та методів. Вони не впливають безпосередньо на виконання програми, але використовуються фреймворком для додаткової обробки.

Синтаксис анотацій починається з символу “@”.

Spring Boot надає шість основних типів анотацій:

  • Анотації Spring Core
  • Анотації Spring Data
  • Анотації Spring Bean
  • Веб-анотації Spring
  • Анотації Spring Schedule
  • Анотації Spring Boot

Що означає Spring Data REST?

Spring Data REST створює RESTful API на основі Spring Data Resources, використовуючи мінімум коду.

Приклад запиту POST:

URL: `http://localhost/example`

Заголовок: `Content-Type: application/json`

Тіло запиту:

{
    "name": "Jimmy",
    "Gender": "Male",
    "Age": 23
}

Тіло відповіді:

{
    "name": "Jimmy",
    "Gender": "Male",
    "Age": 23
    "_links": {
        "self": {
            "href": "http://localhost:8080/example/1"
        },
        "person": {
            "href": "http://localhost:8080/example/1"
         }
    }
}

Spring Data REST надає набір готових інструментів, що спрощують розробку та економлять час. Spring Boot DevTools автоматично перезапускає програму, коли ви вносите зміни до коду, позбавляючи вас від необхідності ручного перезапуску.

Що таке Spring Data?

Spring Data призначений для забезпечення легкого доступу до даних, включаючи реляційні, нереляційні бази даних та хмарні сервіси. Він абстрагує особливості основних сховищ даних, дозволяючи розробникам концентруватися на бізнес-логіці.

Як сказати автоматичній конфігурації відмовитися, коли існує бін?

Для цього використовується анотація `@ConditionalOnMissingBean`, яка має атрибути `name` і `value`. Атрибут `value` зберігає тип компонента для перевірки, а `name` – ім’я компонента.

Як отримати дані з бази даних в Spring Boot?

Для отримання даних з бази даних MySQL необхідно виконати наступні кроки:

Крок 1: Створіть базу даних у MySQL за допомогою команди `create DATABASE person`.

Крок 2: Створіть таблицю в базі даних:

CREATE TABLE person(id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, name VARCHAR(255));

Крок 3: Створіть проект Spring Boot та додайте JDBC, MySQL та необхідні веб-залежності.

Крок 4: Налаштуйте базу даних у файлі `application.properties`:

spring.datasource.url=jdbc:mysql://localhost:3306/personDetails
spring.datasource.username=example123
spring.datasource.password=example123
spring.jpa.hibernate.ddl-auto=create-drop

Крок 5: Обробіть запити у класі контролера:

package com.person;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class JdbcController {
   @Autowired
   JdbcTemplate jdbc;
   @RequestMapping("/save")
   public String index(){
      jdbc.execute("insert into person (name)values(Trial)");
      return "Name entered Successfully";
   }
}

Після запуску програми перевірте записи у базі даних.

Для чого потрібні профілі Spring?

Профілі Spring дозволяють розділити конфігурацію програми на різні частини, які використовуються для конкретних середовищ розробки. Профілі Spring дозволяють управляти конфігураціями для різних середовищ без необхідності ручного налаштування. Вони спрощують підтримку синхронізації та дозволяють уникнути створення багатьох компонентів, що залежать від конкретних налаштувань середовища.

Чи можна змінити порт вбудованого сервера Tomcat у Spring Boot?

Так, можна. Для цього потрібно змінити властивість `server.port` у файлі `application.properties`. Spring Boot автоматично завантажує файл властивостей та застосовує конфігурацію.

Наприклад, можна змінити `server.port` зі значення за замовчуванням 8080 на `server.port= 8081`.

Як налаштувати Log4j для ведення логів?

Налаштування Log4j для ведення логів включає кілька простих кроків:

  1. Створіть проект Java.
  2. Додайте файл `log4j.jar` до шляху збірки проекту.
  3. Створіть файл `log4j.properties` та додайте його до classpath.
  4. Вкажіть необхідні налаштування в файлі `log4j.properties`.
  5. Запустіть проект.

Після цього вихідні дані журналу будуть відображатися в консолі:

[main] DEBUG Example – Hello this is a debug message
[main] INFO Example – Hello this is an info message

Що таке контейнер IoC?

Контейнер IoC (інверсія управління) – це основний контейнер Spring, який автоматично виконує впровадження залежностей. Він створює екземпляри класів, відповідає за конфігурацію об’єктів і встановлює необхідні залежності. Він також керує життєвим циклом об’єкта. IoC виконує ці завдання за допомогою конфігурації метаданих у коді Java, XML і анотаціях Java. Контейнер називається інверсією управління, оскільки він контролює об’єкти Java та їх життєвий цикл, а не розробник.

Поясніть, як створити програму Spring Boot за допомогою Maven

Створення Spring Boot застосунку з використанням Maven складається з наступних кроків:

Крок 1: Оберіть тип проекту.

Крок 2: Назвіть проект та натисніть кнопку “Готово” для його створення.

Крок 3: Налаштуйте файл `pom.xml` для створення Spring Boot проекту.

Файл `pom.xml` повинен містити наступний код:

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.javatpoint</groupId>  
  <artifactId>spring-boot-example</artifactId>  
  <version>0.0.1-SNAPS<name>JavaTpoint Spring Boot Example</name>  
</project>  

Додайте батьківський елемент, щоб оголосити проект Maven як дочірній:

<parent>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-parent</artifactId>  
    <version>1.4.2.RELEASE</version>  
</parent>  

Крок 4: Додайте веб-залежність `spring-boot-starter-web` до `pom.xml`:

<dependencies>  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-web</artifactId>  
    </dependency>  
</dependencies>  

Крок 5: Вкажіть версію Java для проекту:

<properties>  
    <java.version>1.8</java.version>  
</properties> 

Крок 6: Оновіть проект Maven після додавання нових залежностей.

Крок 7: Створіть клас Java у пакеті `src/main/java` для запуску програми.

Крок 8: Викличте статичний метод `run` класу Spring Boot.

Крок 9: Запустіть клас як Java-додаток.

Які переваги Spring Boot над Spring?

  • Spring Boot використовує початкове завантаження, яке дозволяє економити місце на пристроях та зменшує час завантаження програми.
  • Spring Boot дозволяє керувати залежностями без необхідності батьківського POM-файлу або XML-конфігурації після додавання залежностей `spring-boot-dependencies`.
  • Spring Boot дозволяє використовувати анотації або XML-конфігурації без потреби в XML-конфігураціях.
  • Spring Boot має менше шаблонного коду, оскільки постачається з вбудованою базою даних в пам’яті та вбудованим сервером Tomcat.
  • Spring Boot не потребує WAR-файлів, використовуючи тільки JAR-файли з простішою структурою.
  • Spring Boot автоматично вбудовує сервери, такі як Tomcat та Jetty, тому немає потреби в ручному налаштуванні сервера.

Процес розбиття на сторінки розділяє дані на розділи для економії ресурсів. Він містить два поля: розмір сторінки та номер сторінки.

Процес розбиття на сторінки включає такі кроки:

Крок 1: Початкове налаштування. Створіть сутність, наприклад `Person`, як доменний клас:

@Entity 
public class Person {
    @Id
    private long id;
    private String name; 
}

Крок 2: Створення репозиторію. Створіть `PersonRepository`, який розширює `PagingAndSortingRepository`, щоб отримати доступ до методів `findAll(Pageable pageable)` і `findAll(Sort sort)` для розбиття на сторінки та сортування відповідно.

public interface PersonRepository extends PagingAndSortingRepository<Person, Integer> {
    List<Product> findAllByPrice(double price, Pageable pageable);
}

Крок 3: Крок пагінації. Створіть об’єкт `PageRequest`, передаючи номер сторінки та розмір сторінки як параметри. Об’єкт реалізує інтерфейс `Pageable`:

Pageable firstPageWithTwoElements = PageRequest.of(0,2);
Pageable secondPageWithThreeElements = PageRequest.of(1,3);

Передайте об’єкт `PageRequest` до методу репозиторію як параметр.

Page<Person> allProducts = personRepository.findAllByPrice(findPageWithTwoElements);
List<Items> allTwoDollarItems = itemsRepository.findAllByPrice(2, secondPageThreeElements) 

За замовчуванням метод `findAll(Pageable pageable)` повертає об’єкт `Page<T>`.

Поясніть, як зареєструвати власну автоматичну конфігурацію

У файлі `META-INF/spring.factories` вкажіть повне ім’я під ключем `@EnableAutoConfiguration`. Це зареєструє клас автоматичної конфігурації.

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.baeldung.autoconfigure.CustomAutoConfiguration

При створенні проекту за допомогою Maven файл потрібно розмістити у каталозі `resources/META-INF`.

Що таке завантаження у Spring Boot?

Завантаження – це процес виконання логіки програми Spring Boot під час запуску. Boot Initializr компілює вихідний код у Spring Boot, заощаджуючи місце та час завантаження програми.

Заключні слова 👨‍💻

У цій статті ми розглянули поширені питання щодо Spring Boot, які можуть виникнути на співбесіді, а також запропонували відповіді, які допоможуть вам впоратися з ними. Сподіваємось, що ця інформація допоможе вам успішно пройти співбесіду та отримати роботу мрії!

Ви також можете ознайомитись із порадами щодо питань, які ставлять на співбесідах на Java.

Бажаємо успіху!🙂