5.5.1 你最近的项目里用到的是哪个数据?或你用过哪些数据库?或你对哪个数据库最熟悉?

通过这个问题,我们将会确认候选人是否在项目里用过数据库或JDBC。

5.5.2 你有没有建过表?或修改表里的字段?或有没有建过索引?

这个属于基本的对数据库的操作问题。

5.5.3 你有没有存储过程的使用经验?如果要通过存储过程的参数返回值,该怎么做?

我们在本章的5.1.6部分讲过关于存储过程的知识点,这里大家可以去了解下存储过程的语法,不过大家更应当去了解存储过程的优缺点,然后向面试官说明用到(或不用)存储过程的原因。

第二需要确认候选人会基本的JDBC的操作,比如会创建连接,会通过Statement和PreparedStatement等对象执行增删改查等操作,会进行批处理操作等,也列些常见的问题。

5.5.4说下你在项目里用到JDBC里的哪些对象?

5.5.5 说下通过JDBC的对象得到select的结果的流程,或说下用JDBC的对象执行增删改操作的流程。

上述两个问题是为了确认候选人确实用过JDBC,关于这方面,建议大家找个合适机会说出如下比较资深的知识点:我在用JDBC时,一般会用try…catch…finally的结构,在finally从句里,我会关闭数据库对象,比如连接对象等,在catch从句里,我会做些针对性的操作,比如隔段时间重连或给出用户能看明白的提示,而不是简单地抛出异常了事。

5.5.6 Statement对象和PreparedStatement对象有什么差别?

通过PreparedStatement我们能执行批处理,而且通过PreparedStatement还能避免SQL注入。

5.5.7 在JDBC里如何进行批处理操作?在项目里一般批处理操作的数量一般是多少?

这方面的语法比较好描述,但请大家注意,每次批操作的数量不能太大,一般比如可以每1000条一处理。如果我们通过addBatch方法把太多的语句放入缓冲区,可能会把缓冲区撑爆掉,从而导致异常。

第三需要确认候选人掌握一些比较高级的技能,比如如何操作事务,是否有连接池的使用经验等,这方面常见的问题如下。

5.5.8 什么是事务?你有没有用到过事务?

大家可以去了解下事务的概念。也可以通过阅读本章了解下在JDBC里使用事务的方法。此外,如果大家在项目里还用到过Spring来管理事务,也请把这部分的知识点说出来。

5.5.9 你是否知道事务隔离级别?JDBC里事务隔离级别有哪些?

这里大家可以先说下脏读幻读和不可重复读的概念,再说在JDBC里如何通过相关的常量来设置事务隔离级别。

建议大家再说下不合理地设置事务隔离级别会给项目带来什么危害,比如会让一个事务等待过长时间从而导致锁表等严重情况,然后说下,比如你项目里是禁止脏读和幻读,那么在你项目里就需要实时监控数据库,以防止锁表等情况发生。

5.5.10 你是否知道连接池的概念?是否用过连接池?如果用过,用到的是哪种连接池?连接池的参数你是怎么设置的?

用连接池可以避免频繁创建和释放连接对象所带来的性能损耗。本章提到的是C3P0连接池,而且也提到了一些常见参数,对于这个问题大家可以结合你的项目,参考本章的知识点综合地整理出你的说辞。

第四方面是考察数据库优化方面的技能。

5.5.11 你在项目里有没有用过索引?用到的是哪种索引?

5.5.12 告诉我一种适合建索引的情况?或者告诉我在哪些场景下不适宜建索引?

5.5.13 当索引建好以后,请告诉我如何正确地使用索引,或者列举些不能用到索引的做法?  在我们的另外一本书《Java Web轻量级开发面试教程》的相关章节里,讲了这方面的问题,大家如果感兴趣的话,可以阅读相关内容。

5.5.14 这是个开放性的问题,说下你掌握的数据库优化方面的技能。

在我们面试的过程中,发现大部分的候选人能较好地回答出前三方面基础部分问题,但大多数的候选人却无法说出关于性能优化的使用经验。

其实这些候选人不是没用过,而是没想到或者是不会说,比如上文里提到的批处理算是一个优化技能点,连接池也是个优化点。大多数人一定用过,但即使是这些,面试时也很少有候选人能说出来。

换句话说,大家如果能整理出你用到过的优化技能,而且能在面试时条理清晰地说出来,你就能超越很多候选人。这里我们整理下关于数据库优化的技能点。

1 索引方面,知道建索引的场合,知道哪些场景下不该建索引,知道建索引后该如何正确地使用。

2 SQL优化方面,知道如何通过执行计划查看SQL语句的代价,并能通过with等语句优化查询语句。

3 会合理地使用批处理。

4 能合理地建表,建表时,如果表里数据量比较大,能通过添加冗余字段来防止多表关联带来的性能损耗。

