java框架ssh企业面试题

1Spring是干嘛的?

        它是一个full-stack框架,提供了从表现层到业务层再到持久层的一套完整的解决方案。我们在项目中可以只使用spring一个框架,它就可以提供表现层的mvc框架,持久层的Dao框架。

        它的两大核心IoCAOP更是为我们程序解耦和代码简洁易维护提供了支持。

2你知道依赖注入么?简单介绍一下

        首先,明确依赖注入是实现控制反转的一种思想(另一种是依赖查找)。

        其次,在开发过程中,我们需要某个类的实例时,是由使用者为我们提供该类的实例。而不是自己去获取。

        最后,实现依赖注入的方式可以是使用构造方法注入或者set方法注入两种方式。

        spring中注入的方式就有很多了,比如constructor-arg元素,property元素,p名称空间等等。

3你知道控制反转么?简单介绍一下

        它是spring的核心之一。或者说是spring的基础核心,spring的其余核心功能都必须有IoC的支持。

        控制反转指的是,我们在获取对象的时候,由之前的主动出击,变成了被动接收。也就是说,在编写某个类时,只需要提供一个接口类型的类成员,并不需要关系具体的实现类,而是由使用者在使用时提供。这就降低了类和类之间的耦合度。

4.项目中为什么使用SSH
1. 使用Struts是因为struts是基于MVC模式的,很好的将应用程序进行了分层,使开发者更关注于业务逻辑的实现;第二,struts有着丰富的taglib,如能灵活运用,则能大大提高开发效率。
2. 使用Hibernate:因为hibernateJava应用提供了一个易用的、高效率的对象关系映射框架。hibernate是个轻量级的持久性框架,功能丰富。
3. 使用Spring:因为spring基于IoC(Inversion of Control,反向控制)AOP构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;
采用IoC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现事务管理(Transcation Managment),等等 

5struts如何实现国际化
以下以两国语言(中文,英文)为例:
1. 在工程中加入Struts支持
2. 编辑ApplicationResource.properties文件,在其中加入要使用国际化的信息, 例如: lable.welcome.china=Welcome!!!
3. 创建英文资源文件ApplicationResource_en.properites
4. 创建临时中文资源文件ApplicationResource_temp.properites 例如:lable.welcom.china=中国欢迎您!
5. 对临时中文资源文件进行编码转换。可以使用myeclipse的插件,也可以在dos下执行:
native2ascii -encoding gb2312 ApplicationResource_temp.properties ApplicationResource_zh_CN.properties
6. jsp中加入strutsbean标记库 
显示信息: 
可以在struts-config.xml文件中定义多个资源包,而每个资源包可使用key属性指定包的名称。

6struts2.0的常用标签
1. action里传值:
2. 显示标签 property 用于输出指定值:
3. 用于从页面往action(user)的对象内传值:
4. 判断 用于在页面中判断指定数据 …. …. 
5. 迭代用于将ListMapArrayList等集合进行循环遍历
6. URL地址标签,用于生成一个URL地址,可以通过URL标签指定的子元素向URL地址发送请求参数
7. 超链接 一般和标签一起使用,用于带多个参数。
<a href="“>超链接
8. set标签,用于将某个值放入指定的范围内。例如application,session等。

7struts2.0mvc模式?struts1.0的区别?
struts2mvc模式:当用户在页面提交用户请求时,该请求需要提交给struts2的控制器处理。struts2的控制器根据处理结果,
决定将哪个页面呈现给客户端。
struts1最大的不同是:struts2的控制器。struts2的控制器不再像struts1的控制器,需要继承一个Action父类,甚至可以无需实现
任何接口,struts2Action就是一个普通的POJO。实际上,Struts2 Action就是一个包含execute方法的普通Java
该类里包含的多个属性用于封装用户的请求参数。

8Hibernatejdbc的联系
hibernatejdbc的轻量级封装,包括jdbc的与数据库的连接(用hibernate.property的配置文件实现当然本质是封装了jdbcforname),
和查询,删除等代码,都用面向对象的思想用代码联系起来,hibernate通过hbm 配置文件把po类的字段和数据库的字段关联起来比如数据库的id,
po类中就是pravite Long id; public Long getId() ;public setId(Long id);
然后hql语句也是面向对象的,它的查询语句不是查询数据库而是查询类的,这些实现的魔法就是xml文件,其实hibernate=封装的jdbc+xml文件

9Hibernatespring的联系
hibernate中的一些对象可以给Spring来管理,Spring容器来创建hibernate中一些对象实例化。例如:SessionFactoryHibernateTemplate等。
Hibernate本来是对数据库的一些操作,放在DAO,Spring给业务层的方法定义了事务,业务层调用DAO层的方法,很好的将Hibernate的操作也加入到事务中来了。

10Hibernate自带的分页机制是什么?如果不使用Hibernate自带的分页,则采用什么方式分页?
1hibernate自带的分页机制:获得Session对象后,从Session中获得Query对象。用Query.setFirstResult():设置要显示的第一行数据,
Query.setMaxResults():设置要显示的最后一行数据。
2、不使用hibernate自带的分页,可采用sql语句分页,
如:5:为每页显示的记录,2为当前页: select * top 5 from table where tabId not in (select tabId top (2-1)*5 from table);

