2023最新SSH框架面试题汇总

2023最新SSH框架面试题汇总

Hibernate工作原理及为什么要使用Hibernate?

(更多相关面试题推荐:java面试题及答案)

工作原理:

    1.读取并解析配置文件

    2.读取并解析映射信息,创建SessionFactory

    3.打开Session

    4.创建事务Transation

    5.持久化操作

    6.提交事务

    7.关闭Session

    8.关闭SesstionFactory

为什么要使用Hibernate(即它的优点):

    1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

    2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作

    3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。

    4. hibernate映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

2,  Hibernate中get和load方法的区别

        hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;

        hibernate对于get方法,hibernate一定要获取到真实的数据,否则返回null。

具体介绍:

        1. 对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数据库,数据库中没有就返回null。

        2.  load方法加载实体对象的时候,根据映射文件上类级别的lazy属性的配置(默认为true)。

分情况讨论:

        (1)若为true,则首先在Session缓存中查找,看看该id对应的对象是否存在,不存在则使用延迟加载,返回实体的代理类对象(该代理类为实体类的子类,由CGLIB动态生成)。等到具体使用该对象(除获取OID以外)的时候,再查询二级缓存和数据库,若仍没发现符合条件的记录,则会抛出一个ObjectNotFoundException。

        (2)若为false,就跟get方法查找顺序一样,只是最终若没发现符合条件的记录,则会抛出一个ObjectNotFoundException。

3,Hibernate是如何延迟加载?

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

4,Hibernate中怎样实现类之间的关系?

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

5,Hibernate中的update()和saveOrUpdate()的区别?

saveOrUpdate():

    1,如果对象已经在本session中持久化了,不做任何事

    2,如果另一个与本session关联的对象拥有相同的持久化标识(identifier),抛出一个异常

    3,如果对象没有持久化标识(identifier)属性,对其调用save()

    4,如果对象的持久标识(identifier)表明其是一个新实例化的对象,对其调用save()

    5,如果对象是附带版本信息的(通过或 )并且版本属性的值表明其是一个新实例化的对象,调用save()。否则update() 这个对象。

update() :

是将一个游离状态的实体对象直接更新。

6,说说Hibernate的缓存机制。

1. 一级缓存:内部缓存存在Hibernate中,属于应用事物级缓存。

2. 二级缓存:应用级缓存、 分布式缓存。

使用场景:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非关键数据

3.引入第三方缓存(如ehcache等)。

7,如何优化Hibernate?

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

2.灵活使用单向一对多关联

3.不用一对一,用多对一取代

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

5.一对多集合使用Bag,多对多集合使用Set

6. 继承类使用显式多态

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

8,谈谈hibernate的延迟加载和openSessionInView

        延迟加载要在session范围内,用到的时候再加载;

        opensessioninview是在web层写了一个filter来打开和关闭session,这样就表示在一次request过程中session一直开着,保证了延迟加载在session中的这个前提。

(视频推荐:java课程)

9,简要阐述struts2的工作流程

1、客户端浏览器发出HTTP请求。

2、根据web.xml配置,该请求被FilterDispatcher接收。

3、根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton。

4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。

5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。

白瓜面试 白瓜面试

白瓜面试 – AI面试助手,辅助笔试面试神器

白瓜面试 40 查看详情 白瓜面试

6、返回HTTP响应到客户端浏览器。

10,说下Struts的设计模式

MVC模式

  1,web应用程序启动时就会加载并初始化ActionServlet;

  2,用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数 据;

  3,ActionServlet根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用Action的execute()方法;

  4,Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对 象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件;

  5,ActionForward对象指定的jsp生成动 态的网页,返回给客户。

11,Struts的优缺点

优点:

    1. 实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现.

    2. 有丰富的tag可以用 ,Struts的标记库(Taglib),如能灵活动用,则能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。

    3. 页面导航.页面导航将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。

    4. 提供Exception处理机制 .

    5. 数据库链接池管理

    6. 支持I18N

缺点:

    1. 转到展示层时,需要配置forward,每一次转到展示层,相信大多数都是直接转到jsp,而涉及到转向, 需要配置forward,如果有十个展示层的jsp,需要配置十次struts,而且还不包括有时候目录、文件变更,需要重新修改forward,注意,每次修改配置之后,要求重新部署整个项目,而tomcate这样的服务器,还必须重新启动服务器,如果业务变更复杂频繁的系统,这样的操作简单不可想象。现在就是这样,几十上百个人同时在线使用我们的系统,大家可以想象一下,我的烦恼有多大。

    2. Struts 的Action必需是thread-safe方式,它仅仅允许一个实例去处理所有的请求。所以action用到的所有的资源都必需统一同步,这个就引起了线程安全的问题。

    3. 测试不方便. Struts的每个Action都同Web层耦合在一起,这样它的测试依赖于Web容器,单元测试也很难实现。不过有一个Junit的扩展工具Struts TestCase可以实现它的单元测试。

    4. 类型的转换. Struts的FormBean把所有的数据都作为String类型,它可以使用工具Commons-Beanutils进行类型转化。但它的转化都是在Class级别,而且转化的类型是不可配置的。类型转化时的错误信息返回给用户也是非常困难的。

    5. 对Servlet的依赖性过强. Struts处理Action时必需要依赖ServletRequest 和ServletResponse,所有它摆脱不了Servlet容器。

    6. 前端表达式语言方面.Struts集成了JSTL,所以它主要使用JSTL的表达式语言来获取数据。可是JSTL的表达式语言在Collection和索引属性方面处理显得很弱。

    7. 对Action执行的控制困难. Struts创建一个Action,如果想控制它的执行顺序将会非常困难。甚至你要重新去写Servlet来实现你的这个功能需求。

    8. 对Action 执行前和后的处理. Struts处理Action的时候是基于class的hierarchies,很难在action处理前和后进行操作。

    9. 对事件支持不够. 在struts中,实际是一个表单Form对应一个Action类(或DispatchAction),换一句话说:在Struts中实际是一个表单只能 对应一个事件,struts这种事件方式称为applicationevent,application event和component event相比是一种粗粒度的事件。

