IO,进程线程面试题

news2024/10/12 5:43:43

1.标准IO和文件IO的区别

标准IO:调用封装好的相关库函数,来实现数据的输入输出

文件IO:调用系统(内核)提供的相关函数,来实现数据的输入输出

1、标准IO属于库函数,文件IO属于系统调用
2、标准IO操作的是文件指针,文件IO操作的是文件描述符
3、标准IO有缓冲区,文件IO没有缓冲区

2.静态库和动态库的区别

静态库在编译阶段会被直接复制到最终的可执行文件中。这意味着,一旦程序被编译,它就包含了所有需要的库函数代码,不再依赖于外部库文件。

动态库在程序运行时才被加载。多个程序可以共享同一份库文件,减少了磁盘空间的占用。

程序运行时需要访问系统中已安装的动态库。如果缺少必要的动态库,程序将无法正常运行。

动态库的更新更为方便,只需替换库文件即可。

3.怎么创建进程

pid_t pid = -1; //定义变量存储创建的进程的id号

pid = fork(); //创建一个子进程

4.什么是守护进程

守护进程:脱离了终端而存在的进程,随着系统的启动而开始,随着系统的结束而终止。

守护进程相当于一个服务,不依赖于任何终端而存在,随着系统的启动而启动,终止而结束

守护进程制作流程:

1、创建子进程,让其成为孤儿进程:fork exit

2、将自己设置成会话组组长,不依赖终端:setsid

5.什么是僵尸进程?什么是孤儿进程?

孤儿进程:当前进程的父进程死亡后,但是当前进程还没有结束,那么当前进程称为孤儿进程,孤儿进程会由1号进程收养

僵尸进程:当前进程已经死亡,但是其父进程没有为其收尸,那么该进程为僵尸进程

6.时间片了解么?

时间片(Time Slice)是操作系统调度机制中的一个基本概念,主要用于多任务处理环境。它指的是分配给每个进程或线程在中央处理器(CPU)上执行的时间长度。通过这种方式操作系统能够实现多个进程或线程之间的快速切换,从而让用户感觉像是多个程序同时在运行,即使实际上只有一个CPU核心在工作。

7.进程和线程区别?

  • 进程是一个程序在一个给定数据集上的一次执行活动,它是操作系统进行资源分配和调度的基本单位。
  • 线程是进程内的一个执行单元,是CPU调度和分配的基本单位。一个进程中可以有多个线程,这些线程共享进程的资源。
  • 每个进程都有自己独立的地址空间、内存、数据栈以及其他操作系统资源
  • 同一进程内的所有线程共享进程的地址空间、文件描述符、堆栈等资源。每个线程有自己的程序计数器、寄存器集合和栈。

8.线程的同步怎么实现

可以使用互斥锁以及信号量集进行进程的同步,还可以使用条件变量控制线程的运行

9.线程的互斥怎么实现

使用互斥锁确保同一个时间只有一个线程持有锁,就可以实现线程的互斥

10.进程间通信方式有哪些?哪种效率最高

通信方式有管道文件,消息队列,共享内存,信号量集,套接字等。共享内存的效率最高。

11.通信方式的优缺点对比

管道的优点是实现简单,使用方便,效率高。缺点是数据流是单向的。

消息队列是进程将数据以消息的形式发送到一个队列中,其他进程可以从队列中读取消息。消息队列由操作系统内核管理。优点是通信灵活,支持多对多通信。缺点是需要管理生命周期。

共享内存是多个进程可以映射同一块物理内存区域,从而实现高效的数据共享。优点是效率高,缺点是需要同步机制来避免数据竞争。

套接字的优点是适用于不同主机之间的通信。缺点是效率低,需要协议。

12.有名管道和无名管道的区别?

有名管道可以在文件系统中找到, 可以被任何进程访问。无名管道只能用于父子进程间通信,不能找到。有名管道不会在程序结束时删除,除非被显示的删除。无名管道两端关闭时就会删除。

13.共享内存的实现方式

发送端

1·首先int shmget(key_t key, size_t size, int shmflg);创建一个共享内存并返回id

2·然后将共享内存地址映射到用户空间 void *shmat(int shmid, const void *shmaddr, int shmflg);返回地址

3·然后使用int shmctl(int shmid, int cmd, struct shmid_ds *buf); 控制共享内存对象

4·取消共享内存的映射 int shmdt(const void *shmaddr);