11hibernate的三种状态之间如何转换
当对象由瞬时状态(Transient)save()时,就变成了持久化状态。
当我们在Session里存储对象的时候,实际是在SessionMap里存了一份,
也就是它的缓存里放了一份,然后,又到数据库里存了一份,在缓存里这一份叫持久对象(Persistent)
Session Close()了,它的缓存也都关闭了,整个Session也就失效了,
这个时候,这个对象变成了游离状态(Detached),但数据库中还是存在的。
当游离状态(Detached)update()时,又变为了持久状态(Persistent)
当持久状态(Persistent)delete()时,又变为了瞬时状态(Transient),
此时,数据库中没有与之对应的记录。

12hibernate拒绝连接、服务器崩溃的原因?最少写5
1. db没有打开
2. 网络连接可能出了问题
3. 连接配置错了
4. 驱动的driverurl是否都写对了
5. LIB下加入相应驱动,数据连接代码是否有误
6. 数据库配置可能有问题
7. 当前联接太多了,服务器都有访问人数限制的
8. 服务器的相应端口没有开,即它不提供相应的服务
9 hibernate有哪些缓存,分别怎么使用?
10 你对hibernate的了解到了一个什么样的程度?
11 写出一个sql语句体现hibernate中一对多的关系

12你一般用spring做什么?
控制反转IOC AOP

13项目中如何体现Spring中的切面编程,距离说明。
面向切面编程:主要是横切一个关注点,将一个关注点模块化成一个切面。在切面上声明一个通知(Advice)和切入点(Pointcut); 通知: 是指在切面的某个特定的连接点(代表一个方法的执行。通过声明一个org.aspectj.lang.JoinPoint类型的参数可以使通知(Advice)的主体部分获得连接点信息。)上执行的动作。通知中定义了要插入的方法。切入点:切入点的内容是一个表达式,以描述需要在哪些对象的哪些方法上插入通知中定义的方法。
项目中用到的Spring中的切面编程最多的地方:声明式事务管理。
a、定义一个事务管理器
b、配置事务特性(相当于声明通知。一般在业务层的类的一些方法上定义事务)
c、配置哪些类的哪些方法需要配置事务(相当于切入点。一般是业务类的方法上)

14spring中可以用注入获得属性值,还有其他的方式吗?
读取配置文件 

15spring在项目中如何充当粘合剂
1、在项目中利用springIOC(控制反转或依赖注入),明确地定义组件接口(UserDAO),开发者可以独立开发各个组件, 然后根据组件间的依赖关系组装(UserAction依赖于UserBiz,UserBiz依赖于UserDAO)运行,很好的把Struts(Action)hibernate(DAO的实现)结合起来了。
2spring的事务管理把hibernate对数据库的操作进行了事务配置。

16:Hibernate是如何延迟加载? 

1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection) 

2. 2. Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。  

17:Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 

类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many 

18: 说下Hibernate的缓存机制 
1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存 
2. 二级缓存: 
a) 应用及缓存 
b) 分布式缓存 
       条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据 
c) 第三方缓存的实现 

19: Hibernate的查询方式 
SqlCriteria,object comptosition 
Hql 

1. 属性查询 

2. 参数查询、命名参数查询 

3. 关联查询 

4. 分页查询 

5. 统计函数 

20:如何优化Hibernate 

· 使用双向一对多关联,不使用单向一对多 

· 灵活使用单向一对多关联 

· 不用一对一,用多对一取代 

· 配置对象缓存,不使用集合缓存 

· 继承类使用显式多态 

· 表字段要少,表关联不要怕多,有二级缓存撑腰 

21:Hibernatemybatis有什么区别?

 

1mybatis是把sql语句与java代码分离了,sql语句在xml文件配置的

2hibernateORM框架,它对jdbc进行了封装,在分层结构中处于持久化层,它能建立面向对象的域模型和关系数据模型之间的映射.它大大简化了dao层的编码工作

      3  mybatis是半自动的,hibernate是全自动的,就是说mybatis可以配置sql语句,对于sql调优来说是比较好的,hibernate会自动生成所有的sql语句,调优不方便,hibernate用起来难度要大于mybatis

 

22:Hibernate中的update()saveOrUpdate()的区别

    答:update是修改的方法,saveOrUpdate是保存或者更新

        saveorupdate()如果传入的对象在数据库中有就做update操作,如果没有就做save操作。

        save()在数据库中生成一条记录,如果数据库中有,会报错说有重复的记录。

        update()就是更新数据库中的记录

23:spring管理事务有几种方式

        有两种方式:

                1、编程式事务,在代码中硬编码。(不推荐使用)

                2、声明式事务,在配置文件中配置(推荐使用)

                        声明式事务又分为两种:

                                a、基于XML的声明式事务

                                b、基于注解的声明式事务

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值