面试岗位:乐鑫espressif-嵌入式软件开发工程师WIFI2024年8月21日第一次面试过程:没有让我手撕代码1、业务方向更偏底层操作系统,要汇编、C语言互相嵌套写。先问项目,让自我介绍,因为项目主要偏机器人控制,好像不是很契合。2、锁的机制。说几种锁。自旋锁回答错了,回答说自旋锁当获取不到锁时,会一直等待而不进行任务切换。3、任务调度的原理。感觉自己回答问题时,过于琐碎和细节了,比如一个任务上下文切换,保存任务栈数据,自己可以说的很细,什么16个通用寄存器什么的,以后要简洁、专业。4、任务的栈和堆区别。哪个效率高。没理解,以为栈是自动的,不需要程序员去管理,堆才需要管理,面试官解释原理说,栈是编译器编译成的指令,当进行参数传递时,会用到栈传递参数,此时编译器编译成的指令就是栈指针偏移几个字节。确实牛。所以应该回答栈的效率高。5、问GIT的分布式原理。回答说平常主要用GIT GUI,一般只用merge、pull、push几个指令。面试官答曰好吧好吧。问head指针现在为0,又有了6个comment,现在想合并5和6,用什么指令。说不会,就没问了。6、问CMAKE,问会自己写makefile吗,说不写,只会写CMAKELISTS。就没问了。7、static的作用。回答完后。面试官问static的缺点。确实不知道缺点,说根据需求选用是否需要static修饰即可。面试官最后解释可重入和不可重入,说static会破坏可重入性,会导致每次执行返回的结果不可控。这里争论说如果这个函数需要实现的功能是采集某个传感器的数据,而每次采集需要间隔100ms,就需要用static控制,因此需要按需求选用是否需要static修饰。面试官说确实有的函数必须要用static,但我连static破坏可重入性的概念都没有。8、信号量。说有二值信号量,数值信号量。然后问二值信号量可以实现的功能。答曰线程同步。问还有没有其他功能。想了半天说可以做互斥锁。好像没答对,自己确实不知道其他功能了。9、问汇编,说只在本科时51单片机上用过汇编,近几年没用过,还记得jump、lr几个简单指令。就没问了。10、任务切换的时刻。答曰在中断里面进行任务的上下文切换,pendsv中断。面试官问yield,没听过。面试官解释说主动释放cpu使用权。我说这个知道,在freeRTOS里面主动释放CPU的使用权是调用vtaskdelay。