C++后台知识点总结(一)
C++基础部分:
1.数组和指针的区别
2. C++中struct和class的区别
3.构造函数能不能是虚函数?
不可以,因为虚函数的调用必须通过虚函数表查找来实现,只有通过类对象前4个字节(32位系统)虚函数表指针找到对应类的虚函数表,才能访问虚函数,而虚函数表指针的生成是在构造函数中完成的,如果构造函数是虚函数,那么就只能通过虚表指针才能访问到,关键是此时就需要让构造函数产生出虚表指针。陷入了先有蛋还是现有鸡的问题。
4.析构函数可不可以是纯虚函数?
不建议是,因为我们知道纯虚函数是没有实现体的,那么子类对象在析构的时候,父类组成部分就没办法释放,显然不行。但是对于大部分编译器来说,可以将析构函数申明为纯虚函数,然后在类外写纯虚函数的实现体,从语法上不会报错。
5.构造函数和析构函数的调用顺序
C++标准规定构造函数是先调用基类的再调用子类的,而析构函数则是先调用子类的再调用基类的。
数据库部分:
1.索引的优缺点
优点: (1) 可以有效减少数据检索的时间,提高查询效率;
(2) 建立索引的列可以保证行的唯一性;
(3) 可以加快表与表的连接,提高表与表之间的联合查询效率;
缺点: (1)创建索引、维护索引都需要花费时间和空间成本,每条索引都要占据数据库的存储空间;
(2)在增删改的时候都需要对索引进行动态维护,也会花费时间和空间成本;
2.索引的应用场景
接触比较多的主要有以下三个场景:(1) 数据量大并且查询频率较高的建议使用索引
(2) 表与表联合查询时,用于约束条件的字段建议使用索引
(3) 用于排序的字段建议使用索引
3.索引的原理
其实就是回答B树或者B+树的工作原理,这两种数据结构适合磁盘索引文件和元素。
4.事务的定义和基本使用
(1)基本定义:事务是一种数据库操作的机制,一般来说是指一组数据库操作的集合,实际表现为多个sql语句的集合,当数据库引擎执行该事务时,要么就全部不执行,要么就全部执行。事务是一个不可分割的工作逻辑单元。在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的。(多用户登录系统一般采用事务机制)在执行的时候,如果事务执行成功,数据库引擎会提交该事务,即将事务的执行结果提交到数据库中,但是,如果执行不成功,我们可以进行回滚,即将数据库恢复到事务执行之前的状态。
(2)使用:不同数据库的事务实现有所不同,但大体上是相似的,一般分为四个操作:开启事务,执行事务,提交事务和回滚事务。
具体可以参考以下博客:
https://www.cnblogs.com/cold-ice/p/6039595.html
Linux部分
1.常用命令
(1)与CPU、内存和磁盘相关命令:top、free、df、fdisk
(2)查找相关命令:grep(可以搭配正则表达式)、find
(3)与文本处理相关的命令:sed(用于格式化修改)、awk(可以用于统计)、tr命令(可以实现简单的文本处理,包括替换、删除、去重、截断等功能),具体可以参考下面的资料:
http://man.linuxde.net/tr
https://blog.csdn.net/m0_37814112/article/details/80492076
(4)与网络相关:netstat(可以用于查看系统网络连接状态)、tcpdump(可以用于抓包分析)
2.共享内存
Linux下共享内存主要有两种实现机制,一种是采用mmap,另一种是采用XSI机制中的共享内存方法。mmap是内存文件映射,将一个文件映射到进程的地址空间,用户进程的地址空间的管理是通过vm_area_struct结构体进行管理的。mmap通过映射一个相同的文件到两个不同的进程,就能实现这两个进程的通信,采用该方法可以实现任意进程之间的通信。mmap也可以采用匿名映射,不指定映射的文件,但是只能在父子进程间通信。XSI的内存共享实际上也是通过映射文件实现,只是其映射的是一种特殊文件系统下的文件,该文件是不能通过read和write访问的。
------------------------------------------------------未完待续-------------------------------------------------------------