校园招聘攻略----嵌入式软件工程师基础问题

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、进程使用的内存地址可以限定使用量

希望本文对大家有帮助,上文若有不妥之处,欢迎指正

分享决定高度,学习拉开差距

以上是关于校园招聘攻略----嵌入式软件工程师基础问题的主要内容,如果未能解决你的问题,请参考以下文章

校园招聘攻略----嵌入式软件工程师基础问题

校园招聘攻略----嵌入式软件工程师基础问题

校园招聘攻略----嵌入式软件工程师基础问题

校园招聘攻略----嵌入式软件工程师基础问题

校园招聘攻略----嵌入式软件工程师基础问题

校园招聘攻略----嵌入式软件工程师基础问题