Главная страница

Решение для всех, связанных со Spring технологий, избавляя программиста от лишнего поиска примеров кода и загрузки из них требуемых дескрипторов зависимостей (пример таких дескрипторов и стартовых пакетов будет показан ниже)


Скачать 40.84 Kb.
НазваниеРешение для всех, связанных со Spring технологий, избавляя программиста от лишнего поиска примеров кода и загрузки из них требуемых дескрипторов зависимостей (пример таких дескрипторов и стартовых пакетов будет показан ниже)
Дата20.02.2021
Размер40.84 Kb.
Формат файлаdocx
Имя файлаPre_3.docx
ТипРешение
#178035
  1. Рассказать, как работает Spring Boot, для чего он нужен, какая от него польза?


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


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

2.1. Простота управления зависимостями


Чтобы ускорить процесс управления зависимостями, Spring Boot неявно упаковывает необходимые сторонние зависимости для каждого типа приложения на основе Spring и предоставляет их разработчику посредством так называемых starter-пакетов (spring-boot-starter-web, spring-boot-starter-data-jpa и т.д.)
Starter-пакеты представляют собой набор удобных дескрипторов зависимостей, которые можно включить в свое приложение. Это позволит получить универсальное решение для всех, связанных со Spring технологий, избавляя программиста от лишнего поиска примеров кода и загрузки из них требуемых дескрипторов зависимостей (пример таких дескрипторов и стартовых пакетов будет показан ниже)
Например, если вы хотите начать использовать Spring Data JPA для доступа к базе данных, просто включите в свой проект зависимость spring-boot-starter-data-jpa и все будет готово (вам не придется искать совместимые драйверы баз данных и библиотеки Hibernate)

Если вы хотите создать Spring web-приложение, просто добавьте зависимость spring-boot-starter-web, которая подтянет в проект все библиотеки, необходимые для разработки Spring MVC-приложений, таких как spring-webmvcjackson-jsonvalidation-api и Tomcat
Другими словами, Spring Boot собирает все общие зависимости и определяет их в одном месте, что позволяет разработчикам просто использовать их, вместо того, чтобы изобретать колесо каждый раз, когда они создают новое приложение

Следовательно, при использовании Spring Boot, файл pom.xml содержит намного меньше строк, чем при использовании его в Spring-приложениях

2.2. Автоматическая конфигурация


Второй превосходной возможностью Spring Boot является автоматическая конфигурация приложения
После выбора подходящего starter-пакета, Spring Boot попытается автоматически настроить Spring-приложение на основе добавленных вами jar-зависимостей
Например, если вы добавите Spring-boot-starter-web, Spring Boot автоматически сконфигурирует такие зарегистрированные бины, как DispatcherServletResourceHandlersMessageSource

Если вы используете spring-boot-starter-jdbcSpring Boot автоматически регистрирует бины DataSourceEntityManagerFactoryTransactionManager и считывает информацию для подключения к базе данных из файла application.properties

Если вы не собираетесь использовать базу данных, и не предоставляете никаких подробных сведений о подключении в ручном режиме, Spring Boot автоматически настроит базу в памяти, без какой-либо дополнительной конфигурации с вашей стороны (при наличии H2 или HSQL библиотек)

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

2.3. Встроенная поддержка сервера приложений — контейнера сервлетов

Каждое Spring Boot web-приложение включает встроенный web-сервер. Посмотрите на список контейнеров сервлетов, которые поддерживаются "из коробки"
Разработчикам теперь не надо беспокоиться о настройке контейнера сервлетов и развертывании приложения на нем. Теперь приложение может запускаться само, как исполняемый jar-файл с использованием встроенного сервера

Если вам нужно использовать отдельный HTTP-сервер, для этого достаточно исключить зависимости по умолчанию. Spring Boot предоставляет отдельные starter-пакеты для разных HTTP-серверов
Создание автономных web-приложений со встроенными серверами не только удобно для разработки, но и является допустимым решением для приложений корпоративного уровня и становится все более полезно в мире микросервисов. Возможность быстро упаковать весь сервис (например, аутентификацию пользователя) в автономном и полностью развертываемом артефакте, который также предоставляет API — делает установку и развертывание приложения значительно проще

  1. Рассказать, как Spring Boot понимает какую версию зависимостей подгружать.


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

