嵌入式面试的20道基本题

嵌入式面试的经典20题

1.嵌入式系统中经常要用到无线循环,如何用C语言编写死循环?

while(1){}或者for(;;)

2.程序的局部变量存在于哪里,全局变量存在于哪里,动态申请数据存在于哪里?

1、程序的局部变量存在于栈区;
2、全局变量存在于静态区;
3、动态申请数据存在于堆区。

3.关键字const有什么含义?

1、只读;
2、使用关键字const也许能产生更紧凑的代码;
3、使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。

4.请问以下代码有什么问题?

int main(){
    char a;
    char *Str=&a;
    strcpy(Str,"hello");
    printf(Str);
    return 0;
}
//没有为str分配内存空间,将会发生异常,问题出在将一个字符串复制进一个字符变量指针所指地址。虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃。

5.已知一个数组table,用一个宏定义,求出数据的元素个数。

#define    NTBL    (sizeof(table)/sizeof(table[O]))

6.写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个。

#define    MIN(A,B)   ((A) <=(B)?(A):(B))

7.do…while和while有什么区别?

前一个循环一遍再判断
后一个判断以后再循环

8.什么是预编译,何时需要预编译?

预编译是将源代码提前编译成中间代码或者机器码,以便在需要时可以快速地进行链接和加载,而不必重新编译整个程序。预编译可以应用于各种编程语言和环境,例如C、C++、Java等。通常,需要进行预编译的代码库或者模块是比较大的,且不经常修改的部分,这样可以最大程度地发挥预编译的优势。

9.一个32位的机器,该机器的指针是多少位?

指针是多少位只要看地址总线的位数就行,80386以后的机子都是32的数据总线,所以指针的位数就是4个字节。

10.局部变量能否和全局变量重名?

能,局部会屏蔽全局。局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。

11.引用与指针有什么区别?

1、引用必须被初始化,指针不必。
2、引用初始化以后不能被改变,指针可以改变所指的对象。
3、不存在指向空值的引用,但是存在指向空值的指针。

12.关键字static在C语言中的作用?

限制作用域:在函数或者全局变量前加上static关键字,可以将其作用域限制在当前文件内部,外部文件无法访问。保持变量值持久:在函数内部的变量前加上static关键字,可以使该变量的值在函数调用结束后保持不变,下次调用时继续使用。

13.static全局变量与普通的全局变量有什么区别?

作用域不同;生命周期不同;存储方式不同;可见static全局变量和普通的全局变量在作用域、生命周期、存储方式和可见性上有所区别,需要根据实际情况选择合适的变量类型。

14.进程之间通信的途径有哪些?

进程间通信主要通过管道、命名管道、消息队列、信号、共享内存、套接字,不同的进程通信机制各有优缺点,据实际情况选择合适的通信方式。

15.产生死锁的原因是什么?

多个并发进程因争夺系统资源而产生相互等待的现象。即:一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,这就称这组进程发生了死锁。产生死锁的本质原因为:系统资源有限、进程推进顺序不合理。

16.死锁发生的4个必要条件。

互斥条件;请求与保持条件;不剥夺条件;循环等待条件。当以上4个条件同时满足时,就会发生死锁现象。为了避免死锁的发生,需要采取合适的死锁预防和死锁避免措施,例如资源分配策略、进程调度算法等。

17.死锁的处理方式有哪些?

预防死锁:通过限制进程对资源的请求来预防死锁的发生。例如,通过规定资源的使用顺序、限制资源的最大使用数量等方式来预防死锁。
检测死锁:通过定期检查系统中的资源分配情况,发现死锁的发生,并通过释放资源或终止进程来解除死锁。
解除死锁:当检测到死锁时,采取一定的措施来解除死锁。解除死锁的方式有多种,例如终止死锁中的某个进程,抢占资源,撤销进程等。
避免死锁:通过安全序列来避免死锁的发生。安全序列是指在系统中没有死锁发生的一组进程执行序列。通过避免执行不安全序列来避免死锁的生。
忽略死锁:在一些特殊情况下,系统可以选择忽略死锁。例如,对于某些系统而言,死锁的概率非常小,因此忽略死锁不会对系统的正常运行造成重大影响。

18.进程和线程有什么区别?

进程是并发执行的程序在执行过程中分配和管理资源的基本单位。线程是进程的一个执行单元,是比进程还要小的独立运行的基本单位。一个程序至少有一个进程,一个进程至少有一个线程。

19.线程是否具有相同的堆栈?

在多线程编程中,每个线程都有自己独立的堆栈,即每个线程都有自己的一份栈空间。线程的栈空间是用来保存局部变量、函数调用信息以及函数返回地址等数据的,每个线程都有自己独立的栈空间,不同线程之间的栈空间是相互独立的。

20.TCP与UDP有啥区别?

TCP和UDP是0SI误型中的御不TEo.T...A靠的通信传输,而UDP则常被用于广播和细节控制交给应用的通信传输。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值