首页 > 代码库 > 今日刷题总结9

今日刷题总结9

数据存取路径

数据存取是指数据库数据存贮组织和存贮路径的实现和维护。在计算机中,数据一般以文件形式保存或存放在数据库中。在数据库,数据存取路径分为主存存取路径与辅存存取路径,前者主要用于主键检索,后者用于辅助键检索。在系统中,路径一般分为相对路径和绝对路径。

数据存取路径是指存取数据的位置,由于程序运行具有局部性,不可能把所有数据都调入内存,在内存中只有一部分数据,其余数据都在外存,因此数据存取路径分为辅存存取路径和内存存取路径,不同的路径,查找的方法是不同的,一般分为内存查找和辅存查找。

内存查找方法:顺序查找、折半查找、二叉树查找等。

辅存查找方法:B/B+树查找、分块查找、散列查找等。

具体参考https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%AD%98%E5%8F%96%E8%B7%AF%E5%BE%84/20956593?fr=aladdin

类型安全

类型安全就是说,同一段内存,在不同的地方,会被强制要求使用相同的办法来解释(interpret)。例如C++可以将0作为false,非零作为true。一个函数返回类型即使是bool,但是还是可以返回int类型的,并且自动将0转换成false,非零转换成true。所以说C++不是类型安全的。

C++提供了一些机制保障类型安全:

(1)操作符new返回的指针类型严格与对象匹配,而不是void*;

(2)C中很多以void*为参数的函数可以改写为C++模板函数,而模板是支持类型检查的;

(3)引入const关键字代替#define constants,它是有类型、有作用域的,而#define constants只是简单的文本替换;

(4)一些#define宏可被改写为inline函数,结合函数的重载,可在类型安全的前提下支持多种类型,当然改写为模板也能保证类型安全;

(5)C++提供了dynamic_cast关键字,使得转换过程更加安全,因为dynamic_cast比static_cast涉及更多具体的类型检查。

即便如此,C++也不是绝对类型安全的编程语言。如果使用不得当,同样无法保证类型安全。

结构体内存对齐规则

(1)数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐模数按照#pragma pack指定的数值(或默认值)和这个数据成员类型长度中较小的那个确定。在上一个对齐后的地方开始寻找能被当前对齐模数整除的地址。

(2)结构(或联合)的对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐.主要体现在最后一个元素对齐后,后面是否填补空字节,如果填补,填补多少.对齐模数将按照#pragma pack指定的数值(或默认值)和结构(或联合)最大数据成员类型长度中较小的那个确定。

(3)结合1、2可知在#pragma pack的n值等于或超过所有数据成员类型长度的时候,这个n值的大小将不产生任何效果。

参考题型https://www.nowcoder.com/questionTerminal/29193a1acc4e4fd4b349a26e4ad78291

实型常量

实型常量又称实数或浮点数。在C语言中可以用以下两种形式表示一个实型常量。

小数形式:即一般形式的实数,由整数部分、小数点、小数部分组成,其中整数部分或小数部分可以省略其中一个。数的正负用前面的“+”(可以省略)号或“-”号来区分。

指数形式:即指数形式的实数,由尾数部分、字母(e或E)、指数部分组成,形式如“尾数e指数”。尾数部分可以是十进制整数或一般形式的十进制实数,指数部分是十进制的短整数(可以带“+”号或“-”号)。数的正负用前面的“+”(可以省略)号或“-”号来区分。

一个实型常量可以赋给一个 float 型、double 型或 long double 变量。根据变量的类型截取实型常量中相应的有效位数字。

 

今日刷题总结9