一、C++
1、new和malloc的区别
共同点:new和malloc都是动态地从堆上分配一块内存,并且需要手动释放。
不同点:
new | malloc |
会调用构造函数(所以可以为模板类分配空间,因为可以调用类的构造函数),使用delete释放 | 不会调用构造函数(例如:使用malloc为string分配空间会出问题),使用free释放 |
分配空间时不用指定大小 | 分配空间时需要指定大小 |
分配失败会根据编译器的不同抛出异常或者返回NULL | 分配失败会返回NULL |
是C++关键字 | 是库函数 |
2、析构函数能抛异常吗?
1、可以使用try-catch抛出异常
2、不使用try-catch则不可以,因为如果析构函数出现异常,可能导致后续的delete语句无法执行,导致内存泄漏。
3、如何计算一个类占用的内存?
①需要考虑哪些因素?类是否为空、字节对齐、是否为基类/子类、是否有虚函数表、类成员、类方法。
②空类对象的大小为1字节:为了区分独一无二的对象。
③类成员函数(包括静态与非静态)、静态成员变量、虚函数本身不占用类对象空间。因为是多对象共享的,占用的代码段的空间。
④子类继承基类的所有成员(考虑字节对齐)
⑤虚函数指针占用4(32位)/8(64位)字节。
⑥总结:类对象大小 =(字节对齐)类非静态数据成员+虚函数指针+(字节对齐)基类非静态成员
4、STL内存分配
https://blog.csdn.net/chuuya1/article/details/129230899
二、Linux
1、如何排查time_wait的数量
2、监控网络的命令
3、GDB调试多线程
三、git
1、git pull 与git fetch
git pull = git fetch + git merge
四、
1、写代码的途中出现过什么问题,怎么debug
五、OS
1、进程与线程的区别
2、协程
六、项目
1、协议处理做了些什么东西?处理过程中的问题与难点?协议处理要求效率高,是否有什么优化的方法?没有查具体的损耗?相关领域有做这样的事情的吗?
七、算法
1、手写实现智能指针
2、二叉搜索树最低公共祖先空间