SSM框架笔试题(2)

本文围绕MyBatis和Spring框架展开,对比了MyBatis与JDBC,阐述其好处;介绍Spring的AOP、@ResponseBody注解、SpringMVC执行流程;说明了MyBatis中#{}和${}区别、@Param注解用法等;还提及SSM框架注解配置事务、session和cookie区别及Spring Bean生命周期和作用域等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 对比jdbc请简述Mybatis框架的好处有哪些?
  1. 原先使用jdbc时
    (1)每次CRUD都要写那六大步骤,太冗余了。
    (2)频繁连接,释放数据库资源,降低系统性能
    (3)SQL语句硬编码,难以维护(sql都写到.java里了)
    (4)参数和占位符对应问题
    (5)结果集解析复杂,列名硬编码
  2. mybatis框架
    是一个优秀的持久层(dao)框架,对JDBC进行了封装,使得开发者只需要关注Sql语句(业务)本身即可,无需开发者处理加载驱动、获取连接、创建Statement等繁琐的过程, 实现了ORM思想。
2. 简述Spring的AOP,并说明其应用场景有哪些?

AOP:面向切面编程,它是一种编程思想,一种设计理念,运用AOP编程思想,可以提高代码的可重用性,使编码更加简洁,更易于维护。
简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有方法进行增强。

应用场景:事务传播和日志、统计方法等。

3. 介绍一下@ResponseBody注解

@ResponseBody是spring.web包下的一个注释,其主要作用是再返回数据的时候将对象转化为json格式返回,主要适用于前端ajax请求。

@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。

注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。

4. 简述SpringMVC执行流程
  • 第一步:用户发送请求至前端控制器DispatcherServlet
  • 第二步:DispatcherServlet收到请求调用HandlerMapping处理器映射器
  • 第三步:处理器映射器根据请求Url找到,具体的Handler(后端控制器),生成处理器对象及处理器拦截器(如果有则生成)一并返回DispatcherServlet
  • 第四步:DispatcherServlet调用HandlerAdapter处理器适配器去调用Handler
  • 第五步:处理器适配器执行Handler
  • 第六步:Handler执行完成给处理器适配器返回ModelAndView
  • 第七步:处理器适配器向前端控制器返回 ModelAndView,ModelAndView 是SpringMVC 框架的一个底层对象,包括 Model 和 View
  • 第八步:前端控制器请求视图解析器去进行视图解析,根据逻辑视图名来解析真正的视图。
  • 第九步:视图解析器向前端控制器返回View
  • 第十步:前端控制器进行视图渲染,就是将模型数据(在 ModelAndView 对象中)填充到 request 域
  • 第十一步:前端控制器向用户响应结果
5. mybatis #{}和${}有什么区别
  • #{}为参数占位符,即sql预编译,${}为字符串替换
  • #{} 预处理时,可以防止sql注入,在sql中的#{}替换为?通过调用PreparedStatement的set方法来赋值, ${}不能防止sql注入,并且是直接替换成变量的值。
  • #{} 的变量替换是在DBMS(数据库管理系统)中 ${}的变量替换是在DBMS外
  • ${}方式一般用于传入数据库对象,例如列表和表名。
6. 简述@Param注解的用法

@Param主要就是给传入的参数命名,一般在mapper接口中有多个参数时是必须使用的。如果参数只有一个就可以使用Mybatis默认接收方式即可。

当使用了@Param注解来声明参数的时候,SQL语句取值使用#{},KaTeX parse error: Expected 'EOF', got '#' at position 36: …解声明参数的时候,必须使用的是#̲{}来取参数。使用{}方式取值会报错。
不使用@Param注解时,参数只能有一个,并且是Javabean。在SQL语句里直接引用JavaBean的属性即可。

7. mybatis 中 ResultMap标签的属性都有什么?并说明作用
  1. id:给当前ResultMap设定唯一名称
  2. type: 设定当前ResultMap类型
  3. autoMapping:自动映射封装信息
  4. extends:继承 父类有的那一部分属性标签(id、result标签)就不用自己写了
8. mybatis的mapper文件中 namespace属性的作用是什么?

Mapper中的namespace是用于绑定Dao接口的,即面向接口编程,它的功能和,mapper接口的实现类Impl相当,但是他不用写接口实现类,通过namesapce(命名空间)的绑定直接找到相应方法,执行相应的SQL语句。

9. ssm框架如何通过注解配置事务生效,说明一下步骤。
  1. 开启注解扫描
<context:component-scan base-package="edu.xja"/>
  1. 配置事务管理器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
  1. 开启事务驱动
<tx:annotation-driven transaction-manager="transactionManager"/>
  1. 在业务层类或方法上添加注解@Transactional
@Transactional
10. 简述session和cookie的区别及联系

首先说cookie和session都是会话对象。
不同的是session是服务器会话对象,数据保存在服务器内存中,cookie是客户端会话对象, 数据通过浏览器保存在本地硬盘。
session的默认生命周期是30分钟,为了能够保证会话功能的实现,每一个session对象创建的时候都有一个sessionid通过响应对象存储到浏览器的cookie中,这样只要浏览器访问服务器携带这个id值,就能拿到这个session的数据,也表示会话进行中。一旦浏览器关闭cookie声明周期结束,再次访问服务器时因为丢失了sessionid表示会话也结束了,那么服务器就会创建一个新的session对象和存储一个新的sessionid在浏览器,这样一个新的会话就开启了。

11. 请解释Spring Bean的生命周期

SpringBean的生命周期简单易懂,在一个Bean实例被初始化时,需要执行一系列的初始化操作,以达到可用状态。同样的,当一个Bean不在被调用时需要进行相关的解析操作,并从Bean容器中移除。

点击了解详细

12 .Spring Bean的作用域之间有什么区别

Spring容器中的Bean可以分为5个范围,所有范围的名称都是有说明的,但是为了避免混淆,还是让我们来解释一下。

singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。

prototype:原形范围与单例范围相反,为每一个bean请求提供一个实例。

request:在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。

Session:与请求范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。

global-session:global-session和组件(Portlet)应用相关。当你的应用部署在容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。全局作用域与Servlet中的session作用域效果相同。

使用到的技术:redis、amcharts、maven、html5、ajax、js、jquery以及css,关系型数据库采用的是mysql。 文件夹中有可以直接导入使用的数据库,以及可以导入试卷的excel表格格式. 该项目分为学生模块,和教师模块。 教师模块:教师可以通过导入Excel表格的方式进行添加试卷,如果Excel表中有不合法的数据,会在前台提醒哪一行哪一列出了什么问题,添加试卷后,教师可以发布试卷,试卷发布后,学生就可以答题,每张试卷都有作答时长,作答时间结束,将会自动提交试卷。考试结束后,教师可以发布答案。对于修改试卷,教师可以先选择所要修改的试卷,对于试卷可以修改试卷的名称以及考试时长,要想修改试题可以点击编辑试题,进行批量修改。 学生模块:注册登录进入学生考试平台,选择考卷,进行作答,试卷分为单选题、多选题以及判断题,分值各不相同,对于多选题错答不得分,漏答得一半的分。在作答期间,学生可以先保存,保存的内容存储在Redis中。若点击提交,提交后直接显示成绩。提交后就不能再进入考试。要想看正确答案,得等到考试结束,教师发布成绩后,才可以看到。 学生可以看到自己的作答历史,每道题之前学生的答案以及该题正确的答案都很清晰的标注出来。为了方便学生统计自己的成绩,本系统采用了amcharts技术根据学生的历次成绩制作了柱状图和折线图结合的图表。学生可以很直观地看到自己成绩的波动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未系上弦月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值