Java核心技术及面试指南 数据库方面的面试题归纳以及总结
5.1.7.1 事务的四大特性是什么?
⑴ 原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。
⑵ 一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
⑶ 隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
⑷ 持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
5.1.7.2 共享锁和排斥锁的含义以及用途?
共享锁又称读锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。
排他锁又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。排他锁很好理解,是自己独占资源。
5.1.7.3 乐观锁和悲观锁的含义以及用途?
乐观锁总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作实现。
悲观锁总是假设最坏的情况,每次取数据时都认为其他线程会修改,所以都会加锁(读锁、写锁、行锁等),当其他线程想要访问数据时,都需要阻塞挂起。可以依靠数据库实现,如行锁、读锁和写锁等,都是在操作之前加锁,在Java中,synchronized的思想也是悲观锁。
5.1.7.4 内连接、外连接、全连接和左连接的语法以及用途。
1、内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。
2、外联接。外联接可以是左向外联接、右向外联接或完整外部联接。在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:
3左连接和左外连接
左向外联接的结果集包括 LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
FULL JOIN 或 FULL OUTER JOIN,完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
4 交叉联接 交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。
5.1.7.5 第一、第二和第三范式的含义以及反范式的含义。你在建表时,用到的是哪种范式?
“设计过表”标志着一个初级程序员开始成熟,这里我姑且不论数据表的业务逻辑,一般的公司是怎么“合理地设计数据表”?其实在设计一个商业项目的数据表时,离不开“业务需求”。
第一,如果在设计的时候,已经明确地知道这个系统的数据量不会太大,比如一个中学的图书管理系统,最多有10万条书本的数据,过去一个月里借阅记录不会超过1万条,也就是说表之间的关联代价不会太高,那么用“三范式”的原则是必须的。毕竟三范式能避免数据冗余带来的更新插入上“需要同时多表里相同字段”的麻烦。
第二,如果表的数据量很大,比如我刚才举的在线购物网站的例子,我们可能就需要冗余数据。在订单流水表里,同时放入用户邮件地址和商品名的字段。
在得到“免去连接操作”的好处同时,这样做也是有代价的,比如用户一旦更新了邮件地址,那么我们就需要同时在会员表和订单流水表里修改该字段,这就是冗余带来的后果。
除去一些技术点的描述,本篇更想告诉大家的是,你不仅需要掌握诸如“连接”和“范式”之类的技术,你更该从业务角度,从权衡各种“建表代价”,从而挑选一种最符合本项目的解决方案。
我在以往的面试官的经验里,有过两个案例,第一位他简历上项目很多,也具有1年相关经验,但他说建数据表要符合“三范式”,同时不清楚左连接,内连接等的具体做法,经过我细问,原来他在简历上的项目是自己在学习中搭建的,并非商业项目。
第二位,他虽然工作经验只有半年,但把“建表需要权衡数据冗余和连接代价”的意思描述了一下。这样至少在数据库层面,第二位的得分就要比第一位要高。
5.1.7.6 什么是SQL注入?它有什么后果?一般怎么预防?

