Статьи

Top 20 Spring MVC Интервью Вопросы для Java-программистов

Среда Spring MVC — одна из самых популярных сред Java для разработки веб-приложений. Если вы работали в Java и разрабатывали веб-приложения, есть большая вероятность, что вы уже использовали  Spring MVC  в своих проектах. В последнее десятилетие он стал основой для разработки веб-приложений на Java. Spring MVC основан на классическом шаблоне проектирования MVC (Model-View-Controller), но это гораздо больше. Он использует силу среды Spring с точки зрения  внедрения зависимостей  и  инверсии управленияl и продвигает слабосвязанную архитектуру, похожую на среду Spring. Из-за своей огромной популярности и полезности, большая часть роли разработки Java требует хорошего знания Spring и Spring MVC.

Существует высокий спрос на хороших Java-разработчиков со знаниями и опытом в Spring и Spring MVC. Один из способов подготовить себя к таким собеседованиям — поиск потенциальных вопросов для интервью.

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

Недавно я готовился к  сертификации Spring Core Professional,  когда наткнулся на несколько руководств по сертификации Spring от Pivotal. Эти руководства содержат некоторые интересные вопросы по Spring MVC.

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

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

20 Spring MVC Интервью Вопросы для Java-программистов

Без лишних слов, вот мой список некоторых часто задаваемых вопросов Spring MVC из интервью Java, особенно с позиций веб-разработки.

1. MVC — это аббревиатура для шаблона проектирования. Что это означает и что за этим стоит?

Ответ: MVC — это аббревиатура для шаблона проектирования Model-View-Controller. Этот шаблон основан на принципе дизайна разделения проблем, который способствует работе с различными функциями на разных уровнях и слабой связи между слоями.

В шаблоне MVC Модель содержит данные, которые отображаются с помощью справки View и Controler при обработке запросов и маршрутизации.

Ни одна из Моделей не знает о View, либо этот View зависит от Model, что означает, что одну и ту же модель можно отобразить с помощью разных представлений, например, JSP или FreeMarker, или ее можно даже записать как JSON или XML в случае веб-сервисов RESTful. Вы можете узнать больше о MVC в моем любимом курсе  Spring Framework 5: от новичка до гуру . Если вы серьезно относитесь к весне, это курс, который вы должны проверить.

2. Вам нужен spring-mvc.jar в вашем classpath или он является частью spring-core? 

Spring-mvc.jar не является частью spring-core, что означает, что если вы хотите использовать среду Spring MVC в своем Java-проекте, вы должны включить spring-mvc.jar в classpath вашего приложения. В веб-приложении Java spring-mvc.jar обычно помещается в папку / WEB-INF / lib.

3. Что это такое  DispatcherServlet и для чего оно используется? ( ответ )

Это  DispatcherServlet реализация шаблона проектирования Front Controller, который обрабатывает все входящие веб-запросы к приложению Spring MVC. Шаблон Front Controller (см.  Шаблон проектирования корпоративных приложений ) является распространенным шаблоном в веб-приложениях, задача которого заключается в получении всего запроса и маршрутизации его к различным компонентам приложения для фактической обработки.

В случае Spring MVC  DispatcherServlet веб-маршрут запрашивает контроллеры Spring MVC.

В Spring MVC  DispatcherServlet используется для нахождения правильного контроллера для обработки запроса, что он делает с помощью отображения обработчика, например,  @RequestMapping аннотации.

Он также отвечает за делегирование логического имени представления  ViewResolver и затем отправку обработанного ответа клиенту.

4. DispatcherServlet Создан ли  экземпляр в контексте приложения? ( ответ )

Нет,  DispatcherServlet экземпляр создается сервлет-контейнерами, такими как Tomcat или Jetty. Вы должны определить  DispatcherServlet в файл web.xml, как показано ниже.

Вы можете видеть, что   тег загрузки при запуске имеет значение 1, что означает, что  DispatcherServlet он создается при развертывании приложения Spring MVC в Tomcat или любом другом контейнере сервлетов. Во время создания он ищет файл servlet-name-context.xml и затем инициализирует bean-компоненты, определенные в этом файле.

5. Что такое корневой контекст приложения в Spring MVC? Как это загружается? ( ответ )

В Spring MVC контекст, загружаемый с использованием  ContextLoaderListener , называется «корневым» контекстом приложения, который принадлежит всему приложению, в то время как тот, который инициализирован с использованием  DispatcherServlet , фактически специфичен для этого сервлета.

Технически Spring MVC допускает множественное использование  DispatcherServlet в веб-приложении Spring MVC, поэтому каждый контекст является специфическим для соответствующего сервлета. Но, имея тот же корневой контекст, может существовать. Вы также можете проверить этот   курс Введение в Spring MVC по Pluralsight, чтобы узнать больше об основах Spring.

6. Для чего используется  @Controller аннотация? Как вы можете создать контроллер без аннотации? ( ответ )

