虽然目前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. OC中只有重写没有重载

    一.类的继承 Objective-c中类的继承与C++类似,不同的是Objective-c不支持多重继承,一个类只能有一个父类,单继承使Objective-c的继承关系很简单,易于管理程序. 二.方法 ...

  2. CentOS下redis集群安装

    环境: 一台CentOS虚拟机上部署六个节点,创建3个master,3个slave节点 1.下载并解压 cd /root wget http://download.redis.io/releases/ ...

  3. canvas入门之时钟的实现

    canvas 入门之作: 三步实现一个时钟: 直接上效果:   step 1  : 背景制作首先制作从1-12的数字: var canvas = document.getElementById('ca ...

  4. 51Nod--1051最大子矩阵和(DP入门)

    分析: 我们已经解决了一维的问题(基础篇中的最大子段和问题),现在变成二维了,我们看看能不能把这个问题转化为一维的问题.最后子矩阵一定是在某两行之间的.假设我们认为子矩阵在第i行和第j列之间,我们如何 ...

  5. NYOJ 138 找球号(二) bitset 二进制的妙用

    找球号(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 描述 在某一国度里流行着一种游戏.游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i< ...

  6. mysql索引优化面试题

    曾经偷偷的面试了两个单位,都提到了Mysql的优化问题,所以以后要多多学习数据库的优化知识了.建设数据库的优化大概主要就是索引的优化了吧,因为我们不可能修改数据结构的情况下,提高数据库的查询效率似乎也 ...

  7. 在网站开发中经常用到的javaScript技术

     1>屏蔽功能类 1.1 屏蔽键盘所有键<script language="javascript"><!--function document.onkeyd ...

  8. form表单数据封装成json格式并提交给服务器

    1.jsp代码,form表单: <form action="#" id="costForm"> <input type="hidde ...

  9. otter双A同步配置

    otter双A配置 最近做跨国服务器的数据同步,用了阿里的otter开源框架,遇到了不少问题,写一下文档为以后做参考. 第一步: 下载所需的文件 :otter,zookeeper,aria2 otte ...

  10. 【Codeforces 788C】The Great Mixing

    http://codeforces.com/contest/788/problem/C 显然如果有两杯一样的酒,把它们当作同一杯就好了.所以k<=1e6毫无意义. 若选的x杯酒的浓度分别为a,b ...