校园招聘攻略----嵌入式软件工程师基础问题
Posted 鲁棒最小二乘支持向量机
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了校园招聘攻略----嵌入式软件工程师基础问题相关的知识,希望对你有一定的参考价值。
问题31
面试官:
Volatile与Synchronized比较?
学生:
- Volatile是轻量级的Synchronized,因为它不会引起上下文的切换和调度,所以
Volatile性能更好
- Volatile只能修饰变量,Synchronized可以修饰方法,静态方法,代码块
- Volatile对任意单个变量的读/写具有原子性,但是类似于i++这种复合操作不具有原子性。而锁的互斥执行的特性可以确保对整个临界区代码执行具有原子性
- 多线程访问Volatile
不会发生阻塞
,而Synchronized会发生阻塞
- Volatile是变量在多线程之间的可见性,Synchronize是多线程之间访问资源的同步性
问题32
面试官:
简述冒泡排序算法步骤?
学生:
- 1、比较两个相邻的元素,如果后一个比前一个大,则
交换位置
- 2、第一轮的时候最后一个元素应该是最大的一个
- 3、按照第一步的方法进行两个相邻的元素的比较,由于最后一个元素已经是最大的了,所以最后一个元素不用比较
问题33
面试官:
简述快速排序的步骤?
学生:
- 1、从数列中挑出一个元素,称为 “基准”
- 2、重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,
该基准就处于数列的中间位置
- 3、递归地把小于基准值元素的子数列和大于基准值元素的子数列
排序
问题34
面试官:
自旋锁和互斥锁的区别?
学生:
- 自旋锁比较适用于锁使用者保持锁时间比较短的情况。正是由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,
自旋锁的效率远高于互斥锁
- 信号量和读写信号量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进程上下文使用,而自旋锁适合于保持时间非常短的情况,它可以在任何上下文使用。如果被保护的共享资源只在进程上下文访问,使用信号量保护该共享资源非常合适,如果对共享资源的访问时间非常短,自旋锁也可以。但是
如果被保护的共享资源需要在中断上下文访问(包括底半部即中断处理句柄和顶半部即软中断),就必须使用自旋锁
- 自旋锁保持期间是抢占失效的,而信号量和读写信号量保持期间是可以被抢占的。自旋锁只有在内核可抢占或SMP(多处理器)的情况下才真正需要,在单CPU且不可抢占的内核下,自旋锁的所有操作都是空操作
问题35
面试官:
产生死锁的原因是什么?
学生:
多个并发进程因争夺系统资源而产生相互等待的现象
。即:一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,这就称这组进程发生了死锁产生死锁的本质原因
: 1、系统资源有限。 2、进程推进顺序不合理
问题36
面试官:
什么是预编译,何时需要预编译?
学生:
- 预编译又称为预处理,是做代码文本的替换工作,
处理#开头的指令
,比如拷贝#include包含的头文件代码;#define宏定义的替换。在程序开始编译之前进行。 预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置 - 1、总是使用不经常改动的大型代码体
- 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。预处理主要提供以下功能:1)宏定义;2)头文件包含;3)条件编译
问题37
面试官:
局部变量能否和全局变量重名?
学生:
- 能,
局部会屏蔽全局
- 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。 对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内
问题38
面试官:
引用与指针的区别?
学生:
- 1、引用必须初始化,指针不用
- 2、引用初始化后不能修改,指针可以改变所指对象
- 3、不存在指向空的引用,指针存在空值 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。 引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作
问题39
面试官:
结构体与联合体有什么区别?
学生:
- 共用体(联合体),
允许在相同的内存地址存储不同的数据类型
;可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同内存地址的方式 共用体,占用的内存应该足够存储共用体中最大的成员 - 结构体,
占用内存是内部所有变量所占空间之和
。结构体,每个成员变量都有自己的内存地址
问题40
面试官:
进程与线程的区别?
学生:
- 总结概括:
进程和线程都是一个时间段的描述,是CPU工作时间段的描述
。是运行中的程序指令的一种描述,这需要与程序中的代码区别开来 - 细化理解: 1、线程在进程下行进;2、一个进程可以包含多个线程;3、不同进程间数据很难共享;4、同一进程下不同线程间数据很易共享;5、进程要比线程消耗更多的计算机资源;6、进程间不会相互影响,一个线程挂掉将导致整个进程挂掉;7、进程可以拓展到多机,进程最多适合多核;8、进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存;9、进程使用的内存地址可以限定使用量
希望本文对大家有帮助,上文若有不妥之处,欢迎指正
分享决定高度,学习拉开差距
以上是关于校园招聘攻略----嵌入式软件工程师基础问题的主要内容,如果未能解决你的问题,请参考以下文章