Если вы добавили аннотацию @SpringBootApplication в класс, вам не нужно добавлять аннотации @EnableAutoConfiguration, @ComponentScan и @SpringBootConfiguration . Аннотация @SpringBootApplication включает в себя все остальные примечания.
  1. Можно ли указать свою версию той или иной зависимости и как?



3.0.1.RELEASE
или

<version>1.4.1.RELEASEversion>
  1. Перевести запросы в базу данных на Spring Data не используя SQL и HQL.


Запросы к сущности можно строить прямо из имени метода. Для этого используется механизм префиксов find…By, read…By, query…By, count…By, и get…By, далее от префикса метода начинает разбор остальной части. 
  1. Рассказать, как формируются запросы через Spring Data.


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

Описание запросов начинается с того, что объявляется интерфейс, который расширяет Repository. Наличие Repository в предках класса служит маркером для Spring Data Commons и говорит ему, что надо взять и создать реализацию для методов, декларированных в вашем интерфейсе.При этом репозиторий будет создан для объектов типа T, идентификатором которого будет тип ID. Под идентификатором, как несложно догадаться, выступает то поле класса Tна которое навешена аннотация @Id.

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

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

  • count() — который возвращает количество объектов типа T в базе

  • delete() — который удаляет объекты типа T из базы

  • save() — который сохраняет объекты типа T в базу

  • findOne() — который возвращает объект из базы по ID (или null, если вы недостаточно счастливый человек)

  • findAll() — который возвращает все объекты типа T из базы

Потом PagingAndSortingRepository добавляющий методы findAll() с поддержкой сортировки и постраничной выборки. RevisionRepository, добавляющий поддержку ревизий. И, наконец, JpaRepository, который объединяет все вышеперечисленные интерфейсы и их функционал. Самый удобный и популярный интерфейс 🙂

Декларирование запросов

Конечно, можно пользоваться и предопределёнными запросами, но хотелось бы и чего-нибудь поближе к решаемой разработчиком задаче. Запросы определяются по единому шаблону — указывается возвращаемый тип, вид запроса и список предикатов. Например:

  • Country findOneByCodeLike(String code)

  • List findByGroup(Group group)

  • Long countByCurrencyCodeAndAccountType(String code, AccountType type)

Методы запросов могут возвращать следующие типы:

  • T — собственно тот тип, которым вы типизировали интерфейс и на который и настроен репозиторий

  • Option/Optional — то же самое, что и просто T, но вместо null в случае отсутствия объекта вернётся пустой Option/Optional

  • Iterable, Collection, List — на случай, если нужно вернуть более чем один объект

  • Long, Integer — для методов, подсчитывающих количество объектов

  • Stream — на случай, если возвращаемые несколько объектов хочется сразу обработать с использованием потоков

  • Future, Future> и так далее — аналог всего вышеперечисленного, но метод не блокируется, а возвращает управление сразу. А данные, очевидно, будут доступны, когда Future завершится

Сам запрос может начинаться с названия операции, которая должна быть выполнена:

  • findOneBy… — Выбирает один объект

  • findBy… — Выбирает несколько объектов

  • countBy… — Подсчитывает количество объектов, которые соответствуют условиям.

И, наконец-то, продолжается всё перечислением предикатов. Каждый предикат описывается названием поля и условием. Например выше findOneByCodeLike найдёт один объект, у которого поле code подобно (sql like) переданному параметру. Параметры передаются в том же порядке, в котором перечисляются предикаты. Самих предикатов существует довольно большое число и все они перечислены в документации на Spring Data Jpa. Я приведу наиболее часто встречающиеся:

  • GreaterThan и GreaterThanEqual — значение должно быть более или более и равно.

  • LessThan и LessThanEqual — значение должно быть менее или менее и равно.

  • IsNull — значение поля должно быть null. При этом передавать параметр не требуется .

  • Like и NotLike — значение должно быть подобно или наоборот, не подобно, параметру. Подобно в терминах SQL like.

  • True и False — значение истинно или ложно. Параметр передавать не требуется.

  • In — значение находится в переданном списке.

Кроме того, в определение запроса можно добавлять сортировку, используя конструкции вида OrderByПолеAsc и OrderByПолеDesc, которые включаются возрастающую или убывающую сортировки по заданному полю. Таких сортировок, очевидно, может быть несколько. А там где есть стабильный порядок, определяемый сортировкой, можно задать и ограничение по количеству возвращаемых записей, используя ключевое слово first. Например List findFirst10ByGroup(Group code)
  1. Какие методы есть в CRUD-репозитории?





Modifier and Type

Method and Description

1

long

count()

Возвращает количество доступных сущностей.

2

void

delete(T entity)

Удаляет данную сущность.

3

void

deleteAll()

Удаляет все объекты, управляемые репозиторием.

4

void

deleteAll(IterableT> entities)

Удаляет указанные объекты.

5

void

deleteById(ID id)

Удаляет объект с данным идентификатором.

6

boolean

existsById(ID id)

Возвращает, существует ли сущность с данным идентификатором.

7

Iterable<T>

findAll()

Возвращает все экземпляры типа.

8

Iterable<T>

findAllById(Iterable<ID> ids)

Возвращает все экземпляры типа T с заданными идентификаторами.

9

Optional<T>

findById(ID id)

Получает объект по его идентификатору.

10

T>
S

save(S entity)

Сохраняет данную сущность.

11

T>
Iterable

saveAll(Iterable entities)

Сохраняет все заданные сущности.



  1. Что такое Bootstrap и как он работает, какие технологии использует?


Bootstrap — это открытый и бесплатный HTML, CSS и JS фреймворк, который используется веб-разработчиками для быстрой вёрстки адаптивных дизайнов сайтов и веб-приложений.

Bootstrap состоит из:

  • инструментов для создания макета (обёрточных контейнеров, мощной системы сеток, гибких медиа-объектов, адаптивных утилитных классов);

  • классов для стилизации базового контента: текста, изображений, кода, таблиц и figure;

  • готовых компонентов: кнопок, форм, горизонтальных и вертикальных навигационных панелей, слайдеров, выпадающих списков, аккордеонов, модальных окон, всплывающих подсказок и др.;

  • утилитных классов для решения традиционных задач наиболее часто возникающими перед веб-разработчиками: выравнивание текста, отображение и скрытие элементов, задания цвета, фона, margin и padding отступов, и т.д.

Основные инструменты Bootstrap:

  • Сетки — заранее заданные размеры колонок, которые можно сразу же использовать, например, ширина колонки 140 px относится к классу .span2 (.col-md-2 в третьей версии фреймворка), который можно использовать в CSS-описании документа.

  • Шаблоны — фиксированный или резиновый шаблон документа.

  • Типографика — описания шрифтов, определение некоторых классов для шрифтов, таких как код, цитаты и т. п.

  • Медиа — предоставляет некоторое управление изображениями и видео.

  • Таблицы — средства оформления таблиц, вплоть до добавления функциональности сортировки.

  • Формы — классы для оформления форм и некоторых событий, происходящих с ними.

  • Навигация — классы оформления для панелей, вкладок, перехода по страницам, меню и панели инструментов.

  • Алерты — оформление диалоговых окон, подсказок и всплывающих окон.



  1. Рассказать про сетку Bootstrap.


Мощная система гибких сеток для мобильных устройств, для удобной верстки и расположения элементов любых видов и размеров. Используется система «12 колонок», 5-ти адаптивных ярусов, препроцессоров Sass и десятков предустановленных классов.

Система сеток Bootstrap 4 использует контейнеры, ряды и колонки, чтобы удобно располагать содержимое. Бутстрап реализован с помощью флексбокса и полностью адаптивен.

Правила сетки:

Колонки должны быть прямыми потомками Row

Row используются только для того, чтобы включать в себя колонки и не для ничего больше.

Row должны быть помещены внутри контейнера

  1. Рассказать про преимущества и недостатки REST-сервисов


