面试(九)

目录

一. 僵尸进程/孤儿进程/守护进程

二 线程的同步和异步

三. 线程间通信

3.1 共享内存

3.2 互斥锁

3.3 条件变量

3.4 信号量 

3.5 读写锁

3.6 事件

3.7 线程局部存储

四. 进程间通信

3.1 管道

3.2 消息队列

3.3. 共享内存

3.4 信号量

3.5 套接字

3.6 内存映射文件

3.7 信号

五. 字节对齐

六. 内存分配的方式

七. 智能指针

八. 常见的内存错误及对策


一. 僵尸进程/孤儿进程/守护进程

僵尸进程:进程已经完成执行,但其父进程还未读取其退出状态,因此在进程表种仍存在。它的存在是为了让父进程获取子进程的终止状态,之后才会完全清除

孤儿进程:父进程已经结束,但它还在运行,操作系统会将孤儿进程的父进程重新指定为'init'进程,以确保它能够被适当管理

守护进程:是系统后台运行的进程,它在系统启动时由init进程或类似的系统进程启动,并在系统运行期间保持活跃,直到系统关闭;它们被称为守护进程是因为它们像守护者一样在后台持续工作,确保系统的正常运作和服务的持续提供

二 线程的同步和异步

同步:当一个线程需要等待另一个线程完成某个任务时,他会阻塞直到任务完成,例如,使用锁来保证一个线程在访问共享资源时,其他线程不能同时访问,从而避免数据冲突。我们可以用互斥锁,信号量等来实现同步

异步:线程的操作不会阻塞主线程,任务可以在后台运行,主线程继续执行其他操作。例如,异步I/O操作允许线程发起文件读写请求后立即继续执行其他代码,直到I.O操作完成。

三. 线程间通信

3.1 共享内存

允许多个线程共同访问一块内存区域,数据不需要复制或传递,而是直接在共享内存区域中进行读写

3.2 互斥锁

确保在任何时刻只有一个线程可以访问共享资源。防止多个线程同时访问或修改共享数据。

3.3 条件变量

允许线程在某些条件满足时进行等待和通知。

3.4 信号量 

内部维护一个计数器,表示可用资源的数量,这个计数器可以增加或减少,依赖于线程对信号量的操作

3.5 读写锁

是一种同步机制,用于在多线程环境中对控制对共享资源的访问。与互斥锁不同,读写锁允许多个线程进行读写操作,但在有线程进行写操作时,会组织其他线程进行读或写操作。

3.6 事件

指的是一种发生在系统中的动作,状态变化或信息

3.7 线程局部存储

使得每个线程都拥有其专属的存储区域,从而避免不同线程之间的共享数据冲突

四. 进程间通信

3.1 管道

管道又可以分为:

单向管道:数据从一个进程的写段流向另一个进程的读端

双向管道:由两个单向管道组成,实现双向通信,一个管道用于从进程A到进程B,另一个管道用于从进程B到进程A

命名管道(FIFO):命名管道允许不相关的进程通过一个具名文件进行通信,这种管道存在于文件系统中,使用类似文件的接口进行读写操作

3.2 消息队列

允许进程将数据发送到一个队列中,另一个进程可以从这个队列中接收信息。

3.3. 共享内存

允许多个进程访问同一块物理内存区域。

3.4 信号量

3.5 套接字

提供了与网络套接字相似的功能,但只在本地计算机上有效。它们使用文件系统中的文件作为通信的端点,而不是网络地址和端口。

3.6 内存映射文件

一种将文件内容直接映射到进程的虚拟内存空间的机制,允许进程像操作内存一样访问文件。

3.7 信号

信号是一种用于通知进程发生特定事件的机制,信号可以由操作系统或其他进程发送,用于中断当前进程的执行,

五. 字节对齐

字节对齐是一种内存管理策略,用于确保数据在内存中按照一定的规则对齐

六. 内存分配的方式

静态内存分配:静态内存分配在程序编译时完成,即在程序执行之前就已确定了内存的分配,分配的内存大小和位置在编译阶段就固定下来

动态内存分配:在程序运行时请求内存,这样可以根据实际需要动态调整内存的大小和位置。常用方法:堆内存分配,比如malloc,free,在c++中是new,delete

内存池:内存池是一种分配内存块并在这些块中进行管理的方法,内存池用于减少频繁的内存分配和释放操作的开销

