嵌入式工程师面试笔试总结——day1

第一章、进程与线程

1、什么是进程、线程,有什么区别?

    进程是资源( CPU 、内存等)分配的基本单位,线程是 CPU 调度和分配的基本单位(程序执行的最小单 位)。同一时间,如果CPU 是单核,只有一个进程在执行,所谓的并发执行,也是顺序执行,只不过由 于切换速度太快,你以为这些进程在同步执行而已。多核CPU 可以同一时间点有多个进程在执行。

2、多进程、多线程的优缺点

     说明:一个进程由进程控制块、数据段、代码段组成,进程本身不可以运行程序,而是像一个容器一 样,先创建出一个主线程,分配给主线程一定的系统资源,这时候就可以在主线程开始实现各种功能。
    当我们需要实现更复杂的功能时,可以在主线程里创建多个子线程,多个线程在同一个进程里,利用这个进程所拥有的系统资源合作完成某些功能。
优缺点: 1 )一个进程死了不影响其他进程,一个线程崩溃很可能影响到它本身所处的整个进程。 2 ) 创 建多进程的系统花销大于创建多线程。3 )多进程通讯因为需要跨越进程边界,不适合大量数据的传送, 适合小数据或者密集数据的传送。多线程无需跨越进程边界,适合各线程间大量数据的传送。并且多线 程可以共享同一进程里的共享内存和变量。

3、什么时候用进程,什么时候用线程

     1 )创建和销毁较频繁使用线程,因为创建进程花销大。 2 )需要大量数据传送使用线程,因为多线程切换速度快,不需要跨越进程边界。3 )安全稳定选进程;快速频繁选线程;

4、多进程、多线程同步(通讯)的方法

进程间通讯:
1 )有名管道 / 无名管道( 2 )信号( 3 )共享内存( 4 )消息队列( 5 )信号量( 6 socket
线程通讯(锁):
1 )信号量( 2 )读写锁( 3 )条件变量( 4 )互斥锁( 5 )自旋锁

5、进程线程的状态转换图

1 )就绪状态:进程已获得除 CPU 外的所有必要资源,只等待 CPU 时的状态。一个系统会将多个处于就绪状态的进程排成一个就绪队列。
2 )执行状态:进程已获 CPU ,正在执行。单处理机系统中,处于执行状态的进程只一个;多处理机系统中,有多个处于执行状态的进程。
3)阻塞状态:正在执行的进程由于某种原因而暂时无法继续执行,便放弃处理机而处于暂停状态,即进程执行受阻。(这种状态又称等待状态或封锁状态) 通常导致进程阻塞的典型事件有:请求 I/O,申请缓冲空间等。 一般,将处于阻塞状态的进程排成一个队列,有的系统还根据阻塞原因不同把这些阻塞集成排成多个队列。

进程的三种状态转换

(1) 就绪 执行
    处于就绪状态的进程,当进程调度程序为之分配了处理机后,该进程便由就绪状态转变成执行状态。
(2) 执行 就绪
    处于执行状态的进程在其执行过程中,因分配给它的一个时间片已用完而不得不让出处理机,于是进程从执行状态转变成就绪状态。
(3) 执行 阻塞
    正在执行的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。
(4) 阻塞 就绪
    处于阻塞状态的进程,若其等待的事件已经发生,于是进程由阻塞状态转变为就绪状态。

6、父进程、子进程

    父进程调用 fork() 以后,克隆出一个子进程,子进程和父进程拥有相同内容的代码段、数据段和用户堆栈。父进程和子进程谁先执行不一定,看CPU 。所以我们一般我们会设置父进程等待子进程执行完毕。

7、说明什么是上下文切换?

    你可以有很多角度,有进程上下文,有中断上下文。
    进程上下文:一个进程在执行的时候,CPU的所有寄存器中的值、进程的状态以及堆栈中的内容,当内核需要切换到另一个进程时,它需要保存当前进程的所有状态,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。
    中断上下文:由于触发信号,导致 CPU中断当前进程,转而去执行另外的程序。那么当前进程的所有资源要保存,比如堆栈和指针。保存过后转而去执行中断处理程序,快读执行完毕返回,返回后恢复上一个进程的资源,继续执行。这就是中断的上下文。

第二章、C/C++题目

1newmalloc

    做嵌入式,对于内存是十分在意的,因为可用内存有限,所以嵌入式笔试面试题目,内存的题目高频。
    1 malloc free c++/c 语言的库函数,需要头文件支持 stdlib.h new delete C++ 的关键字,不需要头文件,需要编译器支持;
    2 )使用 new 操作符申请内存分配时,无需指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地支持所需内存的大小。 3 new 操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无需进行类型转换,故new 是符合类型安全性的操作符。而 malloc 内存分配成功则是返回 void ,需要通过强制类型转换将 void 指针转换成我们需要的类型。
4 new 内存分配失败时,会抛出 bad_alloc 异常。 malloc 分配内存失败时返回 NULL

2、在1G内存的计算机中能否malloc(1.2G)?为什么?(2021浙江大华二面问题)

答:是有可能申请 1.2G 的内存的。
解析:回答这个问题前需要知道 malloc 的作用和原理,应用程序通过malloc函数可以向程序的虚拟空间申请一块虚拟地址空间,与物理内存没有直接关系,得到的是在虚拟地址空间中的地址,之后程序运行所提供的物理内存是由操作系统完成的。

3 extern”C” 的作用

    我们可以在 C++ 中使用 C 的已编译好的函数模块,这时候就需要用到 extern”C” 。也就是 extern“C” 都是在c++ 文件里添加的。
    extern 在链接阶段起作用(四大阶段:预处理 -- 编译 -- 汇编 -- 链接)。

4strcatstrncatstrcmpstrcpy哪些函数会导致内存溢出?如何改进? 2021浙江大华二面问题)

    strcpy 函数会导致内存溢出。
    strcpy 拷贝函数不安全,他不做任何的检查措施,也不判断拷贝大小,不判断目的地址内存是否够用。
char *strcpy(char *strDest,const char *strSrc) 1
strncpy 拷贝函数,虽然计算了复制的大小,但是也不安全,没有检查目标的边界。
strncpy(dest, src, sizeof(dest));

    strncpy_s 是安全的strcmp(str1,str2),是比较函数,若 str1=str2 ,则返回零;若 str1<str2 ,则返回负数;若 str1>str2 ,则返回正数。(比较字符串)
    strncat() 主要功能是在字符串的结尾追加 n 个字符。
char * strncat(char *dest, const char *src, size_t n);
strcat() 函数主要用来将两个 char 类型连接。例如:
char d[20]="Golden";
char s[20]="View";
strcat(d,s);
//打印d
printf("%s",d);
输出 d GoldenView (中间无空格)
延伸:
    memcpy 拷贝函数,它与 strcpy 的区别就是 memcpy 可以拷贝任意类型的数据, strcpy 只能拷贝字符串类型。

    memcpy 函数用于把资源内存(src所指向的内存区域)拷贝到目标内存(dest所指向的内存区域); 有一个size变量控制拷贝的字节数;

    函数原型:
void *memcpy(void *dest, void *src, unsigned int count);

5 static的用法(定义和用途)(必考)

1 )用 static 修饰局部变量:使其变为静态存储方式 ( 静态数据区 ),那么这个局部变量在函数执行完成之后不会被释放,而是继续保留在内存中。
2 )用 static 修饰全局变量:使其只在本文件内部有效,而其他文件不可连接或引用该变量。
3 )用static修饰函数:对函数的连接方式产生影响,使得函数只在本文件内部有效,对其他文件是不可见的(这一点在大工程中很重要很重要,避免很多麻烦,很常见)。这样的函数又叫作静态函数。使用静态函数的好处是,不用担心与其他文件的同名函数产生干扰,另外也是对函数本身的一种保护机制。

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

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