12,为什么要使用spring(即优点)?

    1. Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为J2EE的 API特制的framework,Spring致力于解决剩下的问题。

    2. Spring能消除在许多工程中常见的对Singleton的过多使用。过多使用Singleton降低了系统的可测试性和面向对象的程度。

    3. 通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个魔法般的 属性项或系统属性感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅需要看看类的JavaBean属性。Inversion ofControl的使用(在下面讨论)帮助完成了这种简化。

    4.通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。

    5. Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。

    6. 使用Spring构建的应用程序易于单元测试。

    7.Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。

    8. Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适用于许多web应用。例如,Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。

    9. Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mapping产品(如Hibernate)。

13,列举一下你知道的实现spring事务的几种方式

    (1),编程式事务管理:需要手动编写代码,在实际开发中很少使用,

    (2),基于TransactionProxyFactoryBean的声明式事务管理,需要为每个进行事务管理的类做相应配置

    (3),基于AspectJ的XML的声明式事务管理,不需要改动类,在XML文件中配置好即可

    (4),基于注解的声明式事务管理,配置简单,需要在业务层类中添加注解

14,谈谈spring事务的隔离级别和传播行为

隔离级别:

    – DEFAULT使用数据库默认的隔离级别

    – READ_UNCOMMITTED会出现脏读,不可重复读和幻影读问题

    – READ_COMMITTED会出现重复读和幻影读

    – REPEATABLE_READ会出现幻影读

    – SERIALIZABLE最安全,但是代价最大,性能影响极其严重

和传播行:

    – REQUIRED存在事务就融入该事务,不存在就创建事务

    – SUPPORTS存在事务就融入事务,不存在则不创建事务

    – MANDATORY存在事务则融入该事务,不存在,抛异常

    – REQUIRES_NEW总是创建新事务

    – NOT_SUPPORTED存在事务则挂起,一直执行非事务操作

    – NEVER总是执行非事务,如果当前存在事务则抛异常

    – NESTED嵌入式事务

15,什么是DI机制? 
        依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。

        但在spring中 创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者 
因此也称为依赖注入。

        spring以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。 
        设置注入的优点:直观,自然 
        构造注入的优点:可以在构造器中决定依赖关系的顺序。

16,什么是AOP? 
面向切面编程(AOP)完善spring的依赖注入(DI),

面向切面编程在spring中主要表现为两个方面 :
1.面向切面编程提供声明式事务管理 
2.spring支持用户自定义的切面

推荐教程:java入门

以上就是2023最新SSH框架面试题汇总的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/570095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月10日 05:37:17
下一篇 2025年11月10日 05:37:48

相关推荐

  • PHP 函数面试题库精选及答案解析

    问题:列举 10 个 php 函数面试题及其答案。array_map() 函数的作用?array_map(callback, array, …arrayn); 返回回调函数在每个数组元素上执行后的新数组。替换字符串中所有空格的代码?$new_string = str_replace(&#…

    2025年12月9日
    000
  • Java函数的常见面试题和准备技巧

    函数是一种可重用的代码模块,可接受输入并返回输出。在 java 中,使用 public static 定义函数,可进行重载和覆盖。可变参数函数允许不定数量的参数,匿名函数不带名称。准备技巧包括理解函数基础、练习编写不同类型的函数、使用在线平台、复习 java 文档和熟悉常见面试题。例如,可以编写一个…

    2025年12月2日 java
    000
  • 多年开发经验总结的Java面试题——(八)

    1、Spring的几种注入方式 (更多相关面试题推荐:java面试题及答案) 注解注入、setter注入、构造器注入 2、Spring如何实现事务管理  立即学习“Java免费学习笔记(深入)”; 编程式事务管理:将事务管理代码嵌入到业务方法中来控制事务的提交和回滚,在编程式事务中,必须在每个业务操…

    2025年12月2日 java
    000
  • java基础面试题(一)

    1、一个”.java”源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。 (更多面试题推荐:java面试题及答案) 2、Java有没有goto? 立即学习“Java免费学习笔记(深入)…

    2025年12月2日 java
    000
  • java高频率基础面试题

    一、是否可以从一个static方法内部发出对非static方法的调用? (视频教程推荐:java课程) 不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用…

    2025年12月2日 java
    000
  • java高频率基础面试题——集合框架部分

    1、ArrayList和Vector的区别 (更多面试题推荐:java面试题及答案) 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,并且其中的数据…

    2025年12月2日 java
    000
  • java高频率基础面试题——(二)

    面试题内容如下: (相关面试题推荐:java面试题及答案) 1、String s = new String(“xyz”);创建了几个StringObject?是否可以继承String类? 两个或一个都有可能,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”…

    2025年12月2日 java
    000
  • java高频率基础面试题——(三)

    面试题内容如下: 1、a.hashCode() 有什么用?与 a.equals(b) 有什么关系? (更多相关面试题推荐:java面试题及答案) hashCode() 方法对应对象整型的 hash 值。它常用于基于 hash 的集合类,如 Hashtable、HashMap、LinkedHashMa…

    2025年12月2日 java
    000
  • java高频率基础面试题——(四)

    一、说一说Servlet的生命周期? (更多相关面试题推荐:java面试题及答案) Servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init(),service()和destroy方法表达。 Servle…

    2025年12月2日 java
    000
  • 你能答对这些棘手的java面试题么

    本文为大家整理了几道国外的%ignore_a_1%面试题,听说也难倒了不少人。下面就让我们一起来看看这些面试题,看看他们到底有趣在哪里。 1、下面Java代码的输出是什么? public class Test { public static void main(String[] args) { me…

    2025年12月2日 java
    000
  • 2022年最新mysql面试题大总结

    在求职过程中,如果我们能提前掌握大量的相关面试题,对我们来说无疑是非常有帮助的,有备而来,当然面试通过概率会大很多! 创想鸟作为国内知名学习平台,包含了大量的mysql图文教程、mysql视频教程、mysql进阶教程,自然也为大家整理了最热门、最全面的mysql面试题,希望对大家有所帮助。 mysq…

    2025年11月26日 数据库
    000
  • 这10个高难度Java面试题你都会么

    这是我收集的10个最棘手的Java面试问题列表。这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题。你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Java 知识,但这些问题都是容易在各种 Java 面试中被问到的,而且包括我的朋友和同事在内的许多程序员…

    2025年11月10日 java
    000
  • java基础面试题——泛型

    139. Java中的泛型是什么 ? 使用泛型的好处是什么? (更多相关面试题推荐:java面试题及答案) 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 好处: 立即学习“Java免费学习笔记(深入)”; 1、类型安全,提供编译期间的类型检…

    2025年11月10日 java
    000
  • 常见java重点面试题分享

    1、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? (更多相关面试题推荐:java面试题及答案) java虚拟机是执行字节码文件(.class)的虚拟机进程。。java源程序(.java)被编译器编译成字节码文件(.class)。然后字节码文件,将由java虚拟机,解释成机器码…

    2025年11月10日 java
    000
  • 十道常见java面试题分享

    第一,谈谈final, finally, finalize的区别 (更多面试题推荐:java面试题及答案) final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声…

    2025年11月10日 java
    000
  • Java面试题——Dubbo

    目录 (视频教程推荐:java课程) 1.Dubbo 面试题 2.Dubbo 面试题答案解析 1、为什么要用 Dubbo? 2、Dubbo 的整体架构设计有哪些分层? 3、默认使用的是什么通信框架,还有别的选择吗? 4、服务调用是阻塞的吗? 5、一般使用什么注册中心?还有别的选择吗? 6、默认使用什…

    2025年11月10日 java
    000
  • 2023年java实习生求职面试题——HTTP和HTTPS协议

    一、HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。 (视频教程…

    2025年11月10日 java
    000
  • java面试中常见的数组题目汇总(三)

    星级:***** 1、顺时针打印矩阵 (学习视频分享:java课程) 【题目】 白瓜面试 白瓜面试 – AI面试助手,辅助笔试面试神器 40 查看详情 立即学习“Java免费学习笔记(深入)”; 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下 4 X 4…

    2025年11月10日 java
    100
  • java面试题——异常

    java面试题之异常 面试题如下: 1、什么是Java中的异常? 异常是在程序执行期间可能发生的错误事件,并且会中断它的正常流程。异常可能来自不同类型的情况,例如用户输入的错误数据,硬件故障,网络连接故障等。 立即学习“Java免费学习笔记(深入)”; (学习视频分享:java教学视频) 每当执行j…

    2025年11月10日 java
    000
  • 看看这些前端面试题,带你搞定高频知识点(六)

    每天10道题,100天后,搞定所有前端面试的高频知识点,加油!!!,在看文章的同时,希望不要直接看答案,先思考一下自己会不会,如果会,自己的答案是什么?想过之后再与答案比对,是不是会更好一点,当然如果你有比我更好的答案,欢迎评论区留言,一起探讨技术之美。 面试官:请你简述 var、let、const…

    2025年11月9日 web前端
    300

发表回复

登录后才能评论
关注微信