5 知道使用数据表的监控工具,比如一旦某SQL语句运行超过2分钟,能发警告邮件,发现连接数过多,也能发警告邮件,这样就能知道哪些SQL需要优化。

Java核心技术及面试指南 JDBC部分的面试题总结以及答案的更多相关文章

  1. Java核心技术及面试指南 集合部分总的面试题归纳以及答案

    3.6.1ArrayList和LinkedList有什么差别?在哪种场景里应当用ArrayList(或LinkedList)? 大家如果学过数据结构,这个问题不难回答:前者是基于数组,数组比较擅长索引 ...

  2. Java核心技术及面试指南 设计模式部分的面试题总结以及答案

    8.6.4.1请实现一个线程安全的单例模式. 1      public class MailListReader { 2          private static MailListReader ...

  3. Java核心技术及面试指南 IO部分的面试题归纳以及答案

    4.6.1 java中有几种类型的流? Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStr ...

  4. Java核心技术及面试指南 面向对象部分的面试题总结以及答案

    问题2.7.1,开放性问题,说一下你对面向对象思想的了解. 要点1,先说基础概念,比如面向对象思想包括封装.继承.多态,然后说些语法,比如可以通过extends继承类.通过implement来实现接口 ...

  5. Java核心技术及面试指南 多线程部分的基本面试题总结以及答案

    7.1.5 (1) 如果某个类已经继承(extends)了一个类,那么让这个类具有多线程的特性? implements runnable类或通过线程池 7.1.5  (2)启动一个线程是用run()还 ...

  6. Java核心技术及面试指南 异常部分的面试题归纳以及答案

    4.2.4.1 throw和throws有什么差别?异常(Exception)和错误(Error)有什么差别? throw语句表示抛出异常,由方法体内的语句处理.throws语句用在方法声明后面,表示 ...

  7. Java核心技术及面试指南 数据库方面的面试题归纳以及总结

    5.1.7.1 事务的四大特性是什么? ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚. ⑵ 一致性(Consistency) 一致性是指事务必须使数据库 ...

  8. Java核心技术及面试指南:视频列表

    如下是本书相关内容的视频列表,会动态更新 第一章 1 视频1.1  JDK和JRE和JVM的区别,安装Java开发环境    1.1.1  第2页 2 视频1.2  编写第一个HelloWorld程序 ...

  9. Java核心技术及面试指南的视频讲解和代码下载位置

    都是百度云盘,均无密码 代码下载位置: https://pan.baidu.com/s/1I44ob0vygMxvmj2BoNioAQ 视频讲解位置: https://pan.baidu.com/s/ ...

随机推荐

  1. MybatisMapper 动态映射(增删改查)

    //接口内容以及注意事项 package cn.jy.mybatis.mapper; import java.util.List; import cn.jy.mybatis.pojo.User; pu ...

  2. js几种数组遍历方法.

    第一种:普通的for循环 ; i < arr.length; i++) { } 这是最简单的一种遍历方法,也是使用的最多的一种,但是还能优化. 第二种:优化版for循环 ,len=arr.len ...

  3. Kmeanns图片压缩

    from sklearn.datasets import load_sample_image#先导入数据包 china = load_sample_image("china.jpg" ...

  4. SAS 选取部分观测

    SAS  对部分观测得处理 在建立新数据集时,有以下两种方式可以从已经存在的数据集中选取观测到新数据集中. ·通过删除不满足条件的观测来保留想要的观测. ·仅接受满足条件的观测. 条件可以由IF语句. ...

  5. Liang-Barsky直线段裁剪算法

    Liang-Barsky直线段裁剪算法 梁友栋与Barsky提出的裁剪算法以直线的参数方程为基础,把判断直线段与窗口边界求交的 二维裁剪问题转化为求解一组不等式,确定直线段参数的一维裁剪问题.设起点为 ...

  6. Linux下安装numpy

    转自:https://blog.csdn.net/abc_321a/article/details/82056019 1.下载源码包 ,命令如下 wget http://jaist.dl.source ...

  7. DOS命令 学习笔记

    将遇到的一些DOS命令(linux命令和DOS命令都存在的命令也记录在此处)记录下,方便以后查询 DOS命令计算文件md5/sha1/sha256 certutil -hashfile yourfil ...

  8. 第一次OO总结

    作业1——多项式加减法 看到这个名字就开始瑟瑟发抖了,毕竟一年前用C语言让我写这么一个程序都很头疼,什么堆栈啊还有结构都稀里糊涂的,更别说用一个完全没接触过的语言来完成最简单的一次作业.像我这样越老心 ...

  9. Unity3D编辑器扩展(六)——模态窗口

    前面我们已经写了5篇关于编辑器的,这是第六篇,也是最后一篇: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)—— ...

  10. 收集几个html和element-ui的录入控件

    我希望有一个控件去显示或输入账本的金额 先做一些资料收集,也希望大家给个建议 输入银行账号会设置每四位添加一个空格 https://blog.csdn.net/wkx18330698534/artic ...