JAVA面试题

1. Spring

Spring是一个开源的轻量级的Java EE开发框架.Spring框架的目标是使得Java EE应用程序的开发更加简便,通过使用POJO为基础的编程模型促进良好的编程风格.

1.IOC

控制反转,将对象的创建交给Spring容器管理,由Spring容器来创建,初始化以及销毁对象.

  1. Spring框架的核心是Spring容器.容器创建对象,将他们装配在一起,配置他们并管理他们的完整生命周期.Spring使用依赖注入来管理组成应用程序的组件.容器通过读取提供的配置元数据来接收对象进行实例化.
  2. 在依赖注入中,您不必创建对象,但必须描述如何创建他们.不是直接在代码中将组件和服务连接在一起,而是描述配置文件中那些组件需要那些服务,然后由IOC容器将他们装配在一起.(构造器注入,Setter注入,注解注入( 1. Autowired是自动注入,自动从spring的上下文找到合适的bean来注入.(Qualifier)2. Resource用来指定名称注入.))

1.1 Bean

1.BeanFactory

基础类型IOC容器,提供了完整的IOC服务支持.默认采用延迟初始化策略(lazy-load).只有当客户端需要访问到容器中某一个受管对象的时候,才会对受管对象进行初始化以及依赖注入操作,所以相对来说,容器启动初期速度较快,所需要的资源有限.

2. ApplicationContext

这是BeanFactory的升级版,拥有了BeanFactory的所有支持,ApplicationContext还提供了其他的高级特性,比如事件发布、国际化信息支持等.
ApplicationContext默认初始化全部容器对象(及时加载),需要更多的系统资源,启动时间较长.

2.AOP

AOP(Aspect Oriented Programming,面向切面编程),可以说是 OOP(Object Oriented Programing,面向对象编程)的补充和完善。OOP 引入封装、继承和多态性等概念来建立一种对象层次结构,用来模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP 允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能,日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如权限管理、异常处理等也是如此。这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在 OOP 设计中,它导致了大量代码的重复,而不利于各个模块的重用。

而 AOP 技术则恰恰相反,它利用一种称为 “横切” 的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为 “Aspect” ,即切面。所谓“切面”,简单地说,就是将权限、事务、日志、异常等与业务逻辑相对独立的功能抽取封装,便于减少系统的重复代码,降低模块间的耦合度,增加代码的可维护性。AOP 代表的是一个横向的关系,如果说 “对象” 是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向切面编程,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息,然后又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹。

切面理解:用刀将西瓜分成两瓣,切开的切口就是切面;炒菜、锅与炉子共同来完成炒菜,锅与炉子就是切面。Web 层级设计中,Controller 层、Service 层、Dao 层,每一层之间也是一个切面。编程中,对象与对象之间,方法与方法之间,模块与模块之间都是一个个切面。

  1. Advice(通知)
    前置通知(Before advice):在目标方法调用前执行通知
    环绕通知(Around advice):在目标方法调用前后均可执行自定义逻辑
    返回通知(After returning advice):在目标方法执行成功后,调用通知
    异常通知(After throwing advice):在目标方法抛出异常后,执行通知
    后置通知(After advice):在目标方法完成(不管是抛出异常还是执行成功)后执行通知
  2. JoinPoint(连接点)
    就是 Spring 允许你放通知(Advice)的地方,很多,基本每个方法的前、后(两者都有也行)或抛出异常时都可以是连接点,Spring 只支持方法连接点,和方法有关的前前后后都是连接点。

Tips:可以使用连接点获取执行的类名、方法名和参数名等。

  1. Pointcut(切入点)
    是在连接点的基础上来定义切入点。比如在一个类中,有 15 个方法,那么就会有几十个连接点,但只想让其中几个方法的前后或抛出异常时干点什么,那么就用切入点来定义这几个方法,让切入点来筛选连接点。

  2. Aspect(切面)
    是通知(Advice)和切入点(Pointcut)的结合,通知(Advice)说明了干什么和什么时候(通过@Before、@Around、@After、@AfterReturning、@AfterThrowing来定义执行时间点)干,切入点(Pointcut)说明了在哪(指定方法)干,这就是一个完整的切面定义。

  3. AOP 代理
    AOP Proxy:AOP 框架创建的对象,代理就是目标对象的加强。AOP 巧妙的例用动态代理优雅的解决了 OOP 力所不及的问题。Spring 中的 AOP 代理可以是 jdk 动态代理,也可以是 cglib 动态代理。前者基于接口,后者基于子类。

2. Spring mvc

3. Spring cloud

4. Mybatis

5. H

6. Hashmap、List、Map、Set、Linkedlist

7. Rebbitmp

8. Redis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值