Java常用面试题之Java框架篇(八)


71,谈谈你对Struts的理解

	1.struts的优缺点

	优点:把一般的处理流程步骤化:参数自动类型转换、参数值有效性检验、处理结果导航,有比el表达式更强大
	的ognl表达式,再配合struts的自定义标签,使得页面数据显示非常方便提供了强大的拦截器,可以定制个性
	化的需求处理流程
	线程安全,因为每次请求都会产生一个action对象以及和action相关的对象
	耦合度低,降低编码复杂度
	缺点:属于重量级框架,太复杂,现在很多项目使用SpringMVC代替struts
	
	1.struts请求处理流程

	客户端发送请求到服务器后,请求被struts核心过滤器捕获
	请求经过一系列拦截器的拦截处理最终到达匹配的action
	action调用业务逻辑层执行业务,完成后返回一个字符串
	struts引擎根据配置信息和字符串,把请求导航到某个资源生成响应

72、谈谈你对Hibernate的理解。

	1)Java是面向对象的,操作的习惯是直接对对象进行操作;现在主流的数据库是关系型的,操作的习惯是对关系
	表进行操作。Java代码要想访问数据库获取或者存储数据,就需要使用一个中间媒介:JDBC。由于是java通过	
	JDBC去操作数据库,所以JDBC编程时的风格并不是面向对象的风格,这样就会导致JDBC的代码量很多而且很复
	杂不方便。这对于中小型项目来说勉强可以接受,但对于大型项目能把程序员逼疯。
	2)一个新技术的出现往往是解决现有技术的缺点,hibernate就属于这样。Hibernate通过封装JDBC,使用orm
	思想把程序对对象的操作自动的映射成对关系数据库的操作,从而使java访问数据库的编码更符合面向对象的操
	作习惯,而且简化了很多复杂操作
	3)hibernate对数据库操作的封装十分完善,从而功能异常强大,但这也不得不增加hibernate自身的复杂度,
	也就增加了学习的成本。一般来说很多程序员很难很好的掌握hibernate,所以现在很多企业使用hibernate时
	主要使用hibernate管理对象和表之间的映射,而表和表之间的各种关联关系特别是多对多关系则用的很少,
	而是使用普通的JDBC方式去解决表和表之间的关联关系
	4)使用hibernate的基本流程是:配置核心hibernate.cfg.xml核心配置文件、配置对象和表之间的映射文件
	xxx.hbm.xml、创建SessionFactory核心对象、创建session对象,启动事务,完成CRUD操作,提交事务,
	关闭session
	5)hibernate的缓存,有session级别的一级缓存还有sessionfactory级别的二级缓存。可以很好的提高访问
	数据库的效率

73,谈谈你对Spring的理解。

	1.spring是个对象容器,用来管理众多的java对象,包括创建对象、维护对象间的关系、自动调用部分对象的方
	法完成通用功能、销毁对象等。Spring通过IOCAOP两种思想实现上述功能。
	2.IOC称为控制反转,也可以称为DI,即依赖注入,这种思想用来让spring根据配置自动创建需要的对象,并管
	理对象之间的关系(给对象的字段赋值),这就使得程序员不需要考虑如何创建需要的对象,而是认为spring已
	经直接把对象提供好了,可以直接使用这个对象干活了
	3.AOP是面向切面编程,是OOP面向对象编程的很好的补充。AOP用来把一些通用的和核心业务逻辑无关的操作抽
	取出来,交给容器去自动处理,比如检查权限、记录日志等,这样可以大大简化程序员的编码工作,让程序员只
	专注于核心业务逻辑的实现
	4.提供了非常好的声明式事务管理

74,谈谈Struts的优缺点

	struts的优缺点
	优点:把一般的处理流程步骤化:参数自动类型转换、参数值有效性检验、处理结果导航,有比el表达式更强大
	的ognl表达式,再配合struts的自定义标签,使得页面数据显示非常方便提供了强大的拦截器,可以定制个性
	化的需求处理流程
	线程安全,因为每次请求都会产生一个action对象以及和action相关的对象
	耦合度低,降低编码复杂度
	缺点:属于重量级框架,太复杂,现在很多项目使用SpringMVC代替struts

