表与表之间是怎么关联的

表与表之间常用的关联方式有两种:内连接、外连接。

内连接:

内连接通过INNER JOIN来实现,它将返回两张表中满足连接条件的数据,不满足条件的数据不会查询出来。

外连接:

外连接通过OUTER JOIN来实现,它会返回两张表中满足连接条件的数据,同时返回不满足连接条件的数据。外连接有两种形式:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)。

左外连接:可以简称为左连接(LEFT JOIN),返回左表中的所有记录和右表中满足连接条件的记录。 右外连接:可以简称为右连接(RIGHT JOIN),返回右表中的所有记录和左表中满足连接条件的记录。 ​ 除此之外,还有一种常见的连接方式:等值连接。这种连接是通过WHERE子句中的条件,将两张表连接在一起,它的实际效果等同于内连接。出于语义清晰的考虑,一般更建议使用内连接,而不是等值连接。

加分回答

​ 以上是从语法上来说明表与表之间关联的实现方式,而从表的关系上来说,比较常见的关联关系有:一对多关联、多对多关联、自关联。

一对多关联:这种关联形式最为常见,一般是两张表具有主从关系,并且以主表的主键关联从表的外键来实现这种关联关系。另外,以从表的角度来看,它们是具有多对一关系的,所以不再赘述多对一关联了。 多对多关联:这种关联关系比较复杂,如果两张表具有多对多的关系,那么它们之间需要有一张中间表来作为衔接,以实现这种关联关系。这个中间表要设计两列,分别存储那两张表的主键。因此,这两张表中的任何一方,都与中间表形成了一对多关系,从而在这个中间表上建立起了多对多关系。 自关联:自关联就是一张表自己与自己相关联,为了避免表名的冲突,需要在关联时通过别名将它们当做两张表来看待。一般在表中数据具有层级(树状)时,可以采用自关联一次性查询出多层级的数据。

简述一下C++ 从代码到可执行二进制文件的过程

【得分点】

预编译、编译、汇编、链接

【参考答案】

标准回答

C++ 从代码到可执行二进制文件经过四个过程,分别是:预编译、编译、汇编、链接。

  1. 预编译,主要的处理操作:

a.将所有的 #define 删除,并且展开所有的宏定义(宏替换)

b.处理所有的条件预编译指令,如 #if、#ifdef

c.处理 #include 预编译指令,将被包含的文件插入到该预编译指令的位置

d.删除所有的注释

e. 添加行号和文件名标识

  1. 编译:将预处理之后的代码转换成特定的汇编代码,主要包括词法分析、语法分析、语义分析、优化代码等操作

  2. 汇编:将汇编代码汇编成机器指令

  3. 链接:将不同源文件生成的目标代码以及其它目标代码、库文件组合起来,从而形成可执行程序

加分回答

链接分为静态链接和动态链接。

  1. 静态链接:静态链接是由链接器在链接时将库的内容加入到可执行程序中,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序。

  2. 动态链接:动态链接在链接后动态库仍然与可执行文件分离,直到运行时才动态加载。

alt

  1. 预处理 gcc -E test.c -o test.i

  2. 编译 gcc -S test.i -o test.s

  3. 汇编 gcc -c test.s -o test.o

  4. 链接 gcc test.o -o test

生成可执行程序过程为成四个步骤:

1、由.c文件到.i文件,这个过程叫预处理。 2、由.i文件到.s文件,这个过程叫编译。 3、由.s文件到.o文件,这个过程叫汇编。 4、由.o文件到可执行文件,这个过程叫链接。

简述一下C++ 中的四种类型转换

【得分点】

static_cast、dynamic_cast、const_cast、reinterpret_cast

【参考答案】

标准回答

使用C 风格的类型转换可以把想要的任何东西转换成我们需要的类型,但是这种类型转换太过松散,对于这种松散的情况,C++ 提供了更严格的类型转换,可以提供更好的控制转换过程,并添加 4 个类型转换运算符,使转换过程更规范:static_cast、dynamic_cast、const_cast、reinterpret_cast。

  1. static_cast 静态转换

用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换

o 进行上行转换(把派生类的指针或引用转换成基类表示)是安全的

o 进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的

用于基本数据类型之间的转换,如把int 转换成 char,把 char 转换成 int。这种转换的安全性也要开发人员来保证

  1. dynamic_cast 动态转换

dynamic_cast 主要用于类层次间的上行转换和下行转换

在类层次间进行上行转换时,dynamic_cast 和 static_cast 的效果是一样的

在进行下行转换时,dynamic_cast 具有类型检查的功能,比 static_cast 更安全

  1. const_cast 常量转换

该运算符用来修改类型的const属性

常量指针被转化成非常量指针,并且仍然指向原来的对象

常量引用被转换成非常量引用,并且仍然指向原来的对象

注意:不能直接对非指针和非引用的变量使用 const_cast 操作符

  1. reinterpret_cast 重新解释转换

这是最不安全的一种转换机制,最有可能出问题

主要用于将一种数据类型从一种类型转换为另一种类型,它可以将一个指针转换成一个整数,也可以将一个整数转换成一个指针

比较版本号