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

原创粉丝点击