面经-常用框架

1.Spring

1.1什么是Spring框架?

Spring 是⼀种轻量级开发框架,旨在提⾼开发⼈员的开发效率以及系统的可维护性。
Spring 的 6 个特征:核⼼技术,测试,数据访问,Web⽀持,集成,语⾔

1.2列举⼀些重要的Spring模块?

Spring Core 基础 , 可以说 Spring 其他所有的功能都需要依赖于该类库。主要提供 IoC
赖注⼊功能。
Spring Aspects : 该模块为与 AspectJ 的集成提供⽀持。
Spring AOP :提供了⾯向切⾯的编程实现。
Spring JDBC : Java 数据库连接。
Spring JMS Java 消息服务。
Spring ORM : ⽤于⽀持 Hibernate ORM ⼯具。
Spring Web : 为创建 Web 应⽤程序提供⽀持。
Spring Test : 提供了对 JUnit TestNG 测试的⽀持

1.3@RestController vs @Controller

Controller 返回⼀个⻚⾯
单独使⽤ @Controller 不加 @ResponseBody 的话⼀般使⽤在要返回⼀个视图的情况,这种情况
属于⽐᫾传统的 Spring MVC 的应⽤,对应于前后端不分离的情况。
@RestController 返回 JSON XML 形式数据
@RestController 只返回对象,对象数据直接以 JSON XML 形式写⼊ HTTP 响应
(Response) 中,这种情况属于 RESTful Web 服务,这也是⽬前⽇常开发所接触的最常⽤的情况
(前后端分离)。
@Controller +@ResponseBody 返回 JSON XML 形式数据
如果你需要在 Spring4 之前开发 RESTful Web 服务的话,你需要使⽤ @Controller 并结
@ResponseBody 注解,也就是说 @Controller + @ResponseBody = @RestController Spring 4
之后新加的注解)。
@ResponseBody将对象转换成JSON 或者XML形式
@ResponseBody 注解的作⽤是将 Controller 的⽅法返回的对象通过适当的转换器转换为指
定的格式之后,写⼊到 HTTP 响应 (Response) 对象的 body 中,通常⽤来返回 JSON 或者
XML 数据,返回 JSON 数据的情况⽐较多。

1.4Spring IOC & AOP

IOC

        IoC( Inverse of Control: 控制反转)是⼀种 设计思想 ,就是 将原本在程序中⼿动创建对象的控制 权,交由 Spring 框架来管理。   IoC 容器是 Spring ⽤来实现 IoC 的载体, IoC 容器实际上就是个 Map key value ,Map 中存放的是各 种对象。
        将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注⼊。 IoC 容器就像是⼀个⼯⼚⼀ 样,当我们需要创建⼀个对象的时候,只需要配置好配置⽂件 / 注解即可,完全不⽤考虑对象是如 何被创建出来的。
AOP
       AOP(Aspect-Oriented Programming:⾯向切⾯编程 ) 能够将那些与业务⽆关, 却为业务模块所共 同调⽤的逻辑或责任(例如事务处理、⽇志管理、权限控制等)封装起来 ,便于 减少系统的重复
代码 降低模块间的耦合度 ,并 有利于未来的可拓展性和可维护性
        Spring AOP就是基于动态代理的 ,如果要代理的对象,实现了某个接⼝,那么 Spring AOP 会使⽤JDK Proxy ,去创建代理对象,⽽对于没有实现接⼝的对象, 这时候 Spring AOP 会使⽤ Cglib ⽣成⼀个被代理对象的⼦类来作为代理

1.5Spring AOP AspectJ AOP 有什么区别?

        Spring AOP 属于运⾏时增强,⽽ AspectJ 是编译时增强。 Spring AOP 基于代理 (Proxying) ,⽽ AspectJ 基于字节码操作 (Bytecode Manipulation)
        Spring AOP 已经集成了 AspectJ AspectJ 应该算的上是 Java ⽣态系统中最完整的 AOP
架了。 AspectJ 相⽐于 Spring AOP 功能更加强⼤,但是 Spring AOP 相对来说更简单,如果我们的切⾯⽐较少,那么两者性能差异不⼤。但是,当切⾯太多的话,最好选择 AspectJ ,它⽐Spring AOP 快很多。

1.6Spring 中的 bean 的作⽤域有哪些?

singleton : 唯⼀ bean 实例, Spring 中的 bean 默认都是单例的。
prototype : 每次请求都会创建⼀个新的 bean 实例。
request : 每⼀次 HTTP 请求都会产⽣⼀个新的 bean ,该 bean 仅在当前 HTTP request 内有
效。
session : 每⼀次 HTTP 请求都会产⽣⼀个新的 bean ,该 bean 仅在当前 HTTP session 内有
效。
global-session : 全局 session 作⽤域,仅仅在基于 portlet web 应⽤中才有意义, Spring5
经没有了。 Portlet 是能够⽣成语义代码 ( 例如: HTML) ⽚段的⼩型 Java Web 插件。它们基于
portlet 容器,可以像 servlet ⼀样处理 HTTP 请求。但是,与 servlet 不同,每个 portlet 都有不
同的会话

1.7Spring 中的单例 bean 的线程安全问题了解吗?

单例 bean 存在线程问题,主要是因为当多个线程操作同⼀个对象的时候,对这个对象的⾮静态成员变量的写操作会存在线程安全问题。
常⻅的有两种解决办法:
1. Bean 对象中尽量避免定义可变的成员变量(不太现实)。
2. 在类中定义⼀个 ThreadLocal 成员变量,将需要的可变成员变量保存在 ThreadLocal 中(推
荐的⼀种⽅式)。

1.8@Component @Bean 的区别是什么?

1. 作⽤对象不同 : @Component 注解作⽤于,⽽ @Bean 注解作⽤于⽅法。
2. @Component 通常是通过类路径扫描来⾃动侦测以及⾃动装配到 Spring 容器中(我们可以使
@ComponentScan 注解定义要扫描的路径从中找出标识了需要装配的类⾃动装配到
Spring bean 容器中)。 @Bean 注解通常是我们在标有该注解的⽅法中定义产⽣这个
bean, @Bean 告诉了 Spring 这是某个类的示例,当我需要⽤它的时候还给我。
3. @Bean 注解⽐ Component 注解的⾃定义性更强,⽽且很多地⽅我们只能通过 @Bean
解来注册 bean 。⽐如当我们引⽤第三⽅库中的类需要装配到 Spring 容器时,则只能通过
@Bean 来实现。

1.9将⼀个类声明为Spring bean 的注解有哪些?

我们⼀般使⽤ @Autowired 注解⾃动装配 bean ,要想把类标识成可⽤于 @Autowired 注解⾃动
装配的 bean 的类 , 采⽤以下注解可实现:
@Component :通⽤的注解,可标注任意类为 Spring 组件。如果⼀个 Bean 不知道属于哪
个层,可以使⽤ @Component 注解标注。
@Repository : 对应持久层即 Dao 层,主要⽤于数据库相关操作。
@Service : 对应服务层,主要涉及⼀些复杂的逻辑,需要⽤到 Dao 层。
@Controller : 对应 Spring MVC 控制层,主要⽤户接受⽤户请求并调⽤ Service 层返回数
据给前端⻚⾯。

1.10Spring 中的 bean ⽣命周期?

Bean 容器找到配置⽂件中 Spring Bean 的定义。
Bean 容器利⽤ Java Reflection API 创建⼀个 Bean 的实例。
如果涉及到⼀些属性值 利⽤ set() ⽅法设置⼀些属性值。
如果 Bean 实现了 BeanNameAware 接⼝,调⽤ setBeanName() ⽅法,传⼊ Bean 的名字。
如果 Bean 实现了 BeanClassLoaderAware 接⼝,调⽤ setBeanClassLoader() ⽅法,传⼊
ClassLoader 对象的实例。
与上⾯的类似,如果实现了其他 *.Aware 接⼝,就调⽤相应的⽅法。
如果有和加载这个 Bean Spring 容器相关的 BeanPostProcessor 对象,执
postProcessBeforeInitialization() ⽅法
如果 Bean 实现了 InitializingBean 接⼝,执⾏ afterPropertiesSet() ⽅法。
如果 Bean 在配置⽂件中的定义包含 init-method 属性,执⾏指定的⽅法。
} 如果有和加载这个 Bean Spring 容器相关的 BeanPostProcessor 对象,执⾏ postProcessAfterInitialization() ⽅法
当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接⼝,执⾏ destroy() ⽅法。
当要销毁 Bean 的时候,如果 Bean 在配置⽂件中的定义包含 destroy-method 属性,执⾏指
定的⽅法。

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

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

相关文章

Ubuntu20.04安装LibTorch并完成高斯溅射环境搭建

0. 简介 最近受到优刻得的使用邀请,正好解决了我在大模型和自动驾驶行业对GPU的使用需求。UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU,按时收费每卡2.6元,月卡只需要1.7元每小时,并附带200G的免费…

接口自动化测试-项目实战

什么是接口自动化测试:使用工具或代码代替人对接口进行测试 测试项目结构(python包) 1、接口api包 2、script:业务脚本 3、data:数据 4、config.py :配置文件 5、reporter:报告 错误问题: 1、未打印任何东西。添加pip ins…

走马灯封装

