Hibernate----面试题
什么是Hibernate?
hibernate是一个基于ORM持久框架,可以让程序员以面向对象的思想操作数据库,提高生产效率.
什么是ORM?
orm不过是一种思想,对象关系映射。是对象关系模型,如hibernate,让你以面向对象的方式去编程。封装了JDBC.
说一下orm与jdbc的区别?
jdbc只是一个java操作数据库的规范接口而已
orm不过是一种思想,对象关系映射。
ORM:是对象关系模型,如hibernate,让你以面向对象的方式去编程。封装了JDBC.
JDBC:是从底层访问数据库服务器。一般银行,金融行业为了安全起见,直接用JDBC访问
Hibernate中get和load有什么不同之处?
load :找不到数据的话会抛出org.hibernate.ObjectNotFoundException异常。此时hibernate会使用延迟加载加载机制
get找不到的话会返回null。
如果查询不到数据,get 会返回 null,但是不会报错, load 如果查询不到数据,则报错ObjectNotFoundException
使用get 去查询数据,(先到一级/二级)会立即向db发出查询请求(select ...), 如果你使用的是 load查询数据,(先到一级、二级))即使查询到对象,返回的是一个代理对象,如果后面没有使用查询结果,它不会真的向数据库发select ,当程序员使用查询结果的时候才真的发出select ,这个现象我们称为懒加载(lazy)
hibernate的三种状态?
在Hibernate中,对象有三种状态:临 时状态(Transient)、持久状态(Persistent)和游离状态(Detached)。
处于持久态的对象也称为 PO(PersistenceObject),临时对象和游离对象也称为VO(ValueObject).
hibernate的懒加载? 有几种禁用方法
在Hibernate框架中,当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少并发量,减少系统资源的消耗,这时Hibernate用懒加载机制来弥补这种缺陷,但是这只是弥补而不是用了懒加载总体性能就提高了。
我们所说的懒加载也被称为延迟加载,它在查询的时候不会立刻访问数据库,而是返回代理对象,当真正去使用对象的时候才会访问数据库。
1.使用代理对象:Hibernate.initialize("代理对象");
2.在需要禁用懒加载的映射文件中显示的加入lazy = "false"
3.使用openSessionInView【需要借助于过滤器】 需要在web.xml文件中配置
hibernate有几种查询方式?
1、 属性查询2、 参数查询、命名参数查询3、 关联查询4、 分页查询5、 统计函数
Hibernate的优缺点?
优点:
1、程序更加面向对象;
2、提高了生产率;
3、方便移植(修改配置文件);
4、无侵入性。
缺点:
1、效率比JDBC略差;
2、不适合批量操作。
Hibernate的缓存机制
Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存。
1.Hibernate一级缓存又称为“Session的缓存”。
Session内置不能被卸载,Session的缓存是事务范围的缓存(Session对象的生命周期通常对应一个数据库事务或者一个应用事务)。
一级缓存中,持久化类的每个实例都具有唯一的OID。
2.Hibernate二级缓存又称为“SessionFactory的缓存”。
由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。
第二级缓存是可选的,是一个可配置的插件,默认下SessionFactory不会启用这个插件。
Hibernate提供了org.hibernate.cache.CacheProvider接口,它充当缓存插件与Hibernate之间的适配器。
Hibernate延迟加载?
1) Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)
2) Hibernate3 提供了属性的延迟加载功能 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。
Hibernate工作原理及为什么要用?
原理:
1) 读取并解析配置文件
2) 读取并解析映射信息
3) 创建SessionFactory
4) 打开Sesssion
5) 创建事务Transation
6) 持久化操作
7) 提交事务
8) 关闭Session
9) 关闭SesstionFactory
为什么要用:
1) 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2) Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
3) hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4) hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
什么是Mybatis?
Mybatis的前生是ibatis,最后升级版本后名称叫mybatis。mybatis是以纯sql操作数据。
Mybatis与Hibernate区别?
Hibernate是面向对象的思想操作数据生成Sql语句,而mybatis是以纯sql操作数据
相对于mybatis容易优化.扩展性好,但是移植性差。
设计模式部分
你熟悉那些设计模式?
总共有23种设计模式
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
企业面试的时候,面试官非常喜欢考单例,而且非常喜欢考手写单例。
什么是单例?单例有那些写法?
单例分类:懒汉式单例、饿汉式单例
单例模式有以下特点:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
①懒汉式单例
//懒汉式单例类.在第一次调用的时候实例化自己 public class Singleton { private Singleton() {} private static Singleton single=null; //静态工厂方法 public static Singleton getInstance () { if (single == null) { single = new Singleton(); } return single; } }
②饿汉式单例
//饿汉式单例类.在类初始化时,已经自行实例化 public class Singleton1 { private Singleton1() {} private static final Singleton1 single = new Singleton1(); //静态工厂方法 public static Singleton1 getInstance() { return single; } }
懒汉式与饿汉式区别?
从名字上来说,饿汉和懒汉,
饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了,
而懒汉比较懒,只有当调用getInstance的时候,才回去初始化这个单例。
另外从以下两点再区分以下这两种方式:
1、线程安全:
饿汉式天生就是线程安全的,可以直接用于多线程而不会出现问题,
懒汉式本身是非线程安全的,为了实现线程安全有几种写法,分别是上面的1、2、3,这三种实现在资源加载和性能方面有些区别。
2、资源加载和性能:
饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,都会占据一定的内存,但是相应的,在第一次调用时速度也会更快,因为其资源已经初始化完成,
而懒汉式顾名思义,会延迟加载,在第一次使用该单例的时候才会实例化对象出来,第一次调用时要做初始化,如果要做的工作比较多,性能上会有些延迟,之后就和饿汉式一样了。
转载于:https://www.cnblogs.com/3020815dzq/p/10108640.html
Hibernate----面试题相关推荐
- Hibernate面试题分析
Hibernate面试题分析 1. Hibernate 的检索方式有哪些 ? ① 导航对象图检索 ② OID检索 ③ HQL检索 ④ QBC检索 ⑤ 本地SQL检索 2. 在 Hibernat ...
- Hibernate面试题收藏
hibenate的面试总结. 可能现在大家常常还会遇到一个些面试的时候问一些关于hibernate的问题,我个人觉得,这些东西一般做过开发的人在使用上没有任何的问题的,但是如果是要你来说就不一定能够 ...
- Hibernate面试题经典汇总(二)
Hibernate面试题经典汇总(二) 1.下面不属于持久化的是( a) A.把对象转换为字符串的形式通过网络传输,在另一端接收到这个字符串后能把 对象还原出来 B.把程序数据从数据库中读出来 C.从 ...
- Hibernate面试题
2019独角兽企业重金招聘Python工程师标准>>> 什么是Hibernate的并发机制?怎么去处理并发问题? Hibernate并发机制: a.Hibernate的Session ...
- hibernate 复合主键 根据主键删除_6道常见的 Hibernate 面试题
1.Hibernate的理解 Java的核心之一是面向对象设计,那么如何把数据库的数据封装成一个对象返回呢?如何把一个对象出局后保存到数据库呢?Java采用了jdbc来解决这个问题,但是数据量如何解决 ...
- Hibernate模拟试题
1.下面关于Hibernate说法正确的是( )(选择两项) A) Hibernate是ORM的一种实现方式 B) Hibernate不要JDBC的支持 C) 属于控制层 D)
- Struts,Spring,Hibernate面试题总结
Hibernate工作原理及为什么要用? 原理: 1. 读取并解析配置文件 2. 读取并解析映射信息,创建SessionFactory 3. 打开Ses ...
- 2021最新Java面试题(Hibernate面试题、MyBatis面试题、Spring面试题、SpringMVC面试题)
1.什么是 ORM 框架? 答:对象-关系映射(Object-Relational Mapping,简称ORM),面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境 ...
- Java面试题汇总及答案2021最新(序列化含答案)
Java面试题汇总及答案2021最新(序列化含答案) 为大家整理了2021最新的Java面试题及答案下载,这套Java面试题总汇已经汇总了Java基础面试到高级Java面试题,几乎涵盖了作为一个Jav ...
- java判断时间区间 隔天_Java初中级程序员面试题宝典
Java基础部分 &与&&区别? &和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假:但是&&当第一个条件不成之后,后面的条件都 ...
最新文章
- 厦门理工学院计算机科学与技术专业,厦门理工学院计算机类(含计算机科学与技术、网络工程、空间信息与专业2016年在福建理科高考录取最低分数线...
- 怎样查看哪些程序占用了swap空间
- 【学术相关】如何找到研究的突破点?
- 最详细的讲解 JS 原型与原型链
- 超4000人参加源码共读,喊你来一起学习成长~打开新世界
- 飞鸽传书扫描器 v1.3
- 工作站的windows server 2008 终于安装好了
- java高级工程师线程_java高级工程师--------多线程并发
- VLFeat工具包在matlab使用方法
- Android下基于UVC的UsbCam的开发
- mac 命令 vim 快捷键
- InfiniBand -- 无限带宽技术(简称IB) 基于 Ubuntu 16.04 安装 IB 驱动
- 虚拟机文件上传至dsm服务器,没NAS也能体验群晖:VMware虚拟机安装DSM详细安装步骤...
- 图片怎么去底色?怎么去图片背景为透明?
- matlab中gain是什么,PID调理中的GAIN是啥意思?
- Photoshop脚本 镜头光晕滤镜的使用
- 什么是一套完全私有的即时通讯系统
- Bibtex 参考文献样式
- 【Linux】内核驱动篇九--设备模型
- 基于微信小程序的‘香草屋’饮料奶茶点单小程序