我们一般用如下的SQL来验证身份:
Select userName from users where username = ‘输入的用户名’ and pwd = ‘输入的密码’
一般来说,如果用户名和密码不匹配,就无法通过验证,但有人可以在User Name里输入1,在User Passwor部分输入
1’ and pwd = ‘1’ or ‘1’=’1
那么整个SQL语句就会变成
Select userName from users where username = ‘1’ and pwd = ‘1’ or ‘1’=’1’
这样就能绕过验证。
而处理对象PreparedStatement能有效防止这个现象,因为一个?就是一个占位符,无法扩展。以此能防止SQL注入。
Java核心技术及面试指南 数据库方面的面试题归纳以及总结的更多相关文章
- Java核心技术及面试指南 IO部分的面试题归纳以及答案
4.6.1 java中有几种类型的流? Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStr ...
- Java核心技术及面试指南 集合部分总的面试题归纳以及答案
3.6.1ArrayList和LinkedList有什么差别?在哪种场景里应当用ArrayList(或LinkedList)? 大家如果学过数据结构,这个问题不难回答:前者是基于数组,数组比较擅长索引 ...
- Java核心技术及面试指南 异常部分的面试题归纳以及答案
4.2.4.1 throw和throws有什么差别?异常(Exception)和错误(Error)有什么差别? throw语句表示抛出异常,由方法体内的语句处理.throws语句用在方法声明后面,表示 ...
- Java核心技术及面试指南 JDBC部分的面试题总结以及答案
5.5.1 你最近的项目里用到的是哪个数据?或你用过哪些数据库?或你对哪个数据库最熟悉? 通过这个问题,我们将会确认候选人是否在项目里用过数据库或JDBC. 5.5.2 你有没有建过表?或修改表里的字 ...
- Java核心技术及面试指南 设计模式部分的面试题总结以及答案
8.6.4.1请实现一个线程安全的单例模式. 1 public class MailListReader { 2 private static MailListReader ...
- Java核心技术及面试指南 面向对象部分的面试题总结以及答案
问题2.7.1,开放性问题,说一下你对面向对象思想的了解. 要点1,先说基础概念,比如面向对象思想包括封装.继承.多态,然后说些语法,比如可以通过extends继承类.通过implement来实现接口 ...
- Java核心技术及面试指南 多线程部分的基本面试题总结以及答案
7.1.5 (1) 如果某个类已经继承(extends)了一个类,那么让这个类具有多线程的特性? implements runnable类或通过线程池 7.1.5 (2)启动一个线程是用run()还 ...
- Java核心技术及面试指南:视频列表
如下是本书相关内容的视频列表,会动态更新 第一章 1 视频1.1 JDK和JRE和JVM的区别,安装Java开发环境 1.1.1 第2页 2 视频1.2 编写第一个HelloWorld程序 ...
- Java核心技术及面试指南的视频讲解和代码下载位置
都是百度云盘,均无密码 代码下载位置: https://pan.baidu.com/s/1I44ob0vygMxvmj2BoNioAQ 视频讲解位置: https://pan.baidu.com/s/ ...
随机推荐
- 解决win系统无法安装.NET Framework 4.0 4.6 原因是HRESULT0xc8000222
1.开始----- 运行------- cmd ----- 键入net stop WuAuServ回车(停止windows update服务) 2.开始----- 运行----键入%windir%回车 ...
- sql server 临时库文件太大 迁移tempdb数据库
由于装SQL Server时默认装在系统盘,使用一段时间后,tempdb数据库占了68G,导致整个C盘爆满,彻底解决办法就是迁移tempdb物理文件,移至其他大空间磁盘上. 将 tempdb 从其在磁 ...
- VSCode 绿色版(zip压缩包) 添加右键菜单 使用VSCode 打开文件或文件夹
微软官方下载VSCode 可以下载exe安装外还可以下载zip 压缩包 下载地址: https://code.visualstudio.com/Download 但是zip压缩包却没有了 右键使用VS ...
- 虚方法(virtual)和抽象方法(abstract)的和接口(interface)的区别
虚方法(virtual)和抽象方法(abstract)的区别 2017年06月15日 13:41:26 阅读数:65 注:本文转载自 http://www.cnblogs.com/michaelxu/ ...
- JB的IDE可视化MongoDB、MySQL数据库信息
一.问题: 在使用JB的IDE的时候(pycharm.IDEA等)可视化mysql和mongodb的数据库信息,效果如下 MySQL: MongoDB: 可视化数据表关系: 二.方法: 1.MySQ ...
- JavaScript判断系统语言
var lang= null; function language(){ var language=null; if (navigator.appName == 'Netscape'){ langua ...
- C#实现简单的RPC
demo地址:https://pan.baidu.com/s/1PeTdV2V9DF87jZTHdz4CyA 提取码:n2qm 参考地址:https://github.com/neuecc/Magic ...
- 通过HttpClient发起Get请求,获取Json数据,然后转为java数据,然后批量保存数据库;
Json转java所需Jar包: commons-beanutils-1.8.0.jar,commons-collections-3.2.1.jar,commons-lang-2.5.jar,comm ...
- table增删改查操作--jq
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- OpenCV3.30 画图函数
画图函数(Draw Functions)都放在imgpro. 例如C++中用: #include <opencv2\imgproc.hpp>