java面试题(day1)

1.

下列关于@Transactional注解的说法中,错误的是(   )

@Transactional可以作用在类上,代表这个类的所有方法都将启用事务。
可以通过@Transactional的propagation属性,指定事务的传播行为。
可以通过@Transactional的isolation属性,指定事务的隔离级别。
可以通过@Transactional的rollbackFor属性,指定发生哪些异常时回滚。

正确答案: A   

解析:@Transactional 作用在类上,代表类中所有公共非静态方法启用事务(spring的事务实现依赖于aop,只有在public方法上才会生效)。

相关知识:

参数描述:

readOnly 该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。例如:@Transactional(readOnly=true)

rollbackFor 该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。例如:指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class})
rollbackForClassName 该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。例如:指定单一异常类名称@Transactional(rollbackForClassName=”RuntimeException”)指定多个异常类名称:@Transactional(rollbackForClassName={“RuntimeException”,”Exception”})
noRollbackFor 该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。例如:指定单一异常类:@Transactional(noRollbackFor=RuntimeException.class)指定多个异常类:@Transactional(noRollbackFor={RuntimeException.class, Exception.class})
noRollbackForClassName 该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚。例如:指定单一异常类名称:@Transactional(noRollbackForClassName=”RuntimeException”)指定多个异常类名称:@Transactional(noRollbackForClassName={“RuntimeException”,”Exception”})
propagation 该属性用于设置事务的传播行为。例如:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
isolation 该属性用于设置底层数据库的事务隔离级别,事务隔离级别用于处理多事务并发的情况,通常使用数据库的默认隔离级别即可,基本不需要进行设置
timeout 该属性用于设置事务的超时秒数,默认值为-1表示永不超时
我们可以使用propagation 来对事务的传播行为进行声明式的设定:REQUIRED:业务方法需要在一个容器里运行。如果方法运行时,已经处在一个事务中,那么加入到这个事务,否则自己新建一个新的事务。    

NOT_SUPPORTED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为他开启事务,如果方法在一个事务中被调用,该事务会被挂起,调用结束后,原先的事务会恢复执行。     

REQUIRESNEW:不管是否存在事务,该方法总汇为自己发起一个新的事务。如果方法已经运行在一个事务中,则原有事务挂起,新的事务被创建。     

MANDATORY:该方法只能在一个已经存在的事务中执行,业务方法不能发起自己的事务。如果在没有事务的环境下被调用,容器抛出例外。     

SUPPORTS:该方法在某个事务范围内被调用,则方法成为该事务的一部分。如果方法在该事务范围外被调用,该方法就在没有事务的环境下执行。     

NEVER:该方法绝对不能在事务范围内执行。如果在就抛例外。只有该方法没有关联到任何事务,才正常执行。     

NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效。 

2.

下列关于@RequestParam注解的说明中,错误的是(   )

@RequestParam注解用于对HTTP请求参数和控制器方法参数进行映射。
@RequestParam注解的value成员用于指定要映射的HTTP请求参数名。
@RequestParam注解的required成员用于指定该参数是否必填。
@RequestParam注解的required成员默认值为false,也就是映射的参数默认可以为空。

正确答案: D  

解析:@requestParam中参数required,用于指定参数是否必填,默认值是true,映射参数默认不能为空。

相关知识:

@RequestParam 有三个属性:

(1)value:请求参数名(必须配置)
(2)required:是否必需,默认为 true,即 请求中必须包含该参数,如果没有包含,将会抛出异常(可选配置)
(3)defaultValue:默认值,如果设置了该值,required 将自动设为 false,无论你是否配置了required,配置了什么值,都是 false(可选配置)

3.

关于Spring AOP的织入,下列说法错误的是(   )

织入,就是将方面组件中定义的横切逻辑,织入到目标对象的连接点的过程。
可以在编译时织入,需要使用特殊的编译器。
可以在装载类时织入,需要使用特殊的类装载器。
可以在运行时织入,需要使用特殊的JRE。

正确答案: D   

解析:可以在运行时织入,需要为目标生成代理对象。 

4.

关于Spring AOP的术语,下列说法错误的是(   )

连接点(join point),对应的是具体被拦截的对象,因为Spring只支持方法,所以被拦截的对象往往就是指特定的方法,AOP将通过动态代理技术把它织入对应的流程中。
切点(point cut),有时候,我们的切面不单单应用于单个方法,也可能是多个类的不同方法,这时,可以通过正则式和指示器的规则去定义,从而适配连接点。切点就是提供这样一个功能的概念。
通知(advice),就是按照约定的流程下的方法,分为前置通知、后置通知、环绕通知、事后返回通知和异常通知,它会根据约定织入流程中。
切面(aspect),即被代理的对象。

正确答案: D  

解析:切面(aspect),是一个可以定义切点、各类通知和引入的内容,SpringAOP将通过它的信息来增强Bean的功能或者将对应的方法织入流程

