1
2
3
4
5target:pererquisites
<tab> command1
<tab> command2
...
<tan> commandN
上面的这个就是一条简单的makefile
- target:规则的目标,可以简单理解为这条规则存在的目的是什么。通常是程序中间或者最后需要生成的文件名,也可以不对应具体的文件,而仅仅就是个概念上的规则目标。
1
2
3
4
5target:pererquisites
<tab> command1
<tab> command2
...
<tan> commandN
上面的这个就是一条简单的makefile
首先看一看链接器的作用。在构建c++程序的时候,几乎所有的程序都由多个c++源文件组成。使用c++编译器分别编译这些文件,以生成包含机器代码的目标文件(.o 或者 .obj 文件),每个目标文件对其他文件一无所知。所以,如果从另一个目标文件中存在的一个目标文件调用函数,则编译器将无法提供被调用函数的地址。
一旦生成了所有的目标文件,想要生成最终的可执行文件,那么链接器就会查看他们并计算出可执行文件中函数的最终地址是什么。然后他修补了编译器无法提供的地址。对于可能使用的任何库(.a 和 .lib 文件) ,他都执行相同的操作。最后,他将可执行文件写到磁盘。
链接器通常是与编译器分开的程序,例如:gcc 链接器成为 ld。传统上,链接器技术落后于编译器,主要是因为构建编译器比构建链接器通常更加有趣。并且链接程序不一定有权访问他们正在链接的目标文件的源代码。
好了,清楚了这个,未定义的错误就很明显了。“undefined reference” 错误意味着程序中的名称(函数、变量、常量等)具有引用,链接器在查找时找不到其定义。
比如:1: 调用的函数真的没有定义。 2: 定义的函数或其他与声明的不一样
C ++标准说:
可以转移到块中,但不能以初始化绕过声明的方式转移。从具有自动存储持续时间的局部变量不在范围内的点跳转到其处于范围内的点的程序是错误的,除非该变量具有POD类型(3.9)且声明时没有初始化程序。
switch(k) { case1: int t = 4; break; default: break; }
这个代码会出现交叉初始化错误,因为可以跳过变量 t 的初始化,但是此后它仍然是在作用域内,即使它从来没有首先创建过也是如此。
switch(k) { case1: { int t = 4; } break; default: break; }
1 | Slave_IO_State: Waiting for master to send event 等待 master 发生事件 |
当使用主键或者唯一键创建表时,MySQL 会自动创建一个名为 PRIMARY 的特殊索引。索引成为聚簇索引。PRIMARY索引是特殊的,因为索引本身与数据一起存储在同一个表中。聚簇索引强制执行表中的行顺序。除PRIMARY
索引之外的其他索引称为二级索引或非聚簇索引。
1 | 1. create index indexName on table_name (column_list) |
Mysql数据库一般默认的连接超时时间是28800s(8小时)
1 | show global variables like 'wait_timeout'; |
方法1: 临时方法,重启MYSQL服务器会失效,恢复到默认值
MySQL服务器关闭交互式连接前等待的秒数。通过MySQL 客户端连接数据库的是交互会话,
set global interactive_timeout = 259200;
MySQL服务器关闭非交互连接之前等待的秒数。通过jdbc等程序连接数据库的是非交互会话。
set global wait_timeout = 259200;
umask值用于设置用户在创建文件时的默认权限,当我们在系统中创建目录或文件时,目录或文件所具有的默认权限就是由umask值决定的。
对于root用户,系统默认的umask值是0022;对于普通用户,系统默认的umask值是0002。执行umask命令可以查看当前用户的umask值。
umask值一共有4组数字,其中第1组数字用于定义特殊权限,我们一般不予考虑,与一般权限有关的是后3组数字。
默认情况下,对于目录,用户所能拥有的最大权限是777;对于文件,用户所能拥有的最大权限是目录的最大权限去掉执行权限,即666。
因为x执行权限对于目录是必须的,没有执行权限就无法进入目录,而对于文件则不必默认赋予x执行权限。
对于root用户,他的umask值是022。
当root用户创建目录时,默认的权限就是用最大权限777去掉相应位置的umask值权限,即对于所有者不必去掉任何权限,
对于所属组要去掉w权限,对于其他用户也要去掉w权限,所以目录的默认权限就是755;
当root用户创建文件时,默认的权限则是用最大权限666去掉相应位置的umask值,即文件的默认权限是644。
(1)宽表:从字面意义上讲就是字段比较多的数据库表。通常是指业务主题相关的指标、维度、属性关联在一起的一张数据库表。由于把不同的内容都放在同一张表存储,宽表已经不符合三范式的模型设计规范,随之带来的主要坏处就是数据的大量冗余,与之相对应的好处就是查询性能的提高与便捷。这种宽表的设计广泛应用于数据挖掘模型训练前的数据准备,通过把相关字段放在同一张表中,可以大大提高数据挖掘模型训练过程中迭代计算时的效率问题。(一句话,空间换时间,便于训练迭代、减少表关联数量,修改少量数据时不需要该多张表)
(2)“宽表”特点:一个表就是一个class,每个字段就是一个filed,操作简单。但不便扩展。
(1)窄表:严格按照数据库设计三范式。尽量减少数据冗余,但是缺点是修改一个数据可能需要修改多张表。
(2)“窄表”特点:方便扩展,能适应各种复杂的数据结构(树形、继承等),无论有多少配置,都不用修改表结构。但代码逻辑可能需要包装一下。