接收端

1·创建key值用于创建共享内存段 key_t key = ftok("/", 't');

2·创建一个共享内存的对象 int shmid = shmget(key, PAGE_SIZE, IPC_CREAT|0664);

3·将共享内存段映射到程序中来 char *addr = (char *)shmat(shmid, NULL, 0);

4·读出共享内存中的数据 printf("消息为:%s", addr);

5·删除共享内存 if(shmctl(shmid, IPC_RMID, NULL) == -1)……

14.消息队列的实现方式

1·创建用于生成消息队列的钥匙 key_t ftok(const char *pathname, int proj_id);

2·通过钥匙创建出一个消息队列对象 int msgget(key_t key, int msgflg);

3·向消息队列中存放消息 int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);

4.从消息队列中取消息 ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);

5·控制消息队列 int msgctl(int msqid, int cmd, struct msqid_ds *buf);

15.fork和vfork区别

fork() 创建一个新进程,这个新进程几乎是父进程的一个完全复制。子进程中所有变量的值都是从父进程中复制过来的,包括内存空间、文件描述符等。

vfork() 也用来创建一个新的进程,但是与 fork() 不同的是,vfork() 不复制父进程的地址空间给子进程。子进程在没有自己的地址空间的情况下运行,它实际上是在父进程的地址空间上运行。

16.线程的死锁,怎么避免?

两个及以上线程互相互相等待对方持有的资源而无法继续执行时就会发生死锁,避免方法有

1. 避免持有和等待:尽可能让线程在开始执行前一次性获取所有必需的资源。 

2. 资源排序:规定一个全局顺序来获取资源,并且强制所有线程按这个顺序获取资源。

3. 使用超时:在尝试获取资源时使用超时机制,这样线程在等待过长时间后可以放弃,回退,并重新尝试。

4. 检测死锁并恢复:运行时检测死锁的存在,一旦检测到死锁,采取措施(如终止线程或回滚操作)来解决。

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

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

相关文章

python networkx 计算路径A*

import matplotlib.pyplot as plt # 导入 Matplotlib 工具包 import networkx as nx # 导入 NetworkX 工具包 from typing import List# 初始化空的无向图 graph nx.Graph() # 向图中添加多条赋权边: (node1,node2,weight) graph.add_weighted_edges_from([(1, 2, 50),(1, 3…

智能扭矩系统在制造领域应用_SunTorque

【大家好,我是唐Sun,唐Sun的唐,唐Sun的Sun。一站式数智工厂解决方案服务商】 在当今高度自动化和智能化的制造领域,各种先进技术不断涌现,为提高生产效率、保证产品质量和降低成本提供了有力支持。智能扭矩系统作为其中…

【电子电力】基于DSP28335+DSP28035的三相三电平大功率并网逆变器程序代码

摘要 本文介绍了基于DSP28335和DSP28035的三相三电平大功率并网逆变器设计和实现。通过DSP控制器对三电平逆变器的精确控制,实现了逆变器与电网的并网控制,保证了系统的高效稳定运行。该设计主要应用于光伏发电和风力发电系统中的并网发电部分。本文通过…

在AI大模型时代遨游,你不得不知道的一些事

用户到底为什么而买单/产品和研发要抛弃的历史包袱 在大模型时代之前,其实企业和企业之间的软件产品壁垒来自两个地方: 交互,让用户用起来感觉舒服。打磨,我花了五年修复了用户遇到的一万个bug,所以我的产品比你好。 但是无论如何…

如何使用flutter doctor命令检测环境是否配置成功

Flutter Windows Android环境搭建 真机调试学习地址: 17 Flutter介绍-Flutter Windows Android环境搭建 真机调试 如何使用flutter doctor命令检测环境是否配置成功,详细步骤如下: 第一次执行可能会提示下面错误: 1、错误一&am…

建站:腾讯云+宝塔linux+xftp

1.首先,控制台,服务器 2.服务器-网络与域名-ip地址,能看到公网地址 3.宝塔Linux面板-网站-添加站点 4.填写域名会自动生成 ftp 帐号密码 域名可以加上端口,端口号可以写大点 5.xftp新建会话 主机地址:腾讯云拿到的公…

直流有刷电机驱动芯片:【TOSHIBA:TB6612】

