Top Spring Framework Интервью Вопросы

Top Spring Framework Интервью Вопросы

Оглавление

 

 

 

 

 

1. Вступление

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

2. Spring Core

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

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

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

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

Spring предназначен для упрощения разработки Java EE. Вот преимущества его использования:

  • Lightweight: есть небольшие накладные расходы на использование фреймворка в разработке

  • Inversion of Control (IoC): Контейнер Spring заботится о связях между различными объектами, вместо создания или поиска зависимых объектов.

  • Aspect Oriented Programming (AOP): Spring поддерживает АОП для отделения бизнес-логики от системных служб.

  • IoC container: он управляет жизненным циклом Spring Bean и конкретными конфигурациями проекта

  • MVC framework:, который используется для создания веб-приложений или веб-служб RESTful, способных возвращать ответы XML / JSON

  • Transaction management: сокращает объем стандартного кода в операциях JDBC, загрузке файлов и т. д. либо с помощью аннотаций Java, либо с помощью файла конфигурации Spring Bean XML.

  • Exception Handling: Spring предоставляет удобный API для преобразования исключений, связанных с конкретной технологией, в непроверенные исключения.

Q3. Какие весенние подпроекты вы знаете? Кратко опишите их.

  • Core - ключевой модуль, который обеспечивает основные части фреймворка, такие как IoC или DI

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

  • ORM integration - предоставляет уровни интеграции для популярных API объектно-реляционного сопоставления, таких как JPA, JDO и Hibernate.

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

  • MVC framework - веб-модуль, реализующий шаблон проектирования Model View Controller

  • AOP module - реализация аспектно-ориентированного программирования, позволяющая определять чистые методы-перехватчики и pointcuts

Q4. Что такое внедрение зависимостей?

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

Для получения дополнительных сведений см.here.

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

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

  • Сеттер Инъекция

  • Конструктор Инъекция

  • Полевая инъекция

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

Для получения дополнительной информации проверьтеthis article.

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

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

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

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

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

Все различия указаны вthe reference.

Q8. Что такое Spring Bean?

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

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

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

Q10. Как определить объем фасоли?

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

  • одиночка

  • прототип

  • запрос

  • сессия

  • глобальная сессия

Для различий см.here.

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

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

Q12. Как выглядит жизненный цикл Spring Bean?

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

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

image

Q13. Что такое конфигурация Spring на основе Java?

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

Кроме того, если вы хотите перенести свой проект из конфигурации XML в конфигурацию Java, обратитесь кto this article.

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

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

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

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

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

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

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


Q15. Что такое Spring Security?

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

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

Вы можете найти целую серию статей, связанных сsecurity on example.

Q16. Что такое Spring Boot?

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

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

  • Singleton Pattern: Бобы с одинарной границей

  • Factory Pattern: классы Bean Factory

  • Prototype Pattern: Бобы с областью видимости прототипа

  • Adapter Pattern: Spring Web и Spring MVC

  • Proxy Pattern: Поддержка ориентированного на аспекты программирования Spring

  • Template Method Pattern:JdbcTemplate,HibernateTemplate, и т. д.

  • Front Controller: Пружина MVCDispatcherServlet

  • Data Access Object: Поддержка Spring DAO

  • Model View Controller: Spring MVC

Q18. Как работает прототип осциллографа?

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

3. Spring Web MVC

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

Вы можете сделать либо:

  1. Реализация Spring-осведомленных интерфейсов. Доступен полный списокhere.

  2. Использование аннотации@Autowired для этих bean-компонентов:

@Autowired
ServletContext servletContext;

@Autowired
ServletConfig servletConfig;

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

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

Если вам нужно сделать шаг назад, мы рекомендуем взглянуть на концепциюFront Controller in the typical Spring MVC architecture.

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

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

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

For more Spring MVC questions, please check out Spring MVC Interview Questions article.

4. Доступ к данным Spring

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

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

  • создание и закрытие соединений

  • выполнение операторов и вызовов хранимых процедур

  • переборResultSet и возврат результатов

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

@Configuration
@ComponentScan("org.example.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;
    }
}

Для дальнейшего объяснения вы можете пройти черезthis quick article.

Q23. Как бы вы разрешили транзакции весной и каковы их преимущества?

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

Согласноofficial docs, преимущества использования Spring Transactions:

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

  • Поддержка декларативного управления транзакциями

  • Обеспечить более простой API для программного управления транзакциями, чем некоторые сложные API транзакций, такие как JTA

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

Q24. Что такое Spring Dao?

Spring Data Access Object - это поддержка Spring, обеспечивающая последовательную и простую работу с такими технологиями доступа к данным, как JDBC, Hibernate и JPA.

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

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

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

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

Q26. Что такое Aspect, Advice, Pointcut и Joinpoint в Aop?

  • Aspect: класс, реализующий сквозные задачи, такие как управление транзакциями.

  • Advice: методы, которые выполняются, когда в приложении достигается определенныйJoinPoint с совпадающимPointcut

  • Pointcut: набор регулярных выражений, которые сопоставляются сJoinPoint, чтобы определить, нужно ли выполнятьAdvice или нет

  • JoinPoint: момент во время выполнения программы, такой как выполнение метода или обработка исключения

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

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

6. Весна 5

Q28. Что такое реактивное программирование?

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

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

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

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

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

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

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

  • Responsive: система должна своевременно реагировать

  • Resilient: в случае сбоя системы она должна оставаться отзывчивой

  • Elastic: реактивные системы могут реагировать на изменения и оставаться отзывчивыми при различной рабочей нагрузке

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

Q29. Что такое Spring Webflux?

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

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

Q30. Что такое типы Mono и Flux?

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

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

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

public abstract class Mono implements Publisher {...}

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

public abstract class Flux implements Publisher {...}

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

Q31. Какая польза от Webclient и Webtestclient?

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

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

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

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

  • Устранение неполадок в реактивном приложении немного сложно; обязательно ознакомьтесь с нашимиtutorial on debugging reactive streams для получения полезных советов по отладке

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

  • При внедрении

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

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

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

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

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

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

Для начала давайте создадим новый класс, содержащий единственный метод для возвратаString «HelloWorld». Мы поместим это в новый проект 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, и Webflux в одном приложении?

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

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

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

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

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