嵌入式软件工程师面试题——2025校招社招通用(十八)

说明:

  • 面试群,群号: 228447240
  • 面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);
  • 文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但在这里博主希望每一个题目,大家都要经过认真思考,答案不重要,重要的是通过题目理解所考知识点,好应对题目更多的变化;
  • 博主与大家一起学习,一起刷题,共同进步;
  • 写文不易,麻烦给个三连!!!
  • 操作系统篇

1.什么是进程?什么是线程?

答案:
进程资源分配的基本单位,他是程序执行时的一个实例,在程序运行是创建。

线程程序执行的最小单位,是进程的一个执行流,一个进程里包含多个线程。

2.进程、线程、协程的区别?

答案:
协程是微线程,在子程序内部执行,可在子程序内部中断,转而执行别的子程序,在适当的时候再返回来接着执行。

进程和线程区别:(开销问题、通信、线程(进程)之间影响)

  • 进程是资源最小分配单位
  • 线程是最小的执行单位,也是处理器调度的基本单位
  • 进程拥有自己的独立地址空间,每启动一个进程,系统就会分配地址空间,建立数据表来维护代码段,数据段,堆栈段,进程的全局变量是不共用的,这种开销是非常大,而线程是共享进程的数据,使用相同的地址空间,因此,CPU切换一个线程的开销远小于进程的切换
  • 线程之间的通信更加方便,同一进程下的线程共享全局变量、静态数据、而进程间的通信需要以通信的方式IPC进行,但是线程的缺点是同步和互斥是编写多线程的难点,多进程的优点是一个进程死掉不会对另个进程有影响,而多线程只要一个线程死掉整个进程就会死掉
  • 每个线程拥有自己的栈段和寄存器组

线程和协程的区别:

  • 协程执行效率极高:协程直接操作栈基本没有内核切换的开销,所以上下文切换非常快
  • 协程不需要多线程的锁机制,因为多个线程从属一个线程,不存在同时写冲突

其他区别:

  • —个线程可以多个协程,一个进程也可以单独拥有多个协程
  • 线程进程都是同步机制,而协程则是异步
  • 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。
  • 线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同
  • 协程并不是取代线程,而且抽象于线程之上,线程是被分割的CPU资源,协程是组织好的代码流程,协程需要线程来承载运行,线程是协程的资源,但协程不会直接使用线程,协程直接利用的是执行器(Interceptor),执行器可以关联任意线程或线程池,可以使当前线程,UI线程,或新建新程
  • 线程是协程的资源。协程通过Interceptor来间接使用线程这个资源

3.何时使用多进程?何时使用多线程?(考虑优缺点)

答案:
对资源保护和管理要求高,不限制开销和效率使用多进程
要求效率高,切换频繁,使用多线程

4.创建进程的方式?

答案:

  • 系统初始化,像后台进程,守护进程
  • 一个进程开启另个进程fork()
  • 用户的交互式请求

子进程拷贝了父进程的数据段、堆、栈以及继承了父进程打开的文件描述符,父进程与子进程并不共享这些存储空间,这是子进程对父进程相应部分存储空间的完全复制,执行fork()之后,每个进程均可修改各自的栈数据以及堆段中的变量,而并不影响另一个进程
如果是vfork的话就会有影响

5.进程有几种状态?

答案:
有五种状态:创建、就绪、运行、阻塞、终止
在linux系统中,进程的生命周期是从执行到终止
在这里插入图片描述

6.进程间通信方式有哪些?

答案:
1.管道(pipe)
2.信号量(semophore)
3.消息队列(messge queue)
4.信号(signal)
5.共享内存(Shared memory)
6.套接字(socket)

管道:分为有名和无名管道,无名管道只能有血缘关系的进程间通信,是半双工通信,而有名管道允许无血缘进程之间通信
信号量:是个计数器,用来控制多个进程对共享资源的访问,用于进程间的同步和互斥
消息队列:消息的链接表,放在内核中,消息队列独立于发送和接收的进程,进程终止后,消息队列并不会消失,消息队列可以实现消息的随机查询,可以按照消息的类型读取
信号:用于通知接收进程某个事件已经发生。主要作为进程间以及同一进程的不同线程间的同步手段
共享内存:共享内存就是映射一段能被其他进程访问的内存,这段共享内存有一个进程创建,但多个进程都可以访问,共享内存是最快的IPC,它往往配合其他通信机制使用,如:信号量来实现同步和通信
原理:开辟一个物理内存空间,各个进程物理地址映射到自己的虚拟地址空间,通过虚拟地址就可以直接访问,进而实现数据共享,共享内存是最快的通信方式,因为少了数据的拷贝

 //1.开辟共享内存
 shmid=shmget(key,size,IPC_CREAT);
 //2.映射到进程虚拟地址
 addr=shmat(shmid,NULL,0);
 //3.操作数据
 memcpy(addr,buf,sizeof(buf));
 //4.解除映射
 int ret=shmdt(addr);

套接字:它可用于不同机器之间的进程通信

注意:信号量、信号、消息队列可以用来同步

7.进程间通信的选择

答案:
管道通信主要是应用在进程间互发短小、频率很高的消息
共享内存主要是在接进程间共享数据庞大、读写频繁的数据(因为是把物理地址映射到进程)
其他考虑socket

8.什么是僵尸进程、孤儿进程、守护进程?

答案:
僵尸进程:一个进程使用fork出一个子进程,如果子进程退出,但是父进程没有使用 wait或者waitpid函数回收子进程的资源,那么该进程就是僵尸进程

孤儿进程:是指父进程异常退出,而子进程还没退出,那么子进程就会被1号进程(init)收养

守护进程:是指后台进程,有意把父进程先结束,然后被1号进程收养

9.僵尸进程有什么危害?

答案:
僵尸进程的进程号并不会被释放,但是系统的进程号是有限的,如果出现大量僵尸进程就会导致系统无进程号可用就无法产生新进程
如何杀死僵尸进程:
可以通过杀死其父进程来结束僵尸进程

10.线程间通信方法有哪些?

答案:
临界区、互斥量、信号量、事件、条件变量、读写锁

临界区:每个线程访问临界资源的那段代码叫临界区,每次只允许一个线程进入临界区,进入后其他线程无法进入
互斥量:采用互斥对象机制,只有拥有互斥对象的线程才可以访问
信号量:计数器,允许多个线程同时访问统一资源
条件变量:通过条件变量通知操作的方式保持多线程同步
读写锁:读写锁和互斥量类似,但互斥量要么是锁住状态,要么就是不加锁状态。读写锁一次只允许一个线程写,但允许一次多个线程读,这样效率就比互斥锁要高

11.什么是内核线程和用户线程?

答案:
用户线程是由用户进行管理,用户线程的创建、调度、同步和销毁全又库函数在用户空间完成,不需要内核的帮助,这种线程开销是比较小的

内核线程由操作系统创建和销毁

12.如何实现守护进程?

答案:

  1. 创建子进程,终止父进程
  2. 调用setsid创建一个新会话
  3. 将当前目录更改为根目录
  4. 重设文件权限掩码,文件权限掩码是指屏蔽掉文件权限的对应位
  5. 关闭不再需要的文件描述符

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pandas列与列之间的计算

