广州面试2018年7月2日-面试题解析

广州面试2018年7月2日-面试题解析_第1张图片

1题:

数据库事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成(即:sql语句字符串数组)

一个数据库事务通常包括一个序列的对数据库的 读/写 操作,

事务存在的目的是:

1为数据库操作提供一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法

(即当sql语句序列中有一条语句错误时,执行回滚)

2当多个应用程序存在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防彼此的操作互相干扰

注意:并非任意的对数据库的操作序列都是数据库事务(还有存储过程也可以),数据库事务拥有以下四个特性,习惯性上被称之为AC ID特性.那么什么是ACID特性呢?如下:

原子性:事务作为一个整体被执行,包含在其中的sql语句要么被全部执行,要么都不执行

一致性:事务应确保数据库从一个一致状态到另一个一致状态.一致状态的含义是数据库中的数据应该满足完整性约束

隔离性: 多个事务并发执行时,一个事务的执行不应该影响其他事务的执行.

持久性: 已被提交的事务对数据库的修改应该永久的保存在数据库中.

锁:

当并发事务同时访问一个资源时,有可能导致数据的不一致性,因此需要一种机制来将数据访问顺序化,

以保证数据库数据的一致性,锁就是其中一种机制.

1.共享锁

共享锁(S锁)允许并发事务在封闭式并发下读取(select) 资源.资源上存在共享锁(S锁)时,任何其他事务都不可以修改数据.读取操作一旦完成,就立即释放资源上的共享锁(S锁),除非将事务隔离级别设置为可重复性或更高级别,或者在事务持续时间内用锁定提示保留共享锁.

2.更新锁:(U锁)

更新锁是共享锁的和其他排他锁的集合,更新锁意味着在做一个更新(update)时,一个龚翔锁在扫描完成符合条件的数据后可能会转化为排他锁

3.排他锁:

排他锁:(x锁)可以防止事务对资源进行访问.排他锁不与其他任何锁兼容.使用排他锁(x锁)时,任何其他的事务都无法修改数据;仅在使用NOLOCK提示或未提交读隔离级别时才会进行读取操作.

4.悲观锁

悲观锁是指假设并发更新时冲突发生,所以不管冲突是否真的发生,都会使用锁机制.

悲观锁会完成以下功能:锁住读取的记录,防止其他事务读取和更新这些记录.其他事务会一直阻塞.直到这个事务完成.

悲观锁可以使用Repeatable Read 事务 ,它完全满足悲观锁的要求.

5.乐观锁

乐观锁不会锁住任何东西,也就是说,它不依赖数据库事务机制,乐观锁完全是应用系统层面的东西.

如果使用乐观锁,那么数据库就必须加版本字段,否者只能比较所有字段,但是因为浮点型不能比较,所以实际上没有版本字段是不行的.

2题

sql中的索引

可以把索引当成理解成一种特殊的目录,Sql server 提供了 三种索引 :聚集索引和非聚集索引还有唯一索引

其实新华字典就是的正文本身就是一个索引.比如我们查安字,就会自然的翻开字典正文的前几页,因为字典正文是按照a~z的顺序排列的那么安字就在字典的前几页,翻完所有a开头的仍然没有找到,那就说明字典没有收录这个字,我们把这种正文本生就是一种按照一定规则排列的目录称之为"聚合索引"

那么什么是非聚合排序呢?

就是当在新华字典遇到不认识的字的时候,不知道它的发音吗,这个时候就要按照偏旁部首来查找到这个字的页码

比如我们在查找张字的时候张的页码是672页,而张字上面的是"驰" 字,但是页码却是390页,

很显然"驰"字并非在张的前面一个字,在检字表看见的字是它们在飞聚合索引中的排序,是字典正文中的字在非聚合索引中的映射


唯一索引:

主键与唯一索引的区别   
主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 唯一性索引列允许空值,而主键列不允许为空值。 主键列在创建时,已经默认为空值 + 唯一索引了。
主键可以被其他表引用为外键,而唯一索引不能。 一个表最多只能创建一个主键,但可以创建多个唯一索引。 主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。 在 RBO 模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度。


3题:

三层分为:

数据访问层:DAL ,业务逻辑层:BLL ,表示层:UI

表示层:实现内容的展示和用户的交互;

业务逻辑层:实现业务逻辑和验证

数据访问层:连接数据库并对数据库中数据进行操作

4题:

冒泡排序:

要点 :

1数组中第一个数,和后面相邻的元素比较 ,如果后面的元素比自己大就交换值,(此处可以决定将大数往左还是右排)

2第一次拍完后最大的数一定在最左或者最右边,

m

打开vs太麻烦这里用js写一下

var arr = [ 4, 2, 8, 1, 9, 3, 7, 6, 1, 2, 8, 9, 7, 1]
function consoleArr( arr){
var content = '';
for ( var item in arr) {
content += arr[ item] + ' ';
}
console. log( content)
}
consoleArr( arr);
var temp = 0;
for( var i = 0; i< arr. length- 1; i++){
for( var j = 0; j < arr. length- i- 1; j++ ){
if( arr[ j] > arr[ j+ 1]){
temp = arr[ j+ 1];
arr[ j + 1] = arr[ j];
arr[ j] = temp;
}
}
consoleArr( arr);
}

第二种:

for( var i = 0; i< arr. length- 1; i++){
for( var j = i+ 1; j< arr. length; j++){
if( arr[ i] < arr[ j]){
temp = arr[ i];
arr[ i] = arr[ j];
arr[ j] = temp;
}
}
consoleArr( arr);
}

第二页:

广州面试2018年7月2日-面试题解析_第2张图片

一题:

select tb1.SNo, tb1.SName , tb2.CName from S tb1 left join SC tb3 on tb1.SNo =tb3.SNo 
left join C  tb2 on tb2.CNo =tb3.CNo  where tb2.CName='税收基础'

为了更使结果更明显我加了课程名称在结果中


二题:

为了使结果更明显这里加了CNo

select tb1.SName,tb1.SD,tb3.CNo from s as tb1 left join sc tb3 on tb1.SNo =tb3.SNo where tb3.CNo ='C2'
广州面试2018年7月2日-面试题解析_第3张图片

三题:题中有不等于 所以看一下: sql server 的 不等于 是 <>

广州面试2018年7月2日-面试题解析_第4张图片

答案:

select S.SName,S.SD ,sc.CNo from S left join SC on s.SNo = sc.SNo where CNo <> 'C5'

为了显示更好显示,添加了 CNo 结果如下:

广州面试2018年7月2日-面试题解析_第5张图片



你可能感兴趣的:(面试题)