面试考频最高(没有之一)——“谈谈进程和线程的区别?”我来教你如何回答~

目录

“为什么会有线程(Thread)?”

“谈谈进程与线程的区别?”

1.进程包含线程

2.线程比进程更轻量,创建和销毁的速度都更快

3.同一个进程的多个线程之间共用同一份内存/文件资源,进程与进程之间,则是独立的内存/文件资源

4.进程是资源分配的基本单位,线程是调度执行的基本单位


谈到操作系统,进程线程的概念和区别,就是出场频率最高的面试问题(没有之一)!

首先来看看面试官会如何引出这样一个问题~

“为什么会有线程(Thread)?”

        例如写一个服务器程序,针对每个客户端就可以分别创建一个进程去服务,但是想象一下,如果这里有多个客户端,每个客户端一来都要创建一个进程来服务,客户端一走,就要销毁这个进程,这样一来二去,进程的创建销毁过于频繁,实际上效率是比较低的;来看看进程的创建与销毁有哪些步骤:

        创建进程的步骤:1.创建PCB、2.给进程分配资源(内存/文件),赋值到PCB中、3.把PCB插入链表;

        销毁进程的步骤:1.把PCB从链表中删除、2.把PCB持有资源释放、3.销毁PCB;

        因此聪明的程序员就发明了“线程”;线程也称为“轻量级进程”

### C++编程语言常见面试问题及答案 #### 关于C++编译器的特点 C++的编译器相较于C语言的编译器更为复杂功能强大[^1]。其主要区别在于,C++的编译过程中包含了额外的一个阶段——汇编阶段,这使得C++能够支持更高级的功能特性。 #### `this`指针的作用 在C++中,`this`是一个指向当前对象的指针,它会在类的非静态成员函数中被隐式传递,主要用于区分同名的局部变量与类成员变量,并允许通过该指针访问类中的其他成员[^2]。 #### 调试多线程程序的方法 当调试涉及多个线程的应用时,可以通过以下方法获取特定线程的信息: - 将目标线程ID转换为十六进制形式并打印出来,例如使用命令`printf "%x\n" PID`完成此操作。 - 使用工具如`jstack PID`来捕获整个进程中所有线程的状态信息,随后从中定位到之前已转成十六进制的目标线程ID所关联的具体线程详情[^3]。 以下是几个常见的C++面试题目及其解答: --- #### 题目一:什么是虚函数? 虚函数是一种特殊的成员函数,旨在实现运行时多态行为。如果基类声明了一个虚函数,则派生类可以重写这个函数以提供不同的具体实现方式。定义虚函数的关键字是`virtual`。 ```cpp class Base { public: virtual void show() { std::cout << "Base class"; } }; class Derived : public Base { public: void show() override { std::cout << "Derived class"; } // Override the base function. }; ``` --- #### 题目二:解释析构函数的工作机制。 每当销毁一个对象时都会自动调用与其相对应类型的析构函数;对于具有继承关系的对象而言,子类的析构函数会先执行完毕后再轮到父类的析构函数依次被执行。为了确保这种顺序正确无误以及资源释放得当,建议把基类的析构函数设置为虚拟(`virtual`)类型以便动态绑定生效。 --- #### 题目三:STL容器有哪些种类?它们之间有什么差异吗? 标准模板库(STL)提供了多种数据结构作为容器供开发者选用,主要包括但不限于vector(连续内存分配),list(双向链表存储节点),deque(双端队列),set/map(基于红黑树或者哈希表)。每种容器因其内部实现原理不同而在性能表现上有各自特点比如随机存取速度、插入删除效率等方面存在显著差别。 --- #### 题目四:如何判断两个字符串相等与否? 可以直接利用比较运算符==来进行判定两串字符是否完全一致;另外也可以借助strcmp库函数辅助完成相同目的的任务. ```cpp #include <string> std::string str1 = "hello"; std::string str2 = "world"; if (str1 == str2){ std::cout << "Strings are equal." ; } else{ std::cout << "Strings differ."; } ``` --- #### 题目五:谈谈深拷贝与浅拷贝的区别在哪里? 浅拷贝仅仅复制了原始对象的数据地址而非实际内容本身,因此新旧两者共享同一份底层资料区域;而深拷贝则创建了一份全新的独立副本,即使修改其中一个也不会影响另一个。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈亦康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值