虽然目前mytabis用得比较多,但Hibernate相对比较容易上手,而且也有不少公司在用,所以本文就用这个举例,事实上,本文给出的面试建议也适用于各种ORM。本文摘自java web轻量级开发面试教程

千军易得一将难求军,同样的,收集面试题容易,但要能合理地整理面试题最大限度展示自己的能力,这就需要技巧了。本人之前的一篇博文在面试中如何展示虚拟机和内存调优技能就属于展示面试技巧,这篇文章也是。

首先,大家得了解一些基础知识,以Hibernate为例,大家可以准备如下的问题,这些答案比较简单,建议大家自己找,以加深印象。

问题1,在项目里,你是怎么实现数据表和Java Model类之间的映射?

可以通过配置文件,也可以通过注解。

问题2,在Hibernate里,有哪些主键的生成方式?在项目里你用到的是哪些方式?

问题3,在Hibernate里,有临时对象,持久化对象和游离对象这三类,你了解多少?通过项目里的例子举例说明这三种状态?

首先你得对Session的方法有一定的了解,其次你得知道这些方法对状态的影响,比如调用save后会变什么状态。

问题4,通过HQL语言,如何执行带where,group by的操作,如何通过HQL执行表之间的关联操作。

问题5,如何在Hibernate里执行SQL语句。

问题6,通过Criteria对象,如何设置查询条件,如何设置分组?

在Hibernate(或者其它ORM框架)方面,一般我会给候选人分两个级别,第一是会用Hibernate干活,能在项目经理带领下做项目,如果需要的是初级程序员,那么达到这个标准就行了。

第二个级别高级程序员,要求是不仅要熟悉Hibernate的用法,更重要的是,能根据项目里数据表的需求,适当地选用技术种类,而且,一旦出现性能问题,能知道怎么排查和调试。

面试之前,通过看简历,如果我发现该候选人Hibernate经验不足1年半,或者最近半年没有用到这个,我更会着重问些技术上的细节,由此来确认他在ORM方面的能力,毕竟一些技能要靠多使用来积累的。

首先我会通过如下问题来了解选人在项目里使用Hibernate的基本情况。

1 在项目里,你们用的是哪个版本?对应的数据库是什么?

2 你们是用注解还是配置文件的方式编写映射文件?

3 在项目里,你们大多是用HQL还是SQL的方式获取数据?

4 你们项目的数据规模是多大?一张表里最多有多少数据?你们项目里通过Hibernate装载的数据量一般是多少?

这些问题纯粹是确认候选人在简历上描述的信息,一般只要用过Hibernate做过项目的,都能说上来。

随后我会深入地提问如下的问题。

1 在项目里你们有没有用到过一对一,一对多或多对多关联?相关的配置文件该怎么写?

如果候选人在项目里确实没怎么用过,只要说出合适的理由,比如有人说,他的项目数据量比较少,业务比较简单,项目经理认为没有必要用,那么我也会认可。

2 在配置一对一, 一对多或者多对多时, cascade和inverse该怎么配?结合项目需求告诉我inverse该配在一方还是多方?

3 在一对多或者多对多的情况下,在一方这端,你们是用set还是list还是map或是其它什么类型来装载多方的数据?说明选用的理由。

4 告诉我Session缓存里的三种对象状态,同时我会深入问session的一些重要方法(比如flush,save,persist,clear,evict)的作用。或者我会问,save、persist和saveOrUpdate这三个方法的不同之处。总之我会想方法确认候选人掌握了让对象在三种状态之间转换的对应的Session里的方法。

5 Session里load和get方法有什么差别?比如在一对多情况下,如果在加载一方的时候,我不想加载多方,那么我该怎么办?通过这个问题,我能确认候选人是否具备基本的调优技能。

6 在项目里,你们是否用到了Hibernate的拦截器或者是监听器?为什么要用?在拦截器和监听器里,你们实现了什么功能?

如果候选人在项目里没用过,这个不会成为扣分项,如果用过,而且在拦截器和监听器里加入的功能确实有必要,那么这个会成为加分项。

可能再问些基础问题,比如在Hibernate里你们怎么实现事务?你们一般用到了哪些注解?主键生成策略是什么?

上述问题是用来考察候选人是否达到第一个级别(能否用Hibernate来干活),如果我们要招一个初级程序员,那么达到这个标准就可以了。

我一般会用性能调优方面的问题来区分初级和高级程序员,因为在操作数据时,性能是一个不可或缺的指标项。

1 你们项目里用到的是一级还是二级缓存?如果是用到二级缓存,那么用到的是什么组件?一般你们是把项目里的什么数据放入二级缓存?

我会确认候选人是否把适当的数据放入二级缓存,如果候选人没有用到二级缓存,那么也不要紧,但我会通过其它问题来考察性能优化的知识点。

2 这是个开放性的问题,在Hibernate里,你们在性能优化方面,做了哪些方面的事情?或者你们在写代码的时候,如何保证Hibernate操作数据库的性能?

3 你们在项目里,一般怎么监控Hibernate操作数据库的性能?

这个问题也没有标准答案,但一般是项目都会监控数据库。

具体的措施可以是输出各SQL的运行时;也可以监控数据库本身,比如一旦连接数过多,或者出现死锁情况,发报警邮件;也可以监控项目内存和数据库所在服务器的内存使用情况,如果使用量过高,发报警邮件。

4 在你们项目里,一旦出现性能问题,你们怎么排查定位?

