Java SSH面试深度解析:线程安全与Struts实践

需积分: 3 1 下载量 195 浏览量 更新于2024-07-27 收藏 161KB DOC 举报
"Java SSH面试题" 在Java Web开发中,SSH(Struts、Spring、Hibernate)是一个常见的框架组合,用于构建企业级应用程序。以下是一些关于SSH面试题的详细解答,涵盖了Struts、Spring、Hibernate等核心概念。 1. **Action是否线程安全** - 在Struts1中,Action类并不是线程安全的。因为同一个Action实例可能被多个请求线程共享,导致数据不一致。为了保证线程安全,可以采用以下策略: - 声明Action为局部变量,每次请求都创建新的实例。 - 自定义RequestProcessor,确保每次请求都创建新的Action。 - 在Spring框架中,将Action配置为“prototype”作用域,每次请求都会创建新的实例。 2. **Struts实现MVC模式** - Model:通常由JavaBean、EJB组件或POJO构成,负责业务逻辑和数据处理。 - Controller:由Action实现,接收请求,调用模型并决定转发到哪个视图。 - View:由一系列JSP文件及其标签构成,展示用户界面。 3. **Struts的关键对象** - Action:执行用户请求的控制器类。 - ActionForm:用于封装请求参数的表单对象,Struts1中常用,Struts2已弃用。 - DynaValidatorForm:动态表单对象,支持动态属性验证。 - ActionMapping:表示配置文件中action节点的信息,用于映射请求与Action之间的关系。 4. **AOP和IOC在Spring中的应用** - AOP(面向方面编程):提供切面编程,如日志、事务管理等功能。Spring通过动态代理实现AOP。 - IOC(依赖注入):控制反转,对象间的依赖关系由Spring容器管理。Spring通过构造器注入、setter注入等方式实现。 5. **Hibernate查询方式** - HQL(Hibernate Query Language):面向对象的查询语言,类似于SQL。 - SQL查询:直接使用SQL语句操作数据库。 - 条件查询:基于Criteria API或Query API构建查询。 6. **Hibernate的load()与get()** - load():延迟加载,先检查一级缓存,未找到则生成代理对象,实际加载发生在第一次访问属性时。如果此时数据库中无记录,会抛出异常。 - get():先查一级缓存,然后查二级缓存,最后查数据库,找不到则返回null。 7. **Hibernate的延迟加载与OpenSessionInView** - 延迟加载:只在需要时加载数据,减少初始加载时间,提高性能。必须在有效的Session范围内。 - OpenSessionInView:一种解决Web应用中Session跨请求问题的技术,通过Filter在请求开始时开启Session,在请求结束时关闭,确保延迟加载能在同一Session内完成。 8. **Spring的事务管理** - 事务方式:声明式事务(基于注解或XML配置)和编程式事务(TransactionTemplate或PlatformTransactionManager接口)。 - 事务隔离级别: - DEFAULT:使用数据库默认级别。 - READ_UNCOMMITTED:可能出现脏读、不可重复读和幻影读。 - READ_COMMITTED:避免脏读,但可能有不可重复读和幻影读。 - REPEATABLE_READ:避免脏读和不可重复读,可能有幻影读。 - SERIALIZABLE:最严格的隔离级别,避免所有并发问题,但性能影响较大。 - 事务传播行为: - REQUIRED:默认行为,有事务则加入,无事务则新建。 - SUPPORTS:若有事务则加入,无事务则不创建。 - MANDATORY:必须在事务中运行,无事务则抛异常。 - REQUIRES_NEW:总是新建事务,即使在事务中也新建。 - NOT_SUPPORTED:不在事务中运行,若在事务中则挂起。 - NEVER:不在事务中运行,若在事务中则抛异常。 - NESTED:若在事务中,则嵌套事务,否则新建事务。 以上内容详细解释了SSH框架中的一些关键概念和面试题,这些知识点对于理解Java Web开发和面试准备至关重要。