Java面试题(Spring篇)

news2024/12/28 4:08:15

在这里插入图片描述
在这里插入图片描述

💟💟前言

友友们大家好,我是你们的小王同学😗😗
今天给大家打来的是 Java面试题(Spring篇)
希望能给大家带来有用的知识
觉得小王写的不错的话麻烦动动小手 点赞👍 收藏⭐ 评论📄
小王的主页:小王同学🚗
小王的gitee:小王同学🏩🏩
小王的github:小王同学💦

Spring是什么?

轻量级开发框架,为java提供了基础架构支持,简化了企业级应用开发,让开发者只需要关注业务逻辑。

Spring框架常用模式

单例模式、代理模式、模板方法、观察者模式、工厂模式、适配器模式

spring的设计核心是什么

IOC和AOP

bean-的作用域有哪些

Spring 中 Bean 的作用域通常有下面几种:

  • singleton(单例模式) : IoC 容器中只有唯一的 bean 实例。Spring 中的 bean 默认都是单例的,是对单例设计模式的应用。
  • prototype(原型模式): 每次获取都会创建一个新的 bean 实例。也就是说,连续 getBean() 两次,得到的是不同的 Bean 实例。
  • request(请求作用域)(仅 Web 应用可用): 每一次 HTTP 请求都会产生一个新的 bean(请求 bean),该 bean 仅在当前 HTTP request 内有效。
  • session (会话作用域)(仅 Web 应用可用) : 每一次来自新 session 的 HTTP 请求都会产生一个新的 bean(会话 bean),该 bean 仅在当前 HTTP session 内有效。
  • application/global-session (仅 Web 应用可用):每个 Web 应用在启动时创建一个 Bean(应用 Bean),该 bean 仅在当前应用启动时间内有效。
  • websocket (仅 Web 应用可用):每一次 WebSocket 会话产生一个新的 bean。

Spring中bean的注入方式

1.构造器注入

2.setter注入

3.接口注入

BeanFactory 和 ApplicationContext有什么区别?

是spring的核心接口,都可以作为容器,ApplicationContext是BeanFactory的子接口。
BeanFactory: 是spring最底层的接口,包含各种Bean的定义和Bean的管理。
ApplicationContext: 作为BeanFactory的派生,除了有BeanFactory的功能以外,还提供了更多的功能、

区别:
① BeanFactroy采用的是延迟加载形式来注入Bean的,使用到bean才会加载。ApplicationContext一次性加载所有bean。
② BeanFactory需要手动注册,而ApplicationContext则是自动注册。
③ BeanFactory不支持国际化,ApplicationContext支持国际化(实现MessageSource接口)。

spring中单例Bean是线程安全的吗?

不是,因为所有线程共享一个单例Bean,存在资源的竞争所以是线程不安全的,实际上大部分时间Bean是无状态的,所以说在某种程度上来说Bean其实是安全的。如果是有状态,那就需要开发人员修改bean的作用域。singleton改为prototype。

ioc,aop是什么讲一讲

什么是ioc

IoC (Inversion of control )控制反转/反转控制。它是一种思想不是一个技术实现。描述的是:Java 开发领域对象的创建以及管理的问题。

为什么叫控制反转

控制:指的是对象创建(实例化、管理)的权力

反转 :控制权交给外部环境(Spring 框架、IoC 容器)

IOC(Inverse of Control:控制反转)是一种设计思想 或者说是某种模式。这个设计思想就是 将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。 IOC 在其他语言中也有应用,并非 Spring 特有。IOC 容器是 Spring 用来实现 IoC 的载体, IOC 容器实际上就是个 Map(key,value),Map 中存放的是各种对象。

什么是AOP

AOP:Aspect oriented programming 面向切面编程,AOP 是 OOP(面向对象编程)的一种延续。

  • AOP 主要用来解决:在不改变原有业务逻辑的情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复
AOP 为什么叫面向切面编程
  • 切 :指的是横切逻辑,原有业务逻辑代码不动,只能操作横切逻辑代码,所以面向横切逻辑
  • 面 :横切逻辑代码往往要影响的是很多个方法,每个方法如同一个点,多个点构成一个面。这里有一个面的概念

spring中bean的生命周期

bean: 是由 Spring IoC 容器实例化、组装和管理的对象。
正常情况: 当bean不在被使用,就会被回收。
单例模式: spring中bean的生命周期分为:实例化Bean->Bean属性填充->初始化Bean->销毁Bean。
多例模式: spring无法进行管理,所以将生命周期交给用户控制。

bean的自动装配

spring会在上下文中自动寻找,并自动给bean装配属性。之前属性需要我们手动注入。

spring用到了那些设计模式

工厂模式: beanFactory就用到了简单工厂模式。
单例模式: Bean默认为单例模式。
代理模式: AOP用到了JDK的动态代理模式。
模板模式: 减少代码冗余,Jdbc模板等。
观察者模式: 定义对象间的一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。spring监听器的实现就用了观察者模式。

spring的常用注解

@Component(任何层)、@Controller(表现层)、@Service(逻辑层)、@Repository(持久层): 被修饰的类,会被spring扫描到并注入到bean容器中(实例化对象)。
@Scope: 设置spring的作用域。
@Bean: 用于将方法返回值对象放入容器。
@Import: 在一个配置类中导入其它配置类的内容。
@AutoWired: 按照类型匹配注入。
@Qualifier: 和AutoWired联合使用,在按照类型匹配的基础上,在按照名称匹配。
@Resource: 按照名称匹配依赖注入。
@Configuration: 被此注解标注的类,会被 Spring 认为是配置类。
@ComponentScan: 用于对组件(Component)进行扫描。
@Transactional: 可以用于类和方法上,具有事务管理的功能
@Value: 将外部的值动态注入到 Bean 中。
       @Value(“${}”):可以获取配置文件的值。
        @Value(“#{}”):表示SpEl(Spring Expression Language是Spring表达式语言,可以在运行时查询和操作数据。)表达式通常用来获取 bean 的属性,或者调用 bean 的某个方法。

spring 事务实现方式有哪些?

编程式: beginTransaction()、commit()、rollback()等事务管理相关的方法,灵活度高,但是维护性差。
声明式: 利用注解或者xml配置,将业务和事务分离出来。

spring事务的实现方式和实现原理

spring事务就是对数据库事务的支持,没有数据库的事务支持,spring是无法提供事务
功能的。

说一下 spring 的事务隔离?

五大隔离级别。
ISOLATION_DEFAULT: 默认值,使用数据库的隔离级别。
ISOLATION_READ_UNCOMMITTED: 读未提交。
ISOLATION_READ_COMMITTED: 读已提交。
ISOLATION_REPEATABLE_READ: 可重复读。
ISOLATION_SERIALIZABLE: 序列化。

spring事务的传播行为

REQUIRED(默认):默认事务传播行为,存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。
REQUIRE_NEW:它不管是否存在事务,它都会新开启一个事务来执行,新老事务相互独立的,外部事务抛出异常,并不会影响内部事务的一个正常提交。
NESTED:如果当前存在事务,就嵌套当前事务中去执行,如果当前没有事务,那么就新建一个事务,类似 REQUIRE_NEW这个样一个传播行为。
SUPPORTS:表示支持当前当前的事务,如果当前不存在事务,就以非事务的方式去执行。
NOT_SUPPORT: 总是非事务地执行,并挂起任何存在的事务。
MANDATORY:如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
NEVER:就是以非事务的方式来执行,如果存在事务则抛出一个异常。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hive SQL必刷练习题:日期交叉问题(两种思路)

思路一: ​ 首先想到的是借助炸裂函数,一行变成多行,就可以进行去重操作,然后再统计日期。 用到炸裂函数,就首先需要可以拿到起始和终止日期差大小的数组,然后再炸裂​ 那这个指定长度数组怎么获取呢&…

STM32初识3

中断和事件 什么是中断? 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的 程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。 什么是EXTI? …

外包干了1个月,技术明显进步。。。

我是一名大专生,自19年通过校招进入湖南某软件公司以来,便扎根于功能测试岗位,一晃便是近四年的光阴。今年8月,我如梦初醒,意识到长时间待在舒适的环境中,已让我变得不思进取,技术停滞不前。更令…

Docker实现在线代码运行平台-源码分析

一、背景 也许大家平时会有用到一些在线代码运行的网址, 方便我们做一些语法测试或者学习。 例如执行Python代码、Java代码、Shell代码等等, 有时候自己本地环境不具备的时候做一些简单的脚本测试还是蛮实用和方便的。 例如这个在线运行的代码站点: https://r.xjq.icu/ 但是你…

ORB-SLAM2安装和运行教程

前言 默认已经安装了cmake、git 、gcc 和g 更新apt库,更新软件列表 sudo apt-get update版本 以下库均可以通过apt-get方式安装,但是非常不建议这样做,版本不同,最后会报很多错,强烈建议源码安装!!&…

LeetCode 17 / 100

目录 普通数组最大子数组和合并区间轮转数组除自身以外数组的乘积缺失的第一个正数 LeetCode 53. 最大子数组和 LeetCode 56. 合并区间 LeetCode 189. 轮转数组 LeetCode 238. 除自身以外数组的乘积 LeetCode 41. 缺失的第一个正数 普通数组 最大子数组和 给你一个整数数组 …

练习 9 Web [SUCTF 2019]CheckIn (未拿到flag)

上传图片格式的木马文件&#xff1a; 返回 <? in contents!,存在PHP代码检测 上传非图片格式文件&#xff1a; 返回 不允许非image 修改木马PHP代码规避检测 <? ?> 改为 < script language“php”>< /script ><?php eval($_POST[shell]);?>…

多模态大语言模型的 (R) 演变:调查

目录 1. Introduction2. 赋予LLMs多模态能力2.1 大型语言模型2.2 视觉编码器2.3 视觉到语言适配器2.4 多模式训练 3. 使用 MLLM 处理视觉任务 连接文本和视觉模式在生成智能中起着至关重要的作用。因此&#xff0c;受大型语言模型成功的启发&#xff0c;大量研究工作致力于多模…

206.翻转链表

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a; 输入&#xff1a;head [] 输…

仿牛客网开发笔记

用到Spring的 一些 核心技术 Spring Framework Spring Core IOC 、AOP > 管理对象的一种思想 IOC > 面向对象的管理思想 AOP > 面向切面的管理思想Spring Data Access 》访问数据库的功能 Transaction、Spring MyBatis Transaction 》管理事务Spring MyBat…

Offer必备算法16_字符串_四道力扣题详解(由易到难)

目录 ①力扣14. 最长公共前缀 解析代码1&#xff08;两两比较&#xff09; 解析代码2&#xff08;统一比较&#xff09; ②力扣5. 最长回文子串 解析代码&#xff08;中心拓展&#xff09; ③力扣67. 二进制求和 解析代码 ④力扣43. 字符串相乘 解析代码&#xff08;无…

Kotlin runBlocking CoroutineScope synchronized简单死锁场景

Kotlin runBlocking CoroutineScope synchronized简单死锁场景 import kotlinx.coroutines.*fun main(args: Array<String>) {runBlocking {val lock1 Any()val lock2 Any()CoroutineScope(Dispatchers.IO).launch {repeat(10) {println("A-$it 申请 lock1...&quo…

【linux】环境基础|开发工具|gcc|yum|vim|gdb|make|git

目录 ​编辑 Linux 软件包管理器 yum 软件包: 操作&#xff1a; 拓展&#xff1a;lrzsz简介 Linux开发工具 Linux编辑器-vim使用 vim 的基本概念 命令模式 插入模式 底行模式 vim 命令模式的操作指令 vim 底行模式的操作命令 Linux编译器-gcc/g使用 功能 格…

Java学习六—面向对象

一、关于面向对象 1.1简介 Java 是一种面向对象编程语言&#xff0c;其核心思想是面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;。 面向对象编程是一种程序设计范式&#xff0c;它将数据与操作数据的方法&#xff08;函数&#xff09;捆…

有了std::thread,为什么还需要引入std::jthread?

C进阶专栏&#xff1a;http://t.csdnimg.cn/HGkeZ 目录 1.前言 2.std::is_invocable_v 3.std::jthread 3.1.构造函数 3.2.std::jthread无需join/detach使用实例 3.3.std::jthread处理外部请求中断实 3.4.处理中断请求示例代码 4.特性 5.总结 1.前言 C11以来提供了C原…

蓝桥杯刷题(十二)

1.答疑 代码 n int(input()) L [] for i in range(n):a,b,c map(int,input().split())A ab # 进入和答疑时间B abc # 个人总用时L.append([A,B]) L.sort(keylambda x:x[1]) # 个人总用时短的优先 ans tmp 0 # ans为发消息时刻&#xff0c;tmp为前一个人的总用时 for i …

【位运算】【 数学】【 哈希映射】2857. 统计距离为 k 的点对

本文涉及知识点 位运算 数学 哈希映射 LeetCode 2857. 统计距离为 k 的点对 给你一个 二维 整数数组 coordinates 和一个整数 k &#xff0c;其中 coordinates[i] [xi, yi] 是第 i 个点在二维平面里的坐标。 我们定义两个点 (x1, y1) 和 (x2, y2) 的 距离 为 (x1 XOR x2) …

数学建模-邢台学院

文章目录 1、随机抽取的号码在总体的排序2、两端间隔对称模型 1、随机抽取的号码在总体的排序 10个号码从小到大重新排列 [ x 0 , x ] [x_0, x] [x0​,x] 区间内全部整数值 ~ 总体 x 1 , x 2 , … , x 10 总体的一个样本 x_1, x_2, … , x_{10} ~ 总体的一个样本 x1​,x2​,……

【Leetcode每日一题】 递归 - 反转链表(难度⭐)(36)

1. 题目解析 题目链接&#xff1a;206. 反转链表 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 一、递归函数的核心任务 递归函数的主要职责是接受一个链表的头指针&#xff0c;并返回该链表逆序后的新头结点。递归…

两台电脑简单的通信过程详解(局域网,同网段)

来源&#xff1a; https://www.bilibili.com/video/BV1BA411373b/ 一、原理 描述过程&#xff1a;分别以PC1、PC2、PC2、PC1的角度 二、eNSP测试 1.连接设备 2.查看PC1情况 3.打开抓包后&#xff0c;再ping一下PC2 4.PC1发送ARP报文 broadcast 意思为广播(IP都是f,意为255…