Java SSM框架面试题

news2024/11/17 21:26:46

sql 中 ${} 和 #{}的区别:

  1. #将传入的参数都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #{age},如果传入的值是18,那么解析成sql时的值为order by “18”, 如果传入 age ,则会解析为 order by “age”
  2. 将传入的参数直接显示生成在sql中,被当成一个对象。如:orderby{age},如果传入的值是18,那么解析成sql时的值为order by 18, 如果传入的值是age,则解析成的sql为order by age
  3. #方式底层采用预编译方式PreparedStatement,能够很大程度防止sql注入;$方式底层只是Statement,无法防止Sql注入。
  4. $方式一般用于传入数据库对象,例如传入表名.
  5. 一般能用#的就别用注意点:MyBatis排序时使用orderby动态参数时需要注意,用而不是#

Spring MVC 的运行流程:

  1. 用户发起请求到前端控制器(DispatcherServlet),该控制器会过滤出哪些请求可以访问Servlet、哪些不能访问。就是url-pattern的作用,并且会加载springmvc.xml配置文件。
  2. 前端控制器会找到处理器映射器(HandlerMapping),通过HandlerMapping完成url到controller映射的组件,简单来说,就是将在springmvc.xml中配置的或者注解的url与对应的处理类找到并进行存储,用map<url,handler>这样的方式来存储。
  3. HandlerMapping有了映射关系,并且找到url对应的处理器,HandlerMapping就会将其处理器(Handler)返回,在返回前,会加上很多拦截器。
  4. DispatcherServlet拿到Handler后,找到HandlerAdapter(处理器适配器),通过它来访问处理器,并执行处理器。
  5. 执行处理器
  6. 处理器会返回一个ModelAndView对象给HandlerAdapter
  7. 通过HandlerAdapter将ModelAndView对象返回给前端控制器(DispatcherServlet)
  8. 前端控制器请求视图解析器(ViewResolver)去进行视图解析,根据逻辑视图名解析成真正的视图(jsp),其实就是将ModelAndView对象中存放视图的名称进行查找,找到对应的页面形成视图对象
  9. 返回视图对象到前端控制器。
  10. 视图渲染,就是将ModelAndView对象中的数据放到request域中,用来让页面加载数据的。
  11. 通过第8步,通过名称找到了对应的页面,通过第10步,request域中有了所需要的数据,那么就能够进行视图渲染了。最后将其返回即可。

Spring MVC 常用的 5 个注解:

@Controller:@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。

@RequestMapping :@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。用于方法上,方法的返回值会通过视图解析器解析为实际的物理视图。

@RequestParam:@RequestParam用于将请求参数区数据映射到功能处理方法的参数上,用例:

@Resource和@Autowired:都是做bean的注入时使用

  共同点:两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

  不同点:

@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:

public class HelloWorld{ 
  @Autowired 
  @Qualifier("userDao") 
  private UserDao userDao; 
}

复制

   @Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

注意:最好是将@Resource放在setter方法上,因为这样更符合面向对象的思想,通过set、get去操作属性,而不是直接去操作属性。

IOC,AOP的实现原理:

IOC:控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;第二层是 依赖注入 (DI)

DI:依赖注入,将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系,调用setter方法来注入(反射的话太消耗性能)。他们的依赖关系只在使用的时候才建立。简单来说就是不需要总是NEW一个对象了,只需要一个或多个对象(由你定义的策略决定,一般是单例),统一由容器进行管理。

AOP:面向切面,是一种编程思想,是对OOP面向对象的补充和完善。将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。这个简单来说就是可以在一段程序之前或者之后做一些事。 实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行(jdk动态代理:必须至少实现一个接口,底层利用反射机制,效率较低;cglib动态代理:原理是使用ASM字节码技术对指定的业务类生成一个子类,并覆盖业务方法实现代理,采用继承的方式,所以不能对final修改的类进行代理);二是采用静态代理的方式,在代码中显示地实现一个业务实现类的指定代理,在代理类中对同名的业务方法进行包装(不修改原有的业务代码),用户通过代理类调用被包装过的业务方法,但会导致代码冗余。目前这几种代理方式并没有高低之分,只是应用的场景不同。

Spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题。使代码重用度高、易于维护。 AOP和IOC并不是spring中特有的,只是spring把他们应用的更灵活方便。

Spring DI 常用的三种方式:

常用的注入方式主要有三种:构造方法注入,setter注入,接口注入。

 

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

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

相关文章

6.S081——Lab4——trap lab

0.briefly speaking 这是MIT 6.S081 Fall 2021课程的第四个实验&#xff0c;它是有关陷阱机制的一系列小问题&#xff0c;如果对陷阱机制仍有疑问&#xff0c;可以参考我之前写的其他3篇博客&#xff0c;它们很好地解释了一些背景知识&#xff1a; 用户态陷阱(以系统调用为例…

oracle 19c 部署

安装前的基础环境和用户配置等参考rac部署篇oracle rac部署 一、资源准备 将数据库软件上传解压到oracle的家目录(注意解压后的用户属组) [oraclerac1 ~]$ unzip -d $ORACLE_HOME xxxx.zip 二、在xmanager或者vnc中执行安装 [oraclerac1 db_1]$ ./runInstaller 先安装一个数据…

SSM 框架常见面试题

1 Spring面试题 1、Spring 在ssm中起什么作用&#xff1f; Spring&#xff1a;轻量级框架 作用&#xff1a;Bean工厂&#xff0c;用来管理Bean的生命周期和框架集成。 两大核心&#xff1a;1、IOC/DI(控制反转/依赖注入) &#xff1a;把dao依赖注入到service层&#xff0c;ser…

5.3、Dockerfile内命令

【docker】CMD ENTRYPOINT 区别 终极解读&#xff01;_绝世好阿狸的博客-CSDN博客 0、上下文路径 $ docker build -t nginx:v3 . # . 是上下文路径&#xff0c;那么什么是上下文路径呢&#xff1f; 上下文路径&#xff1a;指docker在构建镜像时想使用本机的文件&#xff0c;…

缓冲区溢出与防护

目录 一、初识缓冲区溢出 1.1 缓冲区溢出概念 1.2 缓存区 1.3 缓存区溢出的危害 1.4 缓存区溢出事件 二、缓存区溢出攻击 2.1 溢出原理 2.2 典型的寄存器 三、缓存区溢出防御 3.1 缓冲区溢出攻击目标 3.2 缓冲区溢出条件 3.3 缓冲区溢出防范 3.3.1 程序设计过程中…

【后端开发】狂神笔记:Redis进阶

文章目录 1 Redis事务1.1 Redis事务简介1.2 Redis事务操作过程1.2.1 开启事务--->执行事务1.2.2 取消事务(discurd) 1.3 事务错误1.3.1 编译期异常1.3.2 运行时异常 2 Redis实现乐观锁2.1 乐观锁和悲观锁2.2 正常执行2.3 测试异常执行 3 Jedis3.1 导入依赖3.2 编码测试3.2.1…

青翼科技自研模块化互联产品 • 模拟采集FMC子卡【产品资料】

FMC122是一款基于FMC标准规范&#xff0c;实现2路16-bit、1GSPS ADC同步采集&#xff0c;2路16-bit 2.5GSPS DAC同步回放功能子卡模块。该模块遵循VITA57.1标准&#xff0c;可直接与FPGA载卡配合使用&#xff0c;板卡ADC器件采用TI的ADS54J60芯片&#xff0c;该芯片具有两个模拟…

EasyExcel实现execl导入导出

引言 在实际开发中&#xff0c;处理 Excel 文件是一个常见的需求。EasyExcel 是一个基于 Java 的开源库&#xff0c;提供了简单易用的 API&#xff0c;可以方便地读取和写入 Excel 文件。本文将介绍如何使用 EasyExcel 实现 Excel 导入功能&#xff0c;以及一些相关的技巧和注…

java的线程池

一、线程池概念 若不使用线程池&#xff0c;在新创建的线程start()后执行完run()就自动销毁了&#xff0c;造成了资源的浪费。使用线程池可以暂时存储线程。 线程池的主要核心原理&#xff1a; 线程池的代码实现&#xff1a; 注意&#xff1a;在实际开发中线程池并不会关闭&a…