内存映射:内存映射将文件或其他对象的内容直接映射到进程的虚拟地址空间。这种方式可以将文件内容视作内存进行访问,支持大文件和进程间的共享内存。

七. 智能指针

是C++中用于管理动态分配内存的一个工具,提供了自动化的内存管理方式。智能指针不仅可以帮助避免内存泄漏,还可以简化内存管理。智能指针通常封装了普通指针,并提供了自动化释放内存的机制。

而之所以智能指针能够实现自动内存管理,是因为它们封装了指针并实现了内存管理的策略,主要依赖于:RAII,是一种编程技术,其中资源的生命周期与对象的生命周期绑定。引用计数:是一种内存管理方法,通过维护一个计数器来跟踪有多少个智能指针实例共享同一块内存或资源;

std::unique_ptr:

std::unique_ptr 是一种独占拥有的智能指针,确保一个对象在同一时间只有一个 unique_ptr 实例指向它。

std::shared_ptr

std::shared_ptr 是一种共享拥有的智能指针,允许多个 shared_ptr 实例共同拥有同一个对象。

std::weak_ptr

std::weak_ptr 是一种不改变引用计数的智能指针,用于观察 shared_ptr 管理的对象,但不会阻止对象被销毁

八. 常见的内存错误及对策

常见的内存错误有内存泄漏,悬挂指针,双重释放,缓冲区溢出等。

内存泄漏:是指程序分配了内存但未能释放,导致无法再访问这块内存。

悬挂指针:已经被释放内存的指针,访问这样的指针会导致未定义行为

双重释放:对同一块内存进行多次释放

缓冲区溢出:写入超出数组或内存块的边界

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/878379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis的RDB快照配置详解

Redis 的 RDB(Redis Database Backup)快照是一种数据持久化方式,它可以在指定时间间隔内将内存中的数据快照保存到磁盘。这样,即使Redis服务器意外宕机或重启,数据也能从最近的快照中恢复。RDB快照的配置主要涉及以下几…

如何快速判断Excel中选区跨页?

实例需求:应用开发过程中,需要校验选中区域,要求选中区域不能跨页,即选中区域分布在两个不同的页面中。 示例代码如下。 Sub Demo()Dim rSelect As Range, oHP As HPageBreakDim UpCell As Range, DownCell As RangeSet rSelect…

1500+ HuggingFace API token暴露,使数百万 Meta-Llama、Bloom 等大模型用户面临风险

HugginingFace 和 GitHub 是AI开发人员的重要平台,因此我们决定对这些平台做更为深入的研究。在这项研究中,我们发现了数以千计的 API 令牌,这些令牌暴露给恶意行为者,使数百万最终用户可能受到攻击。 本文的主要内容包括&#x…

【Leetcode 2341 】 数组能形成多少数对 —— 去重

给你一个下标从 0 开始的整数数组 nums 。在一步操作中,你可以执行以下步骤: 从 nums 选出 两个 相等的 整数从 nums 中移除这两个整数,形成一个 数对 请你在 nums 上多次执行此操作直到无法继续执行。 返回一个下标从 0 开始、长度为 2 的…

MySQL高阶练习题1- 寻找面试候选人

目录 题目 准备数据 分析数据 实现代码 总结 题目 返回 所有面试候选人 的姓名 name 和邮件 mail 。当用户满足以下两个要求中的 任意一条 ,其成为 面试候选人 : 该用户在 连续三场及更多 比赛中赢得 任意 奖牌。该用户在 三场及更多不同的 比赛中赢得 金牌&…

python实战三-提取Word数据到Excel

视频源码: 链接:https://pan.quark.cn/s/83db5bb15383 一个文件夹下有大量会议通知文件,为word文件,文件格式都是一致的,现在要将文件中的一些字段提取出来汇总到Excel文件中。 会议通知文件格式如下: 要提…

C++(1)基础语法

C(1)之基础语法 Author: Once Day Date: 2024年8月29日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的博客-CSDN博客 参考文…

java中哪些集合可以使用 Iterator 进行遍历

在 JAVA 集合中&#xff0c;分为两种顶层接口&#xff0c;Collection 和 Map。 而 Iterator 是针对 Collection 的。 因此&#xff0c;JAVA 中所有 Collection 的子类都可以使用 Iterator。 像 List、Set、Queue、Deque 都可以使用。 使用例子&#xff1a; List<Integer…