AOP术语

  • 连接点:类里面可以被增强的方法称为连接点
  • 切入点:实际被增强的方法称为切入点
  • 通知(增强):实际增强的逻辑部分称为通知(增强)
  • 切面:把通知应用到切入点

 5.

下列关于@Bean注解的说法中,错误的是(   )

@Bean注解作用在方法上,表示该方法的返回值将被装配到容器中。
@Bean注解包含name属性,可以通过该属性指定装配的Bean的名称。
@Bean注解依赖于@Configuration注解,即它所在的类必须带有@Configuration注解。
@Bean注解可以装配任意的Bean,尤其适合装配那些初始化过程十分复杂的Bean。

正确答案: C   

解析:@Bean通常放在@Configuration中,但不是必要条件,也可以放在普通类中。

6.

下列选项中,哪个不是Spring MVC拦截器的方法(   )

preHandle()
postHandle()
afterHandle()
afterCompletion()

 正确答案: C   

解析:spring mvc;拦截器包含3个方法 :preHandle,posthandle,afterCompletion

相关知识:

拦截器是SpringMVC中的一个核心应用组件,主要用于处理多个 Controller的共性问题.当我们的请求由DispatcherServlet派发 到具体Controller之前首先要执行拦截器中一些相关方法,在这些 方法中可以对请求进行相应预处理(例如权限检测,参数验证),这些方法可以决定对这个请求进行拦截还是放行.   >>服务器一启动,就会创建拦截器对象, >>对拦截器配置延迟加载是没有用的 >>拦截器是单例的,整个过程,拦截器只有一个实例对象 拦截器需要实现 HandleInterceptor接口,或者继承HandlerInterceptorAdaptor抽象类; HandlerInterceptor接口的三个方法: 1,preHandle() 是拦截器最先执行的方法,是在请求到达Controller之前执行的,其实就是拦截器用于拦截请求的,三个参数,分别是request,response,handelr就是这个请求要去找的后端处理器Controller.方法的返回值是bloolean类型,如果返回为false,就说明请求在此终结,不能执行后面的代码了.如果返回值为true,那么这个拦截器就要放行,将请求交给后端处理器Controller. 2,postHandle() 这个方法,是在后端控制器controller处理完请求之后,就执行的,这个方法,多了一个参数,ModelAndView,后端控制器controller处理请求可能需要返回页面和数据,所以会多一个ModelAndView,但是这个方法,是在渲染页面之前执行的,渲染热面是交个前端控制器来完成的. 3,afterCompletion() 拦截器最后执行的方法

7.

下列选项中,不属于Spring Boot核心功能的是(   )

自动配置
起步依赖
端点监控
IoC和AOP

 正确答案: D   

解析:IOC和AOP是Spring核心功能

8.

下列不属于Spring Boot注解的是(   )

@Controller
@EnableAutoConfiguration
@Conditional
@SpringBootApplication

 正确答案: A   你的答案: C (错误)

解析:@controller是Spring mvc 注解

相关知识:@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean。 

9.

关于Spring AOP的几种通知方式,下列说法错误的是(   )

前置通知会在执行目标方法之前运行。
目标方法运行结束之后,无论有没有异常发生后置通知都会触发。
目标方法出现异常后会触发异常通知,然后才会触发返回通知。
环绕通知可以决定目标方法的调用也可以控制返回对象。

 正确答案: C  

解析:返回通知在目标方法返回后再执行。

相关知识:

前置通知   @Before 注解表示作为前置通知

后置通知(返回通知) 

10.

关于Spring注解,下列说法正确的是(   )

@Autowired是Spring提供的注解。
@Autowired是JDK提供的注解。
@Resource是Spring提供的注解。
@Resource是JDK提供的注解。

正确答案: A D   

解析:@Autowired是Spring提供的注解,@Resource是JDK提供的注解。它们的区别是,@Autowired只能按类型注入,@Resource默认按名称注入,也支持按类型注入 

11.

关于IoC注解,下面说法错误的是(   )

@Autowired用于注入Bean,该注解只能写在成员变量的前面。
@Qualifier用于声明Bean的名称,该注解只能引用Bean的自定义名称。
@Bean用于装配第三方的Bean,它不能装配自定义的Bean。
@Configuration用于声明配置类,该注解是基于@Component实现的。

 正确答案: A B C   

解析:@AutoWired注解还可以写在set方法、构造器上;@Qualifier注解也可以引用默认名称;@Bean注解可以用于装配任何Bean。

11.

在使用@Autowired注解时,如果一个类可以有多种类型,就会对Spring IoC 容器注入造成困扰,这种情况我们称之为歧义性,为解决这一问题,我们可以使用(   )注解。

@Component
@Primary
@Resource
@Qualifier

 正确答案: B D   

解析:当发现有多种类型的Bean时,@Primary注解会通知IoC容器优先使用它所标注的Bean进行注入;@Quelifier注解可以与@AutoWired注解组合使用,达到通过类型和名称一起筛选Bean的效果。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值