Spring Flashcards

1
Q

Что такое JSF

A

JavaServer Faces (JSF) — это фреймворк для веб-приложений, написанный на Java. для облегчения разработки пользовательских интерфейсов для Java EE-приложений. JSF основывается на использовании компонентов

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Расскажите о Spring Framework.

A

универсальный фреймворк с открытым исходным кодом для Java-платформы.замена модели Enterprise JavaBeans.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

преимуществa Spring Framework

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Dependency Injection (DI)

A

Внедрение зависимости (Dependency injection, DI) — процесс предоставления внешней зависимости программному компоненту. Является специфичной формой «инверсии управления» ( Inversion of control, IoC),
через конструктор либо через сеттер

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Spring модули

A

1) Inversion of Control-контейнер: конфигурирование компонентов приложений и управление жизненным циклом Java-объектов.
2) Фреймворк доступа к данным: через JDBC- и ORM-средства
3) транзакции
4) MVC
5) Security
6) Тестирование
7) Spring cloud
8) REST

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

AOP

A

возможность реализации сквозной логики. Подход Spring к АОП заключается в создании “динамических прокси” для целевых объектов и “привязывании” объектов к конфигурированному совету для выполнения сквозной логики.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что такое joinpoint АОП?

A

места в приложении, в которые можно вставлять дополнительную логику с использованием АОП.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Что такое advice АОП?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Что такое pointcut АОП (срез он же перхватчик)?

A

срез, представляет собой коллекцию всех точек соединения Method Invocation в отдельном классе. Часто между срезами можно установить сложные отношения, чтобы обеспечить дополнительные ограничения на то, когда будет выполнен совет.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Что такое aspect АОП?

A

это комбинация совета и срезов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Что такое weaving АОП?

A

процесс действительной вставки аспектов в определенную точку кода приложения. Для решений АОП времени компиляции это делается на этапе компиляции, обычно в виде дополнительного шага процесса сборки

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

разница между Spring AOP и AspectJ АОП?

A

AspectJ используется когда нужно привязаться не только к полям но и к методам или к обьектам

Spring AOP немного проще, он поддерживает аннотации AspectJ,
Недостатком Spring AOP является работа только со своими бинами, которые существуют в Spring Context.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

IoC контейнер Spring?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Что такое Spring бин?

A

любой компонент, управляемый контейнером

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

конфигурационный файл Spring Bean?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

способы настроить класс как Spring Bean?

A

1)XML конфигурация:

2)Java based:
@Configuration
@ComponentScan(value="ru.javastudy.spring.main")
public class MyConfiguration { 
    @Bean
    public MyService getService(){
        return new MyService();
    }
}

3)Annotation based:
@Component, @Service, @Repository, @Controller

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

scope у Spring Bean?

A

singleton — может быть создан только один экземпляр бина. Этот тип используется спрингом по умолчанию, если не указано другое. Следует осторожно использовать публичные свойства класса, т.к. они не будут потокобезопасными.
prototype — создается новый экземпляр при каждом запросе.
request — аналогичен prototype, но название служит пояснением к использованию бина в веб приложении. Создается новый экземпляр при каждом HTTP request.
session — новый бин создается в контейнере при каждой новой HTTP сессии.
global-session: используется для создания глобальных бинов на уровне сессии для Portlet приложений.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

жизненный цикл Spring Bean?

A

@PostConstruct
public void init(){
System.out.println(“Bean init method called”);
}

