主文章(我总结的面试题的索引目录—进不去就说明我还没写完) |
---|
https://blog.csdn.net/grd_java/article/details/122357831 |
1. 必问
什么是Spring boot
- Spring Boot 是解决Spring频繁编写样板代码和配置的解决方案
- 随着新功能的增多,Spring越来越复杂,一个大型项目往往由多个微服务组成,每个微服务都是Spring项目,每一个项目都需要添加构建路径,添加Maven依赖,配置应用服务器,并做繁琐的spring配置工作
- 而Spring boot可以让我们以最少的工作量快速搭建一个spring项目,更加健壮的使用Spring
Spring Boot的优势
- 开发量、测试成本、对配置的关注减少((封装了一整套默认值,快速开发))
- 使用JavaConfig配置,可以避免配置XML
- 避免大量的Maven导致版本冲突
- 集成单独Web服务器,不再需要Tomcat、Glassfish或其它东西
什么是JavaConfig
- Spring社区产品,提供配置Spring IoC的纯Java模式,避免配置繁琐的XML文件
- 由于是通过Java类配置,所以可以充分使用面向对象特点,例如一个配置类继承另一个,重写@Bean方法等
- 提供纯Java配置的支持,可以完全放弃xml,springBoot使用了yaml文件作为配置文件,只需少量配置,而大部分配置,已经有默认配置了,只有在需要个性化配置时,才需要修改它们
- 类型安全,重构友好。Java5对泛型的支持,现在可以按照类型而不是名称检索Bean,不需要任何强制转换或字符串查找
什么是YAML?
- YAML是一种可读的数据序列化语言,常用于作为配置文件
- 比起属性文件,它的结构更加清晰,不容易混淆,具有分层配置数据的特性
2. Spring boot 注解
Spring Boot中常用注解有哪些(包括Spring、Spring MVC)?尽量说明细节。
- @SpringBootApplication:作用于类上,是spring boot的注解,标识一个SpringBoot程序的入口,此类将称为Spring Boot启动类
- @Controller:作用在类上,是Spring的注解,标识此类为Controller控制器组件
- @Service:作用在类上,是Spring的注解,标识此类为Service业务层组件
- @Repository:作用在类上,是Spring的注解,标识此类为持久层组件
- @Component:作用在类上,是Spring的注解,标识此类为一个组件,可以被Spring扫描到,用在不确定到的是那一层的类
- @Configuration:作用在类上,是Spring的注解,封装了@Component组件,标识此类为一个配置类
- @ComponentScan:作用在类上,是Spring的注解,最好是启动类,指定Spring去哪扫描组件
- @ResponseBody:作用在类或方法上,是Spring MVC的注解,标识此类所有方法或特定方法,响应数据,直接封装到http response body中(响应体)
- @RestController:作用在类上,是Spring MVC的注解,相当于@Controller+@ResponseBody
- @RequestMapping:作用在类或方法上,是Spring MVC的注解,标识此类的Handler(处理请求的方法)的请求路径,最终,类上面的+方法上面的=最终url路径。需要手动指定处理get、post、delete、put
- @Get/Post/Delete/PutMapping:作用在方法上,是Spring MVC的注解,封装了RequestMapping,处理指定请求方式的RequestMapping。比如GetMapping就是处理get请求的。
- @Autowired:作用在属性上,是Spring的注解,按类型从springIoC容器注入对象
- @MapperScan():作用于启动类,是Mybatis的注解,比较常用,用来扫描指定包下所有Mapper接口,一般Mapper接口都放一起。
- 以及一些配置相关的注解,都属于Spring
- @Bean,
- @PropertySource(“classpath:jdbc.properties”)//加载指定外部配置资源properties
- 使用properties用@Value("$ {jdbc.driver}") ,如果配置文件是yaml使用@Value("${jwt.secret}"),
- Spring AOP和声明式事务相关注解,都属于Spring
- @EnableAspectJAutoProxy:开启AOP注解驱动,扫描@Aspect
- @EnableTransactionManagement:开启声明式事务
- @Transactional:类或方法上,标识使用声明式事务横切逻辑
- @Aspect(“切面名,可省略”):标识到类上,标识一个切面类
- @Pointcut(“execution(* com.yzpnb.advanced_application.service.impl.TransferServiceImpl.*(…))”):切入点
- @Before、@After、@AfterThrowing、@AfterReturning、@Around(“tp1()”):前置、后置、错误、成功、环绕通知注解
- Bean特性(BeanDefinition,是Spring保存Bean的信息的对象)和Bean生命周期注解
- @lazy:作用于类上,标识此Bean为懒加载
- @Scope :作用于类上,标识此Bean的生命周期,是单例,还是原型模式对象
- @PostConstruct:作用方法上,标识此方法是init-method
- @PreDestroy:作用方法上,标识此方法是destory-method
3. 偏向于实战的问题,莫名其妙?
如何重新加载Spring Boot上的更改,而无需重新启动服务器?
- 使用DEV工具,Spring Boot的一个DevTools模块(开发工具),助于提高开发人员生产力,可以重新加载Spring Boot上的更改,无需重启服务器
- 还提供了H2数据库控制台,可以更好的测试应用程序
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
spring boot监视器是什么?
- Spring boot actuator,Spring启动框架的重要功能之一,可以帮助我们访问生产环境中正运行的应用程序的当前状态
- 监视模块,公开了一组可直接作为HTTP URL访问的REST断点来检查状态
如何在SpringBoot中禁用Actuator断点安全性?
- 默认情况下,敏感HTTP端点都是安全的,只有具有ACTUATOR角色用户才能访问它们,安全性是使用标准的HttpServletRequest.isUserInRole方法实施的,我们可以使用它来禁用安全性,只有执行机构断点防火墙后访问,才建议禁用安全性。
如何在自定义端口运行Spring Boot应用程序?
- 可以在application.properties或application.yaml文件中指定server.port配置
如何实现Spring Boot应用程序的安全性?
- 可以使用Spring Security,引入依赖spring-boot-starter-security依赖项
- 配置相关安全配置,代码很少,核心配置类,只需要继承WebSecurityConfigurerAdapter类,覆盖里面的方法