>  기사  >  Java  >  SpringBoot 면접 질문과 답변은 무엇인가요?

SpringBoot 면접 질문과 답변은 무엇인가요?

WBOY
WBOY앞으로
2023-05-13 14:16:061308검색

1.스프링부트란?

Spring Boot는 Spring 오픈 소스 조직의 하위 프로젝트입니다. Spring 구성 요소에 대한 원스톱 솔루션입니다. 주로
Spring 사용의 어려움을 단순화하고 무거운 구성을 절약하며 개발자가 얻을 수 있도록 다양한 런처를 제공합니다. 빨리 시작했습니다.

2. SpringBoot를 사용하는 이유

빠른 개발, 신속한 통합, 단순화된 구성, 내장된 서비스 컨테이너

3. SpringBoot와 SpringCloud의 차이점

SpringBoot는 빠르게 개발된 Spring 프레임워크이고, SpringCloud는 완전한 마이크로서비스 프레임워크이며, SpringCloud에 따라 다릅니다. 스프링부트에서.

4. 스프링부트의 장점은 무엇인가요?

Spring Boot는 주로 다음과 같은 장점을 가지고 있습니다: 시작하기 쉽고, 개발 효율성을 향상시키며, Spring 개발을 위한 더 빠르고 간단한 개발 프레임워크를 제공합니다. 번거로운 구성 없이 즉시 사용 가능합니다. 임베디드 서버, 보안 관리, 운영 데이터 모니터링, 상태 확인 및 외부 구성 등 대규모 프로젝트에 공통된 일련의 비업무 기능을 제공합니다. Spring Boot의 요약은 코딩을 단순화하고, 구성을 단순화하고, 배포를 단순화하고, 모니터링을 단순화하는 것입니다.

5. Spring Boot의 핵심 주석은 무엇입니까?

주로 어떤 주석으로 구성되어 있나요? 시작 클래스의 주석은 @SpringBootApplication이며 이는 Spring Boot의 핵심 주석이기도 합니다. 주요 조합에는 다음 세 가지 주석이 포함됩니다. @SpringBootConfiguration: @Configuration 주석을 결합하여 구성 파일의 기능을 구현합니다. @EnableAutoConfiguration: 자동 구성 기능을 켜거나 자동 구성 옵션을 끕니다. 예:
@ComponentScan: Spring 구성 요소 검색.
java 如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。6. Spring Boot는 어떤 로깅 프레임워크를 지원하나요? 권장되는 기본 로깅 프레임워크는 무엇입니까?

Spring Boot는 로깅 프레임워크로 Java Util Logging, Log4j2 및 Lockback을 지원합니다. Starters를 사용하여

starter를 시작하면 Spring Boot는 Logback을 기본 로깅 프레임워크로 사용하지만 어떤 로깅 프레임워크이든 출력을 지원합니다. 구성 파일을 콘솔이나 파일에 저장합니다.


7. SpringBoot Starter의 작동 원리

SprinBoot가 시작되면 @SpringBootApplication 주석이 자동으로 Maven으로 이동하여 각 Starter의 정보를 읽습니다. starter.

spring.factories 파일은 spring 컨테이너에서 생성되어야 하는 모든 bean을 구성하고

bean을 SpringContext에 주입하기 위한 자동 구성을 수행합니다. // (SpringContext는 Spring의 구성 파일입니다.)


8. .X 새로운 소식은 무엇입니까? 1.X와 어떻게 다른가요?

구성 변경 JDK 버전 업그레이드 타사 클래스 라이브러리 업그레이드 반응형 Spring 프로그래밍은 HTTP/2 지원 구성 속성 바인딩 지원 추가 개선 및 향상

9. SpringBoot는 어떤 프런트 엔드 템플릿을 지원합니까?

thymeleaf, freemarker, jsp는 공식적으로 지원하지 않습니다. 권장하는 JSP에는 한계가 있습니다

10.SpringBoot의 단점

현재로서는 SpringBoot에 단점이 없다고 생각합니다. 오류가 보고될 때 위치를 찾기가 어렵습니다.

11. Spring Boot를 실행하는 방법은 무엇인가요?

명령어와 함께 패키징하거나 컨테이너에 넣어 실행

Maven/Gradle 플러그인을 사용하여 실행

메인 메소드를 직접 실행하여 실행


12. Spring Boot를 독립 컨테이너에서 실행해야 하나요?

필요하지 않습니다. Tomcat/Jetty와 같은 내장형 컨테이너입니다.

13. Spring Boot 기능을 활성화하는 방법은 무엇입니까?

spring-boot-starter-parent 프로젝트 상속

spring-boot-dependent 프로젝트 종속성 가져오기

14. SpringBoot에서 핫 배포를 구현하는 방법은 무엇인가요?

핫 배포는 SpringBoot 프로젝트를 다시 실행하지 않고도 작업 배경 코드를 실행 중인 프로젝트에 자동으로 업데이트할 수 있음을 의미합니다.

두 가지 주요 방법이 있습니다:

Spring Loaded

Spring-boot-devtools

15. things

Spring Boot의 작업은 매우 간단합니다. 먼저 EnableTransactionManagement 주석을 사용하여 항목을 연 다음 Transactional 주석을

Service 메서드에 추가합니다.

16. 비동기 비동기 호출 방법

SpringBoot에서 비동기 호출을 사용하는 것은 매우 간단합니다. 메서드의 비동기 호출을 달성하려면 메서드에 @Async 주석만 사용하면 됩니다. 참고: 비동기 호출 @Async 주석을 적용하려면 시작 클래스에 @EnableAsync를 추가해야 합니다.

17. Spring Boot가 시작될 때 특정 코드를 실행하는 방법은 무엇입니까?


ApplicationRunner 또는 CommandLineRunner 인터페이스를 구현할 수 있습니다. 이 두 인터페이스는

하나의 실행 메서드만 제공합니다

18.


Spring Boot는 @PropertySource, @Value, @Environment, @ConfigurationPropertie 주석을 통해 변수를 바인딩할 수 있습니다

19. JavaConfig란 무엇인가요?

Spring JavaConfig는 Spring 3.0에서 도입된 Spring IOC 컨테이너 구성을 위한
순수 Java 메서드를 제공합니다. 따라서 XML 구성을 사용하지 않는 것이 도움이 됩니다. JavaConfig 사용의 장점은 다음과 같습니다.
객체 지향 구성. 구성은 JavaConfig에서 클래스로 정의되므로 사용자는 Java의 객체 지향 기능을 최대한 활용할 수 있습니다. 하나의 구성 클래스는 다른 구성 클래스를 상속하고 해당 @Bean 메서드를 재정의하는 등의 작업을 할 수 있습니다.
XML 구성을 줄이거나 제거합니다. 종속성 주입 원칙을 기반으로 하는 외부화된 구성의 이점이 입증되었습니다. 그러나 많은 개발자는 XML과 Java 간에 전환하는 것을 원하지 않습니다. JavaConfig는 개발자에게 XML 구성 개념과 유사한 Spring 컨테이너를 구성하는 순수한 Java 방법을 제공합니다. 기술적인 관점에서는 JavaConfig 구성 클래스만 사용하여 컨테이너를 구성하는 것이 가능하지만 실제로 많은 사람들은 JavaConfig와 XML을 혼합하고 일치시키는 것이 이상적이라고 생각합니다.
안전하고 리팩터링 친화적인 유형을 입력하세요. JavaConfig는 Spring 컨테이너를 구성하는 유형에 안전한 방법을 제공합니다. Java
5.0의 제네릭 지원 덕분에 이제 형변환이나 문자열 기반 조회 없이 이름 대신 유형별로 빈을 검색할 수 있습니다.
일반적으로 사용되는 Java 구성:
@Configuration: 이 주석을 클래스에 작성하여 이 클래스가 구성 클래스임을 나타냅니다.
@ComponentScan: 구성 클래스에 @ComponentScan 주석을 추가합니다. 기본적으로 이 주석은 이 클래스가 있는 패키지 아래의 모든 구성 클래스를 검색합니다. 이는 이전 c2bd895d3853c4a0d5e029f457caa573과 동일합니다.
@Bean: 빈 주입: 이전의 6f1ac69a4f71a066f013c7069db144af
@EnableWebMvc: xml의 40eb2673abb5106486dc6555ee6cc99a
@ImportResource: xml61d3849a2b7d733f764fe8734f4dabad

20. SpringBoot의 자동 구성 원리는 무엇입니까

주로 Spring Boot의 시작 클래스에 대한 핵심 주석입니다. SpringBootApplication 주석 기본 구성 클래스입니다. . 이 기본 구성

