Большинство списков вопросов интервью по Boot заставляют вас запоминать случайные детали из документации Spring Boot. Но запоминание — плохая замена истинному пониманию и уверенности в знании Spring Boot.
Поэтому сегодня мы собираемся применить другой подход. Вместо того, чтобы перечислять 50 вопросов по мелочам Spring Boot, мы сосредоточимся на 11, которые заставят вас задуматься и, таким образом, многому научиться на этом пути.
Вот эти вопросы в произвольном порядке.
Примечание: если вы сами проводите интервью по Spring Boot, возможно, вы захотите задать эти вопросы в открытом формате, ведущем к обсуждениям, вместо того, чтобы ожидать ответов из учебников
1. Верно или ложно следующее утверждение: «Каждое приложение Spring Boot - это веб-приложение, работающее во встроенном Apache Tomcat». Обоснуйте свой ответ.
Ответ
Утверждение ложное.
Когда дело доходит до веб-приложений, Spring Boot работает с множеством контейнеров сервлетов. По умолчанию используется Apache Tomcat , но вы также можете использовать веб-приложение с Jetty, Undertow или вообще без встроенного контейнера сервлетов.
Более того, Spring Boot не привязан только к веб-приложениям, хотя такое впечатление можно получить, используя зависимость spring-boot-starter-web и, следовательно, автоконфигурацию Spring Boot для веб-сайтов. С помощью Spring Boot вы можете писать все виды сервисов, от пакетных заданий и утилит командной строки до серверных модулей обмена сообщениями и реактивных веб-приложений.
2. В чем разница между Spring Boot и Spring MVC? Или между Spring Boot и Spring Framework? Можете ли вы использовать их вместе в одном проекте?
Ответ
Spring Boot построен поверх Spring Framework.
Пример: Spring Framework предлагает вам возможность читать файлы свойств .properties из различных мест, например, с помощью аннотаций @PropertySource. Он также предлагает вам возможность писать JSON REST контроллеры с помощью инфраструктуры Web MVC.
Проблема в том, что вы должны указать Spring откуда читать свойства приложения и правильно настроить веб-фреймворк, например, для поддержки JSON. Spring Boot, с другой стороны, берет эти отдельные части и предварительно настраивает их для вас.
Например:
Он всегда автоматически ищет файлы application.properties в различных заранее определенных местах и считывает их.
Он всегда загружает встроенный Tomcat, поэтому вы можете сразу увидеть результаты написания ваших @RestControllers и начать писать веб-приложения.
Он автоматически настраивает все для отправки / получения JSON, не беспокоясь о конкретных зависимостях Maven / Gradle. Все, путем запуска основного метода в классе Java, который аннотируется аннотацией @SpringBootApplication.
Если это объяснение по-прежнему оставляет у вас вопросы, ознакомьтесь с этим обширным руководством по Spring Framework, которое более подробно освещает эту тему.
3. Назовите два способа создать новый проект Spring Boot с нуля? Кроме того, как узнать, какие Spring Boot стартеры нужны вашему проекту?
Ответ
Вы можете создавать новые проекты Spring Boot с помощью веб-приложения Spring Initializr или Spring Boot CLI. Интересно, что Spring Initializr - это не просто веб-сайт, на котором вы можете создавать .zip файлы скелета проекта. Это также API, который можно вызывать программно. Все основные IDE (Spring Tool Suite, IntelliJ IDEA Ultimate, Netbeans и VSCode) напрямую интегрируются с ним, так что вы можете создавать новые проекты Spring Boot прямо из вашей IDE.
Что касается стартеров, вам нужно прочитать документацию и иметь немного опыта. Если вы работаете с веб-приложением, вы начнете с spring-boot-starter-web, а затем добавите соответствующий стартер из документации, как только вы захотите включить определенную технологию. Через некоторое время вы получите хорошее представление о том, какие стартеры вам нужны для вашей технологии.
4. Почему вам не нужно указывать версии зависимостей в файле pom.xml при включении сторонних библиотек? Верно ли это для всех сторонних библиотек или только для некоторых? Как узнать, какие библиотеки поддерживает Spring Boot?
Ответ
Это потому, что Spring Boot выполняет за вас некоторое управление зависимостями.
На верхнем уровне стартеры Spring Boot закачивают родительский файл pom.xml (или файл build.gradle), в котором определены все зависимости и соответствующие версии, которые поддерживает конкретная версия Spring Boot - так называемый BOM (Bill Of Materials). Затем вы можете просто использовать эти предопределенные версии или переопределить номера версий в своих собственных сценариях сборки.
Вы можете найти список всех поддерживаемых в настоящее время сторонних библиотек и версий в проекте spring-boot-dependencies.
5. Вы хотите сделать свое приложение настраиваемым, скажем, указать разное соединение с базой данных для среды разработки и рабочей среды. Какие у вас есть варианты?
Ответ
По умолчанию Spring Boot извлекает свойства почти из 20 мест, от переменных среды и аргументов командной строки до файлов конфигурации (application.properties).
Эти местоположения также упорядочены, так что местоположения, расположенные ниже в списке, имеют приоритет над более ранними. Вы можете, например, поместить файл application.properties по умолчанию в свой развертываемый файл .jar, тогда как ваши коллеги по эксплуатации переопределят только некоторые из них, предоставив свой собственный файл application.properties на машине развертывания.
Важно понимать эти местоположения и поведение по умолчанию, чтобы повторно не реализовывать функциональность свойств Spring Boot с настраиваемым PropertySourceProvider или использовать более тяжелые параметры, такие как сервер конфигурации Spring-Cloud.
Вам также необходимо убедиться, что вы понимаете концепцию нечёткой привязки свойств Spring (Relaxed properties binding), поскольку вы можете связывать свойства из этих мест со свойствами компонента конфигурации без явного совпадения имен.
6. Верно или неверно следующее утверждение: «Каждый проект Spring Boot должен использовать Thymeleaf в качестве механизма создания шаблонов HTML». Какие у вас есть возможности для рендеринга HTML?
Ответ
Утверждение ложное.
Spring Boot работает с различными механизмами шаблонов HTML, и хотя Thymeleaf является популярным выбором и полностью интегрирован со Spring, вы также можете использовать многие другие, такие как Freemarker, Velocity или даже JSP (хотя это и не строго шаблонный движок).
Обычно рекомендуется выбрать вариант, который вам наиболее удобен / который используется в вашей компании по умолчанию.
7. Как можно реализовать доступ к реляционной базе данных с помощью Spring Boot? Какие у вас есть варианты?
Ответ
Spring Boot интегрируется с множеством библиотек доступа к базам данных Java ( см. Полный список здесь ). Большинство пользователей, вероятно, будут использовать spring-boot-starter-jpa, spring-boot-starter-jdbc или один из соответствующих проектов spring-data.
Существуют также более легкие альтернативы, такие как jOOQ или myBatis. Наконец, вы всегда можете использовать опции NoSQL, такие как MongoDB и т. д.
8. Вам необходимо настроить ведение журнала в своем приложении, но вы хотите различать уровни журнала на вашем компьютере и уровни журнала в разных средах (qa, test, prod). Какие у вас есть варианты?
Ответ
Во-первых, всегда полезно правильно понять экосистему ведения журналов Java, а затем прочитать соответствующую главу Spring Boot документации о ведении журнала.
Когда дело доходит до настройки вывода, существуют различные варианты:
Непосредственно в файле application.properties (который, конечно, может и должен отличаться в средах DEV и PRD).
В зависимости от используемой структуры ведения журнала, указание настраиваемого файла конфигурации (например, logback-spring.xml).
Или даже через JMX во время выполнения.
Две популярные современные библиотеки ведения журнала, Logback и Log4j2, также поддерживают горячую перезагрузку конфигурации ведения журнала без необходимости перезагрузки вашего приложения.
9. Как проще всего развернуть приложение Spring Boot в рабочей среде? Какие еще есть варианты?
Ответ
Самый простой способ развернуть приложение Spring Boot — это поместить .jar файл со встроенным контейнером сервлетов на любой сервер или платформу, на которой установлена JRE.
По организационным и историческим причинам вы также можете развернуть приложение Spring Boot как файл .war в существующем контейнере сервлетов или сервере приложений.
И последнее, но не менее важное: вы, конечно, также можете поместить свой .jar файл в образ Docker и даже развернуть его с помощью Kubernetes.
10. Вам сказали включить «Spring Security» в вашем приложении. Что происходит, когда вы добавляете стартер Spring Security в свое приложение?
Ответ
Это вопрос с подвохом. При добавлении Spring Security Starter в ваше приложение вы будете неожиданно запрашивать логин каждый раз, когда вы пытаетесь получить доступ к вашему приложению. Кроме того, отправка форм / конечные точки REST будут работать иначе или полностью заблокированы.
Суть в том, что вы «не просто включаете» безопасность в приложении Spring Boot, вам нужно четкое понимание того, что вы делаете.
Автор написал исчерпывающее руководство по Spring Security , которое объясняет все основные аспекты безопасности самым простым способом.
11. Как узнать, какие автоконфигурации Spring Boot применяются при запуске и какие условия оцениваются?
Ответ
Spring Boot Actuator может предоставить эту информацию через конечные точки HTTP или JMX. Кроме того, вы можете запустить приложение Spring Boot с флагом «--debug».
Обратите внимание, что информация об оцениваемых условиях немного «сырая» и ее трудно переварить. Для этого прочтите это руководство, чтобы убедиться, что вы понимаете, как работают автоконфигурации Spring Boot.
Заключение
Очевидно, нет никакой гарантии, что вы ответите на эти вопросы на собственном собеседовании по Spring Boot, хотя знание (и понимание) ответов на них должно стать прочной основой для любого интервью.
Если вы хотите получить более глубокое представление обо всей экосистеме Spring, вы также можете ознакомиться с другими статьями о Spring в блоге автора.
Примечание переводчика. Переводы 2 статей из блога автора о Spring есть на Хабр:
Что такое Spring Framework? От внедрения зависимостей до Web MVC
Spring MVC: создание веб-сайтов и RESTful сервисов
Из комментариев читателей. Одно замечание по вопросу № 3., я думаю, что рядом с Initializr также Bootify.io - хороший вариант.