QAX选择、数据库的码、范式

文章目录

        • 一、单选
          • 知识点:skiplist、红黑树、AVL树、有序数组、有序的单链表分别的查询时间复杂度是多少?
          • 知识点:数据库中等值连接与自然连接的区别与联系
          • 知识点:数据库中的码
        • 二、多选
          • 知识点:进程与线程
          • 知识点:数据库中关系模式的范式
          • 知识点:LoadRunner进行性能测试
        • 三、C++语言方向选择题
          • 知识点:大端模式小端模式的输出分别是啥
          • 知识点:大小端的输出分别是什么、C语言共同体的理解、常用的数据类型所占的字节数
        • 编程题

2020.08.16
16道单选,10道多选,4道C++/python/JAVA语言方向题,两道编程。
选择题中涉及:数据库(很多)、数据结构、

一、单选
  1. skiplist的查询时间复杂度和以下哪种数据结构不相同?
    A 红黑树
    B AVL树
    C 有序数组
    D 有序的单链表
知识点:skiplist、红黑树、AVL树、有序数组、有序的单链表分别的查询时间复杂度是多少?

这个skiplist第一次见,懵了。还蛮复杂的

  • skiplist调表就是链表与二分法的结合:
    1.链表从头节点到尾节点都是有序的
    2.可以进行跳跃查找(形如二分法),降低时间复杂度O(logn)
    skiplist调表的查询时间复杂度为O(logn)
  • 红黑树、AVL等平衡树查询时间复杂度也是O(logn)
  • 有序数组查询(比如用二分查找法)时间复杂度也是O(logn)
  • 有序的单链表查询时间复杂度为O(n)
  • 问题:有序数组查询的时间复杂度为什么是O(logn)?
    答:有序数组的查询方法可以用二分法:二分法的查询时间复杂度就是O(logn),为啥?
    比如有n=8个数的数组要排序,用二分法的话,第一次要查找n/2,第二次查找n/2*2,第三次查找n/2*2*2,此时n/2*2*2=1结束查询,也就是n*1/(2^3)=1,这个3就是查找次数3 = x = log(8) = log(n)所以二分法的查找次数也就是查询的时间复杂度为x=log(n)。 查询时间复杂度也就是查找几次能够得到想要的值。
  1. 下列关于数据库中等值连接与自然连接说法错误的是()
    A 自然连接一定是等值连接,但等值连接不一定是自然连接
    B 自然连接不需要连接从句,通过两个标的相同列和自动完成等值关系;等值连接需要连接从句,通过where从句指定等值连接关系
    C 等值连接是关系的广义笛卡尔积的子集
    D 等值连接中要求相等属性值的属性相同,而自然连接不要求相等属性的属性值必须相同
知识点:数据库中等值连接与自然连接的区别与联系
  • 定义:
    等值连接:等值连接必须要有相等的值,当条件不同时连接的结果也不相同,两个关系可以没有相同的属性列。
    自然连接:自然连接必须要有相同的属性才行,即等值连接后要求去除不相同的属性列。
  • 区别:
    自然连接一定是等值连接,但等值连接不一定是自然连接;
    等值连接不把重复的属性除去,而自然连接要把重复的属性除去;
    等值连接要求相等的分量,不一定是公共属性,而自然连接要求相等的分量必须是公共属性(属性值一定要相等);
  • 联系:等值连接是关系的广义笛卡尔积的子集。自然连接是一种特殊的等值连接。即两
    者都是两个关系连接之后的产物。
  1. 下面数据表中哪些属性可以作为码()
    QAX选择、数据库的码、范式_第1张图片
    答:选择学号和姓名
