java中三大框架和项目模拟面试题目(3)

2019-03-16 22:21

a) 事务方式选用:如果不涉及多个事务管理器事务的话,不需要使用JTA,只有JDBC的事务控制就可以。

b) 事务隔离级别:参见标准的SQL事务隔离级别

c) 锁的选用:悲观锁(一般由具体的事务管理器实现),对于长事务效率低,但安全。乐观锁(一般在应用级别实现),如在HIBERNATE中可以定义VERSION字段,显然,如果有多个应用操作数据,且这些应用不是用同一种乐观锁机制,则乐观锁会失效。因此,针对不同的数据应有不同的策略,同前面许多情况一样,很多时候我们是在效率与安全/准确性上找一个平衡点,无论如何,优化都不是一个纯技术的问题,你应该对你的应用和业务特征有足够的了解。 9、 批量操作

即使是使用JDBC,在进行大批数据更新时,BATCH与不使用BATCH有效率上也有很大的差别。我们可以通过设置batch_size来让其支持批量操作。 举个例子,要批量删除某表中的对象,如“delete Account”,打出来的语句,会发现HIBERNATE找出了所有ACCOUNT的ID,再进行删除,这主要是为了维护二级缓存,这样效率肯定高不了,在后续的版本中增加了bulk delete/update,但这也无法解决缓存的维护问题。也就是说,由于有了二级缓存的维护问题,HIBERNATE的批量操作效率并不尽如人意!

从前面许多要点可以看出,很多时候我们是在效率与安全/准 确性上找一个平衡点,无论如何,优化都不是一个纯技术的问题,你应该对你的应用和业务特征有足够的了解,一般的,优化方案应在架构设计期就基本确定,否则 可能导致没必要的返工,致使项目延期,而作为架构师和项目经理,还要面对开发人员可能的抱怨,必竟,我们对用户需求更改的控制力不大,但技术/架构风险是应该在初期意识到并制定好相关的对策。

还有一点要注意,应用层的缓存只是锦上添花,永远不要把它当救命稻草,应用的根基(数据库设计,算法,高效的操作语句,恰当API的选择等)才是最重要的。

2.10. 如何解决关联数据延迟加载NoSession问题

? 在确定关联数据是必须时,可以配置 lazy=false 使用立即加载策略 ? 使用OpenSessionInView 模式,在需要数据时,才去加载

? 在程序中,根据业务需要,手动Hibernate.initialize() 手动初始化延迟加载数据

2.11. Hibernate 的 sessionfactory 和 session 的区别是

什么?如何处理 session 线程不安全问题?

sessionfactory 是一个数据源对应着一个 sessionfactory,也就说他是属于二级缓存,如果是 集群环境,他可以动态的配置使用这个数据源或者

不使用这个数据源,session 是等于一次回话,也就是说是一级缓存,并且是由 sessionfactory 创建的,再有 sessionfactory 是线程安全的,相反的 session 不安全的;

解决 session 不安全的问题,就是大家通常用的常规写法,一次会话后关闭 session,避免

session 重用;

2.12. Hibernate 如何实现动态查询?DetachedCriteria

与 Criteria 的区别是什么?

条件查询呗,编程的方式代替 HQL 语句,DetachedCriteria 单词很简明了,Detached 是分离, 分离,分离什么,当然是业务层的应用,原本的Criteria 是与 session 绑定的,现在用DetachedCriteria这个来分离。

3. Spring3 框架题目

3.1. Spring框架的优点

? 方便解耦,简化开发

? Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理 ? AOP编程的支持

? Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能 ? 声明式事务的支持

? 只需要通过配置就可以完成对事务的管理,而无需手动编程 ? 方便程序的测试

? Spring对Junit4支持,可以通过注解方便的测试Spring程序 ? 方便集成各种优秀框架

? Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、

Hibernate、MyBatis、Quartz等)的直接支持

? 降低JavaEE API的使用难度

? Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),

都提供了封装,使这些API应用难度大大降低

3.2. 谈谈你理解的IoC和DI

IOC是Inversion of Control的缩写,控制反转,简单来说就是把复杂系统分解成相互合作的对象,借助于“第三方”实现具有依赖关系的对象之间的解耦。 这里的第三方 就是指Ioc容器(Spring 框架),所有对象的创建权,都交由Spring管理。