Toshiba TB6612是是东芝半导体的一款驱动电机的IC。一个TB6612FNG可以驱动两个电机,每一个驱动都有两个逻辑输入引脚,一个输出引脚和一个PWM引脚。可以通过给两个逻辑输入引脚不同的电平来控制电机的运行状态,通过PWM输入引脚实现电机调速。 …

怎么看待数字化转型是大势所趋?

怎么看到数字化转型是大势所趋?下面我结合最新数据给大家讲明白这个事。 近日,我通过大量的数据相关性分析,有了一些关键发现。 【数字化转型】之所以势在必行,主要是因为数字化转型为各个国家数字经济发展提供了重要的参考依据。…

R2:RNN-心脏病预测

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、实验目的: 本地读取并加载数据。了解循环神经网络(RNN)的构建过程测试集accuracy到达87% 拔高:测试集accur…

腾讯云Android 相关

集成遇到异常怎么办? 您可以使用 armeabi 和 armeabi-v7a 架构。 如上图所示,请在app的 build.gradle 中指定 abiFilters 为“armeabi”。 功能模块升级后,短视频 SDK 的功能不能使用? 1. 如果使用的是 androidstudio&#xff0…

2024Selenium自动化常见问题!

"NoSuchElementException"异常: 确保使用了正确的选择器来定位元素。可以使用id、class、XPath或CSS选择器等。 可以尝试使用find_elements方法来查找元素列表,并检查列表的长度来判断元素是否存在。 使用显式等待(WebDriverWait…

考研编程:10.11 回文数 水仙花 生成一定范围内的随机数 求二叉树宽度

回文数 #include <stdio.h>int main(){int a,b,c0,sum;scanf("%d",&a);ba;while(b!0){c b%10 c*10;b b/10;}if(ca){printf("yes");}return 0; } 水仙花 #include <stdio.h> #include <math.h> int main(){int a,b,c0,sum;scan…

内嵌服务器Netty Http Server

内嵌式服务器不需要我们单独部署&#xff0c;列如SpringBoot默认内嵌服务器Tomcat,它运行在服务内部。使用Netty 编写一个 Http 服务器的程序&#xff0c;类似SpringMvc处理http请求那样。举例&#xff1a;xxl-job项目的核心包没有SpringMvc的Controller层&#xff0c;客户端却…

css多层嵌套折叠

<!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>美观的纯 CSS 折叠列表</title><style>b…

如何使用Python爬虫处理JavaScript动态加载的内容?

JavaScript已经成为构建动态网页内容的关键技术。这种动态性为用户带来了丰富的交互体验&#xff0c;但同时也给爬虫开发者带来了挑战。传统的基于静态内容的爬虫技术往往无法直接获取这些动态加载的数据。本文将探讨如何使用Python来处理JavaScript动态加载的内容&#xff0c;…

值类型和引用类型的使用

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp1 {class Program{static void Main(string[] args){/****值类型****/bool test;//必须赋值,否则报错test true;Console.WriteLin…

修改svg图片颜色(结合sass)

1.下载sass npm install sass -gnpm install --save-dev sass-loader 我使用的版本 2.使用步骤 1.新建style文件夹&#xff0c;以及新建variable.scss&#xff0c;mixin.scss&#xff0c;main.scss 2.variable.scss $color_1:#50E3C2; $color_2:#FFF; 3.mixin.scss char…

大规模出海!新松移动机器人大批量进驻欧洲本土新能源市场

秋日的沈阳&#xff0c;天空高远而湛蓝。曙光下的新松智慧园&#xff0c;百余台移动机器人在车间内整齐列阵、蓄势待发&#xff0c;等待着最后的检验与封装&#xff0c;即将横跨千山万水远赴欧洲大地&#xff0c;开启中国移动机器人大规模进驻欧洲本土新能源市场的崭新篇章&…

2022年黄河流域旅游资源空间分布数据(shp)

数据介绍 黄河是中华民族的母亲河。黄河流域旅游资源丰富且极具特色。黄河流域旅游资源空间分布数据是黄河流域旅游资源开发与决策的基础。本数据集以县&#xff08;区&#xff09;域行政边界为单元、以国家旅游资源分类标准为依据&#xff0c;收集整理了黄河流域各县&#xf…

STM32-DMA直接存储器存取

一、概述 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#xff0c;节省了CPU的资源12个独立可配置的通道&#xff1a;DMA1(7个通道)&#xff0c;DMA2&#xff08;5…