知识点:数据库中的码
  • 码: 是数据库中的基本概念,所谓码就是能唯一标识实体的属性它是整个实体集的性质,而不是单个实体的性质。码包括:超码、候选码、主码。
    (1)超码是一个或多个属性的集合,这些属性可以让我们在一个实体集中唯一地表示一个实体。如果K是一个超码,那么所有包含K的集合也是超码。
    (2)候选码是从超码中选出来的,自然的候选码也是一个或多个属性的集合。候选码是最小的超码,它的任意真子集都不能成为超码。
    (3)主码是被数据库设计者选中的,用来在同一实体集中区分不同实体的候选码。
  • 键字=码字、主键=主码=主关键字、候选键=候选码=候选关键字
    所谓关系键,指的是一个表中的一个或一组属性,用来标识该表的每一行与另一个表产生联系

QAX选择、数据库的码、范式_第2张图片

  • 码=超键:能够唯一标识一条记录的属性或属性集。
    标识性:一个数据表的所有记录都具有不同的码;
    非空性:不能为空;
    有些时候也把码称作键;

  • 1 主键=主码: 某个能够唯一标识一条记录的最小属性集(是从候选码里人为挑选的一条)
    唯一性:一个数据表只能有一个主键
    标识性:一个数据表的所有记录都具有不同的主键取值
    非空性:不能为空
    人为的选取某个候选码为主码

  • 2 候选码=候选键: 是能够唯一标识一条记录的最小属性集
    候选键是 没有多余属性 的超键

  • 3 主键=主码: 某个能够唯一标识一条记录的最小属性集(是从候选码里人为挑选的一条)
    唯一性:一个数据表只能有一个主键
    标识性:一个数据表的所有记录都具有不同的主键取值
    非空性:不能为空
    人为的选取某个候选码为主码

  • 举例子: 学生成绩信息表中有(学号、姓名、性别、年龄、系别、专业等)
    (1)超键/码:
    由于学号能确定一个学生,因此学生表中含有学号的任意组合都为此表的超键。如:(学号)、(学号,姓名)、(学号,性别)等
    若我们假设学生的姓名唯一,没有重名的现象。
    学号唯一,所以是一个超键
    姓名唯一,所以是一个超键
    (姓名,性别)唯一,所以是一个超键
    (姓名,年龄)唯一,所以是一个超键
    (姓名,性别,年龄)唯一,所以是一个超键
    (2)候选键:
    学号唯一,而且没有多余属性,所以是一个候选键
    姓名唯一,而且没有多余属性,所以是一个候选键
    (姓名,性别)唯一,但是单独姓名一个属性就能确定这个人是谁,所以性别这个属性就是多余属性,所以(姓名,性别)不是候选键
    (姓名,年龄),(姓名,性别,年龄)同上,也不是候选键
    (3)主键:见链接
    (4)外键:见链接

二、多选
  1. 下列几种关于进程的描述,正确的是
    A 同一程序可以生成不同的进程
    B 进程是在多进程并行环境中完整的程序
    C 程序是一种特殊进程【线程是一种特殊的进程】
    D 进程可以由程序、数据和进程控制块描述
知识点:进程与线程
  • 进程:独立数据空间,进程间那个数据,是用系统来调度的【进程是程序在一个数据集合上的运行过程,是系统资源分配单位】
  • 线程:执行程序的最小单元,进程内线程间共享资源,是用系统调度的
  • 协程:程序员调度,分解一个线程成为多个“微线程”。
  • QAX选择、数据库的码、范式_第3张图片
  1. QAX选择、数据库的码、范式_第4张图片
知识点:数据库中关系模式的范式

理论差不多算是理解了,来源在这

  • 范式(Normal Forms,NF): 范式是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则,在关系数据库中,这种规则就是范式。 关系数据库中的关系必须满足一定的要求,满足不同程度要求的为不同的范式。

  • 关系模式规范化的基本思想是消除关系模式中的数据冗余,消除数据依赖中不合适的部分,解决数据插入删除时的发生的异常现象。把关系模式规范化的过程中为不同程度的规范化要求设立的不同标准称为范式由于规范化的程度不同,就产生了不同的范式。

  • 第一范式(1NF): 每个属性都是不可分割的基本数据项。不满足第一范式的数据库不是关系型数据库。
    所谓第一范式(1NF) 是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。
    简而言之,第一范式就是无重复的列。

  • 第二范式(2NF): 非主属性必须完全依赖于主属性。
    规范化为2NF的过程, 即消除了那些对码部分函数依赖的非主属性的存在。
    如果R的主码为单属性,或R的全体属性均为主属性,则必然为2NF。

  • 第三范式(3NF): 符合2NF,且消除每个非主属性对主属性的传递依赖。

  1. LoadRunner进行性能测试的描述正确的是
    A LoadRunner进行数据上传的效率较高
    B LoadRunner进行数据下载无法判断结果
    C LoadRunner有6中场景设置的方法
    D LoadRunnerde某些性能指标定义与实际性能指标的定义不一致
知识点:LoadRunner进行性能测试

LoadRunner这个之前没有接触过,只知道是一个测试的工具。

  • LoadRunner是一个免费额性能测试工具,他包含三个大模块
    •使用VuGen:创建脚本
    •运用Controller:设置方案
    •查看Analysis:分析测试结果
三、C++语言方向选择题
  1. 以下程序在little-endian架构处理器下的输出是:?未解
int i;
char *pc = &i;
pc[0] = 1;
printf("%d\n", i);

A 1
B 16777216
C Segmentation Fault
D 0

知识点:大端模式小端模式的输出分别是啥
  • 本题的代码执行不出结果,因此直接选择了C选项。不知道对不对。
  • 大端模式与小端模式的概念:
    (1)小端模式:指的是数据的低位存在内存的低地址处,数据的高位存储在内存的高地址处;
    (2)大端模式与小端模式刚好相反。
  • little-endian就是小端模式
  • C选项的Segmentation Fault是一个错误提示,指的是访问的内存超过了系统所给这个程序的内存空间。
    QAX选择、数据库的码、范式_第5张图片
  1. 拓展题:计算机存储有大端和小端之分,在一个32位系统中运行下面程序,若其以小端方式存储,则返回值为(4),若其以 大端存储,则返回值是(1)。
int test()
{
	union key
	{
		int a;
		char b;
	}c;
	c.a = 16909060;
	return(c.b);
}
知识点:大小端的输出分别是什么、C语言共同体的理解、常用的数据类型所占的字节数
  • 判断自己电脑的系统是大端还是小端的代码:
int main(){
        union var data;
        data.c[0] = 0x04;//因为是char类型,数字不要太大,算算ascii的范围~
        data.c[1] = 0x03;//写成16进制为了方便直接打印内存中的值对比
        data.c[2] = 0x02;
        data.c[3] = 0x11;
//数组中下标低的,地址也低,按地址从低到高,内存内容依次为:04,03,02,11。总共四字节!
//而把四个字节作为一个整体(不分类型,直接打印十六进制),应该从内存高地址到低地址看,0x11020304,低位04放在低地址上。
        printf("%x\n",data.i);

		return 0;
}

由图中可以看出低地址存的数最终显示也是在低地址处,因此本系统是小端模式。
QAX选择、数据库的码、范式_第6张图片

  • 在本题的共同体union中,int型栈4个节,char型占1个字节,所以整个共同体c所占空间为4字节。1字节=8比特。
    c.a=16909060,在内存中存储的是二进制格式为:1 00000010 00000011 00000100
    小端模式下则要得到c.b的值,需要取出c.a数中以小端模式存储的值的最后一个字节值,为00000100=4
    大端模式下要得到c.b的值,需要取出c.a数中的以大端模式存储的值的最后一个字节值,为1=1

  • union定义了一个共同体:
    (1)共同体在内存中共用一块内存空间;
    (2)空间的大小有共同体中占用空间最大的变量所决定;
    (3)输出时,按相应的类型进行数值解析。

  • 常用的数据类型字节数
    QAX选择、数据库的码、范式_第7张图片
    16位编译器:char *(指针变量):2个字节(寻址空间为216,所以为两个字节)
    32位编译器:char *(指针变量):4个字节
    64位编译器:char *(指针变量):8个字节

编程题

第一题:老板发工资
第二题:实现字符串的撤销undo与恢复redo操作

你可能感兴趣的:(笔试题,数据库,C++)