走马灯功能需求: 支持定时切换;支持左右按钮切换(根据鼠标是否在切换组件内展示和隐藏左右切换按钮);支持底部标识切换; 走马灯 完整代码如下: /*** class 走马灯*/import react, { Compone…

C语言 指针——缓冲区溢出与缓冲区溢出攻击

目录 缓冲区溢出攻击 缓冲区溢出攻击实例 字符串的安全输入方法​编辑 防止缓冲区溢出的两个要点 缓冲区溢出攻击 网络黑客常针对系统和程序自身存在的漏洞,编写相应的攻击程序  对缓冲区溢出漏洞的攻击 —— 最常见  几乎占到了网络攻击次数的一半以上…

Android (已解决)Gradle 编译失败 Unsupported class file major version 61

文章目录 一、报错原因二、解决方法 一、报错原因 新版本的 Android Studio 默认使用的是 Java 17 LTS,而这个历史项目的 Gradle 版本很低,不支持高版本的 Java。 具体原因:Java 17 (major version 61) 编译的 class 文件,如果在…

逆向学习汇编篇:指令的操作

本节课在线学习视频(网盘地址,保存后即可免费观看): ​​https://pan.quark.cn/s/660c759dea95​​ 在逆向工程中,深入理解汇编语言的指令操作是至关重要的。汇编指令是计算机硬件与软件之间的桥梁,它们直…

DevEco Studio有时会多出来.js和.map文件,导致项目不能运行

1、问题 在使用DevEco的时候有时候会出现啥都没干,但是在项目的目录下会自动生成和文件同名的.js和.js.map文件,至于为什么会生成目前我也不知道,如果想要更深了解可以到论坛讨论:华为开发者论坛。生成.js和.js.map文件优…

Terraform基础概念一

Terraform基础概念一 1.Infrastructure-as-Code(IaC)概念1.1 IaC优势1.2 IaC工具1.3 IaC的两种方式 2.Terraform基础概念2.1 Terraform工作原理2.2 Terraform 工作流 3.总结 1.Infrastructure-as-Code(IaC)概念 基础设施即代码(Infrastructure-as-Code,…

SVN 的忽略(Ignore)和递归(Recursively)以及忽略部分

SVN中忽略大家经常用到,但总是似懂非懂,下面就详细展开说明一下忽略如何设置。 两个忽略 通常设置忽略都是文件夹和里面的文件都忽略,通常只需要鼠标右键点击忽略就可以了,如图: 第一个忽略用的最多,就是…

关于GPIO的上拉、下拉,无上下拉

1.GPIO_PULLUP(上拉) 作用和原理 作用:上拉模式会在GPIO引脚和电源电压(Vcc)之间连接一个内部上拉电阻。原理:当引脚配置为输入模式时,如果引脚没有连接到其他外部电路,内部上拉电…

排序算法(C语言版)

前言 排序作为生产环境中常见的需求之一,对整个产品有举足轻重的影响,可以说使用一个合适的排序算法是业务逻辑中比较重要的一部分。今天我们就来介绍常见的排序算法以及实现 排序 所谓排序无非就是按照特定的规则对一组数据就行顺序化。 常见的排序有…

Spring项目报错解读与全部报错详解

你好,我是Qiuner. 为帮助别人少走弯路和记录自己编程学习过程而写博客 这是我的 github https://github.com/Qiuner ⭐️ ​ gitee https://gitee.com/Qiuner 🌹 如果本篇文章帮到了你 不妨点个赞吧~ 我会很高兴的 😄 (^ ~ ^) 想看更多 那就点个关注吧 我…

图像大模型中的注意力和因果掩码

AIM — 图像领域中 LLM 的对应物。尽管 iGPT 已经存在 2 年多了,但自回归尚未得到充分探索。在本文中,作者表明,当使用 AIM 对网络进行预训练时,一组图像数据集上的下游任务的平均准确率会随着数据和参数的增加而线性增加。 要运…

uniApp获取实时定位

通过你获取的key放到项目manifest.json里面&#xff0c;对应填写你所需要的key值&#xff0c;还有高德用户名 用户名&#xff1a; key值的位置&#xff1a; 代码&#xff1a; html: <view class"intList pdNone"><view class"label">详细地…

[Cocos Creator] v3.8开发知识点记录(持续更新)

问题&#xff1a;从 cc 里找不到宏定义 CC_PREVIEW 等。 解决方案&#xff1a;找不到就自己定义&#xff0c;将 declare const CC_PREVIEW; 添加到需要的ts文件里。参考&#xff1a;creator3d 找不到宏定义如 CC_EDITOR&#xff0c;CC_PREVIEW&#xff0c;CC_JSB - Creator 3.x…

爬虫:爬取知乎热榜一级评论及回答2024不包含翻页

一、先上结果&#xff08;注:本文仅为兴趣爱好探究&#xff0c;请勿进行商业利用或非法研究&#xff0c;负责后果自负&#xff0c;与作者无关&#xff09; 1、爬标题及其具体内容 2、抓标题下的对应回答 3、爬取对应一级评论 二、上流程 1、获取cookies&#xff08;相信哥哥姐姐…

静心冥想训练入门|流静

在喧嚣的都市中&#xff0c;我们时常被琐事所困&#xff0c;心灵难以得到片刻的宁静。然而&#xff0c;静心冥想训练如同一扇通往内心宁静的门户&#xff0c;引领我们踏上一段静谧的旅程。 静心冥想&#xff0c;并非遥不可及的高深技艺&#xff0c;而是每个人都能掌握的心灵修炼…

优思学院|「按计划推动型」与「需求拉动型」的生产模式

针对生产架构做对比分类的用语&#xff0c;主要有按计划推进型与需求拉动型。 「按计划推动型」与「需求拉动型」两者乃是生产架构上常使用、成对比的两个用语。不过&#xff0c;有时不只用来指单纯的生产现场架构&#xff0c;也有人把它应用在更广泛的生产架构设计上。 按计划…

【yolov8系列】ubuntu上yolov8的开启训练的简单记录

前言 yolov8的广泛使用&#xff0c;拉取yolov8源码工程&#xff0c;然后配置环境后直接运行&#xff0c;初步验证自己数据的检测效果&#xff0c;在数据集准备OK的情况下 需要信手拈来&#xff0c;以保证开发过程的高效进行。 本篇博客更注意为了方便自己使用时参考。顺便也记录…

每日一题——力扣144. 二叉树的前序遍历(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法&#xff1a; 代码结构 时间复杂度 空间复杂度 总结 我要更强 代码说明 …