10-06
1.new有六种形式的操作符重载
2.free之所以释放时不需要内存大小,是因为系统分配内存时前面有一个内存的描述信息。调用free时首先ptr-MBK;
3.数据库为什么使用B+索引
为什么使用B-Tree(B+Tree)
二叉查找树进化品种的红黑树等数据结构也可以用来实现索引,但是文件系统及数据库系统普遍采用B-/+Tree作为索引结构。
一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的渐进复杂度。换句话说,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。为什么使用B-/+Tree,还跟磁盘存取原理有关。
4.倒排索引
倒排索引是搜索引擎中会根据属性值来查找记录由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。
5.不同进程可以绑定同一端口,例如fork产生的子进程,可以共享父进程的监听端口号,但是如果子进程使用同一端口号去监听则会产生错误。
6.如何检测内存泄露问题http://ztbls888.blog.163.com/blog/static/171817598201191111034723/
如何避免内存泄露问题
1.使用分配和释放配对
2.使用容器
3.使用智能指针
7.1--N 排序 要求 时间复杂度O(N) 空间复杂度O(1)
void sort(int arr[], int n) { int t; /**//*临时变量:空间复杂度O(1)*/ //可以证明这个算法每次交换必然将一个数字正确安排到位,而且最多只有N次交换。 //具体体现在cnt的值上,所以虽然是二重循环仍然是时间复杂度O(n) for (int i = 1; i <= n; i++) { while(arr[i] != i) { t = arr[arr[i]]; arr[arr[i]] = arr[i]; arr[i] = t; } } }
8.面向对象的五大原则
1.单一职责原则
2.开放封闭原则
3.依赖倒置原则
4.接口隔离原则
5.Liskov替换原则
9.字符串压缩算法
#include <stdio.h> #include <iostream> using namespace std; void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr) { int count = 1; int i = 0; int j = 0; for (;i < lInputLen - 1;i++) { if (pInputStr[i]==pInputStr[i+1]) { ++count; } else { if (count > 1) { pOutputStr[j] = '0' + count; pOutputStr[j + 1]=pInputStr[i]; j +=2; count = 1; } else { pOutputStr[j]=pInputStr[i]; j++; } } } if (count > 1) { pOutputStr[j] = '0' + count; pOutputStr[j + 1]=pInputStr[i]; j +=2; } else { pOutputStr[j]=pInputStr[i]; j++; } pOutputStr[j]='\0'; } int main() { char pOut[20]; stringZip("pppppppp",8,pOut); cout << pOut << endl; return 0; }