余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

Java Hibernate面试65题

xiyangw 2023-10-04 18:03 47 浏览 0 评论

?

Java Hibernate面试65题





大家好,这一期呢,我们谈一下Java hibernate相关的面试题。

第1题,什么是hibernate?

hibernate是一个架构, 用来对应Java对象数据库表对象。使用一个xml文件来配置。

第2题, 什么是orm?

object relational mapping。它是hibernate的基础概念。用来对应数据库表跟Java对象。

第3题, Java类属性是如何跟表的列进行对应的?

在定义这个Java类的时候要声明跟哪个表关联,然后在定义属性的时候,加上column注解。

第4题,如何创建session factory?

首先使用configuration加载xml文件。然后用configuration对象来创建session factory.

第5题,什么是pojos?

plain old Java objects. 指的是一个Java class中的每个成员都有getter, setter。

第6题, 什么是hql?

Hql是在hibernate中使用的查询语言。它是sql的扩展。不需要书写非常复杂的数据库查询语句,你就可以做很多事情。

第7题, 在hibernate中我们如何调用stored procedures?

你可以通过在xml中定义下面代码的方法来调用stored procedures. <sql-query ...>...</sqlquery>

第8题, 什么是criteria api?

Criteria api通过设定一些条件来获取数据库的数据的简单而又强大的API。

第9题,使用hibernate template的好处有什么?

Session的关闭是自动的。

简化了与session的交互。

异常处理是自动的。

在服务类中使用repository注解。

第10题,我们如何查看hibernate生成的sql语句?

在hibernate的配置文件中,添加下面这一行:

<property name="show_sql">true</property>。

第11题,在hibernate中有哪两种Collections?

一种是sorted collection, 这个是运行在jvm上的,一种是order collection, 这个是运行在数据库上的。

第12题,session save method和save or update method的区别是什么?

Save负责插入一条不存在的记录。

Save or update, 如果记录不存在就插入,如果存在就更新。

第13题, 跟jdbc相比hibernate的优势在哪里?

hibernate你不需要再写具体的sql语句了。

行,jdbc的话,你可能会写很多sql语句,并且有可能会很复杂。

使用hinernate, 你不需要再关心数据库的连接池的问题。

第14题, 如何获取hibernate的statistics?

我们可以调用session factory 的 get statistics方法。

第15题, 什么是hibernate中的transient实例状态?

Trnaisent的实例状态是指没有任何关联性的上下文的状态。

第16题, 如何减少数据库写操作的时间?

Hibernate 有 dirty check这个机制,它可以减少数据库的写时间。

这个机制起作用时,就是只会更新那些被修改的域,而不会修改其他没有修改的域。

第17题,在hibernate中callback接口是干什么的?

从对象来接收事件信息,就使用call back接口。比如当一个对象的某个属性发生改变的时候,可以通过callback来通知调用者。

第18题,什么时候实例会处于解除状态?

如果实例跟一个表处于一种连接状态的时候,然后又断开,这种状态称为解除状态。

第19题,Hibernate中4种ORM的等级?

纯粹的关系型。

初级对象映射。

中级对象映射。

全对象映射

第20题,事务管理是怎么进行的?

事务管理是用来管理一系列的语句或者命令。在Hibernate中事务管理是通过事务接口来管理的。

第21题,Hibernate配置的两种方法?

一种是通过xml来配置。

一种是通过代码来配置。

第22题,缺省的二级缓冲服务是什么?

缺省的二级缓冲服务是ehcache, 此外还有oscache, swarmcache和treecache。

第23题, 有哪几种关系映射?

一种是1对1,一种1对多,一种是多对多。

第24题,hibernate中的qbc API是干什么用的?

Hibernate query by criteria api 用来在运行时创建使用criteria对象的查询.

第25题, 有几种从数据库获取数据的方法?

Hql.

Identifier.

Criteria api.

Standard sql.

第26题, 主键是怎么创建的?

