面试拾遗(1)

    技术2022-05-20  40

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

     

    一、数据库的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程序代码区

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

     

     

     


    最新回复(0)