Java Spring面试 错题集 笔记

关于BeanFactory和FactoryBean,下列说法正确的是(   )

官方解析:BeanFactory是所有Spring Bean的容器根接口,其给IoC容器提供了一套完整的规范。FactoryBean是 一种创建Bean的方式,是对Bean的一种扩展。

ApplicationContext是BeanFactory的子接口;BeanFactory是Spring容器的接口;FactoryBean是Spring用于“工厂Bean”的接口

———————————————————————————————————————————

官方解析:在Spring MVC中,Model、ModelMap、ModelAndView都可以作为数据模型对象,以上述类型作为控制器的方法参数时,Spring MVC会自动实例化这些类型。ModelAttribute是注解,用于定义控制器方法执行之前,对数据模型的操作。

———————————————————————————————————————————

下列关于Spring MVC注解的说法中,正确的是(   )
A
@ControllerAdvice用于定义控制器的通知类,它可以对指定的控制器进行增强。
B
@InitBinder用于定义控制器参数绑定规则,如转换规则,它会在参数转换之前执行。
C
@ExceptionHandler用于定义控制器发生异常后的操作。
D
@ModelAttribute用于定义控制器方法执行之前,对数据模型的操作。

答案:ABCD

Spring在TransactionDefinition接口中规定了7种类型的事务传播行为

 /** 支持当前事务;如果不存在,则创建一个新的。(默认的事务传播行为)*/
 int PROPAGATION_REQUIRED = 0;

 /**
  * 支持当前事务;如果不存在,则以非事务方式执行。  
  * 注意: 它和没有事务执行是有区别的。需要谨慎使用!
  */
 int PROPAGATION_SUPPORTS = 1;

 /** 支持当前事务;如果当前不存在事务,则抛出异常。 */
 int PROPAGATION_MANDATORY = 2;

 /**
  * 创建一个新事务,并且挂起当前事务(如果当前事务存在的话)。
  * @see org.springframework.transaction.jta.JtaTransactionManager#setTransactionManager
  */
 int PROPAGATION_REQUIRES_NEW = 3;

 /**
  * 不支持当前事务,始终以非事务方式执行。  
  * @see org.springframework.transaction.jta.JtaTransactionManager#setTransactionManager
  */
 int PROPAGATION_NOT_SUPPORTED = 4;

 /** 不支持当前事务;如果当前事务存在,则抛出异常。 */
 int PROPAGATION_NEVER = 5;

 /**
  * 如果存在当前事务,则在嵌套事务中执行,否则,其行为与 PROPAGATION_REQUIRED 的行为类似。  
  * 注意:嵌套事务的实际创建只适用于特定的事务管理器,比如 DataSourceTransactionManager 在使用 JDBC 3.0 driver 时。
  * @see org.springframework.jdbc.datasource.DataSourceTransactionManager
  */
 int PROPAGATION_NESTED = 6;
 
 /** 使用默认的事务隔离级别 */
 int ISOLATION_DEFAULT = -1;

 /** 读未提交。等同于: java.sql.Connection#TRANSACTION_READ_UNCOMMITTED */
 int ISOLATION_READ_UNCOMMITTED = 1;

 /** 读已提交。等同于: java.sql.Connection#TRANSACTION_READ_COMMITTED */
 int ISOLATION_READ_COMMITTED = 2;

 /** 可重复读。等同于: java.sql.Connection.TRANSACTION_REPEATABLE_READ */
 int ISOLATION_REPEATABLE_READ = 4;

 /** 等同于: java.sql.Connection#TRANSACTION_SERIALIZABLE */
 int ISOLATION_SERIALIZABLE = 8; 
 
 /** 默认的事务超时时间 */
 int TIMEOUT_DEFAULT = -1;

官方解析:Spring AOP支持的通知类型包括前置通知、后置通知、环绕通知、返回通知、异常通知

Spring AOP的实现方式:JDK动态代理,是Java提供的动态代理技术,可以在运行时创建接口的代理实例。Spring AOP默认采用这种方式,在接口的代理实例中织入代码。CGLib动态代理,采用底层的字节码技术,在运行时创建子类代理的实例。当目标对象不存在接口时,Spring AOP就会采用这种方式,在子类实例中织入代码。

官方解析:Spring容器创建Bean对象的方法有三种方式,分别是:用构造器来实例化,使用静态工厂方法实例化和使用实例工厂方法实例化。

bean的注入有3种方式:1.属性注入、2.构造器注入、3.接口注入。

bean的创建方式:1.构造器创建、2.实例工厂创建、3.静态工厂创建。

Spring MVC拦截器包含三个方法:preHandle()、postHandle()、afterCompletion()

在Spring MVC中实现上传功能,主要依赖MultipartHttpServletRequest从读取请求中的文件,然后对读取到的MultipartFile类型进行处理。

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

正确答案:C;@Bean注解通常出现在带有@Configuration注解的类中,但这不是必要的条件,它也可以出现在带有@Component注解的类中,甚至是普通的类中。

