填空题(共20分,每小题2分,共10题)
在Spring的配置文件中,Bean的作用域是通过元素的(scope)来指定的。
( @Repository )注解用于将DAO层的类表示为Spring的Bean,其功能与Component相同
Spring是以IOC和( AOP )为核心特性。
AspectJ框架中注解( @Pointcut )用于定义切点表达式
Spring中的通知可以分为以下5中类型:( 环绕通知 ),前置通知,后置通知,异常通知,返回通知
SpringMVC中确定Controller层返回值为JSON格式的注解是(@Responsebody)
Spring的事务管理可以通过两种方式实现(基于xml的方式 ),(基于annotation的方式)
Mybatis中可以使用SqlSession的(update())方法执行更新操作。
Mybatis的动态sql语句中,条件筛选查询需要用到的标签是(
Mybatis中定义表与表之间的关联关系的配置有( 一对一 ),( 一对多 )
选择题(共20分,每小题2分,共10题)
1、下面关于IOC的理解,正确的是(A)
A.控制反转
B.面向切面
C.对象主动的去找依赖类
D.一定要用接口
2、Spring核心模块的作用(B)
A.做AOP的
B.做IOC的,用来管理Bean的
C.是用来支持Mybatis的
D.是用来支持SpringMVC的
3、下面是Spring依赖注入方式的是(A)
A.set方法注入
B.构造方法的注入
C.get方法的注入
D.接口的注入
4、关于MyBatis 模糊查询中进行 SQL 字符串拼接时,说法错误的是(C)
A.使用“${}”进行 SQL 字符串拼接时,无法防止 SQL 注入问题
B.可以使用 MySQL 中的 concat()函数进行字符串拼接
C.使用 MySQL 中的 concat()函数进行字符串拼接,也无法防止 SQL 注入
D.使用 MySQL 中的 concat()函数进行字符串拼接,导致数据库移植性变差
5、使用 ORM 框架后,应用程序不再直接访问底层数据库,而是以(C)的方式来操作持久化对象(PO,即 Persisent Object)
A.面向业务
B.Hibernate
C.面向对象
D.MyBatis
6、在 Java 中,以下有关类的关联关系描述错误的是(A)。
A. 在Java 中,通过对象也可以进行关系描述,他们分别为一对一.一对多.多对一和多对多。
B. 一对一的关系就是在本类中定义对方类型的对象
C. 一对多的关系就是一个A 类类型对应多个 B 类类型的情况,需要在 A 类中以集合的方式
引入B 类类型的对象,在 B 类中定义 A 类类型的属性 a
D. 多对多的关系:在A 类中定义 B 类类型的集合,在 B 类中定义 A 类类型的集合
7、MyBatis 的删除操作有关说发错误的是(D)。
A.MyBatis 的删除操作在映射文件中是通过配置来实现的
B.MyBatis 的删除操作也需要进行事务提交
C.MyBatis 的删除操作执行了 SqlSession 的 delete()方法
D.MyBatis 的删除操作和添加操作时,也需要封装整个实体类
8、在SpringMVC中,以下描述错误的是(A)
A、SpringMVC中必须是实现了Handler接口的JavaBean才能成为处理器
B、DispatcherServlet是SpringMVC的前端Servlet,和任何的Servlet一样,必须在web.xml中配置后,才能起作用
C、在web.xml中,根据servlet-mapping的URL不同,可以配置多个DispatcherServlet
D、ModelAndView中的view是逻辑视图名,而非真正的视图对象。
9、有关 MVC 的处理过程,描述不正确的是(C)
A、首先控制器接收用户的请求,决定调用哪个模型来进行处理
B、模型处理用户的请求并返回数据
C、模型确定调用哪个视图进行数据展示
D、视图将模型返回的数据呈现给用户
10、下列关于@RequestParam 绑定请求参数值的说法正确的是(D)
A、Controller 方法入参时,必须使用@RequestParam 指定请求参数
B、@RequestParam 的参数 required,默认值为 false
C、若有非必须的参数,必须使用@RequestParam 注解标注并设置 required=false
D、使用@RequestParam指定对应请求参数,并且requied=true,那么请求中若不加此参数,则会报请求错误
判断题(共10分 每题2分 共 5题)
如果有通过元素配置,则应用程序会默认去WEB-INF 目录下寻找servletName-servlet.xml(F)
要使自定义的拦截器类生效,还需要在Spring MVC 的配置文件中进行配置(T)
如果在同一个连接点有多个通知需要执行,那么在同一切面中,目标方法之前的前置通知和环绕通知的执行顺序是未知的,目标方法之后的后置通知和环绕通知的执行顺序也是未知的(T)
MyBaits 与 Spring 进行整合时,Dao 层开发可以使用传统的 DAO 方式的开发整合,以及Mapper 接口方式的开发整合(T)
ResultMap是 MyBatis 中最重要也是最强大的元素。它的主要作用是定义映射规则、级联的更新以及定义类型转化器等(T)
四、简答题(共50分 每题5分 共10题)
1、简述Spring中bean的作用域
1、singleton
单例模式,使用singleton定义的Bean在Spring容器只有一个实例,这也是Bean默认的作用域。
2、prototype
原型模式,每次通过Spring容器获取prototype定义的Bean时,容器都将创建一个新的Bean实例
3、request
在一次HTTP请求中,容器会返回该Bean的同一个实例。而对不同的HTTP请求,会返回不同的实例,该作用域仅在当前HTTP Request内有效。
4、Session
在一次HTTP Session中,容器会返回该Bean的同一个实例。而对不同的HTTP请求,会返回不同的实例,该作用域仅在当前HTTP Session内有效
5、global Session
在一个全局的HTTP Session中,容器会返回该Bean的同一个实例,该作用域仅在使用protlet context时有效。
2、Redis支持的数据类型有哪些?
String,hash,list,set,zset(有序集合)
3、Redis持久化有几种方式,并说明其特点
RDB模式:RDB的持久化方式是通过快照完成的,它是Redis默认的持久化方式。
AOF模式:每次执行命令后将命令本身记录下来,每次执行命令都会将命令写入AOF文件中。
4、Redis和 memecache 有什么区别
都是内存数据库,memcached还可以存图片,视频
存储数据类型:memcached的value只能是String,redis支持string/hash/list/set/sortedSet等s数据结构
redis当内存用完时,可以把很久没用的value放到磁盘
memcached是多线程的
memcached不支持持久化;redis可通过RDB快照和AOF日志持久化,所以支持灾难恢复,支持主从数据备份
redis除了可以做NoSQL数据库的使用,还可以做消息队列,分布式锁等。
5、说明什么是缓存的穿透、击穿、雪崩以及如何解决
缓存穿透:是指查询一个缓存中的数据库中都不存在的数据,导致每次查询这条数据都会透过缓存,直接查库,最后返回空,当用户使用这条不存在的数据疯狂发起查询请求的时候,对数据库造成的压力就非常大,甚至可能直接挂掉。
解决:缓存空对象 使用布隆过滤器,检验key长度或者前缀,过滤一批非法数据。
缓存击穿:缓存击穿是指当缓存中某个热点数据过期了,在该热点数据重新载入缓存之前,有大量查询请求穿过缓存,直接查询数据库。这种情况会导致数据库压力瞬间骤增,造成大量请求阻塞,甚至直接挂掉。
解决:设置key永不过期 使用分布式锁
缓存雪崩:缓存雪崩是指在缓存中有大量的key在同一时刻过期,甚至redis直接宕机,导致大量查询请求全部到达数据库,造成数据库查询压力骤增,甚至直接挂掉。
解决:将每个key的过期时间打散即可,使他们的失效点尽可能均匀分布。
6、Mybatis中#和$的区别
$:代表底层使用的是statement,直接进行字符串的替换
#:代表底层使用的是perparedstatement,替换预编译的语句中的?
7、说明Mybatis的一级缓存和二级缓存
一级缓存:是sqlsession级别的缓存,默认是开启的状态。
失效的情形:
sqlsession不同
当sqlsession相同,查询的条件不同
当sqlsession相同,在两次查询之间进行了增删改操作。增删改需要提交事务。
当sqlsession相同,在两次查询之间手动清除缓存。 session.clearcache();
二级缓存:
跨sqlsession,默认是关闭的
namespace级别的
sqlsession1查询用户1的信息,查询到之后,会将查询的数据存储到二级缓存。
二级缓存生效的情况:
提交事务
关闭session
8、在mapper中如何传递多个参数
1、首先,我们建议使用对象传参,如果说对象中字段过多,出现大量null值,不建议使用对象,一般情况下,超过三个参数,必须使用对象。
2、首先我们可以在对应的mapper.xml中使用arg0,arg1或者param1,param2来进行对应值的传递
3、我们可以在接口方法中使用@param注解来给参数命名,提升代码的可读性。
9、SpringMVC的执行流程
1、 用户发送请求至前端控制器DispatcherServlet。
2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器
拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、 Controller执行完成返回ModelAndView。
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、 ViewReslover解析后返回具体View。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet响应用户。
10、什么是Redis的主从复制机制和哨兵机制
主从复制机制:用来解决数据的冗余备份,从节点仅仅用来同步数据。主节点出现故障,从节点就无法定期的同步数据主节点宕机,从节点无法担当主节点,从节点一直在重复获取连接主节点再次重新启动时,从节点会自动连接,并且可以进行正常主从复制。
哨兵机制:单节点并发压力的问题