(7/100)

学习思路如下:

面试准备思路

二、JavaEE部分—题目

1、Spring
1、说一下IOC和AOP?
2、介绍一下bean的生命周期
3、Spring里面注解用过没有?autowired 和resource区别?
4、@Controller和@RestController的区别?
5、依赖注入的方式有几种,哪几种?
6、springIOC原理?自己实现IOC要怎么做,哪些步骤?
7、Spring中BeanFactory和ApplicationContext的区别?、
8、什么是IoC和DI?DI是如何实现的?
9、请问Spring中Bean的作用域有哪些?
10、谈谈Spring中自动装配的方式有哪些?
11、aop的应用场景?
12、AOP的原理是什么?
13、你如何理解AOP中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)这些概念?
14、Spring支持的事务管理类型有哪些?你在项目中使用哪种方式?
15、介绍一下spring?
16、Struts拦截器和Spring AOP区别?
17、spring框架的优点?
18、选择使用Spring框架的原因(Spring框架为企业级开发带来的好处有哪些)?
19、持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些?

答案部分:1)Spring

参考—https://www.cnblogs.com/Silencewj/p/11308034.html

1、说一下IOC和AOP?

答:

  • IOC就是对象的创建,依赖都是由及配置文件控制;

  • AOP就是统一的给一些类似的方法加上同样的功能,比如日志,事务等;

  • IOC: 控制反转,是一种设计模式。
    1)第一层含义是控制权的转移;由传统的在程序中控制依赖转移到由容器来控制;
    2)第二层是依赖注入:将相互依赖的对象分离,在Spring配置文件中描述他们的依赖关系,他们的依赖关系只在使用时才建立。

  • AOP: 面向切面,是一种编程思想,OOP的延续。
    将系统中非核心的业务提取出来,进行单独处理。比如事务,日志等。

2、介绍一下bean的生命周期

答:参考—http://www.yq1012.com/myweb/4485.html
Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean,这其中包含了一系列关键点。
上
下

3、Spring里面注解用过没有?autowired 和resource区别?

答:如图所示
区别

  • @Autowired是按 byType 自动注入。如果当spring上下文中存在不止一个接口类型的bean时,就会抛出BeanCreationException异常。我们可以使用@Qualifier配合@Autowired来解决这些问题。如下:
@Autowired   
@Qualifier("userServiceImpl")   
public IUserService userService
这样Spring会找到id为userServiceImpl的bean进行装配
  • @Resource则默认按 byName 自动注入

注解 @Resource 的装配顺序:

  1. 如果同时指定了 name 和 type,则从 Spring 上下文中找到唯一匹配的 bean 进行装配,找不到则抛出异常;
  2. 如果指定了 name,则从上下文中查找名称(id)匹配的 bean 进行装配,找不到则抛出异常;
  3. 如果指定了 type,则从上下文中找到类型匹配的唯一 bean 进行装配,找不到或者找到多个,都会抛出异常;
  4. 如果既没有指定 name,又没有指定 type,则自动按照 byName 方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配成功,则进行自动装配。

4、@Controller和@RestController的区别?

答:参考—https://www.cnblogs.com/shuaifing/p/8119664.html

  • @RestController注解相当于@ResponseBody + @Controller合在一起的作用

  • 1.使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面
    ;若返回json等内容到页面,则需要加@ResponseBody注解

  • 2.@RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面

5、依赖注入的方式有几种,哪几种?

答:https://www.iteye.com/blog/blessht-1162131

spring四种依赖注入方式:

  • set方法注入
  • 构造器注入
  • 静态工厂的方法注入
  • 实例工厂的方法注入

6、springIOC原理?自己实现IOC要怎么做,哪些步骤?

答:https://blog.csdn.net/zhangcongyi420/article/details/89419715

  • spring ioc指的是控制反转,是一种设计思想。
  • spring IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖,交由Spring容器统一进行管理,从而实现松耦合,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
  • IOC实现原理:使用反射机制+XML技术
    IOC
    从示意图可以看出,当web容器启动的时候,spring的全局bean的管理器会去xml配置文件中扫描的包下面获取到所有的类,并根据你使用的注解,进行对应的封装,封装到全局的bean容器中进行管理,一旦容器初始化完毕,beanID以及bean实例化的类对象信息就全部存在了,现在我们需要在某个service里面调用另一个bean的某个方法的时候,我们只需要依赖注入进来另一个bean的Id即可,调用的时候,spring会去初始化完成的bean容器中获取即可,如果存在就把依赖的bean的类的实例化对象返回给你,你就可以调用依赖的bean的相关方法或属性等;

7、Spring中BeanFactory和ApplicationContext的区别?

答:

  • BeanFactory:
    Spring中最基本、通用的工厂,这里的工厂,它不仅仅是构造实例,它可以创建并管理各种类的对象,即是Spring IOC容器体系结构的基本接口,其与其子接口便构成了Spring IOC容器的体系结构(如下图:IOC容器主要接口关系图)。所以不要把它理解成常规意义的简单工厂,也可以把它称为Sring容器。

  • ApplicationContext:
    是一个Spring容器,它是由BeanFactory接口派生而来,因而提供BeanFactory所有的功能,此外它还扩展了BeanFactory的功能,提供了更多的高级功能:
    1)MessageSource, 提供国际化的消息访问
    2)资源访问,如URL和文件
    3)事件传播
    4)载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层。

  • 联系:
    1)都是Spring提供的接口。
    2)都和其子接口构成了Spring IOC的容器,我们一般都称他们为Spring容器。
    3)BeanFactory是Spring框架的基础设施,面向Spring本身,其提供基本的功能,如:getBean();
    4)ApplicationContext是建立在它之上,面向使用者,扩展了更多面向应用的功能,更易于创建实际应用。

  • 区别:
    提供的功能是有不同的,体系结构、用途等有所不同。
    在初始化时有一个重大的区别:
    1)BeanFactroy初始化容器时,并未初始化Bean,直到第一次在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化(延迟加载),这样的话,我们就不能在初始化容器时发现一些存在的Spring的配置问题。
    2)ApplicationContext则相反,它是在容器启动时,就一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误。

8、什么是IoC和DI?DI是如何实现的?

答:IoC控制反转,是Inversion of Control的缩写,DI(Dependency Injection)依赖注入,是对IoC简单的诠释。

  • 1)控制反转是把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。
    所谓的”控制反转”就是对组件对象控制权的转移,从程序代码本身转移到了外部容器,由容器来创建对象并管理对象之间的依赖关系。IoC体现了好莱坞原则 – “Don’t call me, we will call you”。
  • 2)依赖注入的基本原则是应用组件不应该负责查找资源或者其他依赖的协作对象。配置对象的工作应该由容器负责,查找资源的逻辑应该从应用组件的代码中抽取出来,交给容器来完成。DI是对IoC更准确的描述,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。
  • 依赖注入可以通过setter方法注入(设值注入)、构造器注入和接口注入三种方式来实现,Spring支持setter注入和构造器注入,通常使用构造器注入来注入必须的依赖关系,对于可选的依赖关系,则setter注入是更好的选择,setter注入需要类提供无参构造器或者无参的静态工厂方法来创建对象。

9、请问Spring中Bean的作用域有哪些?

答:Spring中Bean有五种scope,singleton,prototype,request,session,globalSession

  • 1)singleton为默认值,IOC容器中仅存在一个Bean实例,Bean都以单例模式存在
  • 2)prototype,在每次请求获取Bean的时候,都会创建一个新的实例,它在容器初始化的时候不会创建实例,采用的是延迟加载的形式注入Bean,当你使用的时候,才会进行实例化,每次实例化获取的对象都不是同一个 就像BeanFactory的实例化模式 实例不唯一
  • 3)request,在每一次http请求时会创建一个实例,该实例仅在当前http request有效
  • 4)session,在每一次http请求时会创建一个实例,该实例仅在当前http session有效
  • 5)globalSession,全局Session,供不同的portlet共享,portlet好像是类似于servlet的Web组件

10、谈谈Spring中自动装配的方式有哪些?

答:

  • no:不进行自动装配,手动设置Bean的依赖关系。
  • byName:根据Bean的名字进行自动装配。
  • byType:根据Bean的类型进行自动装配。
  • constructor:类似于byType,不过是应用于构造器的参数,如果正好有一个Bean与构造器的参数类型相同则可以自动装配,否则会导致错误。
  • autodetect:当有默认的构造器,则通过constructor的方式进行自动装配,否则使用byType的方式进行自动装配。

11、aop的应用场景?

答:AOP用来封装横切关注点,具体可以在下面的场景中使用:

  • Authentication 权限
  • Caching 缓存
  • Context passing 内容传递
  • Error handling 错误处理
  • Lazy loading 懒加载
  • Debugging  调试
  • logging, tracing, profiling and monitoring 记录跟踪 优化 校准
  • Performance optimization 性能优化
  • Persistence  持久化
  • Resource pooling 资源池
  • Synchronization 同步
  • Transactions 事务

12、AOP的原理是什么?

答:参考—https://www.jianshu.com/p/9d8341db2569

  • Spring AOP的底层都是通过代理来实现的
    1)一种是基于JDK的动态代理
    2)一种是基于CgLIB的动态代理
    AOP工作原理

13、如何理解AOP中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)等概念?

答:
1.目标类(target): 需要被增强的类。
2.连接点(Joinpoint): 可能被增强的点,目标类中的所有方法。
3.切入点(Pointcut): 将会被增强的连接点,目标类中被增强的方法。
4.通知/增强(Advice): 对切入点增强的内容。增强的内容以方法的形式体现的。增强执行的位置不同,称呼不同。
(前置通知、后置通知、环绕通知、抛出异常通知、最终通知)
通知方法所在的类,通常称为切面类。
5.切面(Aspect): 通知和切入点的结合。一个通知对应一个切入点就形成一条线,多个通知对应多个切入点形成多条线,多条线形成了一个面,我们称为切面。
6.织入(Weaving): 生成切面并创建代理对象的过程。(将通知和切入点的结合,并创建代理对象的过程)

14、Spring支持的事务管理类型有哪些?你在项目中使用哪种方式?

答:参考—https://blog.csdn.net/weixin_42476601/article/details/82291477

  • 编程式事务管理: 在代码中显式调用开启事务、提交事务、回滚事务的相关方法。
  • 声明式事务管理: 底层是建立在 AOP 的基础之上。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

实际应用:

  • 基于 <tx‘> 和 <aop’> 命名空间的声明式事务管理是目前推荐的方式,其最大特点是与 Spring AOP 结合紧密,可以充分利用切点表达式的强大支持,使得管理事务更加灵活。
  • 基于 @Transactional 的方式将声明式事务管理简化到了极致。开发人员只需在配置文件中加上一行启用相关后处理 Bean 的配置,然后在需要实施事务管理的方法或者类上使用 @Transactional 指定事务规则即可实现事务管理,而且功能也不必其他方式逊色。

15、介绍一下spring?

答:Spring是一个全方位的应用程序框架。

  • 1)Spring的核心是一个轻量级(Lightweight)的容器(Container)
  • 2)Spring是实现Ioc(Inversion of Control)容器和非入侵性(No intrusive)的框架
  • 3)Spring提供AOP(Aspect-oriented programming)概念的实现方式
  • 4)Spring提供对持久层(Persistence)、事务(Transaction)的支持
  • 5)Spring提供MVC Web框架的是实现,并对一些常用的企业服务api提供一致的模型封装
  • 6)Spring提供了对现存的各种框架(Structs、JSF、Hibernate、Ibatis、Webwork等)相整合的方案

16、Struts拦截器和Spring AOP区别?

答:

  • struts2使用拦截器主要是用来处理用户的请求,OGNL的使用,表单验证等。

  • spring的拦截器,主要体现在AOP的事务管理方面,还有比如一些错误或者异常的日志的显示,也是通过配置spring的log拦截器来实现的。

  • Struts的拦截器是针对Struts的,比如SSH项目都会去使用AOP ,如果是单纯的STRUTS项目 自然使用Struts本身的拦截器,两者最终效果是一样的;

  • 对于应用来说没什么区别,但对于底层实现方式来说有细微区别:拦截器是AOP的一种实现,struts2拦截器采用xwork2的interceptor!而spring的AOP基于IoC基础,其底层采用动态代理与CGLIB代理两种方式结合的实现方式。

17、spring框架的优点?

答:参考—https://www.cnblogs.com/day1day1up/p/10842845.html

  • 优点:
    1.轻量: 基础版本只有2MB
    2.控制反转: 通过控制反转,实现松散耦合,对象们给出他们的依赖,而不是通过创建或查找对象的依赖
    3.面向切面编程: 通过面向切面编程,实现业务逻辑和系统服务分开,支持面向切面编程
    4.事务管理: spring提供事务管理接口,实现本地事务和全局事务的管理
    5.异常处理: 提供异常处理接口,把hibernate或者jdbc的异常转为一致的unchecked异常
    6.容器: spring包含并管理应用中对象的生命周期和配置
    7.MVC框架: spring的web框架是一个优秀的框架,是web框架的替代品

18、选择使用Spring框架的原因(Spring框架为企业级开发带来的好处有哪些)?

答:

  • 非侵入式: 支持基于POJO的编程模式,不强制性的要求实现Spring框架中的接口或继承Spring框架中的类。
  • IoC容器: IoC容器帮助应用程序管理对象以及对象之间的依赖关系,对象之间的依赖关系如果发生了改变只需要修改配置文件而不是修改代码,因为代码的修改可能意味着项目的重新构建和完整的回归测试。有了IoC容器,程序员再也不需要自己编写工厂、单例,这一点特别符合Spring的精神"不要重复的发明轮子"。
  • AOP(面向切面编程): 将所有的横切关注功能封装到切面(aspect)中,通过配置的方式将横切关注功能动态添加到目标代码上,进一步实现了业务逻辑和系统服务之间的分离。另一方面,有了AOP程序员可以省去很多自己写代理类的工作。
  • MVC: Spring的MVC框架是非常优秀的,从各个方面都比Struts 2优越,为Web表示层提供了更好的解决方案。
  • 事务管理: Spring以宽广的胸怀接纳多种持久层技术,并且为其提供了声明式的事务管理,在不需要任何一行代码的情况下就能够完成事务管理。
  • 其他: 选择Spring框架的原因还远不止于此,Spring为Java企业级开发提供了一站式选择,你可以在需要的时候使用它的部分或全部,更重要的是,你甚至可以在感觉不到Spring存在的情况下,在你的项目中使用Spring提供的各种优秀的功能。

19、持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些?

答:
定义: "持久"就是将数据保存到可掉电式存储设备中,简单的说,就是将内存中的数据保存到关系型数据库、文件系统、消息队列等提供持久化支持的设备中。持久层就是系统中专注于实现数据持久化的相对独立的层面

1)持久层设计的目标包括:

  • 数据存储逻辑的分离,提供抽象化的数据访问接口。
  • 数据访问底层实现的分离,可以在不修改代码的情况下切换底层实现。
  • 资源管理和调度的分离,在数据访问层实现统一的资源调度(如缓存机制)。
  • 数据抽象,提供更面向对象的数据操作。

2)持久层框架有:

  • Hibernate
  • MyBatis
  • TopLink
  • Guzz
  • jOOQ
  • Spring Data
  • ActiveJDBC

第7天(1/1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值