zoukankan      html  css  js  c++  java
  • 秋招复习-C++(三)

    • 数据库

    1.数据库的索引有哪些?

    (1)B树索引:利用B树作为底层数据结构的索引,在B树索引中保存索引列的值和数据表的对应行的ID,每一个叶子结点都存放着一个索引列的值和数据表对应行的ID,通过这个可以实现快速查询。

    (2)位图索引:当字段的基数很低时,需要使用位图索引(效率较高),将某个字段所有可能的值用对应的位去表示,每一条记录对应一组位,字段与位符合的置为1,否则置为0,节省内存空间

    (3)反向键索引:为了解决B树索引对顺序键值的不适配导致建立好的索引而提出的一种特殊的B树索引,可以让索引的叶子结点分布更为平均,每次进行索引时反向键索引会先反向每个键值的字节,然后对反向后的新数据进行索引。

    (4)基于函数的索引:即查询语句中包含了函数表达式作为查询条件,为了提高查询效率(避免全表扫描),可以采用基于函数的索引,即利用函数表达式作为索引项进行查找。

    (5)哈希索引、全局索引等其他索引

     可以参考这篇博客:https://www.cnblogs.com/sessionbest/articles/8689255.html

    • C++

    《Effective C++》总结:https://www.cnblogs.com/shenshenlei/p/5497967.html

    1. 定义一个空类,会发生什么?

          编译器会自动为空类声明一个默认构造函数(无参),一个拷贝构造函数,一个赋值运算符(=)以及一个析构函数,并且这个析构函数默认是非虚函数,除非这个空类的基类定义了一个虚析构函数。注意这里只是声明,只有在这些函数被实际调用的时候才会被编译器所创建。(参考《Effective C++》条款5)

    2.编译器默认提供的函数,如果不想要使用,应该将拷贝构造函数和赋值运算符声明为私有的,并且不予以实现,这样就可以阻止编译器实现将一个对象拷贝成另一个对象(从逻辑上来说是不存在两个对象完全相同)。

          C++11以前:将拷贝构造函数和赋值运算符函数均声明为私有,并且不予以实现,如下代码所示:

     class temp{
       public:
         ......
       private: 
       temp(const temp& f);//拷贝构造函数
        temp& operator=(const temp&);//重载赋值运算符,只声明不定义
     }

            C++11出现了新的标准,允许程序员以一种新的方式实现以上功能,如下代码所示, 支持C++11的编译器上也可以将成员函数定义成delete,这样就实现了对编译器默认提供的函数的屏蔽。(具体可以参考《Effective C++》条款6)

    1 class temp
    2 {
    3 public:
    4     ...
    5 private:
    6     ...
    7     temp(const temp&) = delete; //拷贝构造函数
    8     temp& operator=(const temp&) = delete; //重载赋值运算符

     • 多进程

    多进程通信方式(IPC)及特点总结

         无名管道(pipeline): 简单方便,但只适合于父子进程之间(也可以提供给子进程的子进程即孙进程),局限于单向通信,必须有一方关闭管道的写入,另一方关闭管道的读取,实用范围小。

          命名管道(FIFO):与无名管道相反的是,FIFO可以实现任意进程之间的通信,不只限于父子进程之间,功能比无名管道强大,不足之处是命名管道长期驻留在内存中,使用不当容易出错。

  • 相关阅读:
    day01--计算机硬件基础笔记
    22 Jun 18 Django,ORM
    21 Jun 18 Django,ORM
    20 Jun 18 复习, mysql
    20 Jun 18 Django,ORM
    19 Jun 18 复习, 正则表达式
    19 Jun 18 Django
    15 Jun 18 复习, shutil模块
    15 Jun 18 Django
    14 Jun 18 复习, form表单
  • 原文地址:https://www.cnblogs.com/chenwx-jay/p/9416963.html
Copyright © 2011-2022 走看看