数据库的主键在配置文件hbm.xml中指定. Generator也可以被用来指定主键的创建方式。

第27题,如何re attach已经解除的对象 ?

可以通过session merge方法来re attach已经解除的对象。

第28题, 有几种方法使hibernate二级cache失效?

set use_second_level_cache as false.

CACHEMODE.IGNORE

NOCACHEPROVIDER

第29题,什么是orm metadata?

所有的对应关系包括类和表之间,属性和列之间,Java类型和sql类型之间,都定义在orm的meta data中。

第30题, 缺省的事务factory是哪个?

jdbc transaction factory.

第31题,jmx的作用是什么?

jmx提供了开发有效和稳定的网络应用方案的工具。

第32题, 如何把session factory绑定到jndi上?

在hibernate config file里面。

第33题, 对象判断有几种方法?

用等号儿操作符。

用equals方法。

使用数据库标识。是不是在同一行?

第34题,有多少种获取策略?

Join获取,批量获取, 选择获取, 部分选择获取。

第35题,Java对象映射是怎么做的?

一种方法是用xml定义对应关系。

另一种方法是用注解。

第36题, 什么是派生属性?

派生属性是指没有任何数据列对应的属性。通常是一些类似表达式的,或者辅助性的属性。

第37题,那些有名字的sql查询是怎么回事?怎么使用它?

在映射文件中定义的那些查询,一般都有一个名字,这种查询被称为有名字的查询。

使用get named query.

第38题,方法load和get的区别是什么?

如果数据不存在的话, load会扔出一个异常, Get会返回空。

第39题, 版本属性的用处是什么?

完美属性的用处主要是来判断这个对象是短暂状态还是解除状态。

第40题,什么是面向属性的编程?

在hibernate中面向属性编程由xdoclet这个引擎来控制, 允许程序员向Java代码中添加meta data。

第41题, Session lock方法是干什么用的?

这个方法主要是为了re attach 一个已经解除的对象。这个方法不会检查数据的同步,所以有可能会出现数据不同步的现象。

第42题, Hibernate是否支持多态?

是的。多查询和多关联,在hibernate之中适用于所有的映射策略。

第43题, 有哪三种继承模型?

Tables per concrete class.

Tables per class hierarchy.

Tables per sub class.

第44题, 我们如何来映射一个不可修改的类?

设定mutable等于false。

第45题,在数据库管理系统中,通常的hibernate流程是怎样的?

加载配置文件,创建配置对象。

配置对象创建session factory对象。

从session factory获取一个session。

创建hql查询。

执行hql查询并返回结果。

结果会是一个列表。

第46题, 什么是light Object mapping?

使用手工的方式来映射Entity数据对象和表对象。

第47题,管理的关联和hibernate关联有什么区别?

管理的关联是双向的,而hinernate的关联是单向的。

第48题, Hibernate 架构中比较重要的接口有哪些?

Session factory.

Session.

Transaction.

第49题,在hibernate映射中有哪些重要的注解?

Entity.Table.Access.ID. embeddedID.Column.Generatedvalue.One to one.Cascade.Primary key join column.

第50题, Session factory是线程安全的吗?

是的。session factory是不可修改的,所以是线程安全的。

第51题,session是线程安全的吗?

不是。各自的线程,在使用完自己的session以后一定要关掉。

第52题,open session和get current session的区别是什么?

你需要在section factory的配置文件中配置才能够使用get current session. 它是跟当前的context相关联的。

Open session每次都会打开一个新的session,我们需要自己关闭它。

在多线程的环境中,对于每一个请求,我们应该使用open session。

还有一个方法叫open stateless session,会返回一个无状态的session。

第53题, 什么是hibernate的caching,解释一下,first level cache是什么。

Hibernate cash机制会使我们查询数据更快。First level cache是跟session对象关联的。这是缺省选项无法取消。但是我们有hibernate方法删除对象。

