表与表之间是怎么关联的
表与表之间常用的关联方式有两种:内连接、外连接。
内连接:
内连接通过INNER JOIN来实现,它将返回两张表中满足连接条件的数据,不满足条件的数据不会查询出来。
外连接:
外连接通过OUTER JOIN来实现,它会返回两张表中满足连接条件的数据,同时返回不满足连接条件的数据。外连接有两种形式:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)。
左外连接:可以简称为左连接(LEFT JOIN),返回左表中的所有记录和右表中满足连接条件的记录。 右外连接:可以简称为右连接(RIGHT JOIN),返回右表中的所有记录和左表中满足连接条件的记录。 除此之外,还有一种常见的连接方式:等值连接。这种连接是通过WHERE子句中的条件,将两张表连接在一起,它的实际效果等同于内连接。出于语义清晰的考虑,一般更建议使用内连接,而不是等值连接。
加分回答
以上是从语法上来说明表与表之间关联的实现方式,而从表的关系上来说,比较常见的关联关系有:一对多关联、多对多关联、自关联。
一对多关联:这种关联形式最为常见,一般是两张表具有主从关系,并且以主表的主键关联从表的外键来实现这种关联关系。另外,以从表的角度来看,它们是具有多对一关系的,所以不再赘述多对一关联了。 多对多关联:这种关联关系比较复杂,如果两张表具有多对多的关系,那么它们之间需要有一张中间表来作为衔接,以实现这种关联关系。这个中间表要设计两列,分别存储那两张表的主键。因此,这两张表中的任何一方,都与中间表形成了一对多关系,从而在这个中间表上建立起了多对多关系。 自关联:自关联就是一张表自己与自己相关联,为了避免表名的冲突,需要在关联时通过别名将它们当做两张表来看待。一般在表中数据具有层级(树状)时,可以采用自关联一次性查询出多层级的数据。
简述一下C++ 从代码到可执行二进制文件的过程
【得分点】
预编译、编译、汇编、链接
【参考答案】
标准回答
C++ 从代码到可执行二进制文件经过四个过程,分别是:预编译、编译、汇编、链接。
- 预编译,主要的处理操作:
a.将所有的 #define 删除,并且展开所有的宏定义(宏替换)
b.处理所有的条件预编译指令,如 #if、#ifdef
c.处理 #include 预编译指令,将被包含的文件插入到该预编译指令的位置
d.删除所有的注释
e. 添加行号和文件名标识
-
编译:将预处理之后的代码转换成特定的汇编代码,主要包括词法分析、语法分析、语义分析、优化代码等操作
-
汇编:将汇编代码汇编成机器指令
-
链接:将不同源文件生成的目标代码以及其它目标代码、库文件组合起来,从而形成可执行程序
加分回答
链接分为静态链接和动态链接。
-
静态链接:静态链接是由链接器在链接时将库的内容加入到可执行程序中,将一个或多个库或目标文件(先前由编译器或汇编器生成)链接到一块生成可执行程序。
-
动态链接:动态链接在链接后动态库仍然与可执行文件分离,直到运行时才动态加载。
-
预处理 gcc -E test.c -o test.i
-
编译 gcc -S test.i -o test.s
-
汇编 gcc -c test.s -o test.o
-
链接 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。
- static_cast 静态转换
用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换
o 进行上行转换(把派生类的指针或引用转换成基类表示)是安全的
o 进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的
用于基本数据类型之间的转换,如把int 转换成 char,把 char 转换成 int。这种转换的安全性也要开发人员来保证
- dynamic_cast 动态转换
dynamic_cast 主要用于类层次间的上行转换和下行转换
在类层次间进行上行转换时,dynamic_cast 和 static_cast 的效果是一样的
在进行下行转换时,dynamic_cast 具有类型检查的功能,比 static_cast 更安全
- const_cast 常量转换
该运算符用来修改类型的const属性
常量指针被转化成非常量指针,并且仍然指向原来的对象
常量引用被转换成非常量引用,并且仍然指向原来的对象
注意:不能直接对非指针和非引用的变量使用 const_cast 操作符
- reinterpret_cast 重新解释转换
这是最不安全的一种转换机制,最有可能出问题
主要用于将一种数据类型从一种类型转换为另一种类型,它可以将一个指针转换成一个整数,也可以将一个整数转换成一个指针