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.单链表的反序