Java后端每日面试题(day1)

目录

JavaWeb三大组件


  1. Servlet:Servlet是JavaWeb应用程序中处理请求和生成响应的基本组件。它是一个Java类,通过实现或继承Servlet接口来处理客户端请求,并生成响应数据。

  2. Listener:监听器用于监听Web应用程序中的事件,并在事件发生时执行相应的逻辑处理。

    使用场景:

    1. 初始化
    2. 释放资源
    3. 日志记录
  3. Filter:过滤器用于在请求和响应的处理过程中对数据进行拦截和处理。一个请求可以经过多个过滤器的处理,每个过滤器可以在请求的处理前后进行操作和拦截。

    使用场景:

    1. 权限验证
    2. 请求转发
    3. 日志记录
    4. 字符编码

总结而言

  • Servlet程序用于处理请求和生成响应数据
  • Listener监听器用于监听特定的Web应用程序事件执行相应逻辑
  • Filter过滤器用于对请求和响应数据进行拦截和处理。

它们各自在Web应用程序开发中具有重要的作用,能够实现灵活的请求处理、事件监听和数据过滤。

依赖注入的方式


在 Spring 中实现依赖注入的常见方式有以下 3 种:

  • 属性注入(Field Injection)
    • @Autowire实现属性注入
    • @Resurce实现属性注入
  • Setter 注入(Setter Injection)
  • 构造方法注入(Constructor Injection)

@Autowire和@Resurce有什么区别?


  1. autowire是Spring提供的;resource是J2EE提供的

  2. resource默认使用name装配,当找不到name时,会按类型装配

  3. AutoWire默认按类型装配,如果要使用名称装配可以用@Qualifier结合使用

Spring Boot的优点


  1. 开箱即用

    通过在pom文件中添加相关依赖包,然后使用对应注解来代替繁琐的XML配置文件以管理对象的生命周期

  2. 约定优于配置

    约定优于配置(convention over configuration),也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需要的配置。

  3. 内置tomcat

Spring IoC是什么?


IoC(Inversion of Control:控制反转) 是一种设计思想,而不是一个具体的技术实现,IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。

  • 为什么叫控制反转?
    控制 :指的是对象创建(实例化、管理)的权力
    反转:控制权交给外部环境(Spring 框架、IoC 容器)

  • Spring IoC的实现机制:工厂模式+反射机制

说说Spring Aop的优点


  • 减少系统的重复代码
  • 降低模块间的耦合度
  • 封装切面逻辑

@Component和@Bean的区别


  • @Component 注解用在类上,表明一个类会作为组件类,并告知Spring要为这个类创建bean,每个类对应一个 Bean。

  • @Bean 注解用在方法上,表示这个方法会返回一个 Bean。

  • @Bean 注解更加灵活,相比@Component注解自定义性更强

自定义注解时使用的RetentionPolicy枚举类有哪些值?


源代码 类文件 虚拟机
SOURCE ✔️
CLASS ✔️ ✔️
RUNTIME ✔️ ✔️ ✔️

当值设为SOURCE,只有源文件 中可以看到注解

当值设为CLASS,可在源文件 和编译后的Class文件 中可以看到注解

当值设为RUNTIME,不仅在源文件 和编译后的Class 文件中可以看到注解,JVM还能通过反射机制获取到注解

如何理解Spring的SPI机制?


  • Java SPI

SPI 全称 Service Provider Interface ,是 Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件

SPI的作用就是为这些被扩展的API 寻找服务实现 。本质是通过基于接口编程+策略模式+配置文件 实现动态加载 。可以实现 解耦 (接口和实现分离),提高框架的 可拓展性(第三方可以自己实现,达到插拔式的效果)。

  • Spring SPI

Spring SPI对 Java SPI 进行了封装增强。我们只需要在 META-INF/spring.factories 中配置接口/类/注解名,即可通过服务发现机制,在运行时进行自动加载。

Spring Boot自动装配原理


Spring Boot自动装配如下图所示:

Springboot项目的启动类需要由 @SpringBootApplication 注解修饰,该注解复合了如下三个注解。

  1. @SpringBootConfiguration。表明Springboot启动类是一个配置类

  2. @ComponentScan。会将指定路径下的被特定注解修饰的类加载为Spring中的Bean,这些特定注解为@Component,@Controller,@Service,@Repository和@Configuration注解;

  3. @EnableAutoConfiguration。用于开启Springboot的自动装配,该注解复合了如下两个核心注解。

    • @AutoConfigurationPackage。用于将启动类所在的包里面的所有组件注册到spring容器。
    • @Import(AutoConfigurationImportSelector.class)
  • 自动装配流程说明(重要)

    1. @Import 将 AutoConfigurationImportSelector 注入到spring容器中
    2. AutoConfigurationImportSelector 通过 SpringFactoriesLoader 从类路径下去读取META-INF/spring.factories文件信息
    3. 此文件中有一个key为org.springframework.boot.autoconfigure.EnableAutoConfiguration,定义了一组需要自动配置的bean

Spring MVC工作原理


Spring MVC 原理如下图所示:

  • 流程说明(重要)
    1. 客户端(浏览器)发送请求, DispatcherServlet拦截请求
    2. DispatcherServlet 根据请求信息调用 HandlerMapping 。HandlerMapping 根据 URL 去匹配查找能处理的 Handler(也就是我们平常说的 Controller 控制器) ,并会将请求涉及到的拦截器和 Handler 一起封装。
    3. DispatcherServlet 调用 HandlerAdapter适配器执行 Handler
    4. Handler 完成对用户请求的处理后,会返回一个 ModelAndView 对象给DispatcherServlet,ModelAndView 顾名思义,包含了数据模型以及相应的视图的信息。Model 是返回的数据对象,View 是个逻辑上的 View。
    5. ViewResolver 会根据逻辑 View 查找实际的 View
    6. DispaterServlet 把返回的 Model 传给 View(视图渲染)
    7. View 返回给请求者(浏览器)
相关推荐
Chrikk1 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*1 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue1 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man1 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang
测开小菜鸟1 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity2 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天2 小时前
java的threadlocal为何内存泄漏
java
caridle3 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^3 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋33 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx