每天五个java相关面试题(8)--spring篇

首先呢,假设有从事前端开发的大神或者准备从事前端开发的小伙伴无意看到我这篇博客看到这段文字欢迎加我的QQ:【 845415745 】。即将走入社会的菜鸟大学生有关于前端开发的职业问题想请教或者一起探讨一下,谢谢谢谢。

今天依然不变的每日五个

1使用Spring框架的优点是什么?

答:

轻量: Spring 是轻量的,主要的版本号大约2MB。

控制反转: Spring通过控制反转实现了松散耦合,对象们给出它们的依赖。而不是创建或查找依赖的对象们。

面向切面的编程(AOP): Spring支持面向切面的编程,而且把应用业务逻辑和系统服务分开。

容器: Spring 包括并管理应用中对象的生命周期和配置。

MVC框架: Spring的WEB框架是个精心设计的框架。是Web框架的一个非常好的替代品。

事务管理: Spring 提供一个持续的事务管理接口,能够扩展到上至本地事务下至全局事务(JTA)。

异常处理: Spring 提供方便的API把详细技术相关的异常(比方由JDBC。Hibernate or JDO抛出的)转化为一致的unchecked 异常。

2.说说AOP和IOC/DI的概念以及在spring中是怎样应用的?

答:

AOP,Aspect Oriented Program。面向(方面)切面的编程;

IOC,Invert Of Control。控制反转。

对象的实例由容器自己主动生成,

即用接口编程,在程序中不出现newkeyword,而是用接口来命名引用。

然后通过某种方式把接口的某个实现类的实例注入到引用里。从而实现接口与详细实现类的松耦合。

由容器控制程序之间的关系(通过XML配置),而非传统实现中的由程序代码直接操控,

依赖注入,是IOC的一个方面,是个通常的概念。它有多种解释。

这概念是说你不用创建对象。而仅仅须要描写叙述它怎样被创建。

你不在代码里直接组装你的组件和服务,可是要在配置文件中描写叙述哪些组件须要哪些服务。之后一个容器(IOC容器)负责把他们组装起来。简单说一下。IOC就是事实上就是依赖注入。(在一个Class对象中引用还有一个Class对象时。我们通常都是直接通过new contructor)。

控制权由应用代码中转到了外部容器,控制权的转移,是所谓的反转。

AOP方式非常相似filter。就是在程序正常的业务流中间像切面一样插入非常多其它须要执行的代码,

比方登录时候,在进入登录页面前写入日志,非经常常使用的,尤其是跟数据库有关的,或者跟支付有关的程序肯定会在每一

步前面插入日志。

面向方面的编程,即 AOP。是一种编程技术,它同意程序猿对横切关注点或横切典型的职责分界线的行为(比如日志和事务管理)进行模块化。

AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。

AOP Advice(AOP通知)分为:

前置通知 后置通知 异常通知 围绕通知

3:Spring的事物有几种方式?Spring框架的事务管理有哪些优点? 你更倾向用那种事务管理类型?谈谈spring事物的隔离级别和传播行为?

编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,可是难维护。

声明式事务管理:这意味着你能够将业务代码和事务管理分离,你仅仅需用注解和XML配置来管理事务。

它为不同的事务API 如 JTA,JDBC,Hibernate。JPA 和JDO。提供一个不变的编程模式。

它为编程式事务管理提供了一套简单的API而不是一些复杂的事务API如

它支持声明式事务管理。

它和Spring各种数据訪问抽象层非常好得集成。

大多数Spring框架的用户选择声明式事务管理,由于它相应用代码的影响最小,

因此更符合一个无侵入的轻量级容器的思想。声明式事务管理要优于编程式事务管理。

尽管比编程式事务管理(这样的方式同意你通过代码控制事务)少了一点灵活性。

事务的隔离级别:

数据库系统提供了4种事务隔离级别。在这4种隔离级别中。Serializable的隔离级别最高。Read Uncommitted的隔离级别最低。

· Read Uncommitted 读未提交数据;(会出现脏读)

· Read Committed 读已提交数据;

· Repeatable Read 可反复读;

事务的传播属性包括:

· Required业务方法须要在一个事务中执行,假设一个方法执行时已经处在一个事务中。那么增加到该事务。否则为自己创建一个新事务。 80%的方法用到该传播属性。

· Not-Supported· Requiresnew· Mandatoky· Supports· Never· Nested

4: 解释Spring框架中bean的生命周期及Spring支持的几种作用域。

答:

  • Spring容器 从XML 文件中读取bean的定义,并实例化bean。

    Spring依据bean的定义填充全部的属性。

  • 假设bean实现了BeanNameAware 接口。Spring 传递bean 的ID 到 setBeanName方法。
  • 假设Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 方法。
  • 假设有不论什么与bean相关联的BeanPostProcessors。Spring会在postProcesserBeforeInitialization()方法内调用它们。

  • 假设bean实现IntializingBean了,调用它的afterPropertySet方法,
  • 假设bean声明了初始化方法。调用此初始化方法。
  • 假设有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 方法将被调用。

  • 假设bean实现了 DisposableBean,它将调用destroy()方法。

    Spring框架支持下面五种bean的作用域:

singleton : bean在每一个Spring ioc 容器中仅仅有一个实例。
prototype:一个bean的定义能够有多个实例。

request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
session:在一个HTTP Session中,一个bean定义相应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
global-session:在一个全局的HTTP Session中,一个bean定义相应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

5:面向切面的原理

答:

面向对象的编程主要注重核心业务,而面向切面编程主要关注一些不是核心的业务,但又是必须的辅助功能。

就是把那些不是核心业务应该处理的代码提取出来,进行封装成模块化.来处理那些附加的功能代码(如日志。事务。安全验证)我们把这个模块的作用理解为一个切面,告诉我们它是一个功能模块.我们能够把它看成一个切面.说白了就是我们写一个类。在这个类中写一些处理在核心业务中起到相同效果的方法.

我们还要了解两个keyword:

 连接点(Joinpoint),简单的理解就是在切面模块中定义的方法.就是上面定义类中的方法.

 切入点(Pointcut).就是连接点的集合,就是一组方法的集合了. 下面几个就比較理解了。目标对象就是要处理的核心业务了.代理就更easy理解了。让一个代理去完毕这个任务.

 关于AOP编程可关注我关于代理的三篇博客:

 Spring AOP 学习之静态代理

 Spring AOP 学习之java JDK动态代理

 Spring AOP 学习之cJlib动态代理

时间: 2024-10-07 06:14:45

每天五个java相关面试题(8)--spring篇的相关文章

每天五个java相关面试题(1)--struts2部分

好啦 好啦.过不了多久我要参加社招啦,每天在博客更新五个java方面的面试题以及参考回答的答案. 最近先来框架部分. 首先是struts2: 开始! 1.Struts2工作机制? 答: 1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求: 2.这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin): 3.接着FilterD

每天五个java相关面试题(10)--java基础详解篇2

好勒好勒.一起加油 一.HashMap和Hashtable的区别. 答: HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable. HashMap允许将null作为一个entry的key或者value,而Hashtable不允许. HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey.因

每天五个java相关面试题(6)

今天七夕节,苦逼的我还在写网页看面试题...早点看完睡觉拜拜啊 开始吧 1.forward 和 redirect 的区别 答: forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址. redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都

每天五个java相关面试题(4)

每天五个题咯 今天继续: 1. int和Integer有什么区别? 答: int是JAVA八大基本数据类型(byte,shor,int,long,char,boolean,float,double)之一. JAVA语言为八大基本数据提供了包装类,Integer对应是int类型的包装类,就是把int类型包装成Object对象. 2.DOM解析与SAX解析的不同? 答: SAX:只能读,不能修改,只能顺序访问,适合对大型的XML的解析,解析速度快! DOM:不仅能读,还能修改,而且能够实现随机访问,

每天五个java相关面试题(2)

这次主要是mybatis部分的 1.Mybatis基础: #{-} 和 ${-} 的区别 答: MyBatis将 #{-} 解释为JDBC prepared statement 的一个参数标记.而将 ${-} 解释为字符串替换.理解这两者的区别是很有用的, 因为在某些SQL语句中并不能使用参数标记(parameter markers). 比如,我们不能在表名(table name)的位置使用参数标记. 假设有下面的代码: Map<String, Object> parms = new Hash

每天五个java相关面试题(7)--线程篇

首先关于线程能够先看我之前这篇博文熟悉一下线程生命周期的图示以及文字说明 好開始了: 1.java 中有几种方法能够实现一个线程? 答:有两种实现方法.各自是继承 Thread类与实现Runnable接口. 1.线程类继承Thread类的语法: (public) class 类名 extends Thread{ public void run(){//这里写线程的内容}} 2.线程类实现java.lang.Runnable类的语法: (public) class 类名 implements Ru

每天五个java相关面试题(3)

1. Servlet的生命周期是什么? 答: 第一次请求: 构造方法->init() -> service() -> doGet()/doPost() 以后的请求:service() -> doGet()/doPost(); Servlet是单实例的. 2. 说出ArrayList,Vector, LinkedList的存储性能和特性HashMap和Hashtable的区别 答: ArrayList Vector:以数组的方式存储,增.删慢,查.改快 ArrayList:线程不安全

每天五个java相关面试题(5)--主要关于网络协议(重点)

今天主要是网络线程方面的,内容有点多慢慢记...但是是面试中非常重要的知识点.所以需要多加记忆和理解. 1.OSI七层模型,每一层的功能 (osi开放式系统接口) 答: 物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的地后在转化为1.0,也就是我们常说的数模转换与模数转换).这一层的数据叫做比特. 数据链路层:定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问.这一层通

Java精选面试题之Spring Boot 三十三问

Spring Boot Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一: Spring Boot.Spring MVC 和 Spring 有什么区别? SpringFrame SpringFramework 最重要的特征是依赖注入.所有 SpringModules 不是依赖注入就是 IOC 控制反转. 当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用.松耦合应用的单元测试可以很容易的进行. Spr