C++面试题(1)
来源:互联网 发布:charles游戏修改数据 编辑:程序博客网 时间:2024/06/06 00:03
1.进程和线程的区别
答案:
一个程序至少有一个进程,一个进程至少有一个线程。
进程在执行过程中有独立的内存单元,而多个线程共享内存,从而极大提高了程序的运行效率。
进程和线程的主要区别在于他们是不同操作系统资源管理方式,进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响,而线程只是进程中的不同执行路径,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉了,整个进程也就死掉了,所以多进程的程序要比多线程的程序健壮,但在进程切换的时候,耗费资源大,效率要差一些,但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
a.进程是资源分配的最小单位,进程是程序执行的最小单位。
b.进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而提高了程序的运行效率。
2.深浅拷贝的区别
浅拷贝:在有指针的情况下,浅拷贝只是添加了一个指针指向已经存在的内存。
深拷贝:在有指针的情况下,深拷贝不仅添加了一个指针,而且还申请一个新的内存,使这个添加的指针指向新增的内存,避免像浅拷贝时出现的重复释放同一个内存的错误。
例如:
CODE1:class String{ char *m_str;public: String();String(char *s) { m_str = s; } String &operator =(const String s) { m_str=s.m_str; return *this; }// 浅拷贝,直接将指针指向已经存在的内存中}
int main()
{
String s1("abc"),s2;
s2=s1;
std::cout<<s2;
}ODE2:class String{ char *m_str;public: String();String(char *s) { m_str = s; } String &operator =(const String s) { if(strlen(m_str)!=strlen(s.m_str)) m_str=new char[strlen(s.m_str)+1]; if(*this!=s) strcpy(m_str,s.m_str); return *this; }// 深拷贝,有指针情况下申请了新的内存,且指针指向了新的内存}
int main()
{
String s1("abc"),s2;
s2=s1;
std::cout<<s2;
}3.Tcp socket通讯
4.单链表的反序
阅读全文
0 0
- c面试题1
- C/C++面试题1
- 嵌入式C面试题1
- C语言面试题1
- C#_面试题1
- C/C++面试题1
- C/C++面试题-1
- obj-c面试题1
- c语言面试题1
- 嵌入式 C 面试题1
- C/C++面试题-1
- c语言面试题1
- C语言面试题1
- C语言面试题1
- C-C++面试题1
- c语言面试题1
- c/c++面试题1
- c面试题(1)
- POJ.1222 EXTENDED LIGHTS OUT(高斯消元 异或方程组)
- 选择子序列
- Spring整合CXF
- 清除浮动的作用
- 在 Linux 系统中安装 MySQL 数据库
- C++面试题(1)
- Convert BST to Greater Tree
- HDU
- MySQL字段的增删查改
- 百度之星 1005寻找母串
- 德州扑克 Base 1
- hive 总体架构解析
- CSS hack
- 大数阶乘