Краткое изложение интервью по Java, включая ключевые знания Java и общие платформы с открытым исходным кодом, приветствуется к прочтению. В статье возможны ошибки, т.к. личные знания ограничены, прошу указать! Статья постоянно обновляется...
ID заглавие адрес 1 Design Patterns Interview Questions (резюме наиболее полных вопросов для интервью) nuggets.capable/post/684490… 2 Вопросы для собеседования по базовым знаниям Java (сводка наиболее полных вопросов для собеседования) nuggets.capable/post/684490… 3 Вопросы для собеседования по коллекции Java (сводка наиболее полных вопросов для собеседования) nuggets.capable/post/684490… 4 Вопросы для интервью JavaIO, BIO, NIO, AIO, Netty (резюме наиболее полных вопросов для интервью) nuggets.capable/post/684490… 5 Вопросы для собеседования по параллельному программированию на Java (сводка наиболее полных вопросов для собеседования) nuggets.capable/post/684490… 6 Вопросы для собеседования об исключении Java (сводка наиболее полных вопросов для собеседования) nuggets.capable/post/684490… 7 Вопросы для интервью с виртуальной машиной Java (JVM) (сводка наиболее полных вопросов для интервью) nuggets.capable/post/684490… 8 Весенние вопросы для интервью (резюме наиболее полных вопросов для интервью) nuggets.capable/post/684490… 9 Вопросы интервью Spring MVC (сводка наиболее полных вопросов интервью) nuggets.capable/post/684490… 10 Вопросы интервью Spring Boot (сводка наиболее полных вопросов интервью) nuggets.capable/post/684490… 11 Вопросы интервью Spring Cloud (краткое изложение наиболее полных вопросов интервью) nuggets.capable/post/684490… 12 Вопросы интервью Redis (сводка наиболее полных вопросов интервью) nuggets.capable/post/684490… 13 Вопросы для интервью MyBatis (сводка наиболее полных вопросов для интервью) nuggets.capable/post/684490… 14 Вопросы для собеседования по MySQL (сводка наиболее полных вопросов для собеседования) nuggets.capable/post/684490… 15 TCP, UDP, Socket, HTTP вопросы интервью (резюме наиболее полных вопросов интервью) nuggets.capable/post/684490… 16 Вопросы для интервью с Nginx (сводка наиболее полных вопросов для интервью) nuggets.capable/post/684490… 17 ElasticSearch Вопросы на собеседовании 18 кафка вопросы интервью 19 Вопросы для интервью RabbitMQ (сводка наиболее полных вопросов для интервью) nuggets.capable/post/684490… 20 Вопросы для интервью Dubbo (краткое изложение наиболее полных вопросов для интервью) nuggets.capable/post/684490… 21 Вопросы интервью ZooKeeper (резюме наиболее полных вопросов интервью) nuggets.capable/post/684490… 22 Вопросы для интервью Netty (краткое изложение наиболее полных вопросов для интервью) 23 Вопросы для интервью с Tomcat (сводка наиболее полных вопросов для интервью) nuggets.capable/post/684490… 24 Вопросы для собеседования по Linux (сводка наиболее полных вопросов для собеседования) nuggets.capable/post/684490… 25 Вопросы для интервью, связанные с Интернетом (краткое изложение наиболее полных вопросов для интервью) 26 Вопросы для интервью по безопасности в Интернете (краткое изложение наиболее полных вопросов для интервью)
Что такое Spring Boot?
- Spring Boot – это подпроект организации с открытым исходным кодом Spring. Это универсальное решение для компонентов Spring. Оно в основном упрощает использование Spring, упрощает сложную настройку и предоставляет различные стартовые возможности, чтобы разработчики могли начать работу. быстро.
Зачем использовать SpringBoot
- Быстрая разработка, быстрая интеграция, упрощенная конфигурация, встроенный сервисный контейнер
Разница между SpringBoot и SpringCloud
- SpringBoot — это среда Spring для быстрой разработки, SpringCloud — полноценная среда микросервисов, а SpringCloud зависит от SpringBoot.
Каковы преимущества Spring Boot?
- Spring Boot в основном имеет следующие преимущества:
- Он прост в использовании, повышает эффективность разработки и обеспечивает более быструю и простую среду разработки для Spring.
- Из коробки, держитесь подальше от утомительной настройки.
- Предоставляет ряд некоммерческих функций, общих для крупномасштабных проектов, таких как встроенный сервер, управление безопасностью, мониторинг операционных данных, проверка работоспособности и внешняя конфигурация.
- Резюме SpringBoot заключается в упрощении кодирования, настройки, развертывания, мониторинга и т. д.
Какая основная аннотация Spring Boot? Из каких аннотаций он в основном состоит?
-
Аннотация к классу запуска — @SpringBootApplication, которая также является основной аннотацией Spring Boot.Основная комбинация включает следующие три аннотации:
-
@SpringBootConfiguration: объединяет аннотацию @Configuration для реализации функции файла конфигурации.
-
@EnableAutoConfiguration: Включите функцию автоматической настройки, или вы можете отключить определенный параметр автоматической настройки, Например:
java 如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
-
@ComponentScan: сканирование компонентов Spring.
-
Какие платформы ведения журналов поддерживает Spring Boot? Какова рекомендуемая структура ведения журнала по умолчанию?
- Spring Boot поддерживает Java Util Logging, Log4j2, Lockback в качестве среды ведения журнала.Если вы используете стартер Starters, Spring Boot будет использовать Logback в качестве среды ведения журнала по умолчанию, но независимо от того, какая это среда ведения журнала, она поддерживает вывод файла конфигурации. в консоль или файл посередине.
Как работает SpringBoot Starter
-
我个人理解SpringBoot就是由各种Starter组合起来的,我们自己也可以开发Starter
-
При запуске sprinBoot аннотация @SpringBootApplication автоматически переходит к maven для чтения файла spring.factories в каждом стартере, который настраивает все bean-компоненты, которые необходимо создать в контейнере spring, и автоматически настраивает bean-компонент для внедрения в SpringContext/ / (SpringContext — это файл конфигурации Spring)
Что нового в Spring Boot 2.X? В чем разница с 1.Х?
- Изменения конфигурации
- Обновление версии JDK
- Обновление сторонней библиотеки классов
- Поддержка программирования Reactive Spring
- Поддержка HTTP/2
- Настроить привязку свойства
- Больше улучшений и улучшений
Какие интерфейсные шаблоны поддерживает SpringBoot,
- тимелеаф, фримаркер, jsp, официальный не рекомендует JSP будет иметь ограничения
Недостатки SpringBoot
- Я думаю, что это смущает. Я не думаю, что SpringBoot имеет какие-либо недостатки в настоящее время. Если мне нужно найти один, я думаю, что это
- Поскольку вам не нужно выполнять настройку самостоятельно, трудно обнаружить сообщение об ошибке.
Какие есть способы запустить Spring Boot?
-
Упакуйте его с командами или поместите в контейнер для запуска
-
Запуск с плагином Maven/Gradle
-
Непосредственно выполнить основной метод для запуска
Нужен ли Spring Boot автономный контейнер для запуска?
- Нет необходимости, встроенные контейнеры, такие как Tomcat/Jetty.
Каковы способы включения функций Spring Boot?
-
Наследовать родительский проект spring-boot-starter-parent
-
Импорт зависимостей проекта spring-boot-dependencies
Какими способами SpringBoot реализует горячее развертывание?
- Горячее развертывание означает, что фоновый код операции может быть автоматически обновлен до работающего проекта без повторного запуска проекта SpringBoot.
- Есть в основном два пути:
- Spring Loaded
- Spring-boot-devtools
Использование вещей SpringBoot
- Вещи SpringBoot очень просты: сначала используйте аннотацию EnableTransactionManagement, чтобы открыть вещи, а затем добавьте аннотацию Transactional в метод Service.
Метод асинхронного вызова асинхронно
- Использовать асинхронный вызов в SpringBoot очень просто: вам нужно всего лишь использовать аннотацию @Async для метода, чтобы реализовать асинхронный вызов метода. Примечание. @EnableAsync необходимо добавить в класс запуска, чтобы сделать аннотацию асинхронного вызова @Async эффективной.
Как запустить определенный код при запуске Spring Boot?
- Вы можете реализовать интерфейс ApplicationRunner или CommandLineRunner.Эти два интерфейса реализованы одинаково, и оба они предоставляют только один метод запуска
Сколько способов Spring Boot считывает конфигурацию?
- Spring Boot может связывать переменные через аннотации @PropertySource, @Value, @Environment, @ConfigurationPropertie.
Что такое JavaConfig?
-
Spring JavaConfig — это продукт сообщества Spring, представленный в Spring 3.0, который предоставляет чистый способ Java для настройки контейнера Spring IOC. Таким образом, это помогает избежать конфигурации XML. Преимущества использования JavaConfig:
-
Объектно-ориентированная конфигурация. Поскольку конфигурации определяются как классы в JavaConfig, пользователи могут воспользоваться преимуществами объектно-ориентированных функций Java. Один класс конфигурации может наследоваться от другого, переопределять его методы @Bean и т. д.
-
Сократите или исключите конфигурацию XML. Были продемонстрированы преимущества внешней конфигурации, основанной на принципах внедрения зависимостей. Однако многие разработчики не хотят переключаться между XML и Java. JavaConfig предоставляет разработчикам чистый Java-способ настройки контейнеров Spring, схожий по концепции с конфигурацией XML. С технической точки зрения можно настроить контейнер, используя только класс конфигурации JavaConfig, но на практике многие люди считают, что смешивание и сопоставление JavaConfig с XML является идеальным.
-
Тип безопасный и дружественный к рефакторингу. JavaConfig обеспечивает типобезопасный способ настройки контейнера Spring. Благодаря поддержке универсальных шаблонов в Java 5.0 компоненты теперь могут извлекаться по типу, а не по имени, без каких-либо приведений типов или поиска на основе строк.
-
-
Часто используемая конфигурация Java:
- @Configuration: напишите эту аннотацию в классе, указав, что этот класс является классом конфигурации.
- @ComponentScan: добавьте аннотацию @ComponentScan в класс конфигурации. Эта аннотация будет сканировать все классы конфигурации в пакете, где класс находится по умолчанию, что эквивалентно предыдущему
. - @Bean: внедрение bean-компонента: эквивалентно предыдущему
- @EnableWebMvc: эквивалентно xml
- @ImportResource: эквивалентно xml
В чем принцип автоматической настройки SpringBoot
-
В основном основная аннотация SpringBootApplication в классе запуска Spring Boot аннотирует основной класс конфигурации.При запуске основного класса конфигурации для Spring Boot будет включена функция автоматической настройки аннотации @EnableAutoConfiguration.
-
С этим EnableAutoConfiguration он будет:
- Загрузите возможные классы автоконфигурации из файла конфигурации META_INF/Spring.factories.
- Удалите дубликаты и исключите классы, содержащиеся в атрибутах exclude и excludeName.
- Фильтровать, возвращать автоматически настроенные классы, удовлетворяющие условию (@Conditional)
Как вы понимаете порядок загрузки конфигурации Spring Boot?
-
В Spring Boot конфигурацию можно загрузить следующими способами.
-
1.файл свойств;
-
2. YAML-файл;
-
3. Переменные системной среды;
-
4. Параметры командной строки;
-
и т.д……
-
Что такое ЯМЛ?
- YAML — это человекочитаемый язык сериализации данных. Обычно используется для конфигурационных файлов. По сравнению с файлами свойств файлы YAML более структурированы и менее запутаны, если мы хотим добавить сложные свойства в файлы конфигурации. Видно, что YAML имеет иерархические данные конфигурации.
Каковы преимущества конфигурации YAML?
-
YAML теперь можно рассматривать как очень популярный формат файла конфигурации, будь то внешний или внутренний интерфейс, вы можете увидеть конфигурацию YAML. Итак, каковы преимущества конфигурации YAML по сравнению с традиционной конфигурацией свойств?
-
Упорядоченная конфигурация. В некоторых особых сценариях упорядоченная конфигурация имеет решающее значение.
-
Лаконичный и понятный, он также поддерживает массивы, элементы в массиве могут быть базовыми типами данных или объектами.
-
По сравнению с файлом конфигурации свойств у YAML есть еще один недостаток: он не поддерживает аннотацию @PropertySource для импорта пользовательской конфигурации YAML.
-
Может ли Spring Boot использовать конфигурацию XML?
- Spring Boot рекомендует использовать конфигурацию Java вместо конфигурации XML, но конфигурацию XML также можно использовать в Spring Boot, а конфигурацию XML можно ввести с помощью аннотации @ImportResource.
Что такое файл конфигурации ядра весенней загрузки? В чем разница между bootstrap.properties и application.properties?
-
Может быть непросто найти файл конфигурации bootstrap.properties только для разработки Spring Boot, но в сочетании с Spring Cloud эта конфигурация часто встречается, особенно когда необходимо загрузить некоторые удаленные файлы конфигурации.
-
Два файла конфигурации для ядра весенней загрузки:
- bootstrap (.yml или .properties): boostrap загружается родительским ApplicationContext, который загружается перед приложением. Конфигурация вступает в силу на этапе начальной загрузки контекста приложения. Вообще говоря, мы будем использовать этот файл в конфигурации Spring Cloud. И свойства в boostrap не могут быть переопределены;
- приложение (.yml или .properties): загружается ApplicationContext для автоматической настройки проектов весенней загрузки.
Что такое пружинные профили?
- При разработке проекта некоторые файлы конфигурации могут отличаться в разных средах, таких как разработка, тестирование или производство, например, подключение к базе данных, конфигурация Redis и т. д. Итак, как мы можем автоматически переключать конфигурации в разных средах? Spring предоставляет нам механизм профилей, а Spring предоставляет нам функцию переключения файлов конфигурации туда и обратно.
- Профили Spring позволяют пользователям регистрировать bean-компоненты на основе профилей (dev, test, prod и т. д.). Таким образом, когда приложение работает в процессе разработки, могут быть загружены только некоторые bean-компоненты, в то время как в PRODUCTION могут быть загружены некоторые другие bean-компоненты. Допустим, наше требование состоит в том, что документация Swagger предназначена только для сред контроля качества, а вся остальная документация отключена. Это можно сделать с помощью конфигурационных файлов. Spring Boot делает работу с файлами конфигурации очень простой.
Идея SpringBoot о разделении нескольких источников данных
- Сначала настройте два источника данных в файле конфигурации свойств, создайте сопоставитель подпакетов, используйте @ConfigurationProperties для чтения конфигурации в свойствах и используйте @MapperScan для регистрации в соответствующем пакете сопоставителя.
Как управляются транзакции SpringBoot с несколькими источниками данных
-
Первый способ — использовать transactionManager в @TransactionManager сервисного уровня, чтобы указать транзакцию, настроенную в DataSourceConfig.
-
Второй — использовать jta-atomikos для управления распределенными транзакциями.
Каковы способы защиты приложений Spring Boot?
- Используйте HTTPS в продакшене
- Проверьте свои зависимости с помощью Snyk
- Обновите до последней версии
- Включить CSRF-защиту
- Предотвращение XSS-атак с помощью Content Security Policy
Как реализовать безопасность для приложений Spring Boot?
- Чтобы реализовать безопасность Spring Boot, мы используем зависимость spring-boot-starter-security и должны добавить конфигурацию безопасности. Это требует очень мало кода. Класс конфигурации должен будет расширить WebSecurityConfigurerAdapter и переопределить его методы.
Сравните преимущества и недостатки Spring Security и Shiro?
-
Поскольку Spring Boot официально предоставляет большое количество очень удобных готовых Starters, включая Spring Security Starter, это упрощает использование Spring Security в Spring Boot и даже просто добавляет зависимость для защиты всех интерфейсов. если это проект Spring Boot, обычно выбирается Spring Security. Конечно, это всего лишь предполагаемая комбинация, с чисто технической точки зрения, как бы она ни комбинировалась, проблем нет. По сравнению со Spring Security Shiro в основном имеет следующие характеристики:
-
Spring Security — это мощная среда управления безопасностью; Shiro — облегченная среда управления безопасностью.
-
У Spring Security сложная концепция и сложная конфигурация; у Shiro простая концепция и простая конфигурация.
-
Spring Security мощный; Shiro простой
-
Как решить междоменные проблемы в Spring Boot?
- Междоменное решение может быть решено с помощью JSONP на внешнем интерфейсе, но JSONP может отправлять только запросы GET и не может отправлять запросы других типов, что очень безвкусно в приложениях в стиле RESTful, поэтому мы рекомендуем передавать (CORS, Cross-origin) на совместное использование внутренних ресурсов) для решения междоменных проблем. Это решение не уникально для Spring Boot. В традиционном SSM-фреймворке CORS можно использовать для решения междоменных проблем, но мы привыкли настраивать CORS в файлах XML. Теперь мы можем реализовать интерфейс WebMvcConfigurer, а затем переписать метод addCorsMappings. Решение междоменных проблем.
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.maxAge(3600);
}
}
Что такое мониторы в Spring Boot?
- Привод Spring Boot — одна из важных функций в структуре Spring Boot. Мониторы загрузки Spring помогают получить доступ к текущему состоянию запущенных приложений в рабочей среде. Существует несколько показателей, которые необходимо проверять и отслеживать в производственной среде. Даже некоторые внешние приложения могут использовать эти службы для отправки предупреждающих сообщений соответствующему персоналу. Модуль монитора предоставляет набор конечных точек REST, к которым можно получить прямой доступ как URL-адреса HTTP для проверки состояния.
Как реализовать глобальную обработку исключений с помощью Spring Boot?
- Spring предоставляет очень полезный способ обработки исключений с помощью ControllerAdvice. Мы обрабатываем все исключения, генерируемые классом контроллера, реализуя класс ControlerAdvice.
Как мы можем отслеживать все микросервисы Spring Boot?
- Spring Boot предоставляет конечные точки мониторинга для мониторинга показателей отдельных микросервисов. Эти конечные точки полезны для получения информации о приложениях (например, о том, работают ли они) и о том, правильно ли функционируют их компоненты (например, базы данных и т. д.). Однако основным недостатком или трудностью использования монитора является то, что нам нужно открывать точку знаний приложения индивидуально, чтобы узнать его состояние или работоспособность. Представьте себе микрослужбу, включающую 50 приложений. Администратору придется нажать на терминал выполнения для всех 50 приложений. Чтобы помочь нам справиться с этой ситуацией, мы будем использовать проект с открытым исходным кодом на . Он построен на основе Spring Boot Actuator, который предоставляет веб-интерфейс, позволяющий нам визуализировать метрики для нескольких приложений.
Как оптимизировать производительность SpringBoot
-
Если проект относительно большой и в нем много классов, не используйте @SpringBootApplication и используйте @Compoment, чтобы указать область сканирования пакета.
-
Установите начальную память JVM и максимальную память, чтобы они были одинаковыми при запуске проекта.
-
Установите встроенный сервер springboot с помощью tomcat на откат
Как перезагрузить изменения в Spring Boot без перезагрузки сервера? Как происходит горячее развертывание проекта Spring Boot?
- Этого можно добиться с помощью инструментов DEV. С помощью этой зависимости вы можете сохранить любые изменения, и встроенный кот перезапустится. Spring Boot имеет модуль средств разработки (DevTools), который помогает повысить производительность разработчиков. Основной проблемой для разработчиков Java является автоматическое развертывание изменений файлов на сервере и автоматический перезапуск сервера. Разработчики могут перезагружать изменения в Spring Boot без перезапуска сервера. Это избавит от необходимости вручную развертывать изменения каждый раз. Spring Boot не имел этой функции, когда выпускал свою первую версию. Это наиболее востребованная функция для разработчиков. Модули DevTools полностью отвечают потребностям разработчиков. Этот модуль будет отключен в рабочей среде. Он также предоставляет консоль базы данных H2 для лучшего тестирования приложения.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
Как реализовать совместное использование сеансов в микросервисах SpringBoot?
- В микросервисах полный проект разбит на несколько различных независимых сервисов, каждый сервис независимо развертывается на разных серверах, а их соответствующие сеансы изолированы от физического пространства, но часто нам необходимо разделить сеансы между различными микросервисами, общее решение это Spring Session + Redis для обеспечения совместного использования сеансов. Сеансы всех микросервисов единообразно хранятся в Redis. Когда каждый микросервис имеет связанные операции чтения и записи в сеансе, он управляет сеансом в Redis. Таким образом реализуется разделение сессий.Спринг Сессия реализована на базе прокси-фильтра в Spring, что делает операцию синхронизации сессии прозрачной для разработчиков и очень удобной.
Какие стартовые зависимости maven вы используете?
- Некоторые из приведенных ниже зависимостей используются
- spring-boot-starter-web встроенный tomcat и веб-разработка требуют поддержки сервлета и jsp
- поддержка базы данных spring-boot-starter-data-jpa
- поддержка базы данных redis spring-boot-starter-data-redis
- Spring-boot-starter-data-solr поддержка Solr
- mybatis-spring-boot-starter сторонний стартер интеграции mybatis
- Кастомный стартер (если сами разрабатывали, то можете сказать)
Что такое стартер в Spring Boot?
- Прежде всего, этот Starter не является новым техническим моментом, он в основном основан на существующих функциях Spring. Во-первых, он предоставляет класс автоматической настройки, обычно именуемый как
XXXAutoConfiguration
, В этом классе конфигурации условные аннотации используются для определения того, вступает ли конфигурация в силу (условные аннотации изначально были в Spring), а затем он также предоставляет ряд конфигураций по умолчанию, а также позволяет разработчикам настраивать связанные конфигурации в соответствии с фактическими ситуации, эти свойства конфигурации затем внедряются через внедрение безопасного для типов свойства (spring.factories), и вновь введенные свойства заменяют свойства по умолчанию. Из-за этого многие сторонние фреймворки можно использовать напрямую, только вводя зависимости. Конечно, разработчики также могут настроить Starter
Как реализовать запланированные задачи в Spring Boot?
-
Существует два основных способа использования синхронизированных задач в Spring Boot: один — использовать аннотацию @Scheduled в Spring, а другой — использовать сторонний фреймворк Quartz.
-
Способ использования @Scheduled в Spring в основном реализуется через аннотацию @Scheduled.
Какая польза от spring-boot-starter-parent?
-
Все мы знаем, что когда мы создаем новый проект Spring Boot, по умолчанию есть родитель, этот родитель — spring-boot-starter-parent. Spring-boot-starter-parent в основном имеет следующие функции:
- Скомпилированная версия Java определяется как 1.8.
- Используйте кодировку формата UTF-8.
- Унаследовано от spring-boot-dependencies, которое определяет версию зависимости, и именно из-за этой зависимости нам не нужно писать номер версии при написании зависимостей.
- Конфигурация для выполнения операции упаковки.
- Автоматическая фильтрация ресурсов.
- Автоматическая настройка плагина.
- Фильтрация ресурсов для application.properties и application.yml, включая файлы конфигурации для различных сред, определяемых профилем, таких как application-dev.properties и application-dev.yml.
-
Резюме для упаковки
Как SpringBoot реализует упаковку
- Войдите в каталог проекта и введите mvn clean package в консоли, clean — очистить существующий пакет проекта, пакет упакован
- Или нажмите Mavne на панели параметров слева, сначала нажмите «Очистить», а затем нажмите «Пакет».
В чем разница между банкой, созданной Spring Boot, и обычной банкой?
-
Окончательный упакованный jar-файл проекта Spring Boot — это исполняемый jar-файл, который можно напрямую
java -jar xxx.jar
Команда для запуска, этот тип jar не может использоваться как обычный jar другими проектами, и даже если это зависит, классы в нем нельзя использовать. -
На jar Spring Boot нельзя полагаться в других проектах, главным образом потому, что его структура отличается от структуры обычных jar-файлов. Обычный jar-пакет после распаковки — это непосредственно имя пакета, а package — наш код, а исполняемый jar-файл, упакованный Spring Boot, распаковывается, в
\BOOT-INF\classes
Каталог — это наш код, поэтому на него нельзя ссылаться напрямую. Если вам нужно сослаться на него, вы можете добавить конфигурацию в файл pom.xml и упаковать проект Spring Boot в два jar-файла, один исполняемый файл, а другой — указанный.