第54题,entity bean的不同状态有哪些?

Transient. 可以通过如下方法save,save or update, persistent 进入persistent状态, 通过delete,再返回到transient状态。

Persistent. 从get和load返回的就是persistent实例,与一个唯一的session相关联。

Detached. 之前曾经是presistent,但是现在没有关联任何session的状态叫做detached.

可以通过update,save or update, lock, replicate再转成persistent。

merge可以transient, detached转成一个新persistent实例。

第55题, Save, save or update和persist的区别是什么?

Save是添加一条新的记录。并快速返回ID.

Persist, 跟save的功能差不多,但是它不会立即返回生成的ID。

Save or update.如果记录不存在,就添加一条记录,如果记录存在的话就更新该记录。

第56题,如果entity bean没有空构造函数, 会发生什么?

如果没有空构造的函数的话,会产生一个hibernate exception。

第57题,hibernate里面的collection类型有哪些?

Bag, set, list, array, map.

58题,在hibernate中如何使用joins?

有几种方法:

使用1 to 1, 或者one to many关联。

在hql中使用join关键字。John fetch使用eager loading, 不是lazy loading。

或者直接使用标准的sql查询语句,加上join关键字。

第59题,为什么我们不应该让Entity class变成final?

Lazy loading是通过扩展现有的Entity class来做到的。

如果entity class变成final, lazy loading就不可能实现了。性能上会大打折扣。

第60题, 什么是cascading?有几种类型的cascading?

当我们处理两个Entity之间的关系的时候,我们需要来定义,他们之间的操作是怎么互相影响的。这个方面是通过cascading来定义的。

有如下类型:

None

all

save_update

delete

detach, merge, persist, refresh, remove

lock

replicate

第61题, 如何集成log4j?

添加log4j的依赖。

创建xml配置文件,或者log4j的properties文件,并放到class path里面。

在standalone工程里面用dom configurator, property configurator。

在网络应用中, 使用servlet context listener去配置它。

第62题, 如何集成hibernate和spring框架?

添加hibernate Entity manager,hibernate core, spring orm依赖。

创建模型类和对应的dao实现类来操作数据库。

Dao实现类用来操作session factory。

local session factory bean需要被配置。

如果我们用transactional注解的话,我们就不需要关心事务管理了。

第63题, Hibernate如何跟servlet或者struts2进行集成?

通过servlet context listener.

第64题,hibernate框架使用了哪些design patterns?

Domain model pattern, 模型中包含行为和数据.

Data mapper. 提供数据类跟数据库表对象的关联。

Proxy pattern. 用来做lazy loading。

Factory pattern. 比如session factory.

第65题, Hibernate的最好的实践有哪些?

.始终检查主键的访问, 如果是数据库自动生成的,那么就不应该有setter。

.缺省的, hibernate是直接对域进行设置的,如果你想使用setter的话,要加access注解.

.不要同时在成员变量和get方法上加注解。

.除非hql做不到才使用标准的sql。

.要使用order list,而不是使用sorted list.

.Named的query,只用于通用的情况。特别的query仅限于Entity本身。

.对网络应用来说,要使用jndi,而不是直接去配置数据库连接。

.避免多对多的关系。使用一对多和多对一来化解。

.只用collection时,使用list,maps和sets,尽量不用array, 因为array不能做lazy loading。

.当发生exception时,回退事务,关掉session。

.尽量使用lazy fetching.

码字不易,客官您点个赞吧!

相关推荐

“三次握手,四次挥手”你真的懂吗?

记得刚毕业找工作面试的时候,经常会被问到:你知道“3次握手,4次挥手”吗?这时候我会“胸有成竹”地“背诵”前期准备好的“答案”,第一次怎么怎么,第二次……答完就没有下文了,面试官貌似也没有深入下去的意...

面试官问:三次握手与四次挥手是怎么完成的?

