面试中问到HIBERNATE的缓存机制请问下该怎么回答

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试中问到HIBERNATE的缓存机制请问下该怎么回答相关的知识,希望对你有一定的参考价值。

问是的简单说下hibernate 的缓存机制

这是面试中经常问到的一个问题,楼主可以按照我的思路回答,准你回答得很完美,首先说下Hibernate缓存的作用(即为什么要用缓存机制),然后再具体说说Hibernate中缓存的分类情况,
最后可以举个具体的例子。
Hibernate缓存的作用:
Hibernate是一个持久层框架,经常访问物理数据库,为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据
Hibernate缓存分类:
Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存
Hibernate一级缓存又称为“Session的缓存”,它是内置的,不能被卸载(不能被卸载的意思就是这种缓存不具有可选性,必须有的功能,不可以取消session缓存)。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存。第一级缓存是必需的,不允许而且事实上也无法卸除。在第一级缓存中,持久化类的每个实例都具有唯一的OID。
Hibernate二级缓存又称为“SessionFactory的缓存”,由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。第二级缓存是可选的,是一个可配置的插件,在默认情况下,SessionFactory不会启用这个插件。

什么样的数据适合存放到第二级缓存中?   
1 很少被修改的数据   
2 不是很重要的数据,允许出现偶尔并发的数据   
3 不会被并发访问的数据   
4 常量数据   
不适合存放到第二级缓存的数据?   
1经常被修改的数据   
2 .绝对不允许出现并发访问的数据,如财务数据,绝对不允许出现并发   
3 与其他应用共享的数据。

Hibernate查找对象如何应用缓存?
当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;如果都查不到,再查询数据库,把结果按照ID放入到缓存
删除、更新、增加数据的时候,同时更新缓存

Hibernate管理缓存实例
无论何时,我们在管理Hibernate缓存(Managing the caches)时,当你给save()、update()或saveOrUpdate()方法传递一个对象时,或使用load()、 get()、list()、iterate() 或scroll()方法获得一个对象时, 该对象都将被加入到Session的内部缓存中。
当随后flush()方法被调用时,对象的状态会和数据库取得同步。 如果你不希望此同步操作发生,或者你正处理大量对象、需要对有效管理内存时,你可以调用evict() 方法,从一级缓存中去掉这些对象及其集合。

这样从头到尾一说的话,很全很详细,估计面试官对你的印象很好。不过也不要面面俱到,楼主可以挑一些自己懂得的内容说,不是很懂的内容可以省略,免得出漏子。
参考技术A

首先说下Hibernate缓存的作用(即为什么要用缓存机制),然后再具体说说Hibernate中缓存的分类情况,最后可以举个具体的例子。

1、 Hibernate是一个持久层框架,经常访问物理数据库,为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。

2、Hibernate一级缓存又称为“Session的缓存”,它是内置的,不能被卸载(不能被卸载的意思就是这种缓存不具有可选性,必须有的功能,不可以取消session缓存)。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存。

3、Hibernate二级缓存又称为“SessionFactory的缓存”,由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。

4、无论何时,我们在管理Hibernate缓存(Managing the caches)时,当你给save()、update()或saveOrUpdate()方法传递一个对象时,或使用load()、 get()、list()、iterate() 或scroll()方法获得一个对象时, 该对象都将被加入到Session的内部缓存中。

参考技术B 分为两类:会话缓存和工厂缓存

java面试

1、hibernate的二级缓存机制?

  a、hibernate缓存作用是什么

  hibernate是一个持久层框架,经常访问物理数据库,为了降低应用程序对数据库访问的频次,从而体改应用程序的运行性能。缓存内的数据时对数据源中的数据复制,应用程序再运行时从缓存中读取数据,在特定的时刻或时间会同步缓存和物理数据源的数据。

  b、hibernate数据缓存分类:一级缓存和二级缓存,其中一级缓存又称为session缓存,它是内置的,不能被卸载(意思就是这种缓存不具有可选性,是必须有的功能,不能取消session缓存)。由于session对象的声明周期通常对应一个数据库的事务或者一个应用事务,因此他的缓存是事务范围的缓存。在一级缓存中,持久化的每个实例都具有唯一的oid,hibernate二级缓存也称为sessionFactory缓存,由于sessionFactory对象的生命周期和应用个程序的整个过程对应,因此二级缓存是进程范围或者集群范围的缓存,有可能出现并发的问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别,二级缓存是可选的,是一个可配置的插件,在默认的情况下,sessionFactory是不会启用这个插件。

  c、什么样的数据适合存到二级缓存中?

    1、很少被修改的数据。

    2、不是很重要的数据,允许出现偶尔的并发的数据

    3、不会被并发访问的数据。

    4、常量数据。

  d、不适合放入二级缓存中的数据?

    1、经常被修改的数据。

    2、绝对允许出现并发访问的数据,如财务数据,绝对不允许出现并发。

    3、与其他应用共享的数据。

  e、hibernate查找对象如何应用缓存?

  当hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查,查不到,如果配置了二级缓存,那么从二级缓存中查询,如果查不到,再去数据库中查询,如果结果按照ID放入到缓存、删除、更新、增加到数据的时候,同时更新缓存。hibernate管理缓存实例无论何时,当你给save,update或者saveOrUpdate方法传递一个对象时,或是使用load,get,list,iterate或scroll方法获取一个对象时,该对象都将被加入到session的内部不缓存中。当随后flush方法被调用时,对象的状态会和数据库取得同步。如果你不希望此同步操作发生,或者你正在处理大量对象,需要对有效管理内存时,米可以调用evict方法,从一级缓存中去掉这些对象及集合。

2、几种常见数据库取前十条数据的sql语句。 

access:select top (10) * from table1 where 1=1 

db2:select column from table where 1=1 fetch first 10 rows only

mysql:select * from table1 where 1=1 limit 10 

sql server:

读取前10条:select top (10) * from table1 where 1=1 

读取后10条:select top (10) * from table1 order by id desc

oracle:select * from table1 where rownum<=10  

  

以上是关于面试中问到HIBERNATE的缓存机制请问下该怎么回答的主要内容,如果未能解决你的问题,请参考以下文章

面试中问到 有没有用过VUEX做过什么事情

面试题中问到 aop di ioc 怎么回答

面试总被问到HTTP缓存机制及原理?看完你就彻底明白了

面试总被问到HTTP缓存机制及原理?看完你就彻底明白了

java面试总结之四

浏览器缓存命中策略你了解多少?