高级开发层面,针对Hibernate方面面试题的总结(对其它ORM也适用)
虽然目前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也适用)的更多相关文章
- Hibernate最全面试题
Hibernate常见面试题 Hibernate工作原理及为什么要用? Hibernate工作原理及为什么要用? 读取并解析配置文件 读取并解析映射信息,创建SessionFactory 打开Sess ...
- Struts+Hibernate+Spring面试题合集及答案
Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 2 ...
- Struts+Hibernate+Spring面试题合集及答案(转)
Struts+Hibernate+Spring面试题合集及答案 Struts+Hibernate+Spring 面试题合集 1 1. Hibernate部分 2 1.1. Hibernate工作原理 ...
- 30K iOS程序员的简述:如何快速进阶成为高级开发人员
前言: 本篇文章适用于所有在这个行业已经有了几年时间后想要在职业生涯中取得突破的开发人员,编程人员和程序员(或者你可能刚刚开始,但希望你能看到你的路径) 本文适合那些有着简单愿望的人:你想成为一名高级 ...
- 谈谈.NET MVC QMVC高级开发
自从吾修主页上发布了QMVC1.0,非常感兴趣,用了半月的时间学习,真的感觉收益非浅,在此声明非常感谢吾修大哥的分享! 1.轻快简单,框架就几个类,简单,当然代码少也就运行快!单纯的MVC,使的如果你 ...
- 诚聘.NET架构师、高级开发工程师(2019年8月29日发布)
招聘单位是ABP架构设计交流群(134710707)群主阳铭所在的公司 公司简介 七二四科技有限公司成立于2015年,成立之初便由金茂资本按估值2亿投资2200万,进行“健康724”平台搭建,2017 ...
- 近期Java高级开发岗面试总结
原文出处:公众号:编程大道 作者:walking 近期Java高级开发岗面试总结 哈喽大家好,我是walking,这是我的公众号:编程大道. 很久没和大家见面了,文章更新的速度略有延后.这个公众号断断 ...
- 高薪诚聘熟悉ABP框架的.NET高级开发工程师(2016年7月28日重发)
招聘单位是ABP架构设计交流群(134710707)群主阳铭所在的公司-上海运图贸易有限公司 招聘岗位:.NET高级开发工程师工作地点:上海-普陀区 [公司情况]上海运图贸易有限公司,是由易迅网的创始 ...
- .NET Framework 高级开发
.NET Framework 高级开发 MSDN 这部分帮助介绍与 .NET Framework 相关的高级编程主题. 本节内容 管理 介绍如何管理 Active Directory 中的对象,如何使 ...
随机推荐
- 【微服务】之三:从零开始,轻松搞定SpringCloud微服务-配置中心
在整个微服务体系中,除了注册中心具有非常重要的意义之外,还有一个注册中心.注册中心作为管理在整个项目群的配置文件及动态参数的重要载体服务.Spring Cloud体系的子项目中,Spring Clou ...
- HDU 1216 Assistance Required 埃拉托色尼色筛法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1216 思路:色筛法 代码(1): #include<iostream>//-------- ...
- php 写程序求三个数的最大值
最简单的调用PHP自带的max函数即可:echo max(1,2,3,4,5);如果要自定义函数的话:function test($a,$b,$c){ return $a > $b ?($a & ...
- centOS 搭建pipelineDB docs
#下载docs git clone https://github.com/pipelinedb/docs.git #安装python-sphinx &python-dev yum instal ...
- java 之 迭代器模式(大话设计模式)
众所周知,java是编程语言中的高级语言,在java的世界里,已经有前辈为我们封装好了各个很好用的框架,工具类等,今天笔者想说的迭代器模式也已经被封装过. 就是我们经常使用的for循环迭代器.或者It ...
- Docker: 限制容器可用的 CPU
默认情况下容器可以使用的主机 CPU 资源是不受限制的.和内存资源的使用一样,如果不对容器可以使用的 CPU 资源进行限制,一旦发生容器内程序异常使用 CPU 的情况,很可能把整个主机的 CPU 资源 ...
- vue.js之生命周期,防止闪烁,计算属性的使用,vue实例简单方法和循环重复数据
摘要:今天是比较糟糕的一天没怎么学习,原因是学校的wifi连不上了~~.今天学习一下vue的生命周期,如何防止闪烁(也就是用户看得到花括号),计算属性的使用,vue实例简单方法,以及当有重复数据时如何 ...
- vue2的keep-alive的总结
vue2的keep-alive的总结 keep-alive 是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM.结合vue-router中使用,可以缓存某个view的整个内容 ...
- python中namedtuple介绍
namedtuple:namedtuple类位于collections模块,有了namedtuple后通过属性访问数据能够让我们的代码更加的直观更好维护.namedtuple能够用来创建类似于元祖的数 ...
- AndroidStudio下gradle的入门介绍与使用
參考: 网易云加密:http://apk.aq.163.com 网易云捕:http://crash.163.com 1 Groovy Groovy 是没有类型的 Java 代码 ,语法更简洁.形式有点 ...