作者|饶全成来源|码农桃花源记得刚毕业找工作面试的时候,经常会被问到:你知道“3次握手,4次挥手”吗?这时候我会“胸有成竹”地“背诵”前期准备好的“答案”,第一次怎么怎么,第二次……答完就没有...

三次握手和四次挥手的高阶面试题,建议收藏

昨天村长的讲解,真是一语点醒,这样的解释胜过死记硬背。但对于学习者,如果不能有直观感受,可能还是觉得不接地气,今天介绍两个工具,一个是网络抓包工具Wireshark,一个是linux命令tcpdum...

三次握手和四次挥手到底是个什么鬼东西

之前总有是有面试官喜欢问,你知道什么是三次握手么?什么是四次挥手么?为什么握手需要三次,挥手需要四次呢?今天我们就来详细的聊一下这个。1.什么是TCPTCP协议,简单称呼一下的话,那就是传输控制协议,...

加深理解TCP的三次握手与四次挥手

在了解三次握手和四次挥手之前,先要知道TCP报文内部包含了那些东西。熟悉了解TCP报文对日后学习网络和排除方面有很大的帮助,所以,今天为了加深对三次握手的理解,从新去认识TCP报文格式。TCP报文格式...

三次握手 与 四次挥手_三次握手四次挥手大白话

三次握手:①首先Client端发送连接请求报文②Server段接受连接后回复ACK报文,并为这次连接分配资源。③Client端接收到ACK报文后也向Server段发生ACK报文...

动画讲解TCP的3次握手,4次挥手,让你一次看明白

专注于Java领域优质技术,欢迎关注作者:老钱占小狼博客TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一。很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答。本篇尝试...

linux下实现免密传输文件或登录到其他服务器

使用scp传输文件到其他服务器的时候,提示需要输密码,如下:[root@18csetup]#scpLINUX.X64_180000_db_home.zip192.168.133.120:/u0...

Linux如何通过salt免密SCP传输上百台机的脚本?看chatGPT的回答

如何通过salt免密SCP传输上百台机的shell脚本”,下面是chatGPT给出的结果。scp批量免密脚本给出的详细shell脚本如下:#!/bin/bash#源文件路径和目标路径SRC_...

Linux/Mac scp命令上传文件_将hdfs上的文件下载到本地的命令是

语法scp[可选参数]file_sourcefile_target参数说明:-1:强制scp命令使用协议ssh1-2:强制scp命令使用协议ssh2-4:强制scp命令只使用IPv4寻...

Linux常用功能——文件远程传输_linux 远程传输文件

scp是securecopy的简写,是linux系统下基于ssh登陆进行安全的远程文件拷贝命令,用于在Linux下进行远程拷贝文件的命令。和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器...

使用 scp 命令定时拉取服务器备份文件

我们的服务器,每周五必须要做下备份,但总是忘记执行备份这件事情,或者是服务器备份做了,但没有做异地备份。所以通过定时任务自动备份,备份成功之后,在其它服务器上面通过定时任务scp命令自动拉取备份文...

windows下最轻便的FTP/SCP文件管理器

这次推荐的工具叫做winscp,这个工具如果是IT从业人员,又是做服务端相关工作的话,可能无人不知,如果是刚入门,推荐立马上手试试。如果看了觉得有用,欢迎收藏、点赞、关注。官方网站:https://w...

我不是网管 - Linux中使用SCP命令安全复制文件

SCP是linux发行版中的命令行工具,用于通过网络安全地跨系统复制文件和目录。SCP代表安全复制,因为它使用ssh协议复制文件。拷贝时,scp命令建立ssh连接到远程系统。换句话说...

WinSCP软件双系统(Win-Linux)文件传输教程

WinSCP软件是windows下的一款使用ssh协议的开源图形化SFTP客户端,也就是一个文件传输的软件,它有什么优点吗,咱们嵌入式开发中经常会将windows中的文件复制到linux系统当中,比较...

取消回复欢迎 发表评论: