当前位置:   article > 正文

2020年秋招联发科小米等20家公司面经总结_小米camera驱动岗位二面面试啥?

小米camera驱动岗位二面面试啥?


 

秋招投递公司23家,简历被刷1家。笔试/测评挂掉3家。至今无消息的8家。获得Offer的公司有小米兆易创新全志科技,浙江大华海格通信京信通信,景嘉微电子,广州朗国电子,北京华大电子,中国长城科技集团。已签约浙江大华

  友情提示:公司名字后面的日期代表投递日期,面试批次后面的时间代表面试时长和面试日期。

有面试

联发科北京(7.16)

  20200805接到通知,0806早上九点半面试。邮件中写的是用Webex Meet,之前都没听过的一个软件,网上找了半天才找到,而且软件没有简体,只好调成繁体了。邮件中写的是等待通知后再连入,大概9.40的时候接到了电话,要我加入会议中。
面试官是个女的,首先让我自我介绍下,然后开始看我的简历。介绍完了直接问项目。

一面(35min,8.5)

你自己做了那部分?是不是在师兄师姐基础上做的?

  不是,师兄师姐之前主要做的是理论研究。我本人所做的是硬件的设计和软件代码的移植。

移植的开源代码,做了那些修改?如何修改的?

  主要修改的是硬件的管脚,时钟的配置,SPI总线的调试,芯片通信过程的调试。

上位机部分你说用了卡尔曼滤波,有没有调研过其他的滤波方式?

  没有考虑,当时请教了也做这个方向的一些人,他们给的建议就是用卡尔曼就可以。没有考虑其他方式。(其实最主要的是解决问题,能解决问题就可以)

  复盘:当时想到的第一个就是卡尔曼,因为卡尔曼在实际工程中应用比较广泛且成熟,效果也不错。当时就拿来试了下,定位精度得到了很好的提升。(定位漂移和抖动40cm左右。漂移和抖动的主要原因就是每次接收到的不止是多个信号叠加的结果,卡尔曼滤波主要是滤除除了首径信号以外的其他信号)

做的东西效果怎么样?和其他人做的对标了吗?

  定位效果还可以,每秒钟可以定位64个标签。

  复盘:业界的评判标准主要有几个方面。

整个工程文件有多少行代码?

  具体多少行不清楚,最后编译的hex文件为112k

代码移植过程中遇到什么问题,如何解决的?

  巴拉巴拉,通信过程有点复杂,估计面试官没听懂,就没往下问了(其实应该边画图边讲的)。

  复盘:解决的整个过程应该描述的再详细一些,重点突出关键部分,这个问题的三个部分都要讲清楚!

项目中实际写的代码量有多少

  没多少,主要是硬件的设计和调试,软件的移植,解决问题,修改。

  复盘:显然面试官嫌弃代码写少了,这个时候可以说微信小程序的代码自己写了很多,70%以上。从0到1.

项目代码中多线程,多进程是如何运行的

  没有用到多线程,多进程。

汇编,C++掌握怎么样?

  汇编自学过,可以看懂。C++基本没用过。

  复盘:汇编是自学的,C++和C的语法差不多,都可以看懂。

重写strcpy函数?

  写完了给面试官解释了下。写对了

将一个寄存器的第三位的值从0改成1

  写完了给解释下。写对了

你有什么想问我的?

  如果我有幸能进入贵公司,驱动主要负责那部分?

主要还是看你分到那个部门,camera,音视频,IO驱动都有在做的。

  什么时候能给到面试结果的答复?

不确定,要先把面试过程的记录交给HR。

总结

  1.我项目上做的是软件+硬件的一个实现,面试官全程在问软件,硬件一点没问。

  2.在简历中写了自己在写博客,放了一个链接,不知道面试官看没看。

  3.面试的岗位是Linux驱动开发,全程没有问一点像bootloader,Linux内核的输入子系统,总线设备驱动模型等偏底层的东西。

  4.女面试官可能都不太懂硬件?全程都是软件,而且自己的项目中写的代码不是太多,主要是修改。面试官还是侧重实际的写代码能力吧。感觉凉了。

  5.全程35分钟吧。

  6.总结下,项目考虑再深化下,如何讲解?

广州朗国电子科技(8.24)

一面(60min,9.14)

  无领导小组讨论。没有标准答案,上网搜索下无领导小组讨论的注意事项,想好自己要扮演什么角色。但是一定不要不说话,要有逻辑的表达自己的观点。

二面(25min,9.16)

  HR面,主要问了家庭情况,有没有女朋友,工作地点的问题,能不能接受加班,HR也很坦白的说,公司处在上升期。我们是标准的996。

三面(40min,9.18)

项目

  主要针对简历上写的内容来问,项目画原理图,流程图讲清楚,并进行公式推导。

