面试拾遗(1)

本文用来把我面试时遇到的没有弄明白的问题记录下来。

 

一、数据库的normalization与denormalization

normalization的目的之一是减少冗余的过程,之二是方便数据库查询语言的使用。

什么叫做方便数据库查询语言的使用呢?

也就是消除update, insertion及deletion时出现的异常。

 

 第一范式(1NF):

1所有的键的属性(列)都已定义;

2没有任何重复组(Repeating Groups),换句话说每行和每列的交汇处可以而且只

 

能包含一个值,而不能包含一组值;

3所有的属性(列)都依赖于主键。

 

第二范式(2NF):

1该表是第一范式的表;

2该表不包含部分依赖。

 

第三范式(3NF):

1该表为第二范式;

2该表不包含传递依赖。

 

BC范式

1该表为第三范式;

2设关系模式R<U,F>∈1NF,如果对于R的每个函数依赖X→Y,若Y不属于X,则X必含

 

有候选码,那么R∈BCNF。

3每个非平凡函数依赖的左边必须包含键码。

 

 

 

二、堆和栈的差别

一个由c/C++编译的程序占用的内存分为以下几个部分 

1栈区(stack) 

由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于

 

数据结构中的栈。 栈给予程序员的的自由度小,但是快捷。

2堆区(heap) 

一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与

 

数据结构中的堆是两回事,分配方式倒是类似于链表。堆给予程序员的的自由度大

 

,但是较慢。

3全局区(静态区)(static)

全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区

 

域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后

 

由系统释放。

4文字常量区

常量字符串就是放在这里的,程序结束后由系统释放。

5程序代码区

存放函数体的二进制代码。 

 

 

 

你可能感兴趣的:(面试拾遗(1))