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核心技术及面试指南 数据库方面的面试题归纳以及总结的更多相关文章

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

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

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

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

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

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

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

    5.5.1 你最近的项目里用到的是哪个数据?或你用过哪些数据库?或你对哪个数据库最熟悉? 通过这个问题,我们将会确认候选人是否在项目里用过数据库或JDBC. 5.5.2 你有没有建过表?或修改表里的字 ...

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

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

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

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

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

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

  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. 纯css实现无限嵌套菜单

    效果图: demo:关键的地方都以颜色明显标识 <!DOCTYPE html> <html> <head> <title>menu</title& ...

  2. PHP爬虫百度图片

    php pacong_1.php "酒","电报","电表","电波","电厂","电场& ...

  3. 编写一个javscript函数 fn,该函数有一个参数 n(数字类型),其返回值是一个数组,该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32]。

    function fn(n){ if(n<2 || n>32) { return; }  if(!n) { return;}  //判断n是否为数字  if(!/^[0-9]+.?[0-9 ...

  4. Vue源码解析---数据的双向绑定

    本文主要抽离Vue源码中数据双向绑定的核心代码,解析Vue是如何实现数据的双向绑定 核心思想是ES5的Object.defineProperty()和发布-订阅模式 整体结构 改造Vue实例中的dat ...

  5. c#串口测试

    软件和代码网盘下载 https://pan.baidu.com/s/1dFrE1pv#list/path=%2F SerialPort 类 https://msdn.microsoft.com/zh- ...

  6. Player2.0

    由于上次做的播放器实在是有点丑,加之这期间学习了许多关于页面排版的东西,这次做第二次作业就重新来了一遍“换汤不换药”的操作.其实刚开始看到的作业要求的时候,有点傻眼猫咪,但是做到现在这个程度,本人也是 ...

  7. 构造 this super

    构造方法 我们对封装已经有了基本的了解,接下来我们来看一个新的问题,依然以Person为例,由于Person中的属性都被private了,外界无法直接访问属性,必须对外提供相应的set和get方法.当 ...

  8. excel支持正则表达式提取字符函数(支持RegExp捕获分组)

    一.要让excel脚本支持Microsoft VBScript Regular Expressions 5.5 ,按快捷键alt+F11,出现下图界面,操作如图示: 二.添加VBA代码: 代码添加完毕 ...

  9. linux的常用指令和配置文件

    一. 常用的指令 mkdir -p 创建文件夹 parents递归创建 ls -alh 查看当前目录内容 cd   切换工作目录 pwd 打印当前工作目录 touch 文件名 创建文件 echo 字符 ...

  10. JPA-学习02

    一.主键生成策略 主键:确定一张表的唯一性东西(非空且唯一) 分为:自然主键和代理主键. 生成策略: identity:自增策略(1.值必须是数字,2.数据库支持) sequence:序列策略(同上, ...