技术面试时如何回答能让面试官眼前一亮

文摘   科技   2023-09-14 08:30   广东  
话说“金九银十”,这个时候很多人蠢蠢欲动,在找工作。
我做技术面试好多年了,接下来,聊聊这个技术面试的话题。
我们从一个问题入手吧。
:MCU开发的C语言中,全局变量和局部变量有什么区别?
问题简单吧,很多小伙伴想都不用想就直接说了,头头是道。
回答最多的是:
全局变量是定义在全局区的,可以被不同函数使用;局部变量是定义在函数内部的使用的是栈的资源,只能被这一个函数使用。
没毛病,但是我会多问一句,还有呢?
先抛开这个具体的技术问题,先换个角度思考下。
这是技术面试,面试官的需求是想招一个技术好的,例如知识面广的,专业有深度的,经验丰富的人。而应聘者,是想要拿到这个offer,尽量要高点工资等等。
各有所需,契合点就在这个面试问题上。面试官想要听到更有深度更有积累的答案;而应聘者,应该尽可能地展现自己的才能。
完美的面试,无非就是面试者从容自信地展示自己丰富的知识技能和项目经验,尽最大程度地展现自己的优点,而这些优点等正是招聘方很需要的。
所以,问题简单,不能简单地回答。如果简单地回答表面上的知识点,并不能说这个人差,但看不出优秀。
如何回答面试官的问题,首先你要站在面试官的角度思考下,他想要什么样的人。
也许你说你不知道他想招什么样的,但是你应该知道一个软件团队更应该需要什么样的人,例如:
1. 级别低一点的,可以做设计,写代码思路清晰的;
2. 稍微经验多点的,设计有一套方法的,解决bug效率很高的;
3. 再高一点,有创新的方法,很够很大程度提高工作效率,给公司带来更高效益的。
如此等等,技术牛逼,还有一个共同的要求:思维敏捷,思路清晰,善于总结和表达。
这个很重要,毕竟是一个团队干活,沟通汇报就占用很多时间。一个思路清晰,表达能力强的人,工作效率很高的。
那么,回到问题本身,要怎么回答呢?
怎么从这个问题,表达出“清晰有条理,知识积累丰富,技术有深度的效果”呢?
不妨从以下几个点来回答:
1. 从存储分配来看,mcu一般有ROM(或flash)和RAM存储空间,代码和常量数据一般是存放于ROM空间的,而变量等是在RAM空间的;(不要觉得这种回答多余或简单,好多人分不清ROM和RAM的区别)
——这里展现出你对MCU存储空间的理解
2. 从数据段来看,这个RAM有很多种用途分类一般有data段,bss段,还有stack和heap等等,其中全局变量一般定义在data或bss段,那data段是存放有初始化值的变量,bss段是存放未初始化或者初始化值为0的变量,而局部变量在stack空间;
——这里展现出你对链接脚本的数据段的理解
3. 从初始化阶段来看,MCU在启动的时候,一般在main函数之前,会对RAM空间清零初始化(防止一些MCU的ECC报错问题),然后就对data段数据进行赋值初始化,具体怎样一个过程呢,例如greenhills环境的,有个_start的库函数做这个事情,ARM核芯片使用的Keil或者NXP的S32DS环境的,有专门一个初始化data和bss段函数,而stack空间又分有原始裸机环境的stack和RTOS的stack,在启动OS之前,局部变量用的是裸机的stack空间,那以后用的是OS的stack;
——这一点充分表达了你对MCU启动的熟悉程度和知识积累
4. 从变量的寿命周期和使用范围看,全局变量从MCU启动main之后就可以使用,一直可以持续到关机,而局部变量一般存在于一个函数之内,在函数被调用的时候创建,函数退出的时候销毁,当然静态局部变量除外,还有些情况是,不同编译器,有可能局部变量用的是普通寄存器,而不是栈空间;
——这一点展现出了你对变量定义比较深入的理解,甚至对变量的调试也很熟悉
5. 从使用的注意事项看,全局变量可以被不同函数使用,可以用来传递一些信息,特别是传递一些buffer数据处理,很方便,而局部变量,只局限于函数内,占用栈空间,不适合定义很大空间,谨防栈溢出的情况,也不能用于异步函数传数据,特别是传数组指针等;
——这体现出你对变量使用的经验总结
6. 从架构设计来看,全局变量虽好,共享数据需要注意多线程多任务问题,需要做互斥保护,另外,一个代码使用过多的全局变量,容易让代码耦合性变高,不利于维护,而局部变量虽然局限在函数内部,但独立性较好,而且在可重入函数设计上比较友好,在架构设计上应当充分考虑各种因素,不能一概而论,有时候静态变量更有利于模块化,解决耦合性高的问题,当然要根据实际情况而定。
——这体现了你在架构在代码设计上的思考
当然,还可以在其他方面继续发挥。
以上的这些回答,不仅思路清晰,有条不紊,同时还展现出应聘者的知识储备和丰富的经验积累。
如果面试官觉得满意或对你的回答很感兴趣,会顺着你回答的几个点跟你深入探讨。这里你就可以引导他跟你聊点你擅长的内容,在面试桌上掌握主动权。
试问,能从各个角落展示你的才能的人,哪个面试官不爱呢?
如果这个文章能对你有帮助,请点个赞👍🏻点个在看,感谢!
关注公众号“嵌入式软件实战派”,我给你分享更多面试知识和技巧。

如果你喜欢我的文章,请关注,并转发点赞在看,这是对我莫大的鼓励!

嵌入式软件实战派
专注嵌入式软件开发领域知识传授,包括C语言精粹,RTOS原理与使用,MCU驱动开发,AUTOSAR搭建,软件架构方法设计等