相关文章

数据库表设计范式

华子目录 MYSQL库表设计&#xff1a;范式第一范式&#xff08;1NF&#xff09;第二范式&#xff08;2NF&#xff09;第三范式&#xff08;3NF&#xff09;三范式小结巴斯-科德范式&#xff08;BCNF&#xff09;第四范式&#xff08;4NF&#xff09;第五范式&#xff08;5NF&…

提成制是什么?如何高效管理提成制?

提成工资制即将企业盈利按照一定的比例在企业和员工之间分成的方式&#xff0c;这种方式具有一定的激励性。实行提成制首先要确定合适的提成指标&#xff0c;一般是按照业务量或销售额提成&#xff0c;即多卖多得。 对于提成制来说&#xff0c;确定合适的提成方式和比例是非常重…

VPN技术-IPSec VPN概述学习笔记

企业对网络安全性的需求日益提升&#xff0c;而传统的TCPЛIP协议缺乏有效的安全认证和保密机制。IPSec(Internet Protocol Security)作为一种开放标准的安全框架结构&#xff0c;可以用来保证IP数据报文在网络上传输的机密性、完整性和防重放。 IPsec VPN&#xff08;Interne…

基于干扰观测器的 PD 控制

基于干扰观测器的 PD 控制 1. 基本概念 干扰观测器&#xff08;Disturbance Observer, DOB&#xff09; 是一种用于估计系统中未建模动态或外部干扰的工具&#xff0c;通过补偿干扰&#xff0c;提高系统控制性能。结合 PD 控制器&#xff0c;干扰观测器能够实时补偿外部扰动和…

缓存工具类编写

缓存工具类编写 一般操作 在外面日常开发中&#xff0c;经常会有为了减少数据库压力&#xff0c;而将数据保存到缓存中并设置一个过期时间的操作。日常代码如下&#xff1a; Autowired private RedisTemplate<String, String> redisTemplate;public Object queryDataW…

STM32hal库创建+LED控制演示+中断概念

1 如何使用STM32CubeMX创建ZET6项目 引言 大家好&#xff0c;今天我们将一起学习如何使用STM32CubeMX来创建一个基于ZET6的项目。如果你已经有一定的基础&#xff0c;那么这篇文章将帮助你快速回顾和深入理解创建项目的步骤。 准备工作 在开始之前&#xff0c;请确保你已经…

[371]基于springboot的高校实习管理系统

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统高校实习管理系统信息管理难度大&#xff0c;容错率低&am…

基于无线传感器网络的无线温湿度采集系统(附详细使用教程+完整代码+原理图+完整课设报告)

&#x1f38a;项目专栏&#xff1a;【Zigbee课程设计系列文章】&#xff08;附详细使用教程完整代码原理图完整课设报告&#xff09; 前言 &#x1f451;由于无线传感器网络&#xff08;也即是Zigbee&#xff09;作为&#x1f310;物联网工程的一门必修专业课&#xff0c;具有…

Go-RPC关键指标分析与企业实践

1.稳定性-保障策略 熔断&#xff1a;保护调用方 限流&#xff1a;保护被调用方 超时控制&#xff1a;避免浪费 2.稳定性-请求成功率&#xff08;用重复发送 负载均衡&#xff09; 3.稳定性-长尾请求&#xff08;用备份请求&#xff09; 4.稳定性-注册中间件 易用性&#xff1a…

启动前后端分离项目笔记

一、项目 首先可以在各大开源软件拿取一个项目&#xff0c;以下项目是在gitee上获取 二、准备工作 配置JDK环境&#xff0c;node.js环境&#xff0c;安装vue脚手架工具以及maven环境 三、前端项目启动 在前端目录下安装依赖 npm install 如果报错可能是因为权限不够&#…

非线性控制器设计原理

非线性控制器设计原理 非线性控制器设计旨在解决非线性系统的控制问题&#xff0c;克服传统线性控制器在处理非线性现象&#xff08;如饱和、死区、耦合、时变性等&#xff09;时的不足。其核心在于利用非线性数学工具和设计方法&#xff0c;使控制系统在非线性条件下具备良好…

android 使用SQLiteOpenHelper 如何优化数据库的性能

一、数据库设计优化 (Schema Design): 这是性能优化的基础。一个精心设计的数据库结构可以显著提高查询速度和减少存储空间。 范式化 (Normalization): 遵循数据库范式&#xff0c;特别是第一范式、第二范式和第三范式&#xff0c;可以消除数据冗余。冗余数据不仅浪费存储空间…

JDK1.8新增特性

新特性&#xff1a; Lambda表达式: &#xff08;语法三要素&#xff1a;参数、箭头、代码&#xff09; JDK1.8引入的一种新语法Lambda表达式,它简化了匿名内部类的使用和提高代码的可读性。 /**正常写法创建Runable**/ Runnable runnable new Runnable() {Overridepublic voi…

代理池搭建优化-(书接上回,优化改进)

炮台有效炮弹实现 声明 学习视频来自 B 站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3fb;作者…

odoo18中模型的常用字段类型

字段的公共属性: Char 字符类型&#xff0c;对应数据库中varchar类型&#xff0c;除了通用类型外接收另外两个参数&#xff1a; size: 字符长度&#xff0c;超出的长度将被截断 trim: 默认True&#xff0c;是否字段值应该被去空白。 Text 文本类型&#xff0c;对应数据库…

ABAP开发实战——表单打印单位输出问题

在之前的文章中有提到过ABAP开发报表程序时会出现单位显示未转化值&#xff0c;就是说在中文环境下&#xff0c;用户希望看到的单位是“套”&#xff0c;但是报表程序输出的确是“SUI”&#xff0c;这时候需要取数时添加语句进行转化&#xff0c;但是&#xff0c;最近开发表单打…

基于SpringBoot的城镇保障性住房管理系统【附源码】

基于SpringBoot的城镇保障性住房管理系统 效果如下&#xff1a; 系统登录页面 用户管理页面 房源信息管理页面 住房分配管理页面 公示信息页面 系统主页面 用户登陆页面 房源信息页面 研究背景 随着城市化进程的加速&#xff0c;住房问题一直是人们关注的焦点。为了解决低收…

Java文件上传解压

目录结构 工具类 枚举 定义文件类型 public enum FileType {// 未知UNKNOWN,// 压缩文件ZIP, RAR, _7Z, TAR, GZ, TAR_GZ, BZ2, TAR_BZ2,// 位图文件BMP, PNG, JPG, JPEG,// 矢量图文件SVG,// 影音文件AVI, MP4, MP3, AAR, OGG, WAV, WAVE}为了避免文件被修改后缀&#xff0…

IDEA 下载源码很慢,Download Source使用阿里云镜像仓库

参考&#xff1a; IDEA maven本地仓库、中心仓库、远程仓库配置 在观看第三方jar包的api时&#xff0c;有时候需要下载源码看下注释。 这个时候用idea 上的提示的Download Source会发现一直下载不下来。 因此就怀疑用的是apache的maven仓库&#xff0c;不是我们用的 aliyun 镜…

PostgreSQL WITH 子句:提高查询效率和可读性

PostgreSQL WITH 子句:提高查询效率和可读性 PostgreSQL 是一种功能强大的开源关系数据库管理系统,它以其稳定性、可靠性和高级功能而闻名。在 PostgreSQL 中,WITH 子句(也称为公用表表达式,CTE)是一种非常有用的特性,它允许用户在一个大的查询中创建一个临时的结果集,…