1,一个线程 申请内存 然后把flag 置为 ture ,另外一个线程 判断flag 为true 就去使用这个内存 请问这样操作可以吗–线程访问
2, 多个IO复用 --IO读写操作
3,数据库索引问题,索引在数据库中如何存储–数据库存储问题,B+树索引
4,epoll 网络模型
5,linux 什么情况下会触发 用户态与内核态的切换
6,如何自己实现system 函数
7,如何解决哈希冲突 i
哈希冲突
8,map和unordered_map底层数据查找和存储方式,引申到set和unordered_set,以及各自的不同
存储方式+底层数据查找方式
9,为什么将类的析构函数声明为虚函数
当基类指针指向子类对象时,在删除对象时,并没有调用子类成员对象和子类自身的析构函数,而只是调用了基类对象和基类的析构函数,造成局部销毁,也会造成内存泄漏。
10.分治法的基本思想
分+治。将原来的问题分成几个子问题,再进行合并处理。比如归并排序。
将一个无序数组先分成两个,通过递归,最终得到多个长度为1的子数组,治,就是把已经排好序的两个小数组合成一个排好序的大数组,从长度为1开始,最终合成一个大数组。
divide+merge
表达式问题
11.快速排序的基本思想–几种排序的基本思想
链接
12.右值引用用在什么场景
13.红黑树相对于二叉树排序的优点
14,虚函数表,动态原理
自己画的图
15.auto 是怎么实现 类型匹配的
16.多个线程 访问share_ptr 怎么保证计数器的正确性,考察智能指针
智能指针
17,什么时候不需要定义虚析构函数?
不需要基类对子类及对象进行操作的时候,不需要定义虚析构函数,这样会增加内存开销。
18.构造函数与参数列表有什么不同
20,什么情况下 类是没有默认构造函数?
21,构造函数能不能调用虚函数
class Base
{
public:
Base()
{
Fuction();
}
virtual void Fuction()
{
cout << "Base::Fuction" << endl;
}
};
class A : public Base
{
public:
A()
{
Fuction();
}
virtual void Fuction()
{
cout << "A::Fuction" << endl;
}
};
/*
A继承自base,A的构造函数调用了虚函数Fuction(),当基类指针指向子类对象时,a这个对象必须先调用基类Base的构造函数Fuction()。
建立一个对象时,基类构造函数->子类构造函数。析构一个对象时,子类析构函数->基类析构函数。如果在系
Q:为什么不能在构造函数中调用虚函数?也就是说基类的构造过程中,虚函数调用也不会传递到派生类中。
A:
1.虚函数的作用是什么?是实现部分或默认的功能,而且该功能可以被子类所修改。如果父类的构造函数设置成虚函数,那么子类的构造函数会直接覆盖掉父类的构造函数。而父类的构造函数就失去了一些初始化的功能。**这与子类的构造需要先完成父类的构造的流程相违背了。**而这个后果会相当严重。
2.虚函数的调用是需要通过“虚函数表”来进行的,而虚函数表也需要在对象实例化之后才能够进行调用。在构造对象的过程中,对象显然没有进行实例化,更没有为“虚函数表”分配内存。所以,这个调用也是违背先实例化后调用的准则。
3.虚函数的调用是由父类指针进行完成的,而对象的构造则是由编译器完成的,由于在创建一个对象的过程中,涉及到资源的创建,类型的确定,而这些是无法在运行过程中确定的,需要在编译的过程中就确定下来。而多态是在运行过程中体现出来的,所以是不能够通过虚函数来创建构造函数的,与实例化的次序不同也有关系。
Q:为什么析构函数中不能调用虚函数
A:从概念上来说,析构函数是用来销毁一个对象的。先调用子类的析构函数->基类析构函数。所以在调用基类析构函数的时候,子类的析构函数认为善后工作已经完成了,这个时候如果子类析构函数中再有虚函数,就没有意义了。
*/
22,静态成员是什么时候初始化的
类的静态成员在类内定义,但是必须在类外初始化,因为静态成员属于整个类,如果在类内初始化,导致每个对象都有该静态成员,这是矛盾的。
c++ 11 左引,右引,析构函数为什么不能抛出异常,vector如何节约内存,数据库索引,线程锁,多进程,多线程怎么写,数据库底层原理,vector和list比较,编码规范,linux杀死进程线程,
0-29 面试 51Word
1,C++基础
多态有几种,多态如何实现。
静态多态和动态多态。
从动态多态引出虚函数,引出虚表指针,引出内存(堆,栈,常量区)
虚函数是属于类还是类的对象,是放在栈中还是堆?
memcpy和memmove的区别,设计一个memcpy,
memcpy和memcpy_s的区别
2,stl
vector扩充原理 2倍那个,
stl有哪些设计巧妙的东西
3,线程
线程放在哪里?
socket通信用过吗,一个
线程创建有几步?
4,OS
用户态线程和内核态线程的区别
5,其他
用小内存读取大文件有什么注意事项
数字的保存和文件的读取,主要是内存的溢出。