Рубрики
Без рубрики

Лучшие вопросы для интервью Spring Framework

Краткое обсуждение общих вопросов о структуре Spring, которые могут возникнуть во время собеседования при приеме на работу.

Автор оригинала: baeldung.

содержание

  • 1. введение
  • 2. Пружинный сердечник
  • Q1. Что Такое Spring Framework?
  • Q2. Каковы преимущества использования пружины?
  • Q3.Какие Весенние Подпроекты Вы Знаете? Опишите Их Вкратце.
  • Q4. Что Такое Инъекция Зависимостей?
  • Q5. Как мы можем вводить бобы весной?
  • Q6. Какой лучший способ инъекции Бобов и почему
  • Q7. В чем разница между Beanfactory и Applicationcontext?
  • Q8.Что такое Весенняя Фасоль?
  • Q9. Какова область компонента по умолчанию в Spring Framework?
  • Q10. Как определить область действия компонента?
  • Q11. Являются ли Одноэлементные бобы Потокобезопасными?
  • Q12. Как Выглядит Жизненный Цикл Spring Bean?
  • Q13. Какова Конфигурация Spring На Основе Java?
  • Q14. Можем ли мы иметь несколько файлов конфигурации Spring в одном проекте?
  • Q15. Что Такое Весенняя Безопасность?
  • Q16. Что Такое Пружинный Ботинок?
  • Q17. Назовите некоторые шаблоны проектирования, используемые в Spring Framework?
  • Q18. Как Работает Прототип Области Применения?

  • 3. Spring Web MVC
  • Q19. Как получить объекты Servletcontext и Servletconfig в компоненте Spring?
  • Q20. Что такое контроллер в Spring Mvc?
  • Q21. Как Работает Аннотация @Requestmapping?

  • 4. Весенний Доступ к Данным
  • Q22. Что такое класс Spring Jdbctemplate и как его использовать?
  • Q23. Как бы Вы включили Транзакции Весной и каковы Их Преимущества?
  • Q24. Что Такое Весеннее Дао?

  • 5. Spring Аспектно-ориентированное программирование (AOP)
  • Q25. Что Такое Аспектно-Ориентированное Программирование?
  • Q26. Что такое Аспект, Совет, Точечный разрез и Точка соединения в Aop?
  • Q27. Что Такое Ткачество?

  • 6. Пружина 5
  • Q28. Что Такое Реактивное Программирование?
  • Q29. Что Такое поток Пружинного Полотна?
  • Q30. Каковы типы Моно и флюса?
  • Q31. В чем польза веб-клиента и клиента веб-тестирования?
  • Q32. Каковы недостатки использования реактивных потоков?
  • Q33. Совместим ли Spring 5 со старыми версиями Java?
  • Q34. Как Ow Spring 5 интегрируется с модульностью Jdk 9?
  • Q35. Можем ли мы использовать Web Mvc и Web flux в одном приложении?

  • 7. Заключение

1. введение

В этой статье мы рассмотрим некоторые из наиболее распространенных вопросов, связанных с Весной, которые могут возникнуть во время собеседования при приеме на работу.

Дальнейшее чтение:

Вопросы для интервью на Java

Вопросы для интервью Java 8(+ ответы)

Вопросы для интервью с коллекциями Java

2. Пружинный сердечник

Q1. Что Такое Spring Framework?

Spring – это наиболее широко используемая платформа для разработки приложений Java Enterprise Edition. Основные функции Spring могут быть использованы при разработке любого Java-приложения.

Мы можем использовать его расширения для создания различных веб-приложений поверх платформы Jakarta EE, или мы можем просто использовать его положения о внедрении зависимостей в простых автономных приложениях.

Q2. Каковы преимущества использования пружины?

Весенние цели, чтобы облегчить разработку ЭЭ в Джакарте. Вот преимущества его использования:

  • Легкий вес: есть небольшие накладные расходы на использование фреймворка в разработке
  • Инверсия управления (IoC): Spring container заботится о связывании зависимостей различных объектов, а не о создании или поиске зависимых объектов
  • Аспектно-ориентированное программирование (AOP): Spring поддерживает AOP для отделения бизнес-логики от системных служб
  • Контейнер IoC: он управляет жизненным циклом Spring Bean и конкретными конфигурациями проекта
  • MVC framework: используется для создания веб-приложений или веб-служб RESTful, способных возвращать ответы XML/JSON
  • Управление транзакциями: уменьшает объем шаблонного кода в операциях JDBC, загрузке файлов и т. Д. Либо с помощью аннотаций Java, либо с помощью файла конфигурации XML Spring Bean
  • Обработка исключений: Spring предоставляет удобный API для преобразования технологических исключений в непроверенные исключения

