首页 > 其他分享 >29. Hibernate 面试官必须出的面试题

29. Hibernate 面试官必须出的面试题

时间:2024-08-14 11:22:41浏览次数:15  
标签:面试题 缓存 Session 对象 get 面试官 面试 Hibernate

1. 前言

本节课先和大家聊聊面试过程中需要注意的事项,再和大家一起讲解 Hibernate 中常见的面试题。

2. 面试技巧

面试官出的面试题一般会有 3 个特点:

  1. 强调原理性: 通过面试者对问题原理性的讲解,可以了解面试者是否真正理解、掌握了相关知识。对于知识而言,用是一个层次,说出来又是一个层次;
  2. 强调基础性: 基础的知识才是永恒的,任何高级的运用都是建立在基础知识之上,通过对基础知识的提问可以了解面试者认知的深浅。是浮于表面,还是扎根源头;
  3. 讲究细节: 很多学生学完后,自我感觉非常好,但是面试题一般都会问到一些学习过程易忽视的细节内容。

面试者解答时,需要掌握 3 个技巧:

  1. 要有专业性: 同一道题目,正确答案只有一个,若干面试者中,为什么面试官选择了他而没有选择你。一个可能性就是答案不专业,没有切到中心点;

有很多面试者,面试完后,自我感觉回答的很好,但没有接到再面试的通知。
有一方面原因是回答的不专业。

  1. 要有自己的见解: 有的人不是在回答问题,而是在向面试官背答案。答案没有错,如果缺少自己的独有理解,如果同时有一个面试者除了给出专业的答案,还附有自己的理解。如果你是面试官,请问你会选择谁;

  2. 要有层次性: 或者说是条理性、逻辑性,答案要有条理。1、2、3 结构明显,脉络清晰。最忌讳杂乱不清。

面试心态,当大家实力相当时,心态就有可能成为决定结果的有利因素:

  1. 不着急,不恐慌;
  2. 相信自己;
  3. 我是来找工作的,我是来找一家值得自己付出的公司,在面试一家能展现自己价值的公司。如果没有被录用,说明还有不足或者说明暂时没有达到这家公司的要求;
  4. 学会放下,有重新再来的勇气。

3. 常见面试题

  1. 简述 Hibernate 的工作流程?

Hibernate 的主要功能是为原生 JDBC 开发提供 2 个自动化操作:构建 SQL 语句和自动封装数据;

  • 使用 Hibernate 时,首先需要通过其 Configuration 组件读取连接数据库的信息;
  • 使用 Hibernate 的 SessionFactory 组件完成和数据库系统的对接;
  • 使用 Hibernate 提供的 Session 组件完成相关的数据操作;
  • 使用 Hibernate 提供的 Transaction 组件完成事务管理;
  • 关闭 Session,释放资源。
  1. 简述 Hibernate 的 get 和 load 方法区别?

get()方法直接构建 SQL 语句,访问数据库,获得数据。如果没有获取数据,会返回一个 null。load()方法会生成一个代理对象,只有当调用 get()方法时,才会访问数据。如果数据库中没有数据,则抛出一个 ObjectNotFountdException 异常。

  1. 简述 Hibernate 持久化对象的 3 种状态?

在程序级别初次构建持久化对象时,此时数据库中没有此对象,则可说明此时持久化对象的状态为瞬时或临时状态。

持久化对象经过 Session 组件进行对应的操作后,如 get()、load()、save()等操作后,此时,此持久化对象数据在程序和数据库中都存在,此时的持久化对象处于持久化状态。

当 Session 组件关闭后,虽然此对象的数据在程序和数据库都存在,但已经失去了 Session 对象的管理,则说,则时此对象的状态为脱离状态。

  1. 简述 Hibernate 的缓存机制?

使用缓存的目的是为了减少对数据库的访问次数,提升 Hibernate 的操作效率;Hibernate 提供有 2 级缓存。一级缓存也叫做 Session 的缓存,提供 session 生命周期内的数据缓存操作。当调用 Session 的 save/saveOrUpdate/get/load/list/iterator 等方法的时候,都会把对象放入 Session 缓存中;

因为 Session 生命周期较短,所以,Session 缓存应用价值并不很大。

Session 提供有与缓存管理有关的方法:

  • session.flush(): 让一级缓存与数据库同步;
  • session.evict ():清空一级缓存中指定的对象;
  • session.clear():清空一级缓存中所有的对象。

二级缓存也叫 SessionFactory 缓存, SessionFactory 具有应用程序级别的生命周期,具有实际意义 ,默认情况下并没有启动,需要在主配置文件中做相关设置后再启动。

一般被缓存的数据有如下几个特点:

  • 很少被修改的数据;
  • 不会被并发访问的数据;
  • 经常需要访问的数据;
  • 不会被第三方修改的数据。
  1. 简述 Hibernate 中 getCurrentSession 和 openSession 方法区别?

这 2 个方法都能得到 Session 对象。getCurrentSession 方法本质上还是通过 openSession 返回 Session 对象,区别在于 getCurrentSession 会根据开发者在 Hibernate 主配置文件中的相关配置,延长其在特定事务期间的生命周期。

  1. 简述 Hibernate 的乐观锁和悲观锁?

乐观锁和悲观锁都是并发策略,更好的保证并发过程中事务之间的隔离性。

乐观锁:

优势:性能好,并发性高。
缺点:用户体验不好,可能会出现高高兴兴去更新,却告知已经有人捷足先登了。

