struts spring hibernate面试题 struts spring hibernate面试题 struts spring hibernate面试题 struts spring hibernate面试题 struts spring hibernate面试题 struts spring hibernate面试题 struts spring hibernate面试题 struts spring hibernate面试题 ### Struts、Spring、Hibernate 面试题详解 #### 1. Action 是否线程安全?如果不是,如何保证 Action 的线程安全? - **答案**:通常情况下,Struts 的 Action 不是线程安全的。因为同一个 Action 实例可能会被多个线程共享,导致并发访问时出现问题。 - **解决方案**: - 声明局部变量,避免在 Action 类中使用实例变量。 - 扩展 RequestProcessor,使得每次请求都会创建一个新的 Action 实例。 - 在 Spring 中使用 `scope="prototype"` 来管理 Action 的生命周期,确保每个请求都对应一个新实例。 #### 2. MVC 架构下 Struts 如何实现 M-V-C? - **模型 (Model)**:由 JavaBean 或者 POJO 组成,用于封装业务逻辑和数据。 - **视图 (View)**:主要由 JSP 文件及其标签构成,负责显示数据。 - **控制器 (Controller)**:Action 担任此角色,处理用户的请求,并调用相应的 Model 进行业务处理,最后决定将结果转发给哪个 View。 #### 3. Struts 中的关键对象及其作用 - **Action**:作为控制器,负责接收用户请求并进行处理。 - **ActionForm**:表单对象,用于封装用户的输入数据,便于验证和重用。 - **DynaValidatorForm**:一种动态的 Form 类型,支持动态字段。 - **ActionMapping**:定义在配置文件中的 Action 节点信息,包括 Action 的路径、转发页面等。 #### 4. AOP 和 IOC 的概念及 Spring 中的应用 - **AOP (面向切面编程)**:是一种编程范式,允许将横切关注点(如日志、事务管理)从业务逻辑中分离出来。在 Spring 中,可以通过声明式事务管理和切面来实现 AOP。 - **IOC (控制反转)**:也称为依赖注入,是一种设计模式,通过容器来管理对象的依赖关系,简化了对象之间的耦合度。Spring 通过 BeanFactory 和 ApplicationContext 等接口实现了 IOC。 #### 5. Hibernate 查询数据的方式 - **HQL (Hibernate Query Language)**:类似于 SQL 的查询语言,用于执行复杂的查询。 - **SQL**:直接使用 SQL 语句进行查询。 - **Criteria API**:提供了一种类型安全且灵活的方式来构建查询。 #### 6. load() 与 get() 的区别 - **load()**:默认支持延迟加载。当试图访问尚未初始化的关联对象时,如果数据库中不存在该记录,则抛出 `ObjectNotFoundException`。 - **get()**:立即加载,如果数据库中不存在指定 ID 的记录,则返回 null。 #### 7. Hibernate 的延迟加载与 openSessionInView - **延迟加载**:只在真正需要时才加载关联对象,以提高性能。 - **openSessionInView**:通过在 web 层设置一个 filter 来保持 session 打开状态,从而支持整个请求周期内的延迟加载。 #### 8. Spring 事务管理方式及特性 - **管理方式**: - **声明式事务**:通过 XML 或注解配置事务边界。 - **编程式事务**:通过手动管理事务生命周期来实现。 - **隔离级别**: - `DEFAULT`:使用数据库默认隔离级别。 - `READ_UNCOMMITTED`:最低的隔离级别,可能出现脏读、不可重复读和幻读。 - `READ_COMMITTED`:防止脏读,但可能仍然出现不可重复读和幻读。 - `REPEATABLE_READ`:进一步限制,但仍可能出现幻读。 - `SERIALIZABLE`:最高的隔离级别,完全避免幻读,但性能开销大。 - **传播行为**: - `REQUIRED`:默认行为,如果当前存在事务,则加入该事务;如果没有,则新建一个。 - `SUPPORTS`:如果当前存在事务,则加入;如果没有,则以非事务方式运行。 - `MANDATORY`:如果当前存在事务,则加入;如果没有,则抛出异常。 - `REQUIRES_NEW`:总是新建事务,如果当前存在事务,则挂起。 - `NOT_SUPPORTED`:如果当前存在事务,则挂起;始终以非事务方式运行。 - `NEVER`:始终以非事务方式运行,如果当前存在事务,则抛出异常。 - `NESTED`:如果当前存在事务,则执行嵌套的本地事务。 #### 9. Hibernate 中 update() 与 saveOrUpdate() 的区别 - **update()**:用于更新已存在的实体对象。 - **saveOrUpdate()**:根据实体的状态智能选择是否调用 `save()` 或 `update()` 方法。 - 如果实体尚未持久化,则调用 `save()`。 - 如果实体已经持久化,则调用 `update()`。 #### 10. Spring 中使用 Hibernate 的方法及事务管理 - **集成方法**:在 Spring 中,可以通过 `SessionFactory` 和 `HibernateTemplate` 或 `JpaTemplate` 简化 Hibernate 的使用。`SessionFactory` 提供了创建 Session 的工厂,而 `HibernateTemplate` 或 `JpaTemplate` 提供了方便的方法来执行 CRUD 操作。 - **事务管理**:Spring 提供了两种事务管理方式:声明式事务管理和编程式事务管理。通过 `PlatformTransactionManager` 接口来管理事务的开始、提交和回滚。常见的实现包括 `HibernateTransactionManager` 和 `JpaTransactionManager`。这些工具使得在应用程序中集成事务变得简单且一致。
剩余9页未读,继续阅读
- superycOK2013-01-05用过了,还算不错,不过就是内容有点少
- tang7451639622014-05-21下载了看了,不错
- scorpion012012-06-26看了一下内容还是挺多的,只是自己对SSH还不是太熟悉,多了解一下吧~
- anyutianshi2012-07-09是word版得。就具体题目个数而言不是很多。不过相对来说还是不错得。
- 粉丝: 8
- 资源: 20
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于ArcEngine的GIS数据处理系统.zip
- (源码)基于JavaFX和MySQL的医院挂号管理系统.zip
- (源码)基于IdentityServer4和Finbuckle.MultiTenant的多租户身份认证系统.zip
- (源码)基于Spring Boot和Vue3+ElementPlus的后台管理系统.zip
- (源码)基于C++和Qt框架的dearoot配置管理系统.zip
- (源码)基于 .NET 和 EasyHook 的虚拟文件系统.zip
- (源码)基于Python的金融文档智能分析系统.zip
- (源码)基于Java的医药管理系统.zip
- (源码)基于Java和MySQL的学生信息管理系统.zip
- (源码)基于ASP.NET Core的零售供应链管理系统.zip