影石Insta360嵌入式软件开发工程师笔试9-21

《嵌入式软件开发笔试与面试手册》https://blog.nowcoder.net/zhuanlan/jvN8gj

《软件开发笔试汇总》https://blog.nowcoder.net/zhuanlan/0oDWVm

选择题(2)

1.[单选]

如下哪个命令可以帮助你知道shell命令的用法?

A. more

B. man

C. help

D. pwd

2.[单选]

以下代码共创建几个进程?

int main()

{

fork() || fork();

}

A.3

B.4

C.5

D.2

 

问答题

1、描述操作系统中锁的底层实现原理。

具体的锁会跟操作系统、硬件喝特点的需求有所不同。这里主要介绍Linux操作系统中锁的底层实现原理。

1)自旋锁:自旋锁使用原子操作来检查和设置锁状态。当一个线程尝试获取锁时,它会使用如test-and-setcompare-and-swap等硬件指令来检查锁是否可用。如果锁被占用,线程会在一个循环中不断地尝试获取锁,这就是所谓的"自旋"

2)互斥锁(互斥量):互斥量的实现通常结合了自旋锁和调度器的功能。当一个线程尝试获取一个已经被占用的互斥量时,它可能首先会自旋一小段时间,然后如果仍然不能获取锁,它会被放入休眠状态,直到锁被释放。

3)读写锁:读写锁通常使用一个计数器来跟踪当前的读者数量。写锁会检查这个计数器,确保没有活跃的读者,然后才能被获得。

4)信号量:信号量使用一个整数值和一个等待队列。当线程尝试减少信号量的值并且结果为负时,线程会被放入等待队列并休眠。当信号量被释放时,等待队列中的线程之一会被唤醒。

5RCU锁:RCU使用了一种特殊的引用计数技术。当读者开始读取时,它们会增加一个计数器。写者会创建数据的一个新副本并进行修改,然后更新指向数据的指针。只有当所有的读者都完成读取(即引用计数器归零)时,旧的数据才会被释放。

 

2、请从“光圈”、“快门速度”、“感光度”、“白平衡”、“景深“中任选2个进行叙述?

笔试是只需要写两个,在此就全部叙述了。

1)光圈是相机镜头中的一个开口,它决定了多少光线可以进入相机并达到传感器。光圈的大小通常用f-stop数值表示,如f/1.4f/2.8等。较小的f-stop值表示大的光圈开口,允许更多的光线进入,而较大的f-stop值则表示小的光圈。光圈的大小还影响到照片的景深。

2)快门速度表示相机的快门打开的时间长度,允许光线进入传感器。它可以是几秒或几分之一秒,如1s1/100s1/1000s等。快的快门速度可以捕捉到快速的动作,而慢的快门速度可以创造动态或模糊的效果。

3)感光度,通常称为ISO,表示相机传感器对光的敏感性。较低的ISO值(如ISO 100200)意味着较低的敏感性,适用于光线充足的环境,而较高的ISO值(如ISO 16003200)在低光环境中更为有用。但是,较高的ISO值可能会导致照片中出现噪点。

4)白平衡是相机调整颜色温度,确保照片中的白色真正显示为白色,而不是偏向某种颜色(如蓝色或橙色)。不同的光源(如日光、草率灯、白炽灯)会产生不同的颜色温度,白平衡确保颜色的准确性。

5)景深描述了照片中清晰和模糊区域的范围。浅景深意味着只有照片的一小部分是清晰的,而其余部分是模糊的,这通常是由大光圈(如f/1.4)产生的。深景深意味着照片的大部分或全部都是清晰的,这通常是由小光圈(如f/16)产生的。

 

3、数组指针和指针数组分别是什么?他们有什么区别?什么是函数指针?他一般有哪些使用场景?

分别是:

数组指针是指向数组的指针。例如,p是一个指针,它指向一个包含10个整数的数组,int (*p)[10]

指针数组是一个数组,其中每个元素都是指针。例如,int *arr[10]定义了一个数组,该数组有10个元素,每个元素都是一个指向整数的指针。

区别:

数组指针是一个指针,它指向一个整个数组。

指针数组是一个数组,它的每个元素都是指针。

函数指针:

函数指针是指向函数的指针,而不是指向数据的指针。通过函数指针,我们可以调用函数,就像直接使用函数名一样。

使用场景:

回调函数、跳转表、插件架构

 

4、关键字static的用途是什么?

1)局部变量:使函数内的变量在多次调用之间保持其值。

2)全局变量/函数:限制其作用域仅在定义它的文件中。

3)类成员 (C++):为类的所有对象创建一个共享的变量,或定义一个不依赖特定对象的函数。

 

5、描述DMA的作用以及内存处理机制。

DMA的作用:

DMA允许外部硬件子系统直接访问计算机的内存,而无需通过CPU进行中介处理,提高了数据传输的效率。

内存处理机制:

1)请求与授权:当一个外部设备需要进行数据传输时,它发送一个DMA请求给DMA控制器。DMA控制器在得到CPU的许可后,会发出一个授权信号给请求的设备。

2)地址与计数:DMA控制器有自己的地址寄存器和计数寄存器。地址寄存器决定了数据在内存中的位置,而计数寄存器决定了要传输的数据量。

3)数据传输:一旦得到授权,DMA控制器会直接控制数据总线和地址总线,从而绕过CPU直接将数据从外部设备传输到内存,或从内存传输到外部设备。

4)终止:当所有数据都被传输完毕,DMA控制器会终止操作并通知CPU数据传输已完成。

 

6、如何保证编写的代码功能稳定性?

1)代码审查:定期进行代码审查可以帮助识别和修复潜在的问题,并确保代码质量。

2)单元测试:为代码的每个功能或模块编写单元测试,并确保它们在每次更改后都能通过。

3)集成测试:确保不同的代码部分可以正常地一起工作。

4)错误处理和日志:编写鲁棒的错误处理代码,并记录详细的日志,以便在出现问题时进行调试。

5)版本控制:Git

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

本专栏主要发布嵌入式软件开发相关岗位2023年(2024届)的笔试真题(嵌入式软件开发、通用软件开发、C/C++软件开发、算法工程师、数据开发、测试开发等)主要是算法编程题,其中一些岗位笔试含有对应的选择题、填空题、简单题。

全部评论
大佬,嵌入式实习的笔试跟这个类似吗,笔试的时候要开摄像头吗
点赞 回复 分享
发布于 2023-12-04 12:59 山东

相关推荐

07-10 14:08
已编辑
江西农业大学 Java
拒绝无效加班的小学生...:期望3k吗?java这辈子有了
点赞 评论 收藏
分享
评论
2
8
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务