클래스를 사용하면 SpringBoot가 시작될 때 @EnableAutoConfiguration 주석 자동 구성 기능이 활성화됩니다.
이 EnableAutoConfiguration을 사용하면 다음과 같은 작업이 수행됩니다.
구성 파일 META_INF/Spring.factories에서 사용할 수 있는 자동 구성 클래스를 로드합니다.
중복을 제거하고, 제외 및 제외 이름 속성
Filter에 의해 전달되는 클래스를 제외하고, 조건( @Conditional)이 충족됩니다. 자동 구성 클래스가

21을 반환합니다. Spring Boot 구성 로딩 순서를 어떻게 이해합니까?

Spring Boot에서는 다음 방법을 사용하여 구성을 로드할 수 있습니다.

1.properties 파일
3. 명령줄 매개변수;

YAML은 사람이 읽을 수 있는 데이터 직렬화 언어입니다. 일반적으로 구성 파일에 사용됩니다. 속성 파일에 비해 YAML 파일은 구성 파일에 복잡한 속성을
추가하려는 경우 더 구조화되고 덜 혼란스럽습니다. YAML에는 계층적 구성 데이터가 있음을 알 수 있습니다.

23. YAML 구성의 장점은 무엇인가요?

YAML은 이제 프런트엔드와 백엔드 모두에서 볼 수 있는 매우 인기 있는 구성 파일 형식입니다. 그렇다면 기존 속성 구성과 비교하여 YAML 구성의 장점은 무엇입니까?

질서 있는 구성은 매우 중요합니다.
배열의 요소는 기본 데이터 유형 또는 객체일 수 있습니다.
YAML도 마찬가지입니다. 단점은 사용자 정의 YAML 구성을 가져오기 위한 @PropertySource 주석을 지원하지 않는다는 것입니다.

24. Spring Boot에서는 XML 구성을 사용할 수 있나요?

Spring Boot에서는 XML 구성 대신 Java 구성을 사용할 것을 권장하지만 Spring Boot에서도 XML 구성을 사용할 수 있습니다. @ImportResource 주석을 통해 XML 구성을 도입할 수 있습니다.

25.스프링부트의 핵심설정파일은 무엇인가요? bootstrap.properties와 application.properties의 차이점은 무엇인가요?

단순히 Spring Boot 개발을 한다면 bootstrap.properties 구성 파일을 접하기가 쉽지 않을 수 있지만 Spring Cloud와 결합하면 이 구성이 자주 발생하게 됩니다. 특히 일부 원격 구성 파일을 로드할 때 필요할 때 발생합니다.
스프링 부트의 핵심에 있는 두 가지 구성 파일:

bootstrap(.yml 또는 .properties): Boostrap은 상위 ApplicationContext에 의해 로드되고 애플리케이션 전에 로드됩니다. 구성은 애플리케이션 컨텍스트의 부팅 단계에서 적용됩니다. 일반적으로 우리는 Spring Cloud 구성에서 이 파일을 사용할 것입니다. 그리고 부스트랩의 속성은 덮어쓸 수 없습니다.

애플리케이션(.yml 또는 .속성): ApplicationContext에 의해 로드되고 스프링 부트 프로젝트의 자동 구성에 사용됩니다

.

26. 스프링 프로필이란 무엇인가요?

프로젝트 개발 중에 데이터베이스 연결, Redis 구성 등 개발, 테스트 또는 프로덕션과 같은 다양한 환경에서 일부 구성 파일이 다를 수 있습니다. 그렇다면 다양한 환경에서 구성을 자동으로 전환하려면 어떻게 해야 할까요? Spring은 구성 파일을 앞뒤로 전환하는 기능을 제공하는
profiles 메커니즘을 제공합니다.
Spring 프로필을 사용하면 사용자가 구성 파일(dev, test, prod 등)을 기반으로 Bean을 등록할 수 있습니다. 따라서 애플리케이션
이 개발 중에 실행 중일 때는 특정 Bean만 로드할 수 있지만 PRODUCTION에서는 특정 다른 Bean을 로드할 수 있습니다.
Swagger 문서는 QA 환경에서만 사용할 수 있고 다른 모든 문서는 비활성화되어야 한다는 요구 사항이 있다고 가정해 보겠습니다. 이는 구성 파일을 사용하여 수행할 수 있습니다. Spring Boot를 사용하면 구성 파일 작업이 매우 쉬워집니다.

27. SpringBoot 다중 데이터 소스 분할 아이디어

