本文用来把我面试时遇到的没有弄明白的问题记录下来。
一、数据库的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程序代码区
存放函数体的二进制代码。