面试记录
线程和进程
-
杀死主进程后子进程是否会死亡?
不会死亡,会挂在
init
进程下边 -
操作系统如何让一个进程退出(进程杀死的过程)
发送一个中断信号给内核
-
kill
操作是在干嘛给进程发送中断信号。(不知道理解的对不对)
C++基础
-
static
的作用修饰静态成员变量或者函数,
类内定义的静态成员变量需在类外访问,
静态成员函数只能访问静态成员变量。 -
shared_ptr
的具体实现template<typename T> class SharedPtr { public: SharedPtr(T* ptr = NULL):_ptr(ptr), _pcount(new int(1)) {} SharedPtr(const SharedPtr& s):_ptr(s._ptr), _pcount(s._pcount){ (*_pcount)++; } SharedPtr<T>& operator=(const SharedPtr& s){ if (this != &s) { if (--(*(this->_pcount)) == 0) { delete this->_ptr; delete this->_pcount; } _ptr = s._ptr; _pcount = s._pcount; *(_pcount)++; } return *this; } T& operator*() { return *(this->_ptr); } T* operator->() { return this->_ptr; } ~SharedPtr() { --(*(this->_pcount)); if (*(this->_pcount) == 0) { delete _ptr; _ptr = NULL; delete _pcount; _pcount = NULL; } } private: T* _ptr; int* _pcount;//指向引用计数的指针 };
-
为什么要用
int* _pconut
作为指针的引用计数确保同一对象的
shared_ptr
的引用计数唯一 -
可以用
static int pcount
代替吗?不可以。static修饰后变为静态成员变量,等于在全局区直接分配内存。多个对象的pcount变为同一个
-
模版特化怎么写的
templete<T> func<int, int>(){}//两个入参都是int类型的 func<int, T>(){} //两个入参一个是int类型一个是T类型的
-
移动构造函数的作用
用对象A初始化对象B,之后对象A不用了。
此场景下,如果调用拷贝构造函数,用深拷贝的方法开辟一块新内存空间将A拷贝到B;但移动构造函数,是用浅拷贝的方法将B指针指向原来A指针指向的空间,同时使*A = nullptr
,删除A指针完成构造过程。
手撕
- 反转链表
- 求k个数的平均数(前缀和)
其他
-
GDB调试
-
内存泄漏怎么发现
top命令观察进程占用内存状态