먼저 속성 구성 파일에 두 개의 데이터 소스를 구성하고, 하도급 매퍼를 생성하고, @ConfigurationProperties

를 사용하여 속성에서 구성을 읽고, @MapperScan을 사용하여 해당 매퍼에 등록합니다. 패키지에서


28. SpringBoot 다중 데이터 소스 트랜잭션을 관리하는 방법

첫 번째 방법은 서비스 계층의 @TransactionManager에서 transactionManager를 사용하여

DataSourceConfig

에 구성된 트랜잭션을 지정하는 것입니다. 두 번째 방법은 jta-atomikos를 사용하는 것입니다. 분산 트랜잭션 관리 구현

29. Spring Boot 애플리케이션을 보호하는 방법은 무엇입니까?

프로덕션에서 HTTPS 사용

Snyk를 사용하여 종속성 확인

최신 버전으로 업그레이드
CSRF 보호 활성화
콘텐츠 보안 정책을 사용하여 XSS 공격 방지

30. Spring Boot 애플리케이션에서 보안을 구현하는 방법은 무엇입니까?

Spring Boot 보안을 구현하려면 spring-boot-starter-security 종속성을 사용하고

보안 구성을 추가해야 합니다. 코드가 거의 필요하지 않습니다. 구성 클래스는 WebSecurityConfigurerAdapter를 확장하고 해당 메서드를 재정의해야 합니다.


31. Spring Security와 Shiro의 장단점을 비교해 보세요.

Spring Boot는 Spring Security의

Starter를 포함하여 매우 편리한 스타터를 공식적으로 제공하므로 Spring Boot에서도 Spring Security를 ​​사용할 수 있게 됩니다. 훨씬 쉽고 모든 인터페이스를 보호하기 위해 종속성을 추가하기만 하면 됩니다. 따라서 Spring Boot 프로젝트인 경우 일반적으로 Spring Security를 ​​선택합니다. 물론 이것은 순전히 기술적인 관점에서는 제안된 조합일 뿐, 어떻게 조합하더라도 문제가 되지 않습니다. Spring Security

에 비해 Shiro는 주로 다음과 같은 특징을 가지고 있습니다.

Spring Security는 경량 보안 관리 프레임워크입니다.
Spring Security는 복잡한 개념과 번거로운 구성을 가지고 있습니다.
Spring Security는 간단합니다. Shiro는 강력한 기능을 가지고 있습니다

32. Spring Boot에서 도메인 간 문제를 해결하는 방법은 무엇입니까?

프론트 엔드에서 JSONP를 통해 도메인 간 문제를 해결할 수 있지만 JSONP는 GET 요청만 보낼 수 있고 다른 요청은 보낼 수 없습니다.
RESTful 스타일 애플리케이션에서는 매우 쓸모가 없어 보이기 때문에 크로스 도메인 문제를 해결하려면 백엔드에서 (CORS, Crossorigin 리소스 공유)를 사용하는 것이 좋습니다. 이 솔루션은 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);
	}
}

33. Spring Boot에서 모니터란 무엇인가요?

스프링 부트 액추에이터는 스프링 시작 프레임워크의 중요한 기능 중 하나입니다. Spring Boot 모니터는 프로덕션 환경에서 실행 중인 애플리케이션의 현재 상태에 액세스하는 데 도움이 됩니다. 프로덕션 환경에서 확인하고 모니터링해야 하는 몇 가지 지표가 있습니다. 일부 외부 애플리케이션에서도 이러한 서비스를 사용하여 관련 사람들에게 경고 메시지를 보낼 수 있습니다. 모니터 모듈은 상태를 확인하기 위해 HTTP URL로 직접 액세스할 수 있는 REST 엔드포인트 세트를 노출합니다.

34. Spring Boot를 사용하여 전역 예외 처리를 구현하는 방법은 무엇입니까?

Spring은 ControllerAdvice를 사용하여 예외를 처리하는 매우 유용한 방법을 제공합니다. 컨트롤러 클래스에서 발생하는 모든 예외를 처리하기 위해

ControlerAdvice 클래스를 구현합니다.

35. 모든 Spring Boot 마이크로서비스를 어떻게 모니터링하나요?

Spring Boot는 개별 마이크로서비스의 메트릭을 모니터링하기 위한 모니터 엔드포인트를 제공합니다. 이러한 엔드포인트는 시작 여부, 데이터베이스 등과 같은 해당 구성 요소가 제대로 실행되고 있는지 여부와 같은 애플리케이션에 대한 정보

