技术面试时如何回答能让面试官眼前一亮
文摘
科技
2023-09-14 08:30
广东
话说“金九银十”,这个时候很多人蠢蠢欲动,在找工作。我做技术面试好多年了,接下来,聊聊这个技术面试的话题。问:MCU开发的C语言中,全局变量和局部变量有什么区别?问题简单吧,很多小伙伴想都不用想就直接说了,头头是道。全局变量是定义在全局区的,可以被不同函数使用;局部变量是定义在函数内部的使用的是栈的资源,只能被这一个函数使用。这是技术面试,面试官的需求是想招一个技术好的,例如知识面广的,专业有深度的,经验丰富的人。而应聘者,是想要拿到这个offer,尽量要高点工资等等。各有所需,契合点就在这个面试问题上。面试官想要听到更有深度更有积累的答案;而应聘者,应该尽可能地展现自己的才能。完美的面试,无非就是面试者从容自信地展示自己丰富的知识技能和项目经验,尽最大程度地展现自己的优点,而这些优点等正是招聘方很需要的。所以,问题简单,不能简单地回答。如果简单地回答表面上的知识点,并不能说这个人差,但看不出优秀。如何回答面试官的问题,首先你要站在面试官的角度思考下,他想要什么样的人。也许你说你不知道他想招什么样的,但是你应该知道一个软件团队更应该需要什么样的人,例如:1. 级别低一点的,可以做设计,写代码思路清晰的;2. 稍微经验多点的,设计有一套方法的,解决bug效率很高的;3. 再高一点,有创新的方法,很够很大程度提高工作效率,给公司带来更高效益的。如此等等,技术牛逼,还有一个共同的要求:思维敏捷,思路清晰,善于总结和表达。这个很重要,毕竟是一个团队干活,沟通汇报就占用很多时间。一个思路清晰,表达能力强的人,工作效率很高的。怎么从这个问题,表达出“清晰有条理,知识积累丰富,技术有深度的效果”呢?1. 从存储分配来看,mcu一般有ROM(或flash)和RAM存储空间,代码和常量数据一般是存放于ROM空间的,而变量等是在RAM空间的;(不要觉得这种回答多余或简单,好多人分不清ROM和RAM的区别)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. 从架构设计来看,全局变量虽好,共享数据需要注意多线程多任务问题,需要做互斥保护,另外,一个代码使用过多的全局变量,容易让代码耦合性变高,不利于维护,而局部变量虽然局限在函数内部,但独立性较好,而且在可重入函数设计上比较友好,在架构设计上应当充分考虑各种因素,不能一概而论,有时候静态变量更有利于模块化,解决耦合性高的问题,当然要根据实际情况而定。以上的这些回答,不仅思路清晰,有条不紊,同时还展现出应聘者的知识储备和丰富的经验积累。如果面试官觉得满意或对你的回答很感兴趣,会顺着你回答的几个点跟你深入探讨。这里你就可以引导他跟你聊点你擅长的内容,在面试桌上掌握主动权。试问,能从各个角落展示你的才能的人,哪个面试官不爱呢?如果这个文章能对你有帮助,请点个赞👍🏻点个在看,感谢!关注公众号“嵌入式软件实战派”,我给你分享更多面试知识和技巧。如果你喜欢我的文章,请关注,并转发、点赞和在看,这是对我莫大的鼓励!