Это  @Controller аннотация Spring MVC для определения контроллера, но на самом деле это просто аннотация стереотипа. Вы даже можете создать контроллер без  @Controller аннотирования классов Spring MVC Controller с помощью  @Component аннотации. Реальная работа по отображению запроса в метод обработчика выполняется с помощью  @RequestMapping аннотации.

7. Что такое  ContextLoaderListener и для чего это нужно? (ответ)

Это  ContextLoaderListener слушатель, который помогает загрузить Spring MVC. Как следует из названия, он загружается и создает  ApplicationContext,  так что вам не нужно писать явный код для его создания.

Контекст приложения — это то, куда уходит Spring bean. Для веб-приложения существует подкласс  WebAppliationContext.

ContextLoaderListener Также связывает жизненный цикл  ApplicationContext для жизненного цикла   ServletContext. Вы можете получить  ServletContext с  WebApplicationContext помощью  getServletContext() метода.

8. Что вы собираетесь делать в web.xml? Где вы это разместите?

Он  ContextLoaderListener настроен в web.xml как слушатель, и вы помещаете его в тег, как показано ниже:

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

При развертывании веб-приложения Spring MVC контейнер сервлетов создал экземпляр  ContextLoaderListener класса, который загружает Spring  WebApplicationContext. Вы также можете увидеть  Spring MVC для начинающих,  чтобы узнать больше об  ContextLoaderListener и  WebApplicationContext и их роли в Spring MVC.

Весеннее интервью Вопросы и ответы

9. Как входящий запрос сопоставляется с контроллером и сопоставляется с методом? ( ответ )

Иногда также задают этот вопрос: как  DispatcherServlet узнать, какой контроллер должен обработать запрос? Ну, ответ лежит в том, что называется отображением обработчика.

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

Если  BeanNameUrlHandlerMappingURL-адрес запроса совпадает с именем компонента, класс в определении компонента является контроллером, который будет обрабатывать запрос.

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

Если вы используете аннотации для настройки Spring MVC, что необходимо, тогда  @RequestMapping аннотации используются для сопоставления входящего запроса с контроллером и методом-обработчиком.

Вы также можете настроить  @RequestMapping аннотацию по пути URI, параметрам запроса, HTTP-методам запроса и HTTP-заголовкам, присутствующим в запросе.

10. Для чего  @RequestParam используется? ( ответ )

Это  @RequestParam аннотация Spring MVC, которая используется для извлечения параметра запроса или параметров запроса из URL-адреса в методе обработчика контроллера, как показано ниже:

public String personDetail(@RequestParam("id") long id){
  ....
  return "personDetails";
}

@RequestParam Аннотаций также поддерживает преобразование типов данных, например , вы можете увидеть здесь строка преобразуется в автоматический вход в систему , но она также может привести к исключению , если параметр запроса нет , или в случае несоответствия типа. Вы также можете сделать параметр необязательным, используя требуемый = false, например  @RequestParam (value = «id», required = false)

11. Каковы различия между  @RequestParam и  @PathVariable ( ответ )

Несмотря на то, что оба  @RequestParam и  @PathVariable аннотации используются для извлечения некоторых данных из URL, между ними есть ключевое различие.

@RequestParam Используется для параметров экстракта запросов, например , что — нибудь после «?» в URL, в то время  @PathVariable как используется для извлечения части самого URI. Например, если задан URL-адрес http: // localhost: 8080 / SpringMVC / books / 3232233 /? Format = json, то вы можете получить доступ к параметру запроса «format» с помощью  @RequestParam аннотации и / books / {id} с помощью   @PathVariable, который даст вам 3232233.

Вот еще один пример  @PathVariable:

@RequestMapping("/persons/{id}" )
public String personDetail (@PathVariable ("id" ) long id) {...}

Этот код может извлечь лицо id = 123 из / персон / 123. Он особенно используется в  веб-службах RESTful,  поскольку их идентификатор обычно является частью пути URI или URL-адреса.

12. Каковы некоторые из допустимых типов возврата метода контроллера? 

Существует множество типов возврата, доступных для метода контроллера в Spring MVC, который аннотируется  @RequestMapping внутри контроллера. Некоторые из популярных:

  1. строка
  2. недействительным
  3. Посмотреть
  4. ModelAndView (Класс)
  5. Модель (Интерфейс)
  6. карта
  7. HttpEntity <?> Или ResponseEntity <?>
  8. HttpHeaders

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

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

Если вы не хотите возвращать имя представления, укажите тип возврата void. Если вы хотите установить имя представления, а также отправить объект, используйте  ModelAndView в качестве типа возврата.

13. Что такое  View и какова идея поддержки различных типов  View( ответ )

View — это интерфейс в приложении Spring MVC, реализации которого отвечают за отображение контекста и представление модели. Один вид предоставляет несколько атрибутов модели. Представления в Spring MVC могут быть бобами.