를 얻는 데 유용합니다. 하지만 모니터

사용의 가장 큰 단점이나 어려움 중 하나는 애플리케이션의 상태나 상태를 알기 위해 애플리케이션의 지식 포인트를 개별적으로 열어야 한다는 것입니다. 50개의 애플리케이션이 포함된 마이크로서비스를 상상해 보세요. 관리자는 50개 애플리케이션 모두의 실행 터미널에 접속해야 합니다. 이 상황에 대처할 수 있도록

우리는 에 있는 오픈 소스 프로젝트를 사용할 것입니다. 이는 여러 애플리케이션의 메트릭을 시각화할 수 있는 웹 UI를 제공하는 Spring Boot Actuator를 기반으로 구축되었습니다.

36. SpringBoot性能如何优化

如果项目比较大,类比较多,不使用@SpringBootApplication,采用@Compoment指定扫包范

在项目启动时设置JVM初始内存和最大内存相同
将springboot内置服务器由tomcat设置为undertow

37. 如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?Spring Boot项目如何热部署?

这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat 将重新启
动。Spring Boot 有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java 开
发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新
加载 Spring Boot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring
Boot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。DevTools 模块完全满
足开发人员的需求。该模块将在生产环境中被禁用。它还提供 H2 数据库控制台以更好地测试应用
程序。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
</dependency>

38. SpringBoot微服务中如何实现 session 共享 ?

在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务
器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享
session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的
session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上
的 session 。这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使
得 session 的同步操作对开发人员而言是透明的,非常简便。

39. 您使用了哪些 starter maven 依赖项?

使用了下面的一些依赖项
spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持
spring-boot-starter-data-jpa 数据库支持
spring-boot-starter-data-redis redis数据库支持
spring-boot-starter-data-solr solr支持
mybatis-spring-boot-starter 第三方的mybatis集成starter
自定义的starter(如果自己开发过就可以说出来)

40. Spring Boot 中的 starter 到底是什么 ?

首先,这个 Starter 并非什么新的技术点,基本上还是基于 Spring 已有功能来实现的。首先它提
供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来
决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配
置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性(spring.factories)注入
将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,我们
只需要引入依赖就可以直接使用了。当然,开发者也可以自定义 Starter

41. Spring Boot 中如何实现定时任务 ?

在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled
注解,另一-个则是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。

42. spring-boot-starter-parent 有什么用 ?

我们都知道,新创建一个 Spring Boot 项目,默认都是有 parent 的,这个 parent 就是 springboot-starter-parent ,spring-boot-starter-parent 主要有如下作用:
定义了 Java 编译版本为 1.8 。
使用 UTF-8 格式编码。
继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依
赖,所以我们在写依赖时才不需要写版本号。
执行打包操作的配置。
自动化的资源过滤。
自动化的插件配置。
针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同
环境的配置文件,例如 application-dev.properties 和 application-dev.yml。
总结就是打包用的

43. SpringBoot如何实现打包

进入项目目录在控制台输入mvn clean package,clean是清空已存在的项目包,package进行打
包或者点击左边选项栏中的Mavne,先点击clean在点击package

44. Spring Boot에서 생성된 jar와 일반 jar의 차이점은 무엇인가요?

Spring Boot 프로젝트에서 최종적으로 패키징된 jar는 실행 가능한 jar입니다. java -jar xxx를 통해 직접 실행할 수 있습니다. jar 명령입니다. 이러한 종류의 jar는 다른 프로젝트에서 일반 jar처럼 의존할 수 없으며 종속적이라 하더라도 해당 클래스를 사용할 수 없습니다.
Spring Boot의 jar는 구조가 일반 jar와 다르기 때문에 다른 프로젝트에서 신뢰할 수 없습니다. 일반 jar 패키지의 경우 압축을 풀면 바로 패키지 이름이 되고 해당 패키지는 우리의 코드가 됩니다. 그러나 압축을 푼 후에는 Spring Boot에서 패키지한 실행 가능한 jar가 BOOTINFclasses 디렉터리에 있는 우리의 코드가 되므로 그럴 수 없습니다. 직접 참조했습니다. 참조해야 하는 경우 pom.xml 파일에 구성을 추가하고 Spring Boot 프로젝트를 두 개의 jar(실행 파일 하나와 참조 가능 파일)로 패키징할 수 있습니다.

위 내용은 SpringBoot 면접 질문과 답변은 무엇인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제