Java后端每日面试题(day1)

目录

  • JavaWeb三大组件
  • 依赖注入的方式
  • @Autowire和@Resurce有什么区别?
  • Spring Boot的优点
  • Spring IoC是什么?
  • 说说Spring Aop的优点
  • @Component和@Bean的区别
  • 自定义注解时使用的RetentionPolicy枚举类有哪些值?
  • 如何理解Spring的SPI机制?
  • Spring Boot自动装配原理
  • Spring MVC工作原理

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自动装配如下图所示:
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 返回给请求者(浏览器)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/369249.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初阶数据结构二叉树练习系列(1)

这个系列的文章将带大家一起刷题,并且总结思路 温馨提示:本篇文章里的练习题仅适合刚学完二叉树的小白使用 相同的树 思路 情况分析:第一种情况:两棵树都为空 → 返回true 第二种情况&am…

七、MyBatis-Plus高级用法:最优化持久层开发-个人版

七、MyBatis-Plus高级用法:最优化持久层开发 目录 文章目录 七、MyBatis-Plus高级用法:最优化持久层开发目录 一、MyBatis-Plus快速入门1.1 简介1.2 快速入门回顾复习 二、MyBatis-Plus核心功能2.1 基于Mapper接口CRUDInsert方法Delete方法Update方法Se…

Elasticsearch中的post_filter后置过滤器技术

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

数据结构笔记第3篇:双向链表

1、双向链表的结构 注意:这里的 "带头" 跟前面我们说的 "头结点" 是两个概念,实际前面的在单链表阶段称呼不严谨,但是为了同学们更好的理解就直接称为单链表的头结点。 带头链表里的头结点,实际为 "哨兵…

数字IC设计-VCS和Verdi的使用

#学习记录# 前言:本文以一个简单的计数器来说明vcs和verdi的使用 1 代码文件 1.1 计数器代码 //Engineer:Mr-pn-junction module counter(input clk,input rst,output reg [5:0] count); always(posedge clk or negedge rst)beginif(!rst)coun…

自研直播系统-直播系统实战

文章目录 1 流媒体基础本文教程下载地址1.1 流媒体1.2 流式传输方式1.2.1 顺序流式传输1.2.2 实时流式传输 1.3 流媒体传输协议1.3.1 rtmp协议1.3.2 HLS协议1.3.3 RTSP协议1.3.4 视频流的对比 1.4 视频编码(codec)1.5 分辨率的规范分辨率簡介:1.5.2 分辨率單位 1.6 …

递归(三)—— 初识暴力递归之“字符串的全部子序列”

题目1 : 打印一个字符串的全部子序列 题目分析: 解法1:非递归方法 我们通过一个实例来理解题意,假设字符串str “abc”,那么它的子序列都有那些呢?" ", “a”, “b”,…

零基础STM32单片机编程入门(七)定时器PWM波输出实战含源码视频

文章目录 一.概要二.PWM产生框架图三.CubeMX配置一个TIME输出1KHZ,占空比50%PWM波例程1.硬件准备2.创建工程3.测量波形结果 四.CubeMX工程源代码下载五.讲解视频链接地址六.小结 一.概要 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写&…

「ETL趋势」FDL定时任务区分开发/生产模式、API输入输出支持自定义响应解析

FineDataLink作为一款市场上的顶尖ETL工具,集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具,进行了新的维护迭代。本文把FDL4.1.7最新功能作了介绍,方便大家对比:(产品更新详情:…

leetcode--二叉树中的最长交错路径

leetcode地址:二叉树中的最长交错路径 给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下: 选择二叉树中 任意 节点和一个方向(左或者右)。 如果前进方向为右,那么移动到当前节点的的右子节点&…

Redis 中的通用命令(命令的返回值、复杂度、注意事项及操作演示)

Redis 中的通用命令(高频率操作) 文章目录 Redis 中的通用命令(高频率操作)Redis 的数据类型redis-cli 命令Keys 命令Exists 命令Expire 命令Ttl 命令Type命令 Redis 的数据类型 Redis 支持多种数据类型,整体来说,Redis 是一个键值对结构的,…

智能光伏开发都能用到什么软件和工具?

随着全球对可再生能源的日益重视和光伏技术的快速发展,智能光伏开发已成为推动能源转型的重要力量。在光伏项目的全生命周期中,从设计、建设到运营管理,各种软件和工具的应用发挥着至关重要的作用。 一、光伏系统设计软件 1、PVsyst PVsyst…

【ECCV 2024】首个跨模态步态识别框架:Camera-LiDAR Cross-modality Gait Recognition

【ECCV 2024】首个跨模态步态识别框架:Camera-LiDAR Cross-modality Gait Recognition 简介:主要方法:实验结果: 论文:https://arxiv.org/abs/2407.02038 简介: 步态识别是一种重要的生物特征识别技术。基…

16_更快的速度与精度:Faster R-CNN

回顾R-CNN:链接 回顾Fast R-CNN:链接 1.1 简介 Faster R-CNN是作者Ross Girshick继Fast R-CNN后的又一力作。同样使用VGG16作推理速度在GPU上达到5fps(包括候选区域的生成),准确率为网络的backbone,也有进一步的提升。在2015年的ILSVRC以及COCO竞赛中…

狂赚三个亿,百亿医用耗材上市公司重金押注老人轮椅

布局海外市场,轮椅销量翻两番 作者 | 艾米莉 排版 | 张思琪 抛砖引玉 1.年销售60万台轮椅,英科医疗如何做到? 2.老年人轮椅是出海,还是深耕国内市场? 3.2022年全球轮椅市场规模为48亿美元,谁在喝汤&…

一文讲解Docker入门到精通

一、引入 1、什么是虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,它允许在一台物理机上创建多个独立的虚拟环境,这些环境被称为虚拟机(VM)。每个虚拟机都可以…

Node.js的下载、安装和配置

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

vue 组件el-tree添加结构指示线条

效果展示: 注意&#xff1a;组件中需要添加:indent"0" 进行子级缩进处理&#xff0c;否则会出现子级缩进逐级递增 :expand-on-click-node"false" 设置点击箭头图标才会展开或者收起 代码&#xff1a; <el-tree class"tree filter-tree" :da…

【解码现代 C++】:实现自己的智能 【String 类】

目录 1. 经典的String类问题 1.1 构造函数 小李的理解 1.2 析构函数 小李的理解 1.3 测试函数 小李的理解 1.4 需要记住的知识点 2. 浅拷贝 2.1 什么是浅拷贝 小李的理解 2.2 需要记住的知识点 3. 深拷贝 3.1 传统版写法的String类 3.1.1 拷贝构造函数 小李的理…

入门PHP就来我这(纯干货)08

~~~~ 有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 ~~~~ 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 1 PHP对象的高级应用 1.1 final关键字 final 最终的、最后的。被final修饰过的类…