Q3. Какие Весенние Подпроекты Вы Знаете? Опишите Их Вкратце.

  • Core – ключевой модуль, который обеспечивает фундаментальные части фреймворка, такие как IoC или DI
  • JDBC – этот модуль включает уровень абстракции JDBC, который устраняет необходимость
  • ORM integration – предоставляет уровни интеграции для популярных API объектно-реляционного отображения, таких как JPA, JDO и Hibernate
  • Web – веб-ориентированный интеграционный модуль, обеспечивающий загрузку составных файлов, прослушиватели сервлетов и функции контекста веб-приложений.
  • MVC framework – веб-модуль, реализующий шаблон проектирования контроллера представления модели
  • Модуль AOP – реализация аспектно-ориентированного программирования, позволяющая определять чистые методы-перехватчики и точечные разрезы

Q4. Что Такое Инъекция Зависимостей?

Внедрение зависимостей, аспект инверсии управления (IoC), – это общая концепция, утверждающая, что вы не создаете свои объекты вручную, а вместо этого описываете, как они должны быть созданы. Контейнер IoC при необходимости создаст экземпляр необходимых классов.

Для получения более подробной информации, пожалуйста, обратитесь сюда .

Q5. Как мы можем вводить бобы весной?

Существует несколько различных вариантов:

  • Инъекция сеттера
  • Инъекция конструктора
  • Полевая инъекция

Конфигурация может быть выполнена с помощью XML-файлов или аннотаций.

Для получения более подробной информации ознакомьтесь с этой статьей .

Q6. Какой лучший способ инъекции Бобов и почему?

Рекомендуемый подход заключается в использовании аргументов конструктора для обязательных зависимостей и установщиков для необязательных. Инъекция конструктора позволяет вводить значения в неизменяемые поля и упрощает тестирование.

Q7. В чем разница между Beanfactory и Applicationcontext?

BeanFactory – это интерфейс, представляющий контейнер, который предоставляет экземпляры bean и управляет ими. Реализация по умолчанию лениво создает экземпляры бобов при вызове getBean () .

ApplicationContext – это интерфейс, представляющий контейнер, содержащий всю информацию, метаданные и компоненты приложения. Он также расширяет интерфейс BeanFactory , но реализация по умолчанию охотно создает экземпляры бобов при запуске приложения. Это поведение может быть переопределено для отдельных компонентов.

Для всех различий, пожалуйста, обратитесь к ссылка .

Q8. Что такое Весенняя Фасоль?

Компоненты Spring – это объекты Java, которые инициализируются контейнером Spring IoC.

Q9. Какова область компонента по умолчанию в Spring Framework?

По умолчанию компонент Spring инициализируется как синглтон .

Q10. Как определить область действия компонента?

Чтобы установить область действия Spring Bean, мы можем использовать аннотацию @Scope или атрибут “scope” в файлах конфигурации XML. Существует пять поддерживаемых областей:

  • синглтон
  • прототип
  • запрос
  • сессия
  • глобальная сессия

Для различий, пожалуйста, обратитесь к здесь .

Q11. Являются ли Одноэлементные бобы Потокобезопасными?

Нет, одноэлементные компоненты не являются потокобезопасными, так как потокобезопасность связана с выполнением, в то время как одноэлемент-это шаблон проектирования, ориентированный на создание. Безопасность потоков зависит только от самой реализации компонента.

Q12. Как Выглядит Жизненный Цикл Spring Bean?

Во-первых, необходимо создать экземпляр компонента Spring на основе определения компонента Java или XML. Также может потребоваться выполнить некоторую инициализацию, чтобы привести его в пригодное для использования состояние. После этого, когда боб больше не требуется, он будет удален из контейнера IoC.

Весь цикл со всеми методами инициализации показан на изображении ( source ):

Q13. Какова Конфигурация Spring На Основе Java?

Это один из способов безопасной настройки приложений на основе Spring. Это альтернатива конфигурации на основе XML.

Кроме того, если вы хотите перенести свой проект из XML в Java config, пожалуйста, обратитесь к этой статье .

Q14. Можем ли мы иметь несколько файлов конфигурации Spring в одном проекте?

Да, в крупных проектах рекомендуется иметь несколько конфигураций пружин для повышения ремонтопригодности и модульности.

Вы можете загрузить несколько файлов конфигурации на основе Java:

@Configuration
@Import({MainConfig.class, SchedulerConfig.class})
public class AppConfig {

Или загрузите один XML-файл, который будет содержать все остальные конфигурации:

ApplicationContext context = new ClassPathXmlApplicationContext("spring-all.xml");

И внутри этого XML-файла у вас будет:


Q15. Что Такое Весенняя Безопасность?

Spring Security-это отдельный модуль Spring framework, который фокусируется на предоставлении методов аутентификации и авторизации в приложениях Java. Он также устраняет большинство распространенных уязвимостей безопасности, таких как атаки CSRF.

Чтобы использовать Spring Security в веб-приложениях, вы можете начать с простой аннотации: @EnableWebSecurity .

Вы можете найти целую серию статей, связанных с безопасностью в строительстве .

Q16. Что Такое Пружинный Ботинок?

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

Q17. Назовите некоторые шаблоны проектирования, используемые в Spring Framework?

  • Одноэлементный шаблон: Одноэлементные бобы
  • Заводская модель: Классы бобовых фабрик
  • Шаблон прототипа: Бобы с областью действия прототипа
  • Шаблон адаптера: Spring Web и Spring MVC
  • Прокси-шаблон: Поддержка программирования, ориентированного на аспекты Spring
  • Шаблон метода шаблона: |/JdbcTemplate , HibernateTemplate, и т. Д. Передний контроллер:
  • Spring MVC DispatcherServlet Объект доступа к данным:
  • Поддержка Spring DAO Контроллер вида модели:
  • Spring MVC

Q18. Как Работает Прототип Области Применения?

Scope prototype означает, что каждый раз, когда вы вызываете экземпляр компонента, Spring создает новый экземпляр и возвращает его. Это отличается от области по умолчанию singleton , где один экземпляр объекта создается один раз для контейнера Spring IoC.

3. Spring Web MVC

Q19. Как получить объекты ServletContext и ServletConfig в компоненте Spring?

Вы можете сделать либо то, либо другое с помощью:

  1. Реализация интерфейсов с поддержкой Spring. Полный список доступен здесь .
  2. Использование @Autowired аннотации к этим бобам:
@Autowired
ServletContext servletContext;

@Autowired
ServletConfig servletConfig;

Q20. Что такое контроллер в Spring Mvc?

Проще говоря, все запросы, обрабатываемые DispatcherServlet , направляются в классы, аннотированные @Controller . Каждый класс контроллера сопоставляет один или несколько запросов методам, которые обрабатывают и выполняют запросы с предоставленными входными данными.

Если вам нужно сделать шаг назад, мы рекомендуем взглянуть на концепцию фронтального контроллера в типичной архитектуре Spring MVC .

Q21. Как Работает Аннотация @Requestmapping?

Аннотация @RequestMapping используется для сопоставления веб-запросов с методами контроллера Spring. В дополнение к простым случаям использования, мы можем использовать его для сопоставления заголовков HTTP, связывания частей URI с @PathVariable, и работы с параметрами URI и аннотацией @RequestParam .

Более подробная информация о @RequestMapping доступна здесь .

Для получения дополнительных вопросов Spring MVC, пожалуйста, ознакомьтесь с Вопросы для интервью Spring MVC статья .

4. Весенний Доступ к Данным

Q22. Что такое класс Spring Jdbctemplate и как его использовать?

Spring JdbcTemplate-это основной API, с помощью которого мы можем получить доступ к логике операций с базами данных, которая нас интересует:

  • создание и закрытие соединений
  • выполнение инструкций и вызовов хранимых процедур
  • итерация по набору результатов | и возврат результатов

Чтобы использовать его, нам нужно будет определить простую конфигурацию DataSource :

@Configuration
@ComponentScan("org.baeldung.jdbc")
public class SpringJdbcConfig {
    @Bean
    public DataSource mysqlDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/springjdbc");
        dataSource.setUsername("guest_user");
        dataSource.setPassword("guest_password");
 
        return dataSource;
    }
}

Для получения дополнительных объяснений вы можете ознакомиться с этой краткой статьей .

Q23. Как бы Вы включили Транзакции Весной и каковы Их Преимущества?

Существует два различных способа настройки Транзакций – с помощью аннотаций или с помощью аспектно – ориентированного программирования (AOP) – каждый со своими преимуществами.

Преимущества использования весенних транзакций, согласно официальным документам , заключаются в следующем:

  • Обеспечьте согласованную модель программирования для различных API транзакций, таких как JTA, JDBC, Hibernate, JPA и JDO
  • Поддержка декларативного управления транзакциями
  • Предоставьте более простой API для программного управления транзакциями, чем некоторые сложные API транзакций, такие как JTA
  • Очень хорошо интегрируется с различными абстракциями доступа к данным Spring

Q24. Что Такое Весеннее Дао?

Объект доступа к данным Spring – это поддержка Spring, предоставляемая для последовательной и простой работы с технологиями доступа к данным, такими как JDBC, Hibernate и JPA.

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

5. Spring Аспектно-ориентированное программирование (AOP)

Q25. Что Такое Аспектно-Ориентированное Программирование?

Аспекты позволяют модуляризировать сквозные проблемы, такие как управление транзакциями, которые охватывают несколько типов и объектов, добавляя дополнительное поведение к уже существующему коду без изменения затронутых классов.

Вот пример регистрации времени выполнения на основе аспектов .

Q26. Что такое Аспект, Совет, Точечный разрез и Точка соединения в Aop?

  • Аспект : класс, реализующий сквозные задачи, такие как управление транзакциями
  • Совет : методы, которые выполняются, когда в приложении достигается определенная Точка соединения с совпадением Pointcut
  • Pointcut : набор регулярных выражений, которые сопоставляются с Точкой соединения , чтобы определить, нужно ли выполнять Совет или нет
  • Точка соединения : точка во время выполнения программы, например выполнения метода или обработки исключения.

Q27. Что Такое Ткачество?

Согласно official docs , плетение – это процесс, который связывает аспекты с другими типами приложений или объектами для создания объекта. Это можно сделать во время компиляции, загрузки или во время выполнения. Spring AOP, как и другие чистые Java-фреймворки AOP, выполняет плетение во время выполнения.

6. Пружина 5

Q28. Что Такое Реактивное Программирование?

Реактивное программирование-это неблокирующие приложения, управляемые событиями, которые масштабируются с небольшим количеством потоков, а обратное давление является ключевым компонентом, который направлен на то, чтобы производители не перегружали потребителей.

Основными преимуществами реактивного программирования являются:

  • увеличение использования вычислительных ресурсов на многоядерном и многопроцессорном оборудовании
  • и повышение производительности за счет сокращения сериализации

Реактивное программирование, как правило, управляется событиями, в отличие от реактивных систем, которые управляются сообщениями. Таким образом, использование реактивного программирования не означает, что мы строим реактивную систему, которая является архитектурным стилем.

Однако реактивное программирование может быть использовано в качестве средства реализации реактивных систем, если мы будем следовать Реактивному манифесту , который очень важно понять.

Исходя из этого, реактивные системы обладают четырьмя важными характеристиками:

  • Отзывчивость : система должна реагировать своевременно
  • Resilient : в случае, если система столкнется с каким-либо сбоем, она должна оставаться отзывчивой
  • Эластичные : реактивные системы могут реагировать на изменения и оставаться отзывчивыми при различной рабочей нагрузке
  • Управляемые сообщениями : реактивные системы должны устанавливать границу между компонентами, полагаясь на асинхронную передачу сообщений

Q29. Что Такое поток Пружинного Полотна?

Spring Web Flux -это веб-фреймворк с реактивным стеком Spring, который является альтернативой Spring MVC.

Для достижения этой реактивной модели и высокой масштабируемости весь стек не блокируется. Ознакомьтесь с нашим учебником по Spring 5 WebFlux для получения дополнительной информации.

Q30. Каковы типы Моно и флюса?

Фреймворк Web Flux в Spring Framework 5 использует Reactor в качестве своей асинхронной основы.