什么是内核空间?什么是用户空间

内核空间和用户空间通信方式

为什么需要uboot?不用行不行?

  用uboot的目的是引导内核启动。

  我理解的,理论是可以的。把uboot中所做的一些工作写进内核里,板子也能启动。但是很少有人这么做,毕竟内核很庞大,大面积修改难度比较大。

volatile关键字

总结

  9.25号发来邮件,要先签两方协议。这家公司做Smart TV之类的显示设备的,安卓驱动和Linux驱动都有,也有嵌入式应用层的。零食甜点下午茶,10点以后打车报销,每个季度有奖金(0.5-1个月月薪),年终还有年终奖(据说可以拿到18薪),就是加班太多(据说996是标配,忙的时候9107),怕受不了。最后还是拒绝了。

浙江大华股份(9.3)

一面(30min,9.10)

  2020.9.8号做完笔试,9.10下午突然打电话来问是否方便,做个电话面试。

自我介绍

笔试题的建议

  笔试题好多关于C++的部分,个人是做嵌入式软件部分的(偏底层)。做起来C++部分有些吃力。希望笔试题可以分嵌入式上层和底层的部分。

项目

  问了好久,面试官对我做的项目很感兴趣。

static关键字

  修饰变量的话,这个变量的作用域只是本函数,而且如果多次调用函数的话,这个变量只会被初始化一次。修饰函数的话,函数的作用域只是在本文件内。

Arm有几个寄存器?什么是CPSR,SPSR?什么时候用到?

  37个寄存器。CPSR是当前程序状态寄存器,存储的是当前程序的状态,比如上下文的一些寄存器内容,程序运行的话就要用到CPSR。SPSR为备份的程序状态寄存器,主要是中断发生时用来存储CPSR的值的。

字符设备有哪些?和块设备有什么区别?如何写一个字符设备驱动?

  字符设备有键盘,鼠标等。字符设备和块设备的区别主要是访问方式不同,访问字符设备是以字符流的方式访问的,访问块设备是以块为单位,并且可以随机访问。

  以一个LED驱动为例,先定义一个file_operations结构体,接着编写init函数,在init函数中完成对管脚的映射,register_chrdev字符设备的注册,class_create类的注册,class_device_create在类下面注册一个设备。exit函数中完成字符设备的卸载,类的卸载,内存空间的释放。在open函数中完成硬件管脚的初始化,在write函数中完成点灯操作。

Uboot启动过程说下?

  没有难度。

堆和栈的区别?

  1.申请方式,栈的空间由操作系统自动分配,释放,堆上的空间手动分配,释放。2.申请大小,堆的可用空间比较大,栈的可用空间比较小,一般是2M。3.申请效率,栈申请速度比较慢,堆的申请速度比较快。

为什么栈的空间不连续

  不知道。

通用学科,你喜欢那个,学得好的。

  数学,英语。

数学的那个分支比较感兴趣

  矩阵理论。因为在许多问题的深入研究中,基本上50%以上的问题都会转化成矩阵来解决。所以这部分看的比较多。

除了课本学的数学之外,自己私下有没有看其他的关于数学的内容

  没有,自己看的比较多的是专业方面的书籍。

专业课中,那个课学的比较好

  C语言,操作系统,计算机组成原理,Arm体系和架构

除了课堂上学的之外,某个领域有没有深耕,自己研究过,私下看过

  Linux内核的源码,操作系统,计算机组成原理,私下都会去花时间去了解,学习

如何学习的?以什么样的方式

  我在学习Linux驱动的过程中,会想到一些问题,比如UBOOT的启动过程中为什么会关闭中断,关闭DCACHE,关闭MMU,关闭TLC等。遇到这些疑问我就会去查,解决问题的过程中会想到其他的一些问题,把这些问题记录下来,一一解决。

  像Linux内核的话我最近再看一本书,赵炯老师写的Linux0.12源码剖析,这个书以Linux0.12内核为基础,详细介绍了内核的各个部分,虽然看起来比较吃力,但是我也在坚持阅读。

  复盘:有条理更好。学习的形式主要分为两种一种是在学习的过程中解决疑问,以解决问题为导向。比如,在移植UBOOT的过程中,我会想到为什么要关闭ICACHE,DCACHE等,关闭中断等(这里可以抛出这些问题,以防后面会问),遇到这些问题我就会记录下来,然后上网去查资料。在解决这些问题的过程中,可能会遇到其他的问题,继续查找相关资料,直到最后都搞清了。第二就是系统的学习,如果有比较充足的时间,我会去拿着像Arm体系和架构,操作系统,Linux源码剖析这些书去一点一点的读。去理解这些内容。以上就是我平时的一个学习方式

C/C++那个更熟悉ÿ

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/683617
推荐阅读
相关标签
  

闽ICP备14008679号