官方解析:MVC的处理过程,首先控制器接受用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。

Spring容器中Bean包含五种作用域:singleton、prototype、request、session、globalSession。

SpringApplication调用的run方法执行流程如下: 
 
  1. 初始化监听器,以及添加到SpringApplication的自定义监听器。 
 
  2. 发布ApplicationStartedEvent事件,如果想监听ApplicationStartedEvent事件,你可以这样定义:public class ApplicationStartedListener implements ApplicationListener,然后通过SpringApplication.addListener(..)添加进去即可。 

 
  3. 装配参数和环境,确定是web环境还是非web环境。 

 
  4. 装配完环境后,就触发ApplicationEnvironmentPreparedEvent事件。 

 
  5. 如果SpringApplication的showBanner属性被设置为true,则打印启动的Banner。 

 
  6. 创建ApplicationContext,会根据是否是web环境,来决定创建什么类型的ApplicationContext。 

 
  7. 装配Context的环境变量,注册Initializers、beanNameGenerator等。 

 
  8. 发布ApplicationPreparedEvent事件。 

 
  9. 注册springApplicationArguments、springBootBanner,加载资源等 

 
  10. 遍历调用所有SpringApplicationRunListener的contextLoaded()方法。 

 
  11. 调用ApplicationContext的refresh()方法,装配context beanfactory等非常重要的核心组件。 

 
  12. 查找当前ApplicationContext中是否注册有CommandLineRunner,如果有,则遍历执行它们。 

 
  13. 发布ApplicationReadyEvent事件,启动完毕,表示服务已经可以开始正常提供服务了。
    通常我们这里会监听这个事件来打印一些监控性质的日志,表示应用正常启动了

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
202面试Java面试、JVM面试、多线程面试、并发编程、设计模式面试Spring面试、MyBatis面试、ZooKee 一、内容概览 本次分享的资源涵盖了Java面试的各个方面,从基础知识到高级技术,从数据库到框架应用,都做了深入的探讨和总结。具体内容包括: Java基础知识点:包括数据类型、面向对象特性、异常处理、集合框架等。 Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等与数据库交互的技术。 实战项目经验:分享了几个经典的Java项目,解析了项目的架构设计和核心技术点。 面试经验和技巧:整理了常见的Java面试,并给出了答建议和技巧。 代码和项目实例:提供了多个Java项目的源代码,方便学习者参考和实践。 学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定基础的开发者,都能从中获得启发和帮助。 三、使用建议 系统学习:建议学习者按照资源提供的顺序和内容,系统地学习和掌握Java的知识点。 实践为王:理论知识和实战经验相结合,通过实践来加深理解和记忆。 持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次分享的资源涵盖了Java面试的各个方面,从基础知识到高级技术,从数据库到框架应用,都做了深入的探讨和总结。具体内容包括: Java基础知识点:包括数据类型、面向对象特性、异常处理、集合框架等。 Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等与数据库交互的技术。 实战项目经验:分享了几个经典的Java项目,解析了项目的架构设计和核心技术点。 面试经验和技巧:整理了常见的Java面试,并给出了答建议和技巧。 代码和项目实例:提供了多个Java项目的源代码,方便学习者参考和实践。 学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定基础的开发者,都能从中获得启发和帮助。 三、使用建议 系统学习:建议学习者按照资源提供的顺序和内容,系统地学习和掌握Java的知识点。 实践为王:理论知识和实战经验相结合,通过实践来加深理解和记忆。 持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。Java面试资源概览 一、内容概览 本次分享的资源涵盖了Java面试的各个方面,从基础知识到高级技术,从数据库到框架应用,都做了深入的探讨和总结。具体内容包括: Java基础知识点:包括数据类型、面向对象特性、异常处理、集合框架等。 Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 数据库相关:包括关系型数据库和非关系型数据库的使用,以及JDBC、MyBatis等与数据库交互的技术。 实战项目经验:分享了几个经典的Java项目,解析了项目的架构设计和核心技术点。 面试经验和技巧:整理了常见的Java面试,并给出了答建议和技巧。 代码和项目实例:提供了多个Java项目的源代码,方便学习者参考和实践。 学习笔记和心得:记录了学习过程中的重点难点和心得体会,有助于学习者更好地理解和掌握知识。 二、适用人群 本资源适用于即将毕业或已经毕业,希望通过学习Java找到一份理想工作的同学。无论你是初学者还是有一定基础的开发者,都能从中获得启发和帮助。 三、使用建议 系统学习:建议学习者按照资源提供的顺序和内容,系统地学习和掌握Java的知识点。 实践为王:理论知识和实战经验相结合,通过实践来加深理解和记忆。 持续更新:由于Java技术和面试要求都在不断更新,建议学习者保持关注,随时更新自己的知识和技能。 交流与讨论:与同学或同行进行交流和讨论,分享学习心得和经验,共同进步。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值