75,iBatis与Hibernate有什么不同?

	ibatis的特点:半自动化
	sql要手动写
	delete、insert、update:直接传入一个对象
	select:直接返回一个对象
	hibernate:全自动
	不写sql,自动封装
	delete、insert、update:直接传入一个对象
	select:直接返回一个对象

76,在hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解 
决?

	解决方案一,按照Object[]数组取出数据,然后自己组bean
	解决方案二,对每个表的bean写构造函数,比如表一要查出field1,field2两个字段,那么有一个构造函数就
	是Bean(type1 field1,type2 field2),然后再hql里面就可以直接生成这个bean了

77,介绍一下Hibernate的二级缓存

	1.缓存就是把以前从数据库中查询出来和使用过的对象保存在内存中(一个数据结构中),这个数据结构通常是
	或类似Hashmap,当以后要使用某个对象时,先查询缓存中是否有这个对象,如果有则使用缓存中的对象,如果
	没有则去查询数据库,并将查询出来的对象保存在缓存中,以便下次使用。
	2.hibernate的session里面有缓存,我们通常称之为一级缓存。当想使用session从数据库中查询出一个对象
	时,session先从自己内部查看是否存在这个对象,存在则直接返回,不存在才去访问数据库,并将查询的结果
	保存在自己内部。由于session代表一次会话过程,一个session与一个数据库连接相关,所以session最好不
	要长时间保持打开,通常仅用于一个事务当中,在事务结束时就应关闭。并且session是线程不安全的,被多个
	线程共享时容易出现问题。通常只有那种全局意义的缓存才是真正的缓存应用,才有较大的缓存价值,因此,
	hibernate的session这一级缓存的缓存作用并不明显,应用价值不大。hibernate的二级缓存就是要为
	hibernate配置一种全局缓存,让多个线程和多个事务都可以共享这个缓存。我们希望的是一个人使用过,其他
	人也可以使用,session没有这种效果。
	3.hibernate只负责制定二级缓存的标准,任何人都可以实现这个标准,例如,EHCache和OSCache就是第三方
	厂商的产品。在hibernate中使用二级缓存,首先就要在hibernate.cfg.xml配置文件中配置使用哪个厂家的缓
	存产品,接着需要配置该缓存产品自己的配置文件,最后要配置hibernate中的哪些实体对象要纳入到二级缓存
	的管理中。一个SessionFactory可以关联一个二级缓存,也即一个二级缓存只能负责缓存一个数据库中的数据。

78JDO是什么?

	JDO是java对象持久化新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标
	准化APIJDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC 
	API的使用)。这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精
	力在业务逻辑上。另外,JDO很灵活,因为它可以在任何数据底层上运行。JDBC只是面向关系数据库(RDBMSJOD 更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,
	使得应用可移植性更强

79,Hibernate的一对多和多对一双向关联的区别??

	一对多关联映射和多对一关联映射实现的基本原理都是一样的,即是在多的一端加入一个外键指向一的一端外键,
	而主要的区别就是维护端不同
	他们的区别在于维护的关系不同:
	一对多关联映射是指在加载一的一端数据的同时加载多的一端的数据
	多对一关联映射是指在加载多的一端数据的同时加载一的一端的数据

80,Hibernate是如何延迟加载? 

	通过设置属性lazy进行设置是否需要懒加载
	当Hibernate在查询数据的时候,数据并没有存在于内存中,当程序真正对数据的操作时,对象才存在于内存中,
	就实现了延迟加载,它节省了服务器的内存开销,从而提高了服务器的性能

上一篇: Java常用面试题之JavaWeb篇(七)
下一篇: Java常用面试题之Java框架篇(九)

猜你喜欢

转载自blog.csdn.net/Mr_TXQ/article/details/109046689
今日推荐