Они могут быть созданы как бобы  ViewResolver. Поскольку этот интерфейс не имеет состояния, реализации представлений должны быть поточно-ориентированными. При использовании  ViewResolverлогическое имя представления может быть преобразовано в различные типы  View реализации, например,  JstlView для отображения JSP или других реализаций представления для FreeMarker и Velocity.

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

14. Как View выбирается право,  когда дело доходит до фазы рендеринга? 

Право  View выбрано  ViewResolver весной MVC. Когда Контроллер возвращает логическое имя представления  DispatcherServlet, он консультируется с тем,  ViewResolver чтобы найти право   View.

В  ViewResolverзависимости от его реализации логическое представление преобразуется в физический ресурс, например страницу JSP или шаблон FreeMarker.

Например,  InternalResourceViewResolver  является значением по умолчанию,  ViewResolver которое преобразует имя логического представления, например, «привет» в «/WEB-INF/hello.jsp», используя префикс и суффикс.

15. Что это  Model

Model является ссылкой для инкапсуляции данных или вывода для визуализации. Model всегда создается и передается в представление в Spring MVC. Если метод сопоставленного контроллера имеет  Model в качестве параметра метода,  model Spring Framework автоматически внедряет в этот метод экземпляр.

Все атрибуты, установленные на внедренной модели, сохраняются и передаются в  View. Вот пример использования Model в Spring MVC:

public String personDetail(Model model) {
...
model.addAttribute("name", "Joe");
...
}

16. Почему у вас есть доступ к  model вашему  View? Откуда это взялось? 

У вас должен быть доступ к  model вашему представлению, чтобы отобразить вывод. Это тот,  model который содержит данные для визуализации. Model Поставляется с контроллером, который обрабатывает их запрос клиента и инкапсулирует выход в  Model объект.

17. Какова цель сеанса? ( ответ )

Цель области действия сеанса — создать экземпляр компонента для сеанса HTTP. Это означает, что один и тот же компонент может обслуживать несколько запросов, если он находится в области видимости в сеансе. Вы можете определить область действия компонента Spring с помощью атрибута области действия или  @Scope аннотации в приложении Spring MVC.

18. Какова область по умолчанию в веб-контексте? ( ответ )

Синглтонная область — это область по умолчанию для bean-компонента Spring, даже в веб-контексте. Другие три области, учитывающие веб-контекст, — это запрос, сеанс и глобальный сеанс, которые доступны только в ApplicationContext объекте, поддерживающем веб-приложение  . См.  Spring Master Class — от новичка до эксперта,  чтобы узнать больше о  ApplicationContext Spring.

19. Почему контроллеры проверяют артефакты? 

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

20. Что делает  InternalResourceViewResolver ( ответ )

В Spring MVC  ViewResolver возвращается  View обработчик рендеринга на основе имени логического представления (предоставляемого контроллером) и локали. Таким образом, контроллер не связан с определенной технологией представления, например, JSP или FreeMarker. Он возвращает только логическое имя представления.

InternalResourceViewResolver по умолчанию  ViewResolver настроен в Spring MVC, и  DispatcherServlet  использует его для поиска правильного представления. InternalResourceViewResolver используется для визуализации JSP (  JstlView).

Он настраивает префикс и суффикс для логического имени представления, что затем приводит к пути к конкретной JSP, как показано ниже:

<bean class= "org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name= "prefix" value= "/WEB-INF/" />
<property name ="suffix" value =".jsp" />
</bean>

Поэтому, если Controller возвращает «hello» в качестве имени логического представления,  InternalViewResolver он вернет /WEB-INF/hello.jsp и  DispatcherServlet перенаправит запрос на эту страницу JSP для рендеринга.

That’s all for now about the frequently-asked Spring MVC interview questions. If you know answers to these questions, you have a good foundation of the Spring MVC framework and its different components e.g. DispatcherServlet, handler mappings, Controllers, Views, and  Model.

Good luck at your interviews!

Further Reading

Spring Framework 5: Beginner to Guru

Spring Master Class — Beginner to Expert 

Spring Framework Interview Guide — 200+ Questions & Answers

Other Spring-related articles you may like to explore:

  • 3 Ways to Learn Spring Framework (article)
  • How Spring MVC Works Internally? (answer)
  • What Is the Use of the DispatcherServlet in Spring MVC? (answer)
  • How to Enable Spring Security in a Java Application? (answer)
  • Does Spring Certification Help in Job and Career? (article)
  • How to Prepare for Your Spring Certification? (guide)
  • 3 Best Practices Java Developers Can Learn From Spring (article)
  • Difference Between  @Autowired and @Injection annotations in Spring? (answer)
  • 5 Spring and Hibernate Online Courses for Java Developers (list)
  • 5 Spring Boot Courses for Java Developers (courses)
  • 5 Courses to Learn Microservices With Spring Boot and Spring Cloud (courses)

If you want to learn how to develop RESTful Web Services using Spring Framework, check out Eugen Paraschiv’s REST with Spring course. He has recently launched the certification version of the course, which is full of exercises and examples to further cement real-world concepts.