@PreDestroy
public void destroy(){
    System.out.println("Bean destroy method called");
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

@Autowired?

A

Считается хорошей практикой задавать явные связи между зависимостями, но в Spring предусмотрен дополнительный механизм связывания @Autowired. Аннотация может использоваться над полем или методом для связывания по типу. Чтобы аннотация заработала, необходимо указать небольшие настройки в конфигурационном файле спринг с помощью элемента context:annotation-config.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Является ли Spring бин потокобезопасным?

A

о умолчанию бин задается как синглтон в Spring. Таким образом все публичные переменные класса могут быть изменены одновременно из разных мест. Так что — нет, не является. Однако поменяв область действия бина на request, prototype, session он станет потокобезопасным, но это скажется на производительности.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Что такое контроллер в Spring MVC?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

@Component

A

используется для указания класса в качестве компонента спринг. При использовании поиска аннотаций, такой класс будет сконфигурирован как spring bean.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

@Controller

A

пециальный тип класса, применяемый в MVC приложениях. Обрабатывает запросы и часто используется с аннотацией @RequestMapping.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

@Repository

A

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

25
Q

@Service

A

указывает, что класс является сервисом для реализации бизнес логики (на самом деле не отличается от Component, но просто помогает разработчику указать смысловую нагрузку класса).

26
Q

DispatcherServlet в MVC

A

сервлет диспетчера в MVC. Этот сервлет анализирует запросы и направляет их соответствующему контроллеру для обработки. В Spring MVC класс DispatcherServlet является центральным сервлетом, который получает запросы и направляет их соответствующим контроллерам. В приложении Spring MVC может существовать произвольное количество экземпляров DispatcherServlet, предназначенных для разных целей (например, для обработки запросов пользовательского интерфейса, запросов веб-служб REST и т.д.). Каждый экземпляр DispatcherServlet имеет собственную конфигурацию WebApplicationContext, которая определяет характеристики уровня сервлета, такие как контроллеры, поддерживающие сервлет, отображение обработчиков, распознавание представлений, интернационализация, оформление темами, проверка достоверности, преобразование типов и

27
Q

ContextLoaderListener

A

слушатель при старте и завершении корневого класса Spring WebApplicationContext. Основным назначением является связывание жизненного цикла ApplicationContext и ServletContext, а так же автоматического создания ApplicationContext. Можно использовать этот класс для доступа к бинам из различных контекстов спринг. Настраивается в web.xml:

contextConfigLocation
/WEB-INF/spring/root-context.xml

org.springframework.web.context.ContextLoaderListener
28
Q

WEB-INF папка

A

Папка WEB-INF служит хранилищем для файлов, к которым закрыт прямой доступ из адресной строки. Существует специальное понятие внутренних ресурсов, которые не доступны извне.

Поместив ваши представления в папку WEB-INF/view/*.jsp вы скроете представления и доступ к ним можно будет получить только из контроллера.

29
Q

MultipartResolver в Spring?

A

Интерфейс MultipartResolver используется для загрузки файлов. Пару раз сталкивался - там еще бин с максимальным размером файла настраивается

30
Q

ApplicationContext и WebApplicationContext

A

Spring загружает файл applicationContext.xml и создает ApplicationContext для всего приложения.
в одном веб-приложении может быть несколько WebApplicationContext. Говоря простыми словами, каждый DispatcherServlet связан с одним WebApplicationContext.

ApplicationContext предоставляет:

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

31
Q

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

A

С помощью указания contextConfigLocation можно задать несколько файлов конфигурации Spring. Параметры указываются через запятую или пробел:

32
Q

Как проверить (валидировать) данные формы в Spring Web MVC Framework?

A

@Size(min=2, max=30)
private String name;

@NotEmpty @Email
private String email;

@NotNull @Min(18) @Max(100)
private Integer age;

@NotNull
private Gender gender;

@DateTimeFormat(pattern="MM/dd/yyyy")
@NotNull @Past
private Date birthday;
33
Q

Spring MVC Interceptor и как он используется?

A

Перехватчики в Spring (Spring Interceptor) позволяют перехватывать запросы клиента и обрабатывать их. Перехватить запрос клиента можно в трех местах: preHandle, postHandle и afterCompletion.

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

34
Q

JdbcTemplate

A
Инструмент для работы с БД
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
 Object[] args = new Object[] {employee.getId(), employee.getName(), employee.getRole()};
    int out = jdbcTemplate.update(query, args);
35
Q

Как интегрировать Spring и Hibernate?

A

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

36
Q

SpringBoot

A

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

37
Q

ПРимер кода AOP

A

Define a custom annotation;

@Target({ElementType.TYPE ,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface Loggable {

}
Annotate your method that you want to intercept ;

@Service
public class MyAwesomeService {
    @Loggable
    public void myAwesomemethod(String someParam) throws Exception {
        // do some awesome things.
    }
}
Add aspect dependencies to your pom.
org.springframework
spring-aop

org.aspectj
aspectjweaver

and define your aspects class ;

@Aspect
@Component
public class LoggingHandler {

 @Before("@annotation(com.example.annotation.Loggable)")
 public void beforeLogging(JoinPoint joinPoint){
     System.out.println("Before running loggingAdvice on method=");

}

@After("@annotation(com.example.annotation.Loggable)")
public void afterLogging(JoinPoint joinPoint){
    System.out.println("After running loggingAdvice on method=");
} }
38
Q

CRUD

A

Когда мы работает с базами данных (далее – БД), то обычно чаще всего нам необходимо выполнить одно из 4 действий: создать, прочитать, изменить либо удалить (для этого набора действий существует аббревиатура CRUD – Create Read Update Delete)

39
Q

А без спринг бут работали?

A

Позвонить Вадику и узнать как в ручную это настраивать

40
Q

расскажите про Spring MVC

A

обеспечивает архитектуру паттерна Model — View — Controller
Вся логика работы Spring MVC построена вокруг DispatcherServlet, который принимает и обрабатывает все HTTP-запросы (из UI) и ответы на них
После получения HTTP-запроса DispatcherServlet обращается к интерфейсу HandlerMapping, который определяет, какой Контроллер должен быть вызван, после чего, отправляет запрос в нужный Контроллер.
Контроллер принимает запрос и вызывает соответствующий служебный метод, основанный на GET или POST. Вызванный метод определяет данные Модели, основанные на определённой бизнес-логике и возвращает в DispatcherServlet имя Вида (View).
При помощи интерфейса ViewResolver DispatcherServlet определяет, какой Вид нужно использовать на основании полученного имени.
После того, как Вид (View) создан, DispatcherServlet отправляет данные Модели в виде атрибутов в Вид, который в конечном итоге отображается в браузере.

41
Q

расскажите о Security

A

Ключевые объекты контекста Spring Security:

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

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

GrantedAuthority отражает разрешения выданные пользователю в масштабе всего приложения, такие разрешения (как правило называются «роли»), например ROLE_ANONYMOUS, ROLE_USER, ROLE_ADMIN.

UserDetails предоставляет необходимую информацию для построения объекта Authentication из DAO объектов приложения или других источников данных системы безопасности. Объект UserDetailsсодержит имя пользователя, пароль, флаги: isAccountNonExpired, isAccountNonLocked, isCredentialsNonExpired, isEnabled и Collection — прав (ролей) пользователя.

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

Аутентификация
(1) Пользователю будет предложено войти в систему предоставив имя (логин или email) и пароль. Имя пользователя и пароль объединяются в экземпляр класса UsernamePasswordAuthenticationToken(экземпляр интерфейса Authentication) после чего он передается экземпляру AuthenticationManager для проверки.

(2) В случае если пароль не соответствует имени пользователя будет выброшено исключение BadCredentialsException с сообщением “Bad Credentials”.
(3) Если аутентификация прошла успешно возвращает полностью заполненный экземпляр Authentication.
(4) Для пользователя устанавливается контекст безопасности путем вызова метода SecurityContextHolder.getContext().setAuthentication(…), куда передается объект который вернул AuthenticationManager.

42
Q

расскажите о спрингРест

A

@Controller используется для обозначения классов как Spring MVC Controller.
@RestController - удобная аннотация, которая делает не что иное, как добавление аннотаций @Controller и @ResponseBody

@ResponseBody

Если необходимо, чтобы результат работы метода в контроллере был выведен непосредственно в тело ответа на запрос, а не послужил адресом перехода и не был помещён как параметр в модель, нужно указать непосредственно перед методом

@RequestMapping(value={“/uri”})

@RequestParam - принять параметры в строке
@PathParam - принять праметр в path

GET Метод GET должен использоваться для извлечения данных с сервера. Несколько запросов на получение одного URL-адреса должны быть действительными и данные не должны быть изменены на стороне сервера.

Однако это не означает, что невозможно сделать запрос GET измененным на стороне сервера, но вы должны попытаться убедиться, что вы следуете стандарту.

POST Метод POST следует использовать, когда вам нужно создавать, обновлять или удалять данные на стороне сервера. Выполнение одного и того же запроса POST несколько раз может быть небезопасным и может привести к несовместимым данным. Содержимое запроса POST отправляется в тело запроса. Следовательно, вы не видите параметры в своем браузере, но их легко увидеть, если хотите (даже используя инструменты разработчика браузера), поэтому он не более безопасен, чем запрос GET.

43
Q

Spring Data

A

Доступ к данным: реляционные и нереляционные БД, KV хранилища и т.п.

44
Q

что такое ввобще контекст

A

законченая смысловая часть…обьект короче просто

45
Q

Требования к архитектуре REST

A

Существует шесть обязательных ограничений для построения распределённых REST-приложений по Филдингу:
1 Модель клиент-сервер
2 информация о состоянии клиента на сервере не хранится
3 Ответы сервера, в свою очередь, должны иметь явное или неявное обозначение как кэшируемые или некэшируемые с целью предотвращения получения клиентами устаревших или неверных данных в ответ на последующие запросы.

4 Универсальный интерфейс между компонентами системы.

Для получения универсального интерфейса вводятся следующие ограничения:

  • стабильный URI
  • манипуляция ресурсом через модель обьекта
  • responce&request должны быть самодостаточны, и не требовать еще одного сообщения для полного их понимая

HATEOAS (hypermedia as the engine of application state).

Данный пункт означает, что гипертекст должен быть использован для навигации по API например:
GET /account/12345 HTTP/1.1
HTTP/1.1 200 OK
    12345
    100.00

5 Применение промежуточных серверов способно повысить масштабируемость за счёт балансировки нагрузки

46
Q

разница URI и URL

A

URL — это URI, который, помимо идентификации ресурса, предоставляет ещё и информацию о местонахождении этого ресурса. А URN — это URI, который только идентифицирует ресурс в определённом пространстве имён (и, соответственно, в определённом контексте), но не указывает его местонахождение.

47
Q

ApplicationContext vs BeanFactory

A

Spring предоставляет два вида контейнера IOC, один XMLBeanFactoryи другой ApplicationContext.

Автоматическая регистрация BeanPostProcessor
Автоматическая регистрация BeanFactoryPostProcessor
Удобный доступ к MessageSource (для i18n)
Публикация ApplicationEvent

48
Q

destruction method

A

там можно привязаться и внест

код при уничтожени бина

49
Q

Внедрение зависимосте

A

Внедрение зависимостей - вызов
реализации через слой прокладку -
отделяющую логику от реализации

50
Q

как работает спринг

A
создал бины (BeanDefinition) из
твоих классов
ложит их в Map
Создал класс и
расставил аннотации(он
стал бином)
в другом классе через
@autowired даешь доступ
к первому классу
создал main class и
выбрал тип контейнера
IoC-контейнер — это
какая-то библиотека
Создает управляемые Объекты
(beans), которые конфигурируются и
управляются с помощью рефлексии
запрос у
объекта-контейнера экземпляр объекта с
определённым именем или определённого типа.
контейнер передает экземпляры объектов по их
имени другим объектам с помощью конструктора,
свойства или фабричного метода.
51
Q

что нового в спринг 5

A
поддержка java 9
реактивность (ассинхронность)
Поддержка  kotlin
Новая документация структурирована в модули
Конфигурация бинов кодом
параллельное выполнение тестов
52
Q

типичная реализация метода

A

инерфейс с описанием
реализация метода с
геттерами и сеттерами и\или конструктором
связывание аннотациями @Service в сервисе и имплементации
сторонний код вызывающий
метод через сервис

53
Q

BeanPostProcessor

A

Класс BeanPostProcessor имеет два метода.

1) postProcessBeforeInitialization - действий перед инициализацией.
2) postProcessAfterInitialization - после инициализации .

54
Q

JavaConfig

A

Фактический компонент JavaConfig - это тот, который проходит через файлы классов и аннотации для создания конфигурации (в отличие от перехода через XML-файл для создания конфигурации).

55
Q

BeanFactoryPostProcessor

A

помощи класса ConfigurationClassParser парсирует JavaConfig и создает BeanDefinition.

56
Q

. BeanDefinition

A

это специальный интерфейс, через который можно получить доступ к метаданным будущего бина

57
Q

@Qualifier annotation

A

is used to resolve the autowiring conflict, when there are multiple beans of same type.

If exist^
@Component(value="car")
public class Car implements Vehicle {some}
@Component(value="bike")
public class Bike implements Vehicle{some}

you need

@Autowired
@Qualifier(“bike”)
private Vehicle vehicle;

58
Q

Как настроить уровень изоляции транзакции через код

A

@Transactional(isolation = Isolation.SERIALIZABLE)

59
Q

Что означает “Контекст” в “ServletContext”?

A

это контекст для конкретного веб-приложения:
параметры всей программы
слушатели событий приложения
метаданные о приложении