1.简单计算 (1)首先导入pandas模块并读取数据 import pandas as pd adress"D:/pandas练习文件/计算.xlsx" datapd.read_excel(adress) (2) 计算销售额 销售额售价*销售数量 data["销售额"]data["售价&…

Unet系列网络解析

Unet UNet最早发表在2015的MICCAI上,到2020年中旬的引用量已经超过了9700多次,估计现在都过万了,从这方面看足以见得其影响力。当然,UNet这个基本的网络结构有太多的改进型,应用范围已经远远超出了医学图像的范畴。我…

Oracle常见操作

知识点1:格式化日期 select to_char(sysdate,yyyy-MM-dd HH:mm:ss) as time from dual;运行截图: 知识点2:解锁用户 alter user test account unlock;知识点3:修改密码 alter user test identified by test2;知识点4&#xff…

JVM-Arthas高效的监控工具

一、arthas介绍 3.选择监控哪个进程 4.进入具体进程 二、arthas的基础命令与基本操作 1.查询包含Java的系统属性: 命令:sysprop |grep java 1.查询不含Java的系统属性: 命令:sysprop | grep -v java 3.打印历史命令 命令&#…

vector容器解决杨辉三角

一、题目描述 118. 杨辉三角 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRo…

008 Linux_文件在磁盘上的管理

前言 本文将会向你介绍文件在磁盘上是如何被管理的 磁盘的物理存储结构 系统中的文件分为被打开的文件,和没被打开的文件,被打开的文件在内存中进行管理,而没有被打开的文件则在磁盘中进行管理 同样地,也需要对这些没被打开的文…

Vulnhub靶机:driftingblues 5

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:driftingblues5(10.0.2.21) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entr…

实验 2:语法分析程序的设计——以LL(1)为例(更适合njupt体质的宝宝)

实验 2:语法分析程序的设计——以LL(1)为例 PS:源码私聊 1.实验软件环境 ​ 开发平台:Windows 11 ​ 编程语言:C ​ 编译器版本:GCC 11.20 C20 ​ IDE:VS Code 2.实验原理描述 求 F i r s t First Fi…

基于springboot数码论坛系统源码和论文

网络的广泛应用给生活带来了十分的便利。所以把数码论坛与现在网络相结合,利用java技术建设数码论坛系统,实现数码论坛的信息化。则对于进一步提高数码论坛发展,丰富数码论坛经验能起到不少的促进作用。 数码论坛系统能够通过互联网得到广泛…

如何判断售卖的医疗器械产品是二类还是三类

售卖医疗器械需关注产品本身是否为一、二、三类医疗器械。第一类医疗器械为一般项目的经营范围无需取得备案或许可证即可销售。第二类医疗器械产品需办理第二类医疗器械的备案方可销售。第三类医疗器械需取得医疗器械经营许可证且许可证上的经营范围需与销售的产品对应方可销售…

IIC协议

文章目录 IIC介绍通信距离通信速度主从方式通信方式物理结构 IIC协议空闲状态开始信号、结束信号和应答信号向从机发送数据的过程读取从机数据的过程数据有效性协议一帧构成 IIC介绍 IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线。…

ArkUI-X跨平台已至,何需其它!

运行环境 DevEco Studio:4.0Release OpenHarmony SDK API10 开发板:润和DAYU200 自从写了一篇ArkUI-X跨平台的文章之后,好多人都说对这个项目十分关注。 那么今天我们就来完整的梳理一下这个项目。 1、ArkUI-X 我们之前可能更多接触的…

class_5:在c++中一个类包含另一个类的对象叫做组合

#include <iostream> using namespace std;class Wheel{ public://成员数据string brand; //品牌int year; //年限//真正的成员函数void printWheelInfo(); //声明成员函数 };void Wheel::printWheelInfo() {cout<<"我的轮胎品牌是&#xff1a;"<…

MySQL之多表查询

1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); 创建score表。SQL代码如下&#xff1a; CREATE TABLE sc…

数据库多表查询练习题

二、多表查询 1. 创建 student 和 score 表 CREATE TABLE student ( id INT ( 10 ) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR ( 20 ) NOT NULL , sex VARCHAR ( 4 ) , birth YEAR , department VARCHAR ( 20 ) , address VARCHAR ( 50 ) ); 创建 s…

02章【JAVA编程基础】

变量与标识符 变量 数学名词&#xff1a;变数或变量&#xff0c;是指没有固定的值&#xff0c;可以改变的数。变量以非数字的符号来表达&#xff0c;一般用拉丁字母。变量是常数的相反。变量的用处在于能一般化描述指令的方式。计算机解释&#xff1a;变量就是系统为程序分配…

IOS自动化测试元素定位

一、元素属性介绍 1、元素属性 2、查看各定位方式执行效率 二、iOS常用定位方法 1、accessibility_id 2、class_name 3、Xpath 4、ios_class_chain(类型链) 5、ios_predicate(谓词) 一个页面最基本组成单元是元素&#xff0c;想要定位一个元素&#xff0c;我们需…

德语B2 SampleAcademy

德语B2 SampleAcademy 一, Zweigliedrige Konnektion1, entweder... oder2, nicht nur... sondern auch3,sowohl... als auch4,einerseits... andererseits5, zwar...aber6, weder...noch7,je...desto/umso 一, Zweigliedrige Konnektion discontinuous conjunctions 1,…

基础面试题整理4

1.mybatis的#{}和${}区别 #{}是预编译处理&#xff0c;${}是字符串替换#{}可以防止SQL注入&#xff0c;提高安全性 2.mybatis隔离级别 读未提交 READ UNCOMMITED&#xff1a;读到了其他事务中未提交的数据&#xff0c;造成"脏读","不可重复读","幻读&…

Vue-19、Vue监测数据的原理_对象

1、数据代理 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>vue监测数据改变的的原理</title><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue2/dist…