一般是会在各方法运行前后打印时间戳和内存使用情况,出现问题后通过看日志可以定位到究竟是哪个方法哪个SQL(HQL)导致的问题。

高级开发层面,针对Hibernate方面面试题的总结(对其它ORM也适用)的更多相关文章

  1. Hibernate最全面试题

    Hibernate常见面试题 Hibernate工作原理及为什么要用? Hibernate工作原理及为什么要用? 读取并解析配置文件 读取并解析映射信息,创建SessionFactory 打开Sess ...

  2. Struts+Hibernate+Spring面试题合集及答案

    Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 2 ...

  3. Struts+Hibernate+Spring面试题合集及答案(转)

    Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring 面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 ...

  4. 30K iOS程序员的简述:如何快速进阶成为高级开发人员

    前言: 本篇文章适用于所有在这个行业已经有了几年时间后想要在职业生涯中取得突破的开发人员,编程人员和程序员(或者你可能刚刚开始,但希望你能看到你的路径) 本文适合那些有着简单愿望的人:你想成为一名高级 ...

  5. 谈谈.NET MVC QMVC高级开发

    自从吾修主页上发布了QMVC1.0,非常感兴趣,用了半月的时间学习,真的感觉收益非浅,在此声明非常感谢吾修大哥的分享! 1.轻快简单,框架就几个类,简单,当然代码少也就运行快!单纯的MVC,使的如果你 ...

  6. 诚聘.NET架构师、高级开发工程师(2019年8月29日发布)

    招聘单位是ABP架构设计交流群(134710707)群主阳铭所在的公司 公司简介 七二四科技有限公司成立于2015年,成立之初便由金茂资本按估值2亿投资2200万,进行“健康724”平台搭建,2017 ...

  7. 近期Java高级开发岗面试总结

    原文出处:公众号:编程大道 作者:walking 近期Java高级开发岗面试总结 哈喽大家好,我是walking,这是我的公众号:编程大道. 很久没和大家见面了,文章更新的速度略有延后.这个公众号断断 ...

  8. 高薪诚聘熟悉ABP框架的.NET高级开发工程师(2016年7月28日重发)

    招聘单位是ABP架构设计交流群(134710707)群主阳铭所在的公司-上海运图贸易有限公司 招聘岗位:.NET高级开发工程师工作地点:上海-普陀区 [公司情况]上海运图贸易有限公司,是由易迅网的创始 ...

  9. .NET Framework 高级开发

    .NET Framework 高级开发 MSDN 这部分帮助介绍与 .NET Framework 相关的高级编程主题. 本节内容 管理 介绍如何管理 Active Directory 中的对象,如何使 ...

随机推荐

  1. python随机图片验证码的生成

    Python生成随机验证码,需要使用PIL模块. 安装: 1 pip3 install pillow 基本使用 1. 创建图片 1 2 3 4 5 6 7 8 9 from PIL import Im ...

  2. 基于 HTML5 Canvas 的 3D 模型贴图问题

    之前注意到的一个例子,但是一直没有沉下心来看这个例子到底有什么优点,总觉得就是一个 list 列表,也不知道右边的 3d 场景放两个节点是要干嘛,今天突然想起来就仔细地看了一下这个例子的代码,实际操作 ...

  3. DOM操作基本用法

    本文列举了js中DOM选取的基本用法,在列表中没有id的情况下如何选取到需要的一项,代码如下: <h2>获取Jerry的js代码</h2> <ul id="fi ...

  4. 自己动手编写IOC框架(一)

    博客创建了2年多了,一直没敢写点东西,怕技术不够误导了别人.2年多后的今天我已经很有信心能够为需要帮助的人做点微薄的贡献了.这是我第一次写博客,先自我介绍一下.本人网名泪滴,一个非常伤心的名字,生活中 ...

  5. 进程互斥(锁)------------------>一个坑

    进程互斥锁 引入: 进程之间数据不共享,但是共享同一套文件系统(如硬盘.键盘.cpu等),所以访问同一个文件,或同一个打印终端,是没有问题的,竞争带来的结果就是错乱,如何控制,就是加锁处理,即进程加锁 ...

  6. log4j2 项目日志组件

    在项目运行过程中,常常需要进行功能调试以及用户行为的跟踪和记录,部分人习惯使用System.out,但这并不建议,它仅仅是使用方便但不便于维护也无扩展性.相比log4j的话,log4j可以控制日志信息 ...

  7. dict.get()和dict['key']的区别

    a ={'name':'xxxx'} 1.a.get('gender') :如果不存在则返回一个默认值,如果设置了则返回默认的值,没有设置就返回None 2.a['gender'] :只能获取存在的值 ...

  8. java多线程编程核心技术——第七章补漏拾遗

    本章主要知识点: 1)线程组的使用 2)如何切换线程状态 3)SimpleDateFormat类与多线程的解决方法 4)如何处理线程异常. 这本书基本来到了终点,其实在第四章来说,核心(基础)的线程知 ...

  9. ASP.NET Core 返回 Json DateTime 格式

    ASP.NET Core 返回 Json 格式的时候,如果返回数据中有DateTime类型,如何自定义其格式呢?配置如下: services.AddMvc().AddJsonOptions(opt = ...

  10. mysql中对字符集和校对规则的认识

    字符集:指符号和字符编码的集合.校对规则:比较字符编码的方式.GBK2312:主要包括简体中文字符及常用符号,对于中文字符采用双字节编码的格式,也就是说一个汉字字符在存储占两个字节.GBK:包括有中. ...