60 вопросов об Java и Spring, которые вы должны знать
Coding
Q30: что такое Scriptlets?
Тема: Java
сложность: ⭐⭐⭐
В технологии Java Server Pages (JSP) скриптлет представляет собой фрагмент Java-кода, встроенного в страницу JSP. Скриплет - это все внутри тегов. Между этими тегами пользователь может добавить любой действительный сценарий.
🔗 Источник: github.com/snowdream
Q31: Укажите особенности интерфейса.
Рубрика: ООП
Сложность: ⭐⭐⭐
Интерфейс - это шаблон, который содержит только сигнатуру методов. Сигнатура метода состоит из номеров параметров, типа параметра (значения, ссылки или выхода) и порядка параметров. Интерфейс не имеет самостоятельной реализации, поскольку содержит только определение методов без какого-либо тела метода. Интерфейс определяется с помощью ключевого слова interface . Кроме того, вы не можете создать экземпляр интерфейса. Различные функции интерфейса следующие:
- Интерфейс используется для реализации множественного наследования в коде. Эта особенность интерфейса весьма отличается от возможности абстрактных классов, потому что класс не может получить функции более чем одного класса, но может легко реализовать несколько интерфейсов.
- Он определяет конкретный набор методов и их аргументы.
- Переменные в интерфейсе должны быть объявлены как public , static и final, а методы должны быть public и abstract .
- Класс, реализующий интерфейс, должен реализовывать все его методы.
- Интерфейс может происходить из более чем одного интерфейса.
🔗 Источник: indiabix.com
Q32: Что означает SOLID? Каковы его принципы?
Тема: Сложность архитектуры программного обеспечения
: ⭐⭐⭐
SOLID является аббревиатурой от первых пяти принципов объектно-ориентированного проектирования (OOD) Роберта С. Мартина.
- S - принцип единоличной ответственности . У класса должна быть одна-единственная причина для изменения, означающая, что у класса должна быть только одна работа.
- O - Open-замкнутый принцип . Объекты или объекты должны быть открыты для расширения, но закрыты для модификации.
- L - принцип подстановки Лискова . Пусть q (x) свойство, доказуемое для объектов x типа T. Тогда q (y) должно быть доказуемо для объектов y типа S, где S является подтипом T.
- I - Принцип разделения интерфейса . Никогда не следует заставлять клиента реализовывать интерфейс, который он не использует, или нельзя заставлять клиентов зависеть от методов, которые он не использует.
- D - Принцип обращения зависимостей . Сущности должны зависеть от абстракций, а не от конкрементов. В нем говорится, что модуль высокого уровня не должен зависеть от модуля низкого уровня, но они должны зависеть от абстракций.
🔗 Источник: scotch.io
Q33: Каковы принципы DRY и DIE?
Тема: архитектуры программного обеспечения
Сложность: ⭐⭐⭐
В разработке программного обеспечения принцип « Не повторяйся» (DRY) или « Duplication is Evil» (DIE) является принципом разработки программного обеспечения.
🔗 Источник: stackoverflow.com
Q34: Лучше ли возвращать NULL или пустые значения из функций / методов, где возвращаемое значение отсутствует?
Тема: Сложность архитектуры программного обеспечения
: ⭐⭐⭐
Возвращение nullобычно является лучшей идеей, если вы намереваетесь указать, что данные недоступны.
Пустой объект подразумевает, что данные были возвращены, тогда как возвращение nullясно указывает, что ничего не было возвращено.
Кроме того, возврат a nullприведет к нулевому исключению, если вы попытаетесь получить доступ к членам в объекте, что может быть полезно для выделения ошибочного кода - попытка получить доступ к элементу ничего не имеет смысла. Доступ к членам пустого объекта не потерпит неудачу, а значит ошибки могут остаться незамеченными.
🔗 Источник: stackoverflow.com
Q35: Объясните жизненный цикл Bean в среде Spring
Тема: Spring
сложность: ⭐⭐⭐
Ниже приведена последовательность жизненного цикла бина в Spring:
- Instantiate - сначала контейнер весны находит определение bean-компонента из файла XML и создает экземпляр bean-компонента.
- Заполнение свойств. Используя внедрение зависимостей, Spring заполняет все свойства, указанные в определении компонента.
- Set Bean Name - если bean-компонент реализует интерфейс BeanNameAware, Spring передает идентификатор bean-компонента методу setBeanName ().
- Set Bean factory - если Bean реализует интерфейс BeanFactoryAware, Spring передает beanfactory методу setBeanFactory ().
- Предварительная инициализация - также называется постобработкой бина. Если с bean-компонентом связаны какие-либо BeanPostProcessors, Spring вызывает метод postProcesserBeforeInitialization ().
- Инициализация bean-компонентов - если bean-компонент реализует IntializingBean, вызывается его метод afterPropertySet (). Если бин имеет объявление метода init, вызывается указанный метод инициализации.
- Постинициализация - если есть какие-либо BeanPostProcessors, связанные с бином, будут вызваны их методы postProcessAfterInitialization ().
- Готов к использованию. Теперь компонент готов к использованию приложением.
- Destroy - если компонент реализует DisposableBean, он вызовет метод destroy ().
🔗 Источник: tutorialspoint.com
Q36: Что такое контроллер в среде Spring MVC?
Тема: Spring
сложность: ⭐⭐⭐
Контроллеры предоставляют доступ к поведению приложения, которое вы обычно определяете через интерфейс службы. Контроллеры интерпретируют пользовательский ввод и преобразуют его в модель, представленную пользователю представлением. Spring реализует контроллер очень абстрактно, что позволяет создавать самые разнообразные контроллеры.
🔗 Источник: tutorialspoint.com
Q37: что такое аспект?
Тема: Spring
сложность: ⭐⭐⭐
Аспект представляет собой модуль , который имеет набор API - интерфейсов , обеспечивающих сквозные требования. Например, модуль регистрации будет называться аспектом AOP для регистрации. Приложение может иметь любое количество аспектов в зависимости от требования. В Spring AOP аспекты реализуются с использованием обычных классов (подход на основе схемы) или обычных классов, помеченных аннотацией @Aspect ( @AspectJстиль).
🔗 Источник: tutorialspoint.com
Q38: Каков типичный жизненный цикл Бина в Spring Bean Factory Container?
Тема: Spring
сложность: ⭐⭐⭐
Жизненный цикл Bean в Spring Bean Factory Container выглядит следующим образом:
- Контейнер Spring находит определение bean-компонента из XML-файла и создает экземпляр bean-компонента.
- Используя внедрение зависимостей, Spring заполняет все свойства, указанные в определении bean-компонента.
- Если компонент реализует интерфейс BeanNameAware, фабрика вызывает
setBeanName()передачу идентификатора компонента. - Если bean-компонент реализует интерфейс BeanFactoryAware, фабрика вызывает его
setBeanFactory(), передавая свой экземпляр. - Если есть какие-либо BeanPostProcessors, связанные с бином,
ProcessBeforeInitialization()будут вызваны их пост- методы. - Если для компонента указан метод init, он будет вызван.
- Наконец, если есть какие-либо BeanPostProcessors, связанные с bean-компонентом,
postProcessAfterInitialization()будут вызваны их методы.
🔗 Источник: developersbook.com
Q39: Как обрабатывать исключения в Spring MVC Framework?
Тема: Spring
сложность: ⭐⭐⭐
Spring MVC Framework предоставляет следующие способы, помогающие нам добиться надежной обработки исключений.
- На основе контроллера - мы можем определить методы обработчика исключений в наших классах контроллера. Все, что нам нужно, это аннотировать эти методы аннотацией @ExceptionHandler.
- Глобальный обработчик исключений - Обработка исключений является сквозной задачей, и Spring предоставляет аннотацию @ControllerAdvice, которую мы можем использовать с любым классом для определения нашего глобального обработчика исключений.
- Реализация HandlerExceptionResolver - для общих исключений, в большинстве случаев мы обслуживаем статические страницы. Spring Framework предоставляет
HandlerExceptionResolverинтерфейс, который мы можем реализовать для создания глобального обработчика исключений. Причиной этого дополнительного способа определения глобального обработчика исключений является то, что Spring Framework также предоставляет классы реализации по умолчанию, которые мы можем определить в нашем файле конфигурации Spring Bean для получения преимуществ обработки исключений Spring Framework.
🔗 Источник: journaldev.com
Q40: Что такое Spring IoC Container?
Тема: Spring
сложность: ⭐⭐⭐
Инверсия управления (IoC) - это механизм для достижения слабой связи между зависимостями объектов. Для достижения слабой связи и динамического связывания объектов во время выполнения объекты определяют их зависимости, которые вводятся другими объектами ассемблера. Контейнер Spring IoC - это программа, которая внедряет зависимости в объект и готовит его для использования.
Spring Framework IoC контейнерные классы являются частью org.springframework.beansи org.springframework.contextпакетов и предоставляют нам различные способы разъединить зависимости объекты.
Вот некоторые из полезных реализаций ApplicationContext, которые мы используем;
AnnotationConfigApplicationContext: Для автономных Java-приложений, использующих конфигурацию на основе аннотаций.ClassPathXmlApplicationContext: Для автономных Java-приложений, использующих конфигурацию на основе XML.FileSystemXmlApplicationContext: Аналогично ClassPathXmlApplicationContext за исключением того, что файл конфигурации xml можно загрузить из любой точки файловой системы.AnnotationConfigWebApplicationContextиXmlWebApplicationContextдля веб-приложений.
🔗 Источник: journaldev.com
Q41: Создается ли DispatcherServlet через контекст приложения?
Тема: Spring
сложность: ⭐⭐⭐
Нет, DispatcherServletэкземпляр создается сервлет-контейнерами, такими как Tomcat или Jetty. Вы должны определить DispatcherServletв файл web.xml, как показано ниже.
Вы можете видеть, что тег загрузки при запуске равен 1, что означает, что DispatcherServletон создается при развертывании приложения Spring MVC в Tomcat или любом другом контейнере сервлетов. Во время создания он ищет файл servlet-name-context.xml и затем инициализирует bean-компоненты, определенные в этом файле.
🔗 Источник: dzone.com
Q42: Какова цель session scope?
Тема: Spring
сложность: ⭐⭐⭐
Цель области действия сеанса - создать экземпляр компонента для сеанса HTTP. Это означает, что один и тот же компонент может обслуживать несколько запросов, если он находится в области видимости в сеансе. Вы можете определить область действия компонента Spring с помощью атрибута области действия или @Scopeаннотации в приложении Spring MVC.
🔗 Источник: dzone.com
Q43: В чем разница между синхронизированным методом и синхронизированным блоком?
Тема: Java
сложность: ⭐⭐⭐⭐
В программировании на Java каждый объект имеет блокировку. Поток может получить блокировку для объекта с помощью ключевого слова synchronized. Ключевое слово synchronized может применяться на уровне метода (грубая блокировка) или на уровне блока кода (точная блокировка).
🔗 Источник: github.com/snowdream
Q44: Как вы гарантируете, что N потоков могут получить доступ к N ресурсам без взаимоблокировки?
Тема: Java
сложность: ⭐⭐⭐⭐
Очень простой способ избежать тупика при использовании N потоков - наложить порядок на блокировки и заставить каждый поток следовать этому порядку. Таким образом, если все потоки блокируют и разблокируют мьютексы в одном и том же порядке, не может возникнуть взаимоблокировок.
🔗 Источник: github.com/snowdream
Q45: Что такое пространство Perm Gen space в Heap?
Тема: Java
сложность: ⭐⭐⭐⭐
Пермский генерал выступает за постоянное поколение. Это пространство в Java Heap, которое содержит метаданные, описывающие пользовательские классы (классы, которые не являются частью языка Java). Примерами таких метаданных являются объекты, описывающие классы и методы, и они хранятся в постоянном поколении. Приложения с большой базой кода могут быстро заполнить этот сегмент кучи, что будет зависеть java.lang.OutOfMemoryError: PermGenот того, насколько высок ваш -Xmx(максимальный размер пула выделения памяти) и сколько памяти у вас на машине.
🔗 Источник: github.com/snowdream
Q46: что такое RMI?
Тема: Java
сложность: ⭐⭐⭐⭐
Java Remote Method Invocation (Java RMI) - это Java API, который выполняет объектно-ориентированный эквивалент удаленных вызовов процедур (RPC) с поддержкой прямой передачи сериализованных классов Java и распределенной сборки мусора. Удаленный вызов метода (RMI) также можно рассматривать как процесс активации метода на удаленно работающем объекте. RMI предлагает прозрачность местоположения, потому что пользователь чувствует, что метод выполняется на локально запущенном объекте.
🔗 Источник: github.com/snowdream
Q47: Объясните различные типы наследования.
Рубрика: ООП
Сложность: ⭐⭐⭐⭐
Наследование в ООП бывает четырех типов:
- Одиночное наследование - содержит один базовый класс и один производный класс
- Иерархическое наследование - содержит один базовый класс и несколько производных классов одного базового класса.
- Многоуровневое наследование - содержит класс, производный от производного класса
- Множественное наследование - содержит несколько базовых классов и производный класс
Все языки .NET поддерживают одно, иерархическое и многоуровневое наследование. Они не поддерживают множественное наследование, поскольку в этих языках производный класс не может иметь более одного базового класса. Однако вы можете реализовать множественное наследование в .NET через интерфейсы.
🔗 Источник: indiabix.com
Q48: Что такое класс GOD и почему мы должны его избегать?
Тема: Сложность архитектуры программного обеспечения
: ⭐⭐⭐⭐
Самый эффективный способ взломать приложения это создать классыGOD . Это классы, которые отслеживают много информации и имеют несколько обязанностей. Одно изменение кода, скорее всего, повлияет на другие части класса и, следовательно, косвенно на все другие классы, которые его используют. Это, в свою очередь, приводит к еще большему беспорядку в обслуживании, поскольку никто не осмеливается вносить какие-либо изменения, кроме добавления новых функциональных возможностей.
🔗 Источник: stackoverflow.com
Q49: Какие области действия bean поддерживает Spring? Объясни им.
Тема: Spring
сложность: ⭐⭐⭐⭐
Spring Framework поддерживает следующие пять областей, три из которых доступны только при использовании веб-приложения ApplicationContext.
- singleton - определяет область действия компонента bean для одного экземпляра контейнера Spring IoC.
- prototype - это определяет одно определение компонента, чтобы иметь любое количество экземпляров объекта.
- request - это определяет определение bean-компонента для HTTP-запроса. Действителен только в контексте веб-приложения Spring ApplicationContext.
- session - это определяет определение компонента для сеанса HTTP. Действителен только в контексте веб-приложения Spring ApplicationContext.
- global-session - это определение бина для глобального HTTP-сеанса. Действителен только в контексте веб-приложения Spring ApplicationContext.
🔗 Источник: tutorialspoint.com
Q50: что такое Weaving?
Тема: Spring
сложность: ⭐⭐⭐⭐
Плетение - это процесс связывания аспектов с другими типами приложений или объектами для создания рекомендованного объекта.
🔗 Источник: tutorialspoint.com
Q51: В чем разница между concern и ross-cutting concern в Spring AOP?
Тема: Spring
сложность: ⭐⭐⭐⭐
- Беспокойство - Беспокойство - это поведение, которое мы хотим иметь в модуле приложения. Озабоченность может быть определена как функциональность, которую мы хотим реализовать. Вопросы, в которых мы заинтересованы, определяют наши проблемы.
- Междисциплинарная проблема - эта проблема применима ко всему приложению и затрагивает все приложение. например, регистрация, безопасность и передача данных - это проблемы, которые необходимы почти в каждом модуле приложения, и, следовательно, это общие проблемы.
🔗 Источник: tutorialspoint.com
Q52: Каковы некоторые преимущества использования Spring Transactions?
Тема: Spring
сложность: ⭐⭐⭐⭐
- Обеспечение согласованной модели программирования для различных API транзакций, таких как JTA, JDBC, Hibernate, JPA и JDO
- Поддержка декларативного управления транзакциями
- Обеспечить более простой API для программного управления транзакциями, чем некоторые сложные API транзакций, такие как JTA
- Интеграция очень хорошо с различными абстракциями доступа к данным Spring
🔗 Источник: baeldung.com
Q53: Что такое аспектно-ориентированное программирование?
Тема: Spring
сложность: ⭐⭐⭐⭐
Аспекты обеспечивают модульность сквозных задач, таких как управление транзакциями, которые охватывают несколько типов и объектов, добавляя дополнительное поведение к уже существующему коду без изменения затронутых классов.
🔗 Источник: baeldung.com
Q54: Что такое Spring WebFlux?
Тема: Spring
сложность: ⭐⭐⭐⭐
Spring WebFlux - это фреймворк Spring с реактивным стеком, альтернативный Spring MVC. Для достижения этой реактивной модели и высокой масштабируемости весь стек является неблокирующим.
🔗 Источник: baeldung.com
Q55: Сравните @Component (v2.5) с @Bean (v 3.0)
Тема: Spring
сложность: ⭐⭐⭐⭐
Можно ли было бы повторно использовать аннотацию @Component вместо введения аннотации @Bean?
@Componentи @Beanделать две совершенно разные вещи, и не следует путать.
@Component(и@Serviceи@Repository) используются для автоматического обнаружения и автоматической настройки bean-компонентов с использованием сканирования пути к классам. Существует неявное взаимно-однозначное соответствие между аннотированным классом и компонентом (т. Е. Один компонент на класс). При таком подходе управление проводкой весьма ограничено, поскольку оно чисто декларативное.@Beanиспользуется для явного объявления одного компонента, вместо того, чтобы позволить Spring сделать это
Чтобы ответить на ваш вопрос :
Конечно, возможно; но они решили не делать этого, так как они совершенно разные. Весна уже достаточно запутанна, не мутит воду дальше.
🔗 Источник: stackoverflow.com
Q56: В чем разница между шаблонами внедрения зависимостей и поиска сервисов?
Тема: Сложность проектирования шаблонов
: ⭐⭐⭐⭐⭐
- С ServiceLocator класс по-прежнему отвечает за создание своих зависимостей. Это просто использует сервисный локатор, чтобы сделать это.
- Локаторы сервисов скрывают зависимости - вы не можете определить, глядя на объект, попадает ли он в базу данных или нет (например), когда он получает соединения от локатора.
- С DI классу даны его зависимости. Он не знает и не заботится о том, откуда они берутся.
Одним из важных результатов этого является то, что пример DI гораздо проще для модульного тестирования - потому что вы можете передать ему ложные реализации его зависимых объектов. Вы можете объединить два - и ввести сервисный локатор (или фабрику), если хотите.
🔗 Источник: stackoverflow.com
Q57: Каковы уровни архитектуры RMI?
Тема: Java
сложность: ⭐⭐⭐⭐⭐
Архитектура RMI состоит из следующих уровней:
- Уровень заглушки и скелета. Этот слой находится непосредственно под взглядом разработчика. Этот уровень отвечает за перехват вызовов, сделанных клиентом, для интерфейса и перенаправление этих вызовов удаленной службе RMI.
- Уровень удаленных ссылок. Второй уровень архитектуры RMI связан с интерпретацией ссылок, сделанных клиентом на удаленные объекты сервера. Этот уровень интерпретирует и управляет ссылками, сделанными клиентами на объекты удаленной службы. Соединение является одноранговым (одноадресным).
- Транспортный уровень: этот уровень отвечает за соединение двух JVM, участвующих в сервисе. Этот уровень основан на соединениях TCP / IP между компьютерами в сети. Он обеспечивает базовые возможности подключения, а также некоторые стратегии проникновения брандмауэра.
🔗 Источник: github.com/snowdream
Q58: В чем разница между объединением, агрегацией и составом?
Рубрика: ООП
Сложность: ⭐⭐⭐⭐⭐
- Ассоциация - это отношения, в которых все объекты имеют свой жизненный цикл, и у них нет владельца.
Давайте возьмем пример Учителя и Студента. Несколько учеников могут связываться с одним учителем, а один ученик может связываться с несколькими учителями, но между объектами нет права собственности, и оба имеют свой собственный жизненный цикл. Оба могут быть созданы и удалены независимо.
- Агрегация - это специализированная форма объединения, где все объекты имеют свой жизненный цикл, но есть владение, и дочерние объекты не могут принадлежать другому родительскому объекту.
Давайте возьмем пример кафедры и преподавателя. Один учитель не может принадлежать нескольким отделам, но если мы удалим отдел, объект учителя не будет уничтожен. Мы можем думать об этом как об отношениях «есть».
- Композиция снова является специализированной формой агрегации, и мы можем назвать это «смертью» отношений. Это сильный тип агрегации. Дочерний объект не имеет своего жизненного цикла, и если родительский объект будет удален, все дочерние объекты также будут удалены.
Давайте снова возьмем пример отношений между Домом и Комнатами. Дом может содержать несколько комнат - нет самостоятельной жизни комнаты и ни одна комната не может принадлежать двум разным домам. Если мы удалим дом - комната будет автоматически удалена.
Давайте рассмотрим еще один пример отношений между вопросами и опциями. Отдельные вопросы могут иметь несколько вариантов, а вариант не может принадлежать нескольким вопросам. Если мы удалим вопросы, параметры будут автоматически удалены.
🔗 Источник: stackoverflow.com
Q59: Каковы некоторые из лучших практик для Spring Framework?
Тема: Spring
сложность: ⭐⭐⭐⭐⭐
- Избегайте номеров версий в ссылках схемы, чтобы убедиться, что у нас есть последние конфигурации.
- Разделите конфигурации bean-компонентов Spring на основе их проблем, таких как spring-jdbc.xml, spring-security.xml.
- Для bean-компонентов Spring, которые используются в нескольких контекстах Spring MVC, создайте их в корневом контексте и инициализируйте с помощью слушателя.
- Сконфигурируйте зависимости bean-компонентов как можно больше, постарайтесь по возможности избегать автопроводки.
- Для свойств уровня приложения лучше всего создать файл свойств и прочитать его в файле конфигурации Spring Bean.
- Для небольших приложений аннотации полезны, но для больших приложений аннотации могут стать проблемой. Если у нас есть вся конфигурация в XML-файлах, поддерживать ее будет проще.
- Используйте правильные аннотации для компонентов для легкого понимания цели. Для сервисов используйте @Service, а для DAO-компонентов - @Repository.
- Spring Framework имеет много модулей, используйте то, что вам нужно. Удалите все дополнительные зависимости, которые обычно добавляются при создании проектов с помощью шаблонов Spring Tool Suite.
- Если вы используете аспекты, убедитесь, что пинта соединения как можно более узкая, чтобы избежать советов по нежелательным методам. Рассмотрите пользовательские аннотации, которые проще в использовании и позволяют избежать каких-либо проблем.
- Используйте внедрение зависимостей, когда есть реальная выгода, просто ради слабой связи не используйте его, потому что его сложнее поддерживать.
🔗 Источник: journaldev.com
Q60: Как работает автоматическая разводка в Spring?
Тема: Spring
сложность: ⭐⭐⭐⭐⭐
Во-первых, и это самое главное - все бины Spring управляются - они «живут» внутри контейнера, называемого «контекстом приложения».
Во-вторых, каждое приложение имеет точку входа в этот контекст. Веб-приложения имеют сервлет, JSF использует el-resolver и т. Д. Кроме того, есть место, где контекст приложения загружается, а все компоненты - автоматически подключаются. В веб-приложениях это может быть слушатель запуска.
Автопроводка происходит путем помещения экземпляра одного компонента в нужное поле в экземпляре другого компонента. Оба класса должны быть bean-компонентами, то есть они должны быть определены для жизни в контексте приложения.
Что такое «жизнь» в контексте приложения? Это означает, что контекст создает объекты, а не вы. Т.е. - вы никогда не делаете new UserServiceImpl()- контейнер находит каждую точку инъекции и устанавливает там экземпляр.
🔗 Источник: stackoverflow.com

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