嵌入式软件工程师面试题——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. 关闭不再需要的文件描述符

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

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

相关文章

共识算法介绍

文章目录 共识算法Paxos 算法三种角色一致性提交算法prepare 阶段accept 阶段commit 阶段 CAP 定理BASE 理论Zookeeper 算法实现三类角色三个数据三种模式四种状态消息广播算法Leader选举算法 共识算法 Paxos 算法 Paxos 算法是莱斯利兰伯特(Leslie Lamport)1990 年提出的一种…

基于Java (spring-boot)的社团管理系统

一、项目介绍 系统管理员的功能概述: ①用户管理 a.注册用户账户 当一个新用户注册时,用户填写基本信息并上传。用户基本信息包括账号、 姓名、密码、手机、地址等信息。 b.用户信息管理 管理员可以查看系统所有用户的基本信息,并修改和…

面试官常问问题:Java中的128陷阱详解

看这样两段代码,思考结果返回的是什么 Integer num1 100; Integer num2 100; System.out.println(num1 num2);Integer num3 128; Integer num4 128; System.out.println(num3 num4); 揭晓答案:第一段代码的结果是true,第二段代码的结…

数据结构学习 jz59 滑动窗口的最大值

关键词:排序 大顶堆 双端队列 题目: 望远镜中最高的海拔 方法一:维护一个辅助队列。 方法二:大顶堆。 我还在主站 239 写了找最小值的方法。 方法一:最优解 这个方法和jz30维护一个非严格递减的辅助栈是基本一样的…

条款24:若所有参数皆需类型转换,请为此采用非成员函数

设计一个表示有理数的类时,允许从整数隐式转换为有理数是有用的: class Rational { public:Rational(int numerator 0, // 该构造函数没有explicit限制;int denominator 1); int numerator() const; int denominator() const; const Rational opera…

计划——不做计划

今天想讲一下我做计划这件事。 2024 年已经过了两个星期了,毕竟自己也到了一个新的阶段,想着也可以搞个计划,写写自己未来一年计划做的事情。 但回忆了过去这半年来我所做的计划,我的双手抚摸着键盘,迟迟动不了手。 …

数据结构:队列的链表结构(含完整代码,可复制)

1.输出队列 void outlin(LinkQueue qq) {pqq.front->next;while(p!NULL){printf(" data%4d\n",p->data);pp->next;}printf("\n outend \n\n"); } 2.入队一个元素 void insert(LinkQueue *qe,int x) {s(NodeType *)malloc(sizeof(NodeType));s-…

分布式系统中的CAP原理

分布式系统中的CAP原理 本文已收录至我的个人网站:程序员波特,主要记录Java相关技术系列教程,共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源,让想要学习的你,不再迷茫。 简介 在分布式系统中&…

【LeetCode】206. 反转链表(简单)——代码随想录算法训练营Day03

题目链接:206. 反转链表 题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head [1,2] 输…

JAVA获取昨日和今日日期时间

import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;public class TimeDemo {public static void main(String[] args) {Calendar calendarDay Calendar.getInstance();calendarDay.add(Calendar.DATE, -1);//查询今日时间String startTim…

MySQL表结构转换为ES索引Mapping

背景 日常开发过程中肯定会存在MySQL表数据迁移至ES的情况,以canal为例,数据迁移时需要提前在ES中创建索引Mapping,但是如果碰到字段特别的表时,创建Mapping将是一件耗费心神的事情。为了解决这些重复工作,我使用Pyth…

私域流量怎么运营最有效?

如何有效运营私域流量?这是许多企业和商家都在思考的问题。在当今的数字化时代,私域流量已经成为了企业和商家发展的重要资产之一。但是,如何才能运营好私域流量呢?下面我们将从多个角度来探讨这个问题。 一、什么是私域流量&…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-3.5连续系统离散化

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-3.5连续系统离散化

微服务网关的鉴权功能

1 网关如何整合openFeign完成统一鉴权 A 引入openFeign的依赖 B 注入user服务,lazy注解解决循环依赖 C openFeign阻塞线程,网关非阻塞线程,所以改成非阻塞调用 D 加载优先级,提高全局过滤器优先级 E 整合httpMessageConverter F 鉴…

代码随想录第六十三天——被围绕的区域,太平洋大西洋水流问题,最大人工岛

leetcode 130. 被围绕的区域 题目链接:被围绕的区域 步骤一:深搜或者广搜将地图周边的’O’全部改成’A’ 步骤二:遍历地图,将’O’全部改成’X’,将’A’改回’O’ class Solution { private:int dir[4][2] {-1, 0…

业务题day03

3-1 你们的项目是如何进行参数校验的 我们项目中使用Java Bean Validation规范进行参数校验,该规范定义了一组注解,用于对方法参数、类属性等进行校验。 在需要进行参数校验的对象上添加注解,如NotNull、NotBlank、Min、Max等。这些注解可以…

k8s-pod的控制器

pod控制器的概念 工作负载,workload,用于管理pod的中间层,确保pod资源符合预期的状态 预期状态 1、副本数 2、容器的重启策略 3、镜像拉取策略 pod出现故障时的重启等等 pod控制器的类型 1、replicaSet 指定pod副本的数量 三个组件 …

深入浅出关于go web的请求路由

文章目录 前言一、是否一定要用框架来使用路由?二、httprouter2.1 httprouter介绍2.2 httprouter原理2.3 路由冲突情况 三、gin中的路由总结 前言 最近重新接触Go语言以及对应框架,想借此机会深入下对应部分。 并分享一下最近学的过程很喜欢的一句话&am…

架构的未来:微前端与微服务的融合

目录 前言 微服务架构简介 微前端架构简介 微前端与微服务的融合 1. 共享服务 2. 基于事件的通信 3. 统一的身份和认证 4. 交付管道的集成 示例:使用微服务和微前端的电子商务平台 微服务架构 微前端架构 融合微服务和微前端 总结 作者简介…

rollup + typescript 搭建项目

一、创建项目 1、初始化项目 1、创建一个项目目录,进入该目录 2、执行 npm init -y 生成 package.json 3、执行 tsc --init 生成 tsconfig.json 2、安装依赖 (1)安装 typescript 和 rollup-plugin-typescript npm install -D typescript …