悲观锁:

优势:锁住记录为我所用,没修改完成之前,其他事务只能瞪眼瞧着,时间虽然延迟,至少心里有底。
缺点:并发性不好,性能不高。

  1. 简述 Hibernate 的延迟加载机制?

延迟加载是 Hibernate 提供的一种性能优化方案,但是,使用时需要注意,必须保持在 Session 生命周期之内。
Hibernate 中的延迟加载有 2 种情形:

  • 如 load()方法。直接调用 load()方法只会产生一个代理对象,只有当访问属性的 get()方法时,才会访问数据。
  • one-to-many、many-to-one、many-to-many 中也可以设置延迟加载,只有访问与当前查询相关的关系表中的数据时,才会进行数据加载。

因为 Session 生命周期较短,如果要跨组件使用延迟加载功能, 则需保持 Session 生命周期与请求过程相同。WEB 项目开发中,Hibernate 提供的有 OpenSessionInViewFilter 过滤器,用来保证请求开始和响应结束的时候,使用同一个 Session。请求开始创建 Session,响应结束关闭 Session。

4. 小结

好了,本节课和大家聊聊了面试中需要注意的问题,以及一些较常见的面试题目。要记住,你再怎么刷题都是不可能刷完所有的题目,唯有掌握其内在原理,以不变应万变才是上上之策。

标签:面试题,缓存,Session,对象,get,面试官,面试,Hibernate
From: https://blog.csdn.net/u014316335/article/details/141162935

相关文章

  • 最全MySQL面试题和答案(四)
    1.数据库结构优化一个好的数据库设计方案对于数据库的性能往往会起到事半功倍的效果。优化设计需要考虑数据冗余、查询和更新的速度、字段的数据类型是否合理等多方面的因素。将字段很多的表分解成多个表概述:对于字段较多的表,如果有些字段的使用频率很低,可以将这些字段分离出来......
  • 27. Hibernate 自动进行数据封装
    1.前言Hibernate可以构建各种复杂的SQL语句,但其本质都是反射机制结合映射关系完成的。框架也仅是一款程序产品,人为编写的产物。要相信,只要你愿意,你完全可以实现自己的JDBC框架。本节课和大家继续聊聊Hibernate是如何自动封装数据的。2.理想状态程序中的数据通过......
  • 高级java每日一道面试题-2024年8月12日-设计模式篇-请列举出在JDK中几个常用的设计模
    如果有遗漏,评论区告诉我进行补充面试官:请列举出在JDK中几个常用的设计模式?我回答:在JavaDevelopmentKit(JDK)中,许多设计模式被广泛使用,以帮助实现软件的结构、行为和复用。下面是一些在JDK中常见的设计模式及其简要说明:工厂模式(FactoryPattern)JDK中的java......
  • java面试题:CPU飙高问题如何排查
    在Java面试中,关于CPU飙高问题的排查是一个常见的考点。以下是针对这一问题的详细排查步骤和建议:一、初步诊断1.查看系统监控:使用系统监控工具(如Windows的任务管理器、Linux的top或htop命令)查看当前CPU使用情况,找出哪个Java进程占用了大量CPU资源。注意观察CPU使用率的波......
  • 面试官:说说读写锁的实现原理?
    在实际项目开发中,并发编程一定会用(提升程序的执行效率),而用到并发编程那么锁机制就一定会用,因为锁是保证并发编程的主要手段。在Java中常用的锁有以下几个:synchronized(内置锁):Java语言内置的关键字,JVM层级锁实现,使用起来较为简单直观。ReentrantLock(可重入锁):需要显式地获取......
  • vue3面试题
    1.Vue3.0里为什么要用ProxyAPI替代definePropertyAPI?——响应式优化(高频,重点!!!)Vue更新的重点。definePropertyAPI的局限性最大原因是它只能针对单例属性做监听。Vue2中的响应式实现正是基于defineProperty中的descriptor,对data中的属性做了遍历+递归,为每个属......
  • 最新Java面试题及答案(500道)
    第一章-Java基础篇Object中有哪些方法   难度系数:⭐protectedObjectclone()--->创建并返回此对象的一个副本。booleanequals(Objectobj)--->指示某个其他对象是否与此对象“相等protectedvoidfinalize()--->当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃......
  • 高级.NET Core分布式事务相关的面试题
    以下是一些高级.NETCore分布式事务相关的面试题,这些问题涵盖了概念、实际应用以及最佳实践,可以帮助评估候选人在分布式事务方面的理解和实际操作能力。1.分布式事务的基本概念与.NETCore支持什么是分布式事务?它与本地事务有何不同?.NETCore中有哪些常用的分布式事务解决方......
  • 关于异步编程和多线程的高级.NET Core面试题
    以下是一些关于异步编程和多线程的高级.NETCore面试题。这些问题涵盖了从基础概念到复杂应用的各个方面,可以帮助评估候选人在异步编程和多线程开发方面的能力。1.异步编程基础在.NETCore中,异步编程的基本原理是什么?async和await关键字的作用是什么?如何在.NETCore中使用......
  • Java面试题--数据库集群
    Mysql主从解决什么问题,不能解决什么问题?MySQL主从同步,主负责写,从负责读,使用一主多从,能减轻读的压力但是这不能解决写的压力和主库的单点故障,如果主库的写并发高,可以做成多个主库MySql主从复制原理?主要依靠binlog来实现的,它记录的是所有的DDL,DML,TCL操作当主库的数据发生改......