1. 进程和线程的区别
进程是操作系统分配资源和调度的独立单位,拥有自己的地址空间和系统资源。线程是进程内部的执行单元,共享属于相同进程的资源,但是执行切换代价更小。进程间相互独立,稳定性较高;线程间共享内存,创建和切换成本较低,但一个线程的失败可能影响同进程的其他线程。
2.进程通信方式
进程通信方式主要包括:
管道:允许一个进程和另一个与它有共同祖先的进程之间进行通信。消息队列:消息的链表,存储在内核中,由进程间发送接收消息。共享内存:允许多个进程访问同一块内存空间,是最快的IPC方式。信号量:主要用于解决进程间的同步问题。套接字:适用于不同机器间的进程通信。信号:用于通知接收进程某个事件已经发生。3.socket与其他通信方式有什么不同
Socket 可以实现不同主机间的进程通信,适用于网络中跨操作系统通信。Socket 通常支持全双工通信,即同一时间可以进行数据的双向传输。Socket 支持面向连接(如TCP协议)和无连接(如UDP协议)的通信方式。使用 Socket 进行通信需要创建、配置、使用和关闭套接字,比其他通信方式如管道和信号等有更明确的使用流程。4.共享内存安全吗,有什么措施保证
共享内存本身没有内建安全措施,通过以下方式确保安全性:
使用互斥锁或信号量来同步对共享内存的访问。实施访问控制,限制哪些进程可以访问共享内存。定期检查和清理,避免僵尸进程造成的资源泄露。根据需求实现读写锁,允许多读单写的安全访问模式。5.linux中内存分布有哪些,cpp呢 Linux中内存分布主要包括:
用户空间:应用程序占用的内存区域。内核空间:操作系统内核及其数据结构和模块占用的内存区域。栈区:自动分配和释放的本地变量存储区域。堆区:动态分配内存区域,需手动分配和释放。代码区:存放程序执行代码。数据区:存放全局变量和静态变量。C++中内存分布主要包括:
栈(Stack):局部变量和函数调用。堆(Heap):动态分配的内存(使用new和delete管理)。全局/静态存储区:全局变量和静态变量。常量存储区:常量字符串和常量值。代码区:函数体的二进制代码。6.多态实现方式 多态在C++中的实现方式通常有两种:
虚函数(通过类的继承和虚函数表实现)函数重载(同一作用域内多个同名函数通过参数列表区分)7.cpp面向对象的优势
C++面向对象编程(OOP)的优势包括:
封装:提高代码安全性和复用性,隐藏实现细节。继承:提高代码可维护性,通过基类和派生类体系结构重用代码。多态:提高代码的可扩展性和灵活性,允许接口多种实现。抽象:简化复杂性,只暴露核心操作,底层细节被抽象化。手撕:数组的部分元素求和
#include #include using namespace std;// 函数用于计算数组中指定范围内元素的和int sumOfSubArray(const vector& nums, int start, int end) {int sum = 0;for (int i = start; i