Этот проект предоставляет два основных типа: Mono для представления одного асинхронного значения и Flux для представления потока асинхронных значений. Они оба реализуют интерфейс Publisher , определенный в спецификации Reactive Streams .

Mono реализует Publisher и возвращает 0 или 1 элемент:

public abstract class Mono implements Publisher {...}

Также , Flux реализует Издатель и возвращает N элементы:

public abstract class Flux implements Publisher {...}

По определению, эти два типа представляют потоки, поэтому они оба ленивы, что означает, что ничего не выполняется, пока мы не потребим поток с помощью метода subscribe () . Оба типа являются неизменяемыми, поэтому вызов любого метода вернет новый экземпляр Flux или Mono .

Q31. В чем польза веб-клиента и клиента веб-тестирования?

WebClient -это компонент новой веб-реактивной платформы, который может выступать в качестве реактивного клиента для выполнения неблокирующих HTTP-запросов. Будучи реактивным клиентом, он может обрабатывать реактивные потоки с обратным давлением и в полной мере использовать преимущества Java 8 lambdas. Он также может обрабатывать как сценарии синхронизации, так и сценарии асинхронности.

С другой стороны, клиент Web Test – это аналогичный класс, который мы можем использовать в тестах. По сути, это тонкая оболочка вокруг веб-клиента . Он может подключаться к любому серверу по HTTP-соединению. Он также может напрямую связываться с приложениями WebFlux, используя объекты фиктивных запросов и ответов, без необходимости использования HTTP-сервера.

Q32. Каковы недостатки использования реактивных потоков?

Основными недостатками использования реактивных потоков являются:

  • Устранение неполадок реактивного приложения немного сложно; обязательно ознакомьтесь с нашим учебником по отладке реактивных потоков для получения некоторых полезных советов по отладке
  • Существует ограниченная поддержка реактивных хранилищ данных, поскольку традиционные реляционные хранилища данных еще не приняли реактивную парадигму
  • Существует дополнительная кривая обучения при внедрении

Q33. Совместим ли Spring 5 со старыми Версиями Java?

Чтобы воспользоваться преимуществами функций Java 8, была обновлена кодовая база Spring. Это означает, что более старые версии Java не могут быть использованы. Следовательно, фреймворк требует минимум Java 8.

Q34. Как Spring 5 Интегрируется С Модульностью Jdk 9?

Весной 5 все было модульно, поэтому мы не будем вынуждены импортировать банки, которые могут не иметь нужных функций.

Пожалуйста, ознакомьтесь с нашим руководством по модульности Java 9 для более глубокого понимания того, как работает эта технология.

Давайте рассмотрим пример, чтобы понять функциональность нового модуля в Java 9 и как организовать проект Spring 5 на основе этой концепции.

Для начала давайте создадим новый класс, содержащий один метод для возврата String “Hello World”. Мы поместим это в новый проект Java – HelloWorldModule :

package com.hello;
public class HelloWorld {
    public String sayHello(){
        return "HelloWorld";
    }
}

Тогда давайте создадим новый модуль:

module com.hello {
    export com.hello;
}

Теперь давайте создадим новый проект Java, HelloWorldClient , чтобы использовать вышеупомянутый модуль, определив модуль:

module com.hello.client {
    requires com.hello;
}

Вышеуказанный модуль будет доступен для тестирования уже сейчас:

public class HelloWorldClient {
    public static void main(String[] args){
        HelloWorld helloWorld = new HelloWorld();
        log.info(helloWorld.sayHello());
    }
}

Q35. Можем ли мы использовать Web Mvc и Web flux в одном приложении?

На данный момент Spring Boot разрешает только Spring MVC или Spring WebFlux, поскольку Spring Boot пытается автоматически настроить контекст в зависимости от зависимостей, существующих в его пути к классам.

Кроме того, Spring MVC не может работать на Netty. Более того, MVC-это блокирующая парадигма, а Web Flux-неблокирующий стиль, поэтому мы не должны смешивать их вместе, поскольку они служат разным целям.

7. Заключение

В этой обширной статье мы рассмотрели некоторые из наиболее важных вопросов для технического интервью о весне.

Мы надеемся, что эта статья поможет вам в вашем предстоящем весеннем интервью. Удачи!