面试疑难点解析:开发工具及框架(八)-阿里云开发者社区

开发者社区> 面试一点通> 正文

面试疑难点解析:开发工具及框架(八)

简介: 以下两个问题是某同学面试时面试官提问的,如果有同学要去面试,关于这两个问题的回答,可以参照以下内容~

lucene总结

是一个全文检索开发框架,它的主要功能是提高检索性,例如:在实际的互联网开发项目里面,如果进行某些关键字的搜索,一定是希望尽快给出结论,而这样的搜索是不可能使用数据库实现的,因为数据库唯一可用的方式是使用LIKE字句,而这种语句需要逐行扫描,所以性能是最差的。

在2005年是Apache推出lucene开发框架,这个开发框架本身设计很好,但中文支持不好(没有中文分词器)。

分词器,是将用户输入的一段文本,按照逻辑拆分成一些关键词。例如:现在你需要搜索“中华人民共和国”,如果有了分词器,它会自动进行文字拆分,可以拆分为:中华、人民、共和国、人民共和国、华人、中国。如果没有中文分词器,以上内容就无法实现。当时国内出现了一些国人的分词器,例如:庖丁解牛.jar。

lucene如果有更好的中文分词器(适合于新版本),那么就可以一直使用下去,该搜索主要是基于文件的模式完成的,在文件里会设置一系列搜索的索引库,通过索引库进行快速检索实现。

Hibernate Session生命周期

Hibernate里面没有Session生命周期,Session严格来讲就是指每一个用户,实体层里Session有俩点作用(基于Hibernate):

1.是维护对象的状态,也就是持久态问题:如果现在使用了Session对象的get()、load()方法进行某一个数据查询,默认情况下只要Session不关闭,那就表示该Session中的对象一直与数据库中的实例关联,这个时候如果调用了POJO类的setter方法修改的数据,就会引起数据表中对应数据行的数据改变,这个就是持久态的设计,而这个设计也是Hibernate最烂的一点,十年前这是最好的设计,因为此设计与EJB(Entit Bean)效果是一样的。

2.是进行一级缓存使用的:指的是如果要进行get()、load()数据查询,只要该数据查询了一次,并且在Session不关闭的情况下继续重复使用,那对于Hibernate而言是不会继续重复发出查询指令的,而是会将对象默认保存在内存里面,如果发现有同样的主键查询,就直接通过内存加载。

Hibernate的session是在使用的时候通过SessionFactory打开(Spring整合的时候也是使用SessionFactory打开),这个打开和关闭在使用之前和之后自动处理操作。

这里有一个问题:在Spring和Hibernate整合的时候由于存在一个数据的延迟加载机制,所以Spring里面会提供一种策略:“OpenInView”指的是Hibernate的Session延迟到页面显示完毕后再进行关闭,这样就解决了数据的级联显示操作,但这种处理会对事务控制造成困难,所以此类开发好像在实际工作中没有出现过。

更多专业知识,面试技巧就在面试一点通,持续更新中……
感谢浏览~
本内容来源于阿里云大学-Java面试技巧

版权声明:本文中所有内容均属于阿里云开发者社区所有,任何媒体、网站或个人未经阿里云开发者社区协议授权不得转载、链接、转贴或以其他方式复制发布/发表。申请授权请邮件developerteam@list.alibaba-inc.com,已获得阿里云开发者社区协议授权的媒体、网站,在转载使用时必须注明"稿件来源:阿里云开发者社区,原文作者姓名",违者本社区将依法追究责任。 如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

帮你拿下好工作

官方博客
官网链接