DI的出现,是对IoC的更近一步分析,既然IOC是控制反转,那么到底是“哪些方面的控

制被反转了呢?经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。

依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。

3.3. Spring中BeanFactory和ApplicationContext 的作用

和区别?

作用:

1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。

2. ApplicationContext除了提供上述BeanFactory所能提供的功能之外,还提供了更完整的框架功能:

a. 国际化支持

b. 资源访问:Resource rs = ctx. getResource(”classpath:config.properties”), “file:c:/config.properties”

c. 事件传递:通过实现ApplicationContextAware接口

3.4. Spring 中有几种事务管理?

编程式事务管理,通过TransactionTemplate 实现

声明式事务管理,基于AOP 切面编程实现 ,无需编码,灵活性更高

3.5. Spring 的 Bean作用域

在spring2.0之前bean只有2种作用域即:singleton(单例)、non-singleton(也称 prototype),Spring2.0以后,增加了session、request、global session三种专用于Web应用程序上下文的Bean。因此,默认情况下Spring2.0现在有五种类型的Bean。

1、singleton作用域

当一个bean的作用域设置为singleton,那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。换言之,当把一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例,这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的,单例设计模式表示一个ClassLoader中只有一个class存在,而这里的singleton则表示一个容器对应一个bean,也就是说当一个bean被标识为

singleton时候,spring的IOC容器中只会存在一个该bean。

2、prototype

prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)都会产生一个新的bean实例,相当于一个new的操作,对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个 prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用。

3.6. Spring使用属性注入方式

两种依赖注入的类型分别是setter注入和构造方法注入。

setter注入: 一般情况下所有的java bean, 我们都会使用setter方法和getter方法去设置和获取属性的值。

构造方法注入:使用带参数的构造方法

3.7. Spring配置文件applicationContext.xml 能不能改名

ContextLoaderListener是一个ServletContextListener, 它在你的web应用启动的时候初始化。缺省情况下, 它会在WEB-INF/applicationContext.xml文件找Spring的配置。 你可以通过定义一个元素名字为”contextConfigLocation”来改变Spring配置文件的位置。

contextConfigLocation /WEB-INF/itcast.xml

3.8. Spring的声明式事务的如何实现的?

使用内置 TransactionProxyFactoryBean 为目标对象创建AOP代理对象,通过指定TransactionManager 对目标对象的方法添加事务管理操作

3.9. Spring AOP编程原理?项目中如何使用的?

将传统继承的代码复用,变为代码的横向抽取机制,通过 代理机制,向目标对象织入增强代码。

Spring AOP底层基于 Jdk动态代理和Cglib 动态代理 实现

项目中用到的Spring中的切面编程最多的地方:声明式事务管理。 a、定义一个事务管理器

b、配置事务特性(相当于声明通知。一般在业务层的类的一些方法上定义事务) c、配置哪些类的哪些方法需要配置事务(相当于切入点。一般是业务类的方法上)

3.10. Spring提供哪些事务传播行为 ?

PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。 PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED–如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

事务传播行为,主要用于解决,两个事务方法互相调用的问题,例如A方法开启事务,调用B方法,B方法也进行事务管理,A方法和B方法的事务是怎样的关系问题。

4. 项目题目

4.1. 你先介绍下你开发的这个项目?

从项目的背景、项目业务进行介绍

4.2. 你负责项目中哪个部分?

4.3. 你负责的这个模块,都实现了哪些功能? 4.4. Xxx功能模块是如何实现的 ?

通常问到这个问题后,就会进入一些技术细节的问题

4.5. 你在项目开发中有没有遇到什么难解决的问题?最终

是如何解决的?

4.6. Xxx技术在项目中是如何应用的? 4.7. JBPM的开发流程

流程设计 ---- 流程定义发布 ---- 流程实例启动 ---- 组任务查询 --- 任务拾取 ---- 个人任务查询 ---- 根据form属性跳转到办理页面 --- 任务办理 --- 流程流转

4.8. 数据库是如何优化的?

4.9. Lucene的存储结构,如何和数据库关联的? 4.10. Hibernate二级缓存在项目中是如何应用的?

PS: 项目这部分,还是有项目的模拟面试老师自己去把控吧,很难写清楚!


java中三大框架和项目模拟面试题目(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:湛江市教育信息化平台

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: