1. DMA有什么作用?
DMA是“直接存储器存取”的缩写,它可以让电脑内部的某些硬件子系统绕过CPU,独立地直接读写系统存储器。在同等的CPU负担下,它是一种快速的数据传送方式,提高了访问效率,缩短了访问时间,降低了CPU资源的消耗。
2. RISC和CISC的区别?
RISC是精简指令集,CISC是复杂指令集。
前者处理的是等长指令集,可同时执行多条指令,速度较快且性能稳定,并且制造工艺简单,成本低。
后者处理的是不等长指令集,需对指令进行分割,所以速度比较慢。前者更具有优势。
3. Linux中断的原理和开发方法?
中断过程分为两部分:上半部和下半部。
上半部主要完成处理那些占用时间较短的过程。如果中断处理过程比较耗时,那么就将这些耗时的代码提取出来,交给下半部去执行,这样中断处理函数就会快进快出。
4. 静态局部变量,静态全局变量,及全局变量的区别?
普通全局变量的作用域是整个源程序,源程序中的源文件都可以使用。
静态全局变量只能作用于定义它的文件里,不能作用到同一程序的其它文件里。
静态局部变量具有局部作用域,只被初始化一次,直到程序运行结束都一直存在。
5. 什么是野指针?产生的原因是什么?出现的情况有哪些?如何处理?
野指针:它是指那些指向位置随机的,错误的指针。
产生原因:1)创建指针时未对其初始化,导致其指向一个随机位置。2)释放指针指向的内存后没有置空。
(1)指针变量声明时没有被初始化,可以在声明时初始化,可以是具体的地址值,也可以让它指向NULL
(2)指针P被释放或删除后,未置空。指针指向的内存空间被释放后,指针应该指向空。
(3)指针操作超越了变量的作用范围。在变量的作用域结束前,释放掉变量的地址空间,并且让指针指向空。
6. volatile关键字的作用?
变量以volatile为关键字,即表明这个变量可能会被意想不到地改变,之后编译器就不会去假设这个变量的值了。也就是说,优化器在用到这个变量时,每次都必须小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
7. 结构体的字节对齐
char为1字节,short为2字节,int/float为4字节,double为8字节。
结构体的大小与成员的数据类型,定义顺序有关,是最长成员字节数的整数倍。
8. C语言中,static关键字的作用?
static用于定义静态变量:
(1)在函数体内,被声明为静态的变量,在函数被调用过程中,保持原值不变;
(2)在模块内(但在函数体外),被声明为静态的变量,只允许模块内所用函数访问,它是一个本地的局部变量;
(3)在模块内,声明为静态的函数,只能被模块内其它函数调用。
9. TCP三次握手过程?为何需要三次?第三次握手可以省去吗?
A:(1)客户端发送SYN包到服务器,进入SYN_SEND 状态,等待服务器确认。
(2)服务器收到SYN包后,先确认,然后回发送一个SYN+ACK包,之后进入SYN_REC 状态。
(3)客户端收到SYN+ACK包后,发送ACK包确认,之后客户端和服务器进入TCP连接成功状态。
B:原因:三次握手主要是为了确认双方的发送能力和接收能力是否正常,指定自己的初始化序列号,为后面的传输做准备。
C:不可省,因为第三次握手可以预防发送死锁。
若为两次握手,在服务器发起第二次握手后,客户端没有收到的情况下,当服务器开始传送数据包后,客户端不会反应,导致服务器以为丢包而源源不断地发送数据报,造成死锁。
10. TCP的四次挥手过程?
注:三次握手是建立连接,四次挥手是释放连接。
(1)客户端发送一个FIN包,中断客户端和服务端的数据传送,客户端进入FIN_wait_1状态
(2)服务端收到FIN包后,发送一个ACK给客户端,服务端进入CLOSE_wait状态
(3)服务端发送一个FIN,关闭服务端到客户端的数据传送,服务端进入LAST_ack状态
(4)客户端收到FIN后,进入TIME_wait状态,接着发送一个ACK给服务端,服务端确认后,进入CLOSED状态。
嵌入式软件开发面试题(二)
于 2022-07-24 16:53:29 首次发布