основной принцип проектирования REST устанавливает однозначное соответствие между операциями create, read, update и delete (CRUD) и HTTP-методами. Согласно этому соответствию:

  • Для создания ресурса на сервере используется POST.

  • Для извлечения ресурса используется GET.

  • Для изменения состояния ресурса или его обновления используется PUT.

  • Для удаления ресурса используется DELETE.




  • Все является ресурсами с уникальным идентификатором (URL)

  • Все операции клиента с сервером stateless, т.е. сервер не должен хранить вообще никакой информации о клиенте – никакой сессии

  • Все запросы можно поделить на 4 типа в соответствии с CRUD, причем каждому типу сопоставляется HTTP метод – Post, Get, Put и Delete

  • Вся логика крутится вокруг ресурсов, а не операций


REST основывается на HTTP => доступны все плюшки:

  • Кэширование.

  • Масштабирование.

  • Минимум накладных расходов.

  • Стандартные коды ошибок.


  1. Какие форматы данных используются в REST -сервисах


Формат обмена данными: здесь нет никаких ограничений. JSON — очень популярный формат, хотя можно использовать и другие, такие как XML
  1. Рассказать про responseBody и requestBody.


Когда необходимо, чтобы результат работы метода в контроллере был выведен непосредственно в тело ответа на запрос, а не послужил адресом перехода и не был помещён как параметр в модель, нужно указать непосредственно перед методом аннотацию @ResponseBody.
HTTP-запрос кроме заголовков и параметров имеет также основуную часть – тело запроса. Её содержимон также может быть распознано как параметр в методе контроллера. Для того, чтобы это произошло, необходимо указать @RequestBode в объявлении этого параметра.
Поскольку происходит распознавание всего тела запроса как объекта, нет возможности объявить более чем один параметр с аннтоацией @ RequestBody. Поэтому, если требуется получить от клиента несколько объектов, приходится создавать на сервере специальный «транспортный класс», объединяющий эти объекты в одну структуру – и принимать от клиента объект-экземпляра такого класса.


  1. Рассказать про ResponseEntity.


ResponseEntity представляет полный HTTP-ответ: код состояния, заголовки и тело. Поэтому его можно использовать для полной настройки HTTP-ответа.
Для его использования, мы должны вернуть его из конечной точки.
Является универсальным типом. В результате можем использовать любой тип в качестве ответа. Можно устанавливать заголовки HTTP.
Предоставляет два вложенных интерфейса компоновщика: HeadersBuilde и его подинтерфейс BodyDuilder. Следовательно можно получить доступ к их возможностям через статические методы ResponseEntity.


  1. Как получить сущность, как параметр?


@RequestBody

HTTP-запрос кроме заголовков и параметров имеет также основную часть - тело запроса. Её содержимое также может быть распознано как параметр в методе контроллера. Для того, чтобы это произошло, необходимо указать @RequestBody в объявлении этого параметра:

@RequestMapping(value = "/page", method = RequestMethod.POST)

public String savePage(@RequestBody String pageContent) {

//---

}
  1. Как выглядит массив в формате json?


В JSON элементами массива могут быть строки, числа, объекты, массивы, Boolean и null.
Могут быть значениями свойств объектов:
{

“name”:”John”,
“age”;30,
“cars”; [ “Ford”, “Bmw”, “Fiat” ]
}
Существуют вложенные массивы.
  1. Какую библиотеку json использует Spring?


Jackson JSON
  1. Что такое AJAX?


AJAX – это асинхронный JavaScript и XML. Набор методов веб-разработки, которые позволяют веб-приложениям работать асинхронно – обрабатывать любые запросы к серверу в фоновом режиме.


  1. Чем аннотация RestController отличается от Controller?


Основная разница, заключается в способе создания тела HTTP ответа. MVC контроллен оприрается на технологию view, RESTfull веб сервис контроллер возвращает объект, который предоставляется в HTTP ответе в виде JSON или XML


  1. Проверить, что страница не перезагружается при действиях CRUD.

  2. Рассказать про RestTemplate, какие есть методы?


Класс RestTemplate является центральным инструментов для выполнения HTTP-операций на стороне клиента в Spring. Предоставляет несколько служебных методов для построения HTTP-запросов и обработки ответов. Может сериализовать/десериализовать большинство объектов JSON и из него без особых усилий.

По методам, их слишком много, для того чтобы озвучивать -

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html





написать администратору сайта