通用后台管理系统实战演示(Vue3 + element-plus)汇总篇一

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

【Windows学习笔记】1:OneCore和Windows API

1 OneCore 主流Windows跑在PC上&#xff0c;Xbox跑的是从Windows 2000分支出来的版本&#xff0c;Windows Phone跑的是基于Windows CE&#xff08;实时操作系统&#xff09;的版本。 为了维护和扩展这些code方便&#xff0c;微软将kernels和base platform集成在一起叫OneCore…

55-java多线程future

java多线程future 在Java中&#xff0c;Future 接口和 Callable 函数式接口一起被用来支持异步计算。Future 表示一个可能完成的异步计算的结果&#xff0c;通过 get 方法可以获取计算的结果。 下面是一个使用 Future 的简单示例&#xff1a; import java.util.concurrent.*…

宿舍|基于SprinBoot+vue的宿舍管理系统(源码+数据库+文档)

宿舍管理系统 基于SprinBootvue的私人诊所管理系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 后台模块实现 管理员功能实现 学生功能实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&…

【计算机组成原理】六、总线:3.操作和定时

5.操作和定时 文章目录 5.操作和定时5.1总线传输的四个阶段5.2总线定时5.2.1同步通信5.2.2异步通信5.2.3半同步通信5.2.4分离式通信 2.3按时序控制方式 同步总线异步总线 5.1总线传输的四个阶段 总线周期&#xff1a; 申请分配阶段&#xff1a;由需要使用总线的主模块&#…

【C++11及其特性】左值和右值

左值和右值目录 一.左值和右值的报错1.简单定义2.函数返回值作左值3.表达式作左值 二.存储的层次结构1.CPU2.内存3.磁盘4.三者联系5.寄存器 三.左值和右值的概念1.左值2.右值3.转换 一.左值和右值的报错 1.简单定义 赋值号’左边的为左值,右边的为右值. 2.函数返回值作左值 …

kafka ---- producer与broker配置详解以及ack机制详解

一、producer 配置 1、bootstrap.servers kafka broker集群的ip列表&#xff0c;格式为&#xff1a;host1:port1,host2:port2,… 2、client.id 用于追踪消息的源头 3、retries 当发送失败时客户端会进行重试&#xff0c;重试的次数由retries指定&#xff0c;默认值是2147…

检测和处理异常值的方法

异常值检测 不同的方法适用于不同类型的数据和场景。选择合适的异常值检测方法应考虑以下因素&#xff1a; 数据类型&#xff08;连续型、离散型、分类型等&#xff09;。数据分布特征&#xff08;正态分布、非正态分布、多维数据等&#xff09;。数据规模和维度&#xff08;…

力扣刷题(3)

整数反转 整数反转-力扣 思路&#xff1a; 利用%和/不断循环取待反转整数的最后一位&#xff0c;注意判断是否超出范围。 int reverse(int x){int y0;while(x){if(y > INT_MAX/10 || y < INT_MIN/10)return 0;int tmpx%10;yy*10tmp;x/10;}return y; }字符串转换整数 …

自动化代码报错:ElementClickInterceptedException 解决方案

在自动化测试中&#xff0c;如果有多个弹窗出现&#xff0c;代码执行可能会遇到ElementClickInterceptedException的错误&#xff0c;表明元素点击被拦截&#xff1a; 一般由于以下原因&#xff1a; 一、页面加载未完成 在页面尚未完全加载完成时尝试点击某个元素&#xff0c…

ENVI SARscape||笔记

介绍就不介绍了&#xff0c;直入主题&#xff01; 第一章 ENVI和SARscape 下载与安装&#xff1a; ENVI 5.6 软件安装包下载及安装激活教程&#xff01; (qq.com)https://mp.weixin.qq.com/s/kH0g5g9AALgDNPssfdZ8wQ 启动 ENVI 的启动模式有两种&#xff1a;ENVI和ENVIIDL&…

前端性能优化:提升网站加载速度的五个关键技巧

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介前端性能优化&#xff1a;提升网站加载速度的五个关键技巧1. 引言2. 前端性能优化的五个关键技巧2.1 减少HTTP请求技巧说明实现示例 2.2 启用浏览器缓存技巧说明实现示例 2.3 使用内容分发网络&#xff08;CDN&#xff09;技巧说明…