【MySQL】一文带你了解排序检索数据

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集&#xff01; &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指…

经典电路分析——看看大佬设计或代代人改进的作品——欢迎批评指正

1、TTL反相器 1&#xff09;输入0.3v a)T1&#xff0c;T2&#xff0c;T4 先分析T1的工作状态&#xff1a;计算ube1和uce1 ube1大于开启电压&#xff0c;所以ube10.7v。 因为T2&#xff0c;T4要想导通&#xff0c;V1b上需要有打通三个PN结的能力&#xff0c;也就是说V1b3*0.…

【UE 从零开始制作坦克】3-履带移动效果

目录 一、设置转向灵敏度 二、原地掉头 三、履带移动效果 效果 一、设置转向灵敏度 为了解决坦克转向灵敏度过高的问题&#xff0c;我们首先打开“TankZongLei”蓝图 选中“载具移动&#xff08;MovementComp&#xff09;&#xff08;继承&#xff09;”将转向输入率中的上…

数据结构图解--队列 的实现/算法+源码

图解--队列 最终的效果接下来 我们要做的就是 使用编程实现这种意识形态下的结构创建队列结构体初始化init进队入队 尾部插入队列的判断满操作出队队列是否为空遍历队列代码的操作交互意识 最终的效果 1.队列的结构形式 队列是一种线性结构 但是特殊的线性结构 只要的特殊在于…

【炫酷登录界面】详解5款高级的前端登录页面及实现源码(附完整源码)

【写在前面】 其实好早之前我就想写这篇文章了&#xff0c;也有些网友还会私信我&#xff0c;说有时候公司要求登录页面的改造&#xff0c;问我能不能出一期关于登录页的文章&#xff0c;于是乎我也是拖到这个时候才整理出来&#xff0c;其实每篇文章的效果内容我都是自己亲自去…

基于51单片机设计的花样流水灯设计

一、项目介绍 花样流水灯是一种常见的LED灯效果,被广泛应用于舞台表演、节日庆典、晚会演出等场合。在现代智能家居、电子产品中,花样流水灯也被广泛使用,通过调整亮灭顺序和时间,可以实现各种炫酷的灯光效果,增强用户体验。而51单片机作为一种常见的嵌入式开发平台,具有…

深搜-剪枝优化

目录 1.问题引入 2.知识讲解 【搜索术语】 &#xff08;1&#xff09; *可行性剪枝*&#xff1a; &#xff08;2&#xff09; *预处理剪枝*&#xff1a; &#xff08;3&#xff09; *重复性剪枝*&#xff1a; &#xff08;4&#xff09; *最优性剪枝*&#xff1a; &…

动态规划IV (118、119、198、213、337)

CP118 杨辉三角 题目描述&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 学习记录&#xff1a; 思想就是没有思想&#xff0c;的杨辉三角&#xff0c;但是注意resiz…

AUTOSAR MCAL之SPI(Specification of SPI Handler/Driver)

本文将详细介绍AUTOSAR MCAL SPI模块的知识点及注意事项&#xff0c;本模块的配置会在其他文章进行分享。本文大部分内容来源于标准&#xff0c;并参照了NXP S32K1系列的 MCAL SPI的代码。 耐心看完本文后&#xff0c;你就对AUTOSAR MCAL SPI有了非常深入的了解。 目录 1. 模…

在githhub上创建个人主页的方法【2023更新版】

01-进入github的网站&#xff0c;链接 https://github.com/ &#xff0c;然后注册&#xff0c;登陆&#xff0c;注意登陆时设置的用户名(username)就是将来你个人主页的三级域名&#xff0c;所以这里一定要慎重填写username。如下图所示&#xff1a; 02-注册完成后进入个人主…

【备战秋招】每日一题:5月13日美团春招第四题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检&#xff0c;为了更好的阅读体检&#xff0c;&#xff0c;可以查看我的算法学习博客第四题-沙堡 在线评测链接:P1289 题目描述 塔子哥在海边建了一个沙堡乐园。 里面有一个巨大的沙堡&#xff0c;塔子哥每年